Salome HOME
update CoreFlows
[tools/solverlab.git] / CoreFlows / examples / Python / DriftModel / DriftModel_1DBoilingAssembly.py
1 #!/usr/bin/env python
2 # -*-coding:utf-8 -*
3
4 import CoreFlows as cf
5 import cdmath as cm
6
7 def DriftModel_1DBoilingAssembly():
8
9         spaceDim = 1;
10     # Prepare for the mesh
11         print("Building mesh " );
12         xinf = 0 ;
13         xsup=4.2;
14         xinfcore=(xsup-xinf)/4
15         xsupcore=3*(xsup-xinf)/4
16         nx=50;
17         M=cm.Mesh(xinf,xsup,nx)
18
19     # set the limit field for each boundary
20
21         inletConc=0;
22         inletVelocityX=1;
23         inletTemperature=565;
24         outletPressure=155e5;
25
26     # physical parameters
27         heatPowerField=cm.Field("heatPowerField", cm.CELLS, M, 1);
28         nbCells=M.getNumberOfCells();
29
30         for i in range (nbCells):
31                 x=M.getCell(i).x();
32
33                 if (x> xinfcore) and (x< xsupcore):
34                         heatPowerField[i]=1e8
35                 else:
36                         heatPowerField[i]=0
37         heatPowerField.writeVTK("heatPowerField",True)          
38
39         myProblem = cf.DriftModel(cf.around155bars600K,spaceDim);
40         nVar =  myProblem.getNumberOfVariables();
41
42     # Prepare for the initial condition
43         VV_Constant =[0]*nVar;
44
45         # constant vector
46         VV_Constant[0] = inletConc;
47         VV_Constant[1] = outletPressure ;
48         VV_Constant[2] = inletVelocityX;
49         VV_Constant[3] = inletTemperature ;
50
51
52     #Initial field creation
53         print("Building initial data " ); 
54         myProblem.setInitialFieldConstant( spaceDim, VV_Constant, xinf, xsup, nx,"inlet","outlet");
55
56     # set the boundary conditions
57         myProblem.setInletBoundaryCondition("inlet",inletTemperature,inletConc,inletVelocityX)
58         myProblem.setOutletBoundaryCondition("outlet", outletPressure,[xsup]);
59
60     # set physical parameters
61         myProblem.setHeatPowerField(heatPowerField);
62
63     # set the numerical method
64         myProblem.setNumericalScheme(cf.upwind, cf.Explicit);
65         myProblem.setWellBalancedCorrection(True);  
66         myProblem.setNonLinearFormulation(cf.VFFC) 
67     
68     # name of result file
69         fileName = "1DBoilingAssemblyUpwindWB";
70
71     # simulation parameters 
72         MaxNbOfTimeStep = 3 ;
73         freqSave = 1;
74         cfl = 0.5;
75         maxTime = 500;
76         precision = 1e-7;
77
78         myProblem.setCFL(cfl);
79         myProblem.setPrecision(precision);
80         myProblem.setMaxNbOfTimeStep(MaxNbOfTimeStep);
81         myProblem.setTimeMax(maxTime);
82         myProblem.setFreqSave(freqSave);
83         myProblem.setFileName(fileName);
84         myProblem.setNewtonSolver(precision,20);
85         myProblem.saveConservativeField(True);
86  
87     # evolution
88         myProblem.initialize();
89
90         ok = myProblem.run();
91         if (ok):
92                 print( "Simulation python " + fileName + " is successful !" );
93                 pass
94         else:
95                 print( "Simulation python " + fileName + "  failed ! " );
96                 pass
97
98         print( "------------ End of calculation !!! -----------" );
99
100         myProblem.terminate();
101         return ok
102
103 if __name__ == """__main__""":
104     DriftModel_1DBoilingAssembly()