Salome HOME
update CoreFlows
[tools/solverlab.git] / CoreFlows / examples / C / DriftModel_1DBoilingAssembly.cxx
1 #include "DriftModel.hxx"
2
3 using namespace std;
4
5 int main(int argc, char** argv)
6 {
7         //setting mesh and groups
8         cout << "Building a regular grid " << endl;
9         double xinf=0.0;
10         double xsup=4.2;
11         double xinfcore=1.4;
12         double xsupcore=2.8;
13         
14         int nx=3;//50;
15         Mesh M(xinf,xsup,nx);
16         double eps=1.E-8;
17         M.setGroupAtPlan(xsup,0,eps,"Outlet");
18         M.setGroupAtPlan(xinf,0,eps,"Inlet");
19         int spaceDim = M.getSpaceDimension();
20
21         // setting boundary conditions 
22         double inletConc=0;
23         double inletVelocityX=1;
24         double inletTemperature=565;
25         double outletPressure=155e5;
26
27         // setting physical parameters 
28         Field heatPowerField=Field("heatPowerField",CELLS, M, 1);
29         int nbCells=M.getNumberOfCells();
30
31         for(int i=0;i<nbCells;i++){
32                 double x=M.getCell(i).x();
33
34                 if (x> xinfcore && x< xsupcore)
35                         heatPowerField[i]=1e8;
36                 else
37                         heatPowerField[i]=0;
38         }
39         heatPowerField.writeVTK("heatPowerField",true);         
40
41         DriftModel  myProblem(around155bars600K,spaceDim);
42         int nbPhase = myProblem.getNumberOfPhases();
43         int nVar = myProblem.getNumberOfVariables();
44         Field VV("Primitive", CELLS, M, nVar);
45
46         // Prepare for the initial condition
47         Vector VV_Constant(nVar);
48         // constant vector
49         VV_Constant(0) = 0.;
50         VV_Constant(1) = 155e5;
51         for (int idim=0; idim<spaceDim;idim++)
52                 VV_Constant(2+idim) = 1;
53         VV_Constant(nVar-1) = 565;
54
55         //Initial field creation
56         cout << "Building initial field " << endl;
57         myProblem.setInitialFieldConstant( M, VV_Constant);
58
59         //set the boundary conditions
60         myProblem.setInletBoundaryCondition("Inlet",inletTemperature,inletConc,inletVelocityX);
61         myProblem.setOutletBoundaryCondition("Outlet", outletPressure,vector<double>(1,xsup));
62
63         // physical parameters
64         myProblem.setHeatPowerField(heatPowerField);
65
66
67         // set the numerical method
68         myProblem.setNumericalScheme(upwind, Explicit);
69         myProblem.setWellBalancedCorrection(true);
70
71         // name the result file
72         string fileName = "DriftModel1DBoilingAssembly";
73
74         // setting numerical parameters
75         unsigned MaxNbOfTimeStep =3 ;
76         int freqSave = 1;
77         double cfl = 0.5;
78         double maxTime = 1;
79         double precision = 1e-7;
80
81         myProblem.setCFL(cfl);
82         myProblem.setPrecision(precision);
83         myProblem.setMaxNbOfTimeStep(MaxNbOfTimeStep);
84         myProblem.setTimeMax(maxTime);
85         myProblem.setFreqSave(freqSave);
86         myProblem.setFileName(fileName);
87         myProblem.saveAllFields(true);
88         bool ok;
89
90         // evolution
91         myProblem.initialize();
92
93         ok = myProblem.run();
94         if (ok)
95                 cout << "Simulation "<<fileName<<" is successful !" << endl;
96         else
97                 cout << "Simulation "<<fileName<<"  failed ! " << endl;
98
99         cout << "------------ End of calculation -----------" << endl;
100         myProblem.terminate();
101
102         return EXIT_SUCCESS;
103 }