Salome HOME
initial project version
[tools/solverlab.git] / CoreFlows / examples / Python / SinglePhase_1DHeatedAssembly.py
1 #!/usr/bin/env python
2 # -*-coding:utf-8 -*
3
4 import CoreFlows as cf
5 import cdmath as cm
6
7 def SinglePhase_1DHeatedAssembly():
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         inletVelocityX=5;
22         inletTemperature=565;
23         outletPressure=155e5;
24
25     # physical parameters
26         heatPowerField=cm.Field("heatPowerField", cm.CELLS, M, 1);
27         nbCells=M.getNumberOfCells();
28
29         for i in range (nbCells):
30                 x=M.getCell(i).x();
31
32                 if (x> xinfcore) and (x< xsupcore):
33                         heatPowerField[i]=1e8
34                 else:
35                         heatPowerField[i]=0
36         heatPowerField.writeVTK("heatPowerField",True)          
37
38         myProblem = cf.SinglePhase(cf.Liquid,cf.around155bars600K,spaceDim);
39         nVar =  myProblem.getNumberOfVariables();
40
41     # Prepare for the initial condition
42         VV_Constant =[0]*nVar;
43
44         # constant vector
45         VV_Constant[0] = outletPressure ;
46         VV_Constant[1] = inletVelocityX;
47         VV_Constant[2] = inletTemperature ;
48
49
50     #Initial field creation
51         print("Building initial data " ); 
52         myProblem.setInitialFieldConstant( spaceDim, VV_Constant, xinf, xsup, nx,"inlet","outlet");
53
54     # set the boundary conditions
55         myProblem.setInletBoundaryCondition("inlet",inletTemperature,inletVelocityX)
56         myProblem.setOutletBoundaryCondition("outlet", outletPressure,[xsup]);
57
58     # set physical parameters
59         myProblem.setHeatPowerField(heatPowerField);
60
61     # set the numerical method
62         myProblem.setNumericalScheme(cf.upwind, cf.Explicit);
63         myProblem.setWellBalancedCorrection(True);  
64     
65     # name of result file
66         fileName = "1DHeatedChannelUpwindWB";
67
68     # simulation parameters 
69         MaxNbOfTimeStep = 3 ;
70         freqSave = 1;
71         cfl = 0.95;
72         maxTime = 500;
73         precision = 1e-7;
74
75         myProblem.setCFL(cfl);
76         myProblem.setPrecision(precision);
77         myProblem.setMaxNbOfTimeStep(MaxNbOfTimeStep);
78         myProblem.setTimeMax(maxTime);
79         myProblem.setFreqSave(freqSave);
80         myProblem.setFileName(fileName);
81         myProblem.setNewtonSolver(precision,20);
82         myProblem.saveConservativeField(True);
83         if(spaceDim>1):
84                 myProblem.saveVelocity();
85                 pass
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     SinglePhase_1DHeatedAssembly()