DamBreak++ Wave Simulator 0.3
DamBreak++ Simulation Framework
Loading...
Searching...
No Matches
Sfx_ENOD1X.h
Go to the documentation of this file.
1
2#pragma once
3
4//#define DIM 100 // debugging purpose (grid dimension)
5
6#include <array>
7#include <valarray>
8//#include "vectorField.h"
9#include "Sfx/Sfx_ScalarField1D.h"
10//#include "../EMcneilGamma.h"
11#include "../../Nov_VS2019/dbpp_PhysicalBoundaryCnd.h"
12#include "../../Nov_VS2019/dbpp_Gamma.h"
13
14namespace Sfx
15{
22 {
23 // typedef struct { double r[DIM+1]; } scalar;
24 // typedef struct { scalar x; } vector;
25
26 //typedef struct { double r[DIM+1];} vector;
27 //typedef struct { short x[DIM+1]; } stencil;
28
29 // C++11 way of declaring those struct above
30 static constexpr int DIM = 100;
31// using vector = struct { std::array<double, DIM + 1> r; };
32// using stencil = struct { std::array<short, DIM + 1> x; };
33
34 // EMcNeilDamBreakData<float>::DIM() constexpr can be use in compile time context
35 struct vector
36 {
37 std::array<float64, DIM + 1> r;
38 std::array<float64, DIM + 1>::iterator begin() { return r.begin(); }
39 std::array<float64, DIM + 1>::iterator end() { return r.end(); }
40 std::array<float64, DIM + 1>::const_iterator cbegin() { return r.cbegin(); }
41 std::array<float64, DIM + 1>::const_iterator cend() { return r.cend(); }
42
43 // default ctor
45 {
46 r.fill(0.);
47 }
48
49 vector( const vector& aOther) = default;
50 vector& operator= ( const vector& aOther) = default;
51
52 // ...
53 std::size_t size() const { return r.size(); }
54 bool isEmpty() const { return r.empty(); }
55 double front() const { return r.front(); }
56 double back() const { return r.back(); }
57 };
58
59 struct stencil
60 {
61 std::array<short, DIM + 1> x;
62 };
63
67 enum class eStenType
68 {
72 };
73
74 public:
76 FiniteDifferenceDerivative( std::string aName, const dbpp::Gamma& aBC, bool aUseENOSten)
77 : m_name( std::move(aName)),
78 m_derivOrder(2),
80 m_useSten(aUseENOSten),
81 m_dx{}
82 {}
83 // not sure about these ones!!
86 ~FiniteDifferenceDerivative() = default; // disable move semantic!!! what we want??
93 std::valarray<float64> d1x( const Sfx::scalarField1D* aScalrField, const dbpp::PhysicalBoundaryCnd& aBC);
94// stencil* eno_stencil( const vectorField& aVecf);
95
96
101 bool useENOStencil() const { return m_useSten; }
106 void setDerivativeOrder(int aOrder) { m_derivOrder = aOrder; }
111 void setStencilType( eStenType aStenType) { m_stenType = aStenType; }
116 eStenType getStencil() const { return m_stenType; }
121 size_t getDerivativeOrder() const { return m_derivOrder; } // default
126 size_t getGlobalDimension() const { return DIM + 1; }
127
128 private:
129 vector* new_vector(void);
130 void free_vector( vector*);
131
132// void test_reconstr(Deriv1X::vector*, int);
133// void test_derivative(void);
134// void test_stencil(int );
135
136
143 stencil* eno_stencil( vector* aStencil);
150 vector* d1x( vector* aVec, stencil* aSten=nullptr);
155 void setdx(double dx) { m_dx = dx; }
156
157 std::string m_name;
161 double m_dx;
162 };
163} // End of namespace
stencil * eno_stencil(vector *aStencil)
Computation of stencil for ENO (Essentially Non-Oscillatory) reconstruction. Determine the central in...
Definition Sfx_ENOD1X.cpp:164
FiniteDifferenceDerivative & operator=(const FiniteDifferenceDerivative &aOther)=delete
FiniteDifferenceDerivative(const FiniteDifferenceDerivative &aOther)=delete
double m_dx
Definition Sfx_ENOD1X.h:161
size_t getGlobalDimension() const
Definition Sfx_ENOD1X.h:126
eStenType
derivative stencil type
Definition Sfx_ENOD1X.h:68
@ None
Definition Sfx_ENOD1X.h:69
@ nonperiodic
Definition Sfx_ENOD1X.h:71
@ periodic
Definition Sfx_ENOD1X.h:70
void setStencilType(eStenType aStenType)
Definition Sfx_ENOD1X.h:111
int m_derivOrder
Definition Sfx_ENOD1X.h:158
vector * new_vector(void)
Definition Sfx_ENOD1X.cpp:102
eStenType getStencil() const
Definition Sfx_ENOD1X.h:116
std::valarray< float64 > d1x(const Sfx::scalarField1D *aScalrField, const dbpp::PhysicalBoundaryCnd &aBC)
Definition Sfx_ENOD1X.cpp:34
eStenType m_stenType
Definition Sfx_ENOD1X.h:159
FiniteDifferenceDerivative(std::string aName, const dbpp::Gamma &aBC, bool aUseENOSten)
Definition Sfx_ENOD1X.h:76
bool useENOStencil() const
Definition Sfx_ENOD1X.h:101
bool m_useSten
Definition Sfx_ENOD1X.h:160
void setDerivativeOrder(int aOrder)
Definition Sfx_ENOD1X.h:106
void setdx(double dx)
Definition Sfx_ENOD1X.h:155
void free_vector(vector *)
Definition Sfx_ENOD1X.cpp:117
std::string m_name
Definition Sfx_ENOD1X.h:157
static constexpr int DIM
Definition Sfx_ENOD1X.h:30
size_t getDerivativeOrder() const
Definition Sfx_ENOD1X.h:121
Boundary condition.
Definition dbpp_Gamma.h:16
Physical boundary condition (computational domain) based on characteristic equation ....
Definition dbpp_PhysicalBoundaryCnd.h:22
Definition HydUtils.h:15
std::array< short, DIM+1 > x
Definition Sfx_ENOD1X.h:61
vector & operator=(const vector &aOther)=default
std::array< float64, DIM+1 >::const_iterator cbegin()
Definition Sfx_ENOD1X.h:40
double back() const
Definition Sfx_ENOD1X.h:56
double front() const
Definition Sfx_ENOD1X.h:55
std::size_t size() const
Definition Sfx_ENOD1X.h:53
vector(const vector &aOther)=default
vector()
Definition Sfx_ENOD1X.h:44
std::array< float64, DIM+1 >::iterator end()
Definition Sfx_ENOD1X.h:39
bool isEmpty() const
Definition Sfx_ENOD1X.h:54
std::array< float64, DIM+1 > r
Definition Sfx_ENOD1X.h:37
std::array< float64, DIM+1 >::iterator begin()
Definition Sfx_ENOD1X.h:38
std::array< float64, DIM+1 >::const_iterator cend()
Definition Sfx_ENOD1X.h:41