Salome HOME
83305377d1d07e4295aaa8528139d53de21c2ad8
[tools/solverlab.git] / CoreFlows / examples / Python / DiffusionEquation / DiffusionEquation_2DSpherical.py
1 #!/usr/bin/env python3
2 # -*-coding:utf-8 -*
3
4 import sys
5 import solverlab
6
7 #===============================================================================================================================
8 # Name        : Finite Elements simulation of the 2D heat equation -\triangle T = f with Neumann boundary condition
9 # Author      : MichaĆ«l Ndjinga
10 # Copyright   : CEA Saclay 2021
11 #================================================================================================================================
12
13
14 def DiffusionEquation_2DSpherical(FECalculation, fileName):
15
16         """ Description : Test solving the diffusion of the temperature T in a solid (default is Uranium). 
17                 Equation : Thermal diffusion equation  \rho cp dT/dt-\lambda\Delta T=\Phi + \lambda_{sf} (T_{fluid}-T)
18                         Heat capacity, density, and conductivity of the solid MUST be defined
19                         The solid may be extra refrigerated by a fluid with transfer coefficient using functions setFluidTemperature and setHeatTransfertCoeff
20                         The solid may receive some extra heat power due to nuclear fissions using function setHeatSource
21         """
22         #Space dimension of the problem
23         spaceDim=2
24         
25     # Mandatory physical values
26         solid_specific_heat=300# specific heat capacity, default value 300
27         solid_density=10000# density, default value 10000
28         solid_conductivity=5# conductivity, default value 5
29
30         myProblem = solverlab.DiffusionEquation(spaceDim,FECalculation,solid_density,solid_specific_heat,solid_conductivity);
31
32         # Definition of field support parameter
33         if( FECalculation):
34                 supportOfField=solverlab.NODES
35         else:
36                 supportOfField=solverlab.CELLS  
37         
38     # Set the mesh and initial data
39         initial_data_inputfile="../resources/BoxWithMeshWithTriangularCells";
40         initial_data_fieldName="Temperature";
41         print("Loading unstructured mesh and initial data", " in file ", initial_data_inputfile )
42         initial_data_time_iteration=0# default value is 0
43         initial_data_time_sub_iteration=0# default value is 0
44         initial_data_time_meshLevel=0# default value is 0
45         myProblem.setInitialField(initial_data_inputfile, initial_data_fieldName, initial_data_time_iteration, initial_data_time_sub_iteration, initial_data_time_meshLevel, supportOfField)
46
47     #### Optional physical values (default value is zero) : fluid temperature field, heat transfert coefficient, heat power field 
48         # Loading and setting fluid temperature field
49         fluid_temperature_inputfile="../resources/BoxWithMeshWithTriangularCells";
50         fluid_temperature_fieldName="Fluid temperature field";
51         fluid_temperature_time_iteration=0# default value is 0
52         fluid_temperature_time_sub_iteration=0# default value is 0
53         fluid_temperature_meshLevel=0# default value is 0
54         print("Loading field :", fluid_temperature_fieldName, " in file ", fluid_temperature_inputfile)
55         fluidTemperatureField=solverlab.Field(fluid_temperature_inputfile, supportOfField, fluid_temperature_fieldName, fluid_temperature_time_iteration, fluid_temperature_time_sub_iteration, fluid_temperature_meshLevel)
56         myProblem.setFluidTemperatureField(fluidTemperatureField)
57         # Setting heat transfert coefficient
58         heatTransfertCoeff=1000.;#fluid/solid exchange coefficient, default value is 0
59         myProblem.setHeatTransfertCoeff(heatTransfertCoeff);
60         # Loading heat power field
61         heat_power_inputfile="../resources/BoxWithMeshWithTriangularCells";
62         heat_power_fieldName="Heat power field";
63         heat_power_time_iteration=0# default value is 0
64         heat_power_time_sub_iteration=0# default value is 0
65         heat_power_meshLevel=0# default value is 0
66         print("Loading field :", heat_power_fieldName, " in file ", heat_power_inputfile)
67         heatPowerField=solverlab.Field(heat_power_inputfile, supportOfField, heat_power_fieldName, heat_power_time_iteration, heat_power_time_sub_iteration, heat_power_meshLevel)
68         myProblem.setHeatPowerField(heatPowerField)
69
70     # the boundary conditions :
71         if( FECalculation):
72                 boundaryNodeGroupNames=myProblem.getMesh().getNameOfNodeGroups()
73                 print(len(boundaryNodeGroupNames), " Boundary Node Group detected : ", boundaryNodeGroupNames)
74         else:
75                 boundaryFaceGroupNames=myProblem.getMesh().getNameOfFaceGroups()
76                 print(len(boundaryFaceGroupNames), " Boundary Face Group detected : ", boundaryFaceGroupNames)
77
78         myProblem.setNeumannBoundaryCondition("GAUCHE");
79         myProblem.setNeumannBoundaryCondition("DROITE");
80         myProblem.setNeumannBoundaryCondition("HAUT");
81         myProblem.setNeumannBoundaryCondition("BAS");
82
83     # set the numerical method
84         myProblem.setTimeScheme( solverlab.Explicit);
85         max_nb_its_lin_solver = 50
86         myProblem.setLinearSolver(solverlab.GMRES, solverlab.ILU, max_nb_its_lin_solver );
87
88     # computation parameters
89         MaxNbOfTimeStep = 3 ;# default value is 10
90         freqSave = 1;# default value is 1
91         cfl = 0.95;# default value is 1
92         maxTime = 100000000;# default value is 10
93         precision = 1e-6;# default value is 1e-6
94         result_directory="."# default value = current directory
95
96         myProblem.setCFL(cfl);
97         myProblem.setPrecision(precision);
98         myProblem.setMaxNbOfTimeStep(MaxNbOfTimeStep);
99         myProblem.setTimeMax(maxTime);
100         myProblem.setFreqSave(freqSave);
101         myProblem.setFileName(fileName);
102         myProblem.setResultDirectory(result_directory)
103         myProblem.setSaveFileFormat(solverlab.MED)#default value is solverlab.VTK
104
105     # evolution
106         myProblem.initialize();
107         print("Running python test "+ fileName );
108
109         ok = myProblem.run();
110         if (ok):
111                 print( "Python simulation " + fileName + " is successful !" );
112                 pass
113         else:
114                 print( "Python simulation " + fileName + "  failed ! " );
115                 pass
116
117         print( "------------ End of simulation !!! -----------" );
118
119         myProblem.terminate();
120         return ok
121
122 if __name__ == """__main__""":
123     if len(sys.argv) >1 :
124         FECalculation = bool(int(sys.argv[1]))
125         # name of result file
126         if( FECalculation):
127                 fileName = "2DSpherical_FE";# default value is ""
128         else:
129                 fileName = "2DSpherical_FV";# default value is ""
130         DiffusionEquation_2DSpherical(FECalculation, fileName)
131     else :
132         raise ValueError("DiffusionEquation_2DSpherical : missing one argument")