Salome HOME
Corrected wrong use of boolean value
[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):
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         
23     # Prepare for the mesh and initial data
24         inputfile="../resources/BoxWithMeshWithTriangularCells";
25         fieldName="Temperature";
26         spaceDim=2
27         
28     # Mandatory physical values
29         cp_ur=300# heat capacity
30         rho_ur=10000# density
31         lambda_ur=5# conductivity
32
33         myProblem = solverlab.DiffusionEquation(spaceDim,FECalculation,rho_ur,cp_ur,lambda_ur);
34
35     #Optional physical values
36         fluidTemp=573.;#fluid mean temperature
37         heatTransfertCoeff=1000.;#fluid/solid exchange coefficient
38         phi=1e5;#heat power ddensity
39         myProblem.setFluidTemperature(fluidTemp);
40         myProblem.setHeatTransfertCoeff(heatTransfertCoeff);
41         myProblem.setHeatSource(phi);
42
43     #Initial field load
44         time_iteration=0
45         print("Loading unstructured mesh and initial data" )
46         if( FECalculation):
47                 myProblem.setInitialField(inputfile,fieldName,time_iteration, solverlab.NODES)
48         else:
49                 myProblem.setInitialField(inputfile,fieldName,time_iteration, solverlab.CELLS)
50
51     # the boundary conditions :
52         if( FECalculation):
53                 boundaryNodeGroupNames=myProblem.getMesh().getNameOfNodeGroups()
54                 print(len(boundaryNodeGroupNames), " Boundary Node Group detected : ", boundaryNodeGroupNames)
55         else:
56                 boundaryFaceGroupNames=myProblem.getMesh().getNameOfFaceGroups()
57                 print(len(boundaryFaceGroupNames), " Boundary Face Group detected : ", boundaryFaceGroupNames)
58
59         myProblem.setNeumannBoundaryCondition("GAUCHE");
60         myProblem.setNeumannBoundaryCondition("DROITE");
61         myProblem.setNeumannBoundaryCondition("HAUT");
62         myProblem.setNeumannBoundaryCondition("BAS");
63
64     # set the numerical method
65         myProblem.setTimeScheme( solverlab.Explicit);
66         myProblem.setLinearSolver(solverlab.GMRES,solverlab.ILU);
67
68     # name of result file
69         if( FECalculation):
70                 fileName = "2DSpherical_FE";
71         else:
72                 fileName = "2DSpherical_FV";
73
74     # computation parameters
75         MaxNbOfTimeStep = 3 ;
76         freqSave = 1;
77         cfl = 0.95;
78         maxTime = 100000000;
79         precision = 1e-6;
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
88     # evolution
89         myProblem.initialize();
90         print("Running python "+ fileName );
91
92         ok = myProblem.run();
93         if (ok):
94                 print( "Simulation python " + fileName + " is successful !" );
95                 pass
96         else:
97                 print( "Simulation python " + fileName + "  failed ! " );
98                 pass
99
100         print( "------------ End of calculation !!! -----------" );
101
102         myProblem.terminate();
103         return ok
104
105 if __name__ == """__main__""":
106     if len(sys.argv) >1 :
107         FECalculation = bool(int(sys.argv[1]))
108         DiffusionEquation_2DSpherical(FECalculation)
109     else :
110         raise ValueError("DiffusionEquation_2DSpherical : missing one argument")