DamBreak++ Wave Simulator 0.3
DamBreak++ Simulation Framework
Loading...
Searching...
No Matches
dbpp_SemiDiscreteScheme.h
Go to the documentation of this file.
1#pragma once
2
3// numeric include
4#include <valarray>
5
6// forward declarations
7namespace Sfx {
9 class LDeltaOperator;
10}
11namespace dbpp {
12 class SweRhsAlgorithm; }
13
14namespace dbpp
15{
19 class SemiDiscreteScheme // UNDER CONSTRUCTION!!!
20 {
21 using float64 = double;
22
23 // see note below
25
26 // all declared protected we don't want client to use it!!
27 // to be used only by the FiniteDifferenceModel!!!
28 protected:
29 SemiDiscreteScheme(/*RhsDiscretization*/Sfx::LDeltaOperator* aDeltaOp)
30 : m_deltaOp{aDeltaOp},
31 m_explOp{nullptr}
32 /* m_IdentityU1(),
33 m_IdentityU2() {}*/
34 {}
35 // similar to setStep()
36 void setRhs(float64 aDt)
37 {
38 // set LDeltaOperator step (RK2 time step)
39 // similar what is done in the NujicIntegrator
40
41 SweRhsAlgorithm* m_rhsDiscr = dbpp::factory::create() //? ?
42 auto w_activeALgo = Sfx::Simulation.activeSweRhsAlgorithm();
43
44 SweRhsAlgorithm* w_rhsAlgo = nullptr;
45 w_rhsAlgo->setFluxAlgorithm(w_rhsAlgo->getFluxAlgorithm());
46 w_rhsAlgo->setSourceTermDiscr(w_rhsAlgo->getSrcTermDiscr());
47
48 if(m_rhsDiscr->usePressure())
49 w_rhsAlgo->setPressureTermDiscr(m_rhsDiscr->getPressureTermDiscr());
50
51 if (m_rhsDiscr->hasFrictionCoeff())
52 w_rhsAlgo->setManningFormula();
53
54 m_deltaOp->setRhsAlgorithm(w_rhsAlgo);
55 m_explOp->setOperator(m_deltaOp, ...);
56
57// auto [dFF1, dFF2] = m_deltaOp->calculFF();
58// auto S = m_deltaOp->TraitementSource2();
59
60 // --------------------------PREDICTOR
61 // mass equation
62// auto m_U1np12 = m_IdentityU1 - dFF1;
63
64 // Momentum equation (without pressure term)
65// auto m_U2np12 = m_IdentityU2 - dFF2 + aDt*S;
66
67 //return { w_U1p,w_U2p };
68
69 // --------------------------COORECTOR
70 // Mass equation
71// w_U1 = 0.5 * (w_U1 + w_U1np12 - w_dFF1);
72
73 // Momentum equation (without pressure term)
74 // w_U2 = 0.5 * (w_U2 + w_U2np12 - w_dFF2 +
75 // w_timeStep * w_Rhs->m_S[j - 1]);
76 }
77
78 bool usePressure() const { return false; }
79 bool useFriction() const { return false; }
80
81 void step( std::valarray<float64>& aU1, std::valarray<float64>& aU2)
82 {
83 // switch to select predictor/corrector step
84 // call operator:
85 // setStep(...)
86 //m_explOp->applyTo(aU1,aU2)
87 }
88
90 Sfx::ExplicitOperator* m_explOp; // U - lambda*m_deltaOp.apply(aU).massEq();
91
92 // previous state vaariables
93 std::valarray<float64> m_U1np12; //set to 1
94 std::valarray<float64> m_U2np12;
95 std::valarray<float64> m_U1np1; //set to 1
96 std::valarray<float64> m_U2np1;
97 //
98 //std::valarray<float64> m_IdentityU1(); //set to 1
99 //std::valarray<float64> m_IdentityU2;
100 };
101} //End of namespace
Some prototype.
Definition Sfx_ExplicitOperator.h:11
Responsible to evaluate the spatial terms according to spatial discretization. The HOperator provides...
Definition Sfx_LDeltaOperator.h:34
Bean that represents a simulation in the framework. Many of the attributes of the simulation bean are...
Definition Sfx_Simulation.h:22
Sfx::LDeltaOperator * m_deltaOp
Definition dbpp_SemiDiscreteScheme.h:89
friend class FiniteDifferenceModel
Definition dbpp_SemiDiscreteScheme.h:24
std::valarray< float64 > m_U1np1
Definition dbpp_SemiDiscreteScheme.h:95
double float64
Definition dbpp_SemiDiscreteScheme.h:21
std::valarray< float64 > m_U1np12
Definition dbpp_SemiDiscreteScheme.h:93
void step(std::valarray< float64 > &aU1, std::valarray< float64 > &aU2)
Definition dbpp_SemiDiscreteScheme.h:81
std::valarray< float64 > m_U2np12
Definition dbpp_SemiDiscreteScheme.h:94
bool useFriction() const
Definition dbpp_SemiDiscreteScheme.h:79
std::valarray< float64 > m_U2np1
Definition dbpp_SemiDiscreteScheme.h:96
SemiDiscreteScheme(Sfx::LDeltaOperator *aDeltaOp)
Definition dbpp_SemiDiscreteScheme.h:29
Sfx::ExplicitOperator * m_explOp
Definition dbpp_SemiDiscreteScheme.h:90
void setRhs(float64 aDt)
Definition dbpp_SemiDiscreteScheme.h:36
bool usePressure() const
Definition dbpp_SemiDiscreteScheme.h:78
Abstract class. "Model" of the right-hand-side terms discretization. Hold discretization scheme or al...
Definition dbpp_SweRhsAlgorithm.h:28
virtual void setPressureTermDiscr()
Set pressure term discretization.
Definition dbpp_SweRhsAlgorithm.h:86
virtual void setSourceTermDiscr(SrcNumericalTreatment *aSrcTreatmnt, bool useManningFormula=true)
Set source term discretization.
Definition dbpp_SweRhsAlgorithm.h:81
virtual void setFluxAlgorithm(FluxAlgorithm *aFluxAlgo, bool useIncompleteFlux=true)
Set flux algorithm.
Definition dbpp_SweRhsAlgorithm.h:69
Definition HydUtils.h:15
Definition DamBreakProb.h:15