DamBreak++ Wave Simulator 0.3
DamBreak++ Simulation Framework
Loading...
Searching...
No Matches
dbpp_Uh.h
Go to the documentation of this file.
1#pragma once
2
3// STL includes
4#include <vector>
5#include <functional>
6// Boost include
7#include <boost/iterator/transform_iterator.hpp>
8// SfxBase19 include
9#include "include/Sfx_DefineTypes.h"
10// VS19 includes
11#include "dbpp_Enumerations.h"
12#include "dbpp_NodalTpl.hpp"
13#include "dbpp_Omega.h"
14
15namespace dbpp
16{
20 class Uh
21 {
22 public:
26 using NodalValue = NodalTpl<unsigned/*Id*/, float64/*A*/, float64/*Q*/, float64/*H*/>;
27 public:
31 using vec_nval = std::vector<NodalValue>;
32 using value_type = vec_nval::value_type;
35 using const_pointer = const value_type*;
39 using range_diff_type = ptrdiff_t;
40 using reverse_iterator = std::reverse_iterator<iterator>;
41 using const_reverse_iterator = std::reverse_iterator<const_iterator>;
46 auto cbegin() const { return m_vecNodalVarArray.cbegin(); }
47 auto begin() { return m_vecNodalVarArray.begin(); }
48 auto cend() const { return m_vecNodalVarArray.cend(); }
49 auto end() { return m_vecNodalVarArray.end(); }
50 auto crbegin() const { return m_vecNodalVarArray.crbegin();}
51 auto rbegin() { return m_vecNodalVarArray.rbegin(); }
52 auto rend() const { return m_vecNodalVarArray.crend(); }
53 auto crend() const { return m_vecNodalVarArray.crend(); }
54 public:
58 Uh();
64 Uh(int32 df, Omega& oh);
70 std::vector<double> to_stdVector( eNodalField aNvalComp = eNodalField::A) const
71 {
72 using namespace boost;
73
74 std::function<double(const NodalValue&)> w_getA = [](const NodalValue& aVal) -> double { return std::get<1>(aVal.m_tpl); };
75 std::function<double(const NodalValue&)> w_getQ = [](const NodalValue& aVal) -> double { return std::get<2>(aVal.m_tpl); };
76 std::function<double(const NodalValue&)> w_getH = [](const NodalValue& aVal) -> double { return std::get<3>(aVal.m_tpl); };
77
78 using enum eNodalVarComp;
79
80 switch (aNvalComp)
81 {
82 case eNodalField::A:
83 {
84 return std::vector<double>(make_transform_iterator(m_vecNodalVarArray.begin(), w_getA),
85 make_transform_iterator(m_vecNodalVarArray.end(), w_getA));
86 break;
87 }
88 case eNodalField::Q:
89 {
90 return std::vector<double>(make_transform_iterator(m_vecNodalVarArray.begin(), w_getQ),
91 make_transform_iterator(m_vecNodalVarArray.end(), w_getQ));
92 break;
93 }
94 case eNodalField::H:
95 {
96 return std::vector<double>(make_transform_iterator(m_vecNodalVarArray.begin(), w_getH),
97 make_transform_iterator(m_vecNodalVarArray.end(), w_getH));
98 break;
99 }
100 default:
101 // log something in the log file!!!
102 std::cerr << "Cannot return an invalid type in GlobalDiscretization\n";
103 return std::vector<float64>(); // empty vector
104 break;
105 }
106 }
107
122 NodalValue& operator[] (int32 nn) { return m_vecNodalVarArray[nn]; }
128 const NodalValue& operator[] (int32 nn) const { return m_vecNodalVarArray[nn]; }
133 std::size_t total_node_no() const { return m_totalNodeNo; }
134
135 // U_h& operator= ( Gamma_h& gh);
136
143 friend std::ostream& operator<< (std::ostream&, Uh&);
144 private:
145 int32 ndf;
146 std::size_t m_totalNodeNo;
148 };
149} // End of namespace
Global Domain (part of global discretization) list of elements and geomeric nodes used by numerical m...
Definition dbpp_Omega.h:19
auto end()
Definition dbpp_Uh.h:49
friend std::ostream & operator<<(std::ostream &, Uh &)
output stream operator
NodalValue & operator[](int32 nn)
Accessor.
Definition dbpp_Uh.h:122
auto rend() const
Definition dbpp_Uh.h:52
const_pointer const_iterator
Definition dbpp_Uh.h:36
const value_type * const_pointer
Definition dbpp_Uh.h:35
std::size_t total_node_no() const
Definition dbpp_Uh.h:133
auto rbegin()
Definition dbpp_Uh.h:51
auto crbegin() const
Definition dbpp_Uh.h:50
std::reverse_iterator< iterator > reverse_iterator
Definition dbpp_Uh.h:40
vec_nval::value_type value_type
Definition dbpp_Uh.h:32
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition dbpp_Uh.h:41
vec_nval & vecNodalVarArray()
Getter.
Definition dbpp_Uh.h:111
pointer iterator
Definition dbpp_Uh.h:34
value_type & reference
Definition dbpp_Uh.h:37
ptrdiff_t range_diff_type
Definition dbpp_Uh.h:39
vec_nval m_vecNodalVarArray
Definition dbpp_Uh.h:147
const value_type & const_reference
Definition dbpp_Uh.h:38
std::vector< double > to_stdVector(eNodalField aNvalComp=eNodalField::A) const
Helper to retrieve component of nodal variable.
Definition dbpp_Uh.h:70
auto cbegin() const
Iterator access.
Definition dbpp_Uh.h:46
auto begin()
Definition dbpp_Uh.h:47
auto cend() const
Definition dbpp_Uh.h:48
std::size_t m_totalNodeNo
Definition dbpp_Uh.h:146
NodalTpl< unsigned, float64, float64, float64 > NodalValue
Nodal Variable is the "Basis" of numerical method approximation.
Definition dbpp_Uh.h:26
Uh()
default ctor
Definition dbpp_Uh.cpp:17
std::vector< NodalValue > vec_nval
STL-container like interface (range)
Definition dbpp_Uh.h:31
const vec_nval & vecNodalVarArray() const
Getter.
Definition dbpp_Uh.h:116
auto crend() const
Definition dbpp_Uh.h:53
int32 ndf
Definition dbpp_Uh.h:145
value_type * pointer
Definition dbpp_Uh.h:33
Definition DamBreakProb.h:15
eNodalVarComp
Definition dbpp_Enumerations.h:15
double float64
Definition dbpp_LDeltaOperator.h:12
eNodalField
Definition dbpp_Enumerations.h:24
@ A
Definition dbpp_Enumerations.h:25
@ H
Definition dbpp_Enumerations.h:27
@ Q
Definition dbpp_Enumerations.h:26
Implementation for nodal variable concept used in our application (use of variadic template).
Definition dbpp_NodalTpl.hpp:47