Salome HOME
0b44733589cd40f4548c0e83b24c0151ceeb95ee
[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 # Description : Test solving the diffusion of the temperature T in a solid (default is Uranium). 
12 #                       \rho cp dT/dt-\lambda\Delta T=\Phi(T) + \lambda_{sf} (T_{fluid}-T)
13 #                       Heat capacity cp, density \rho, and conductivity \lambda MUST be defined
14 #                       The solid may be extra refrigerated by a fluid with transfer coefficient \lambda_{sf} (functions setFluidTemperature and setHeatTransfertCoeff)
15 #                       The solid may receive some extra heat power \Phi due to nuclear fissions (function setHeatSource)
16 #================================================================================================================================
17
18
19 def DiffusionEquation_2DSpherical(FECalculation):
20
21     # Prepare for the mesh
22         inputfile="../resources/BoxWithMeshWithTriangularCells";
23         fieldName="Temperature";
24         spaceDim=2
25         
26     # Mandatory physical values
27         cp_ur=300# heat capacity
28         rho_ur=10000# density
29         lambda_ur=5# conductivity
30
31         myProblem = solverlab.DiffusionEquation(spaceDim,FECalculation,rho_ur,cp_ur,lambda_ur);
32
33     #Optional physical values
34         fluidTemp=573.;#fluid mean temperature
35         heatTransfertCoeff=1000.;#fluid/solid exchange coefficient
36         phi=1e5;#heat power ddensity
37         myProblem.setFluidTemperature(fluidTemp);
38         myProblem.setHeatTransfertCoeff(heatTransfertCoeff);
39         myProblem.setHeatSource(phi);
40
41     #Initial field load
42         time_iteration=0
43         print("Loading unstructured mesh and initial data" )
44         if( FECalculation):
45                 myProblem.setInitialField(inputfile,fieldName,time_iteration, solverlab.NODES)
46         else:
47                 myProblem.setInitialField(inputfile,fieldName,time_iteration, solverlab.CELLS)
48
49     # the boundary conditions :
50         if( FECalculation):
51                 boundaryNodeGroupNames=myProblem.getMesh().getNameOfNodeGroups()
52                 print(len(boundaryNodeGroupNames), " Boundary Node Group detected : ", boundaryNodeGroupNames)
53         else:
54                 boundaryFaceGroupNames=myProblem.getMesh().getNameOfFaceGroups()
55                 print(len(boundaryFaceGroupNames), " Boundary Face Group detected : ", boundaryFaceGroupNames)
56
57         myProblem.setNeumannBoundaryCondition("GAUCHE");
58         myProblem.setNeumannBoundaryCondition("DROITE");
59         myProblem.setNeumannBoundaryCondition("HAUT");
60         myProblem.setNeumannBoundaryCondition("BAS");
61
62     # set the numerical method
63         myProblem.setTimeScheme( solverlab.Explicit);
64         myProblem.setLinearSolver(solverlab.GMRES,solverlab.ILU,True);
65
66     # name of result file
67         if( FECalculation):
68                 fileName = "2DSpherical_FE";
69         else:
70                 fileName = "2DSpherical_FV";
71
72     # computation parameters
73         MaxNbOfTimeStep = 3 ;
74         freqSave = 1;
75         cfl = 0.95;
76         maxTime = 100000000;
77         precision = 1e-6;
78
79         myProblem.setCFL(cfl);
80         myProblem.setPrecision(precision);
81         myProblem.setMaxNbOfTimeStep(MaxNbOfTimeStep);
82         myProblem.setTimeMax(maxTime);
83         myProblem.setFreqSave(freqSave);
84         myProblem.setFileName(fileName);
85
86     # evolution
87         myProblem.initialize();
88         print("Running python "+ fileName );
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     if len(sys.argv) >1 :
105         FECalculation = bool(int(sys.argv[1]))
106         DiffusionEquation_2DSpherical(FECalculation)
107     else :
108         raise ValueError("DiffusionEquation_2DSpherical : missing one argument")