]> SALOME platform Git repositories - tools/solverlab.git/blob - CoreFlows/Models/inc/TransportEquation.hxx
Salome HOME
initial project version
[tools/solverlab.git] / CoreFlows / Models / inc / TransportEquation.hxx
1 //============================================================================
2 /**
3  * \file TransportEquation.hxx
4  * \author Michael NDJINGA
5  * \version 1.0
6  * \date 24 March 2015
7  * \brief Fluid enthalpy transport equation
8  * */
9 //============================================================================
10
11 /*! \class TransportEquation TransportEquation.hxx "TransportEquation.hxx"
12  *  \brief Scalar advection equation for a fluid enthalpy
13  *  \details see \ref TransportEqPage for more details
14  */
15 #ifndef TransportEquation_HXX_
16 #define TransportEquation_HXX_
17
18 #include "ProblemCoreFlows.hxx"
19
20 using namespace std;
21
22 class TransportEquation: public ProblemCoreFlows
23 {
24
25 public :
26         /** \fn TransportEquation
27                          * \brief Constructor for the enthalpy transport in a fluid
28                          * \param [in] phaseType : \ref Liquid or \ref Gas
29                          * \param [in] pressureEstimate : \ref around1bar or \ref around155bars
30                          * \param [in] vector<double> : fluid velocity (assumed constant)
31                          *  */
32         TransportEquation(phaseType fluid, pressureEstimate pEstimate,vector<double> vitesseTransport);
33
34         //Gestion du calcul
35         virtual void initialize();
36         virtual void terminate();//vide la mémoire et enregistre le résultat final
37         bool initTimeStep(double dt);
38         double computeTimeStep(bool & stop);//propose un pas de temps pour le calcul. Celà nécessite de discrétiser les opérateur (convection, diffusion, sources) et pour chacun d'employer la condition cfl. En cas de problème durant ce calcul (exemple t=tmax), renvoie stop=true
39         void abortTimeStep();//efface les inconnues calculées par solveTimeStep() et reinitialise dt à 0
40         bool iterateTimeStep(bool &ok);
41         virtual void save();
42         virtual void validateTimeStep();
43
44         /** \fn setIntletBoundaryCondition
45                          * \brief adds a new boundary condition of type Inlet
46                          * \details
47                          * \param [in] string : the name of the boundary
48                          * \param [in] double : the value of the temperature at the boundary
49                          * \param [out] void
50                          *  */
51         void setInletBoundaryCondition(string groupName,double enthalpy){
52                 _limitField[groupName]=LimitField(Inlet,-1,vector<double>(_Ndim,0),vector<double>(_Ndim,0),vector<double>(_Ndim,0),-1,enthalpy,-1,-1);
53         };
54
55         /*Physical parameters*/
56         Field& getFluidTemperatureField(){
57                 return _TT;
58         }
59
60         void setLiqSatEnthalpy(double hsatl){
61                 _hsatl=hsatl;
62         };
63         void setVapSatEnthalpy(double hsatv){
64                 _hsatv=hsatv;
65         };
66         void setLiqSatDensity(double rhosatl){
67                 _rhosatl=rhosatl;
68         };
69         void setVapSatDensity(double rhosatv){
70                 _rhosatv=rhosatv;
71         };
72         void setTransportVelocity(Vector v){
73                 _vitesseTransport=v;
74         };
75 protected :
76         double computeTransportMatrix();
77         double computeRHS();
78         void updatePrimitives();
79         double temperature(double h){
80                 return _Tref+(h-_href)/_cpref;
81         };
82         double voidFraction(double h){
83                 double titre=(h-_href)/(_hsatv-_hsatl);
84                 if (titre<0)
85                         return 0;
86                 else if (titre>1)
87                         return 1;
88                 else return titre*_rhosatl/(titre*_rhosatl+(1-titre)*_rhosatv);
89         };
90         double density(double alpha){
91                 return alpha*_rhosatv+(1-alpha)*_rhosatl;
92         };
93
94         Field   _TT, _Alpha, _Rho;//Fields of temperature and coupled temperature
95         double _rhosatv, _rhosatl;
96         double _Tref, _href, _cpref;
97         Vector _vitesseTransport, _normale;
98         bool _transportMatrixSet;
99         Vec _Hn, _deltaH, _Hk, _Hkm1, _b0;
100         double _dt_transport, _dt_src;
101 };
102
103 #endif /* TransportEquation_HXX_ */