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 #================================================================================================================================
14 def DiffusionEquation_2DSpherical(FECalculation):
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
23 # Prepare for the mesh and initial data
24 inputfile="../resources/BoxWithMeshWithTriangularCells";
25 fieldName="Temperature";
28 # Mandatory physical values
29 cp_ur=300# heat capacity
31 lambda_ur=5# conductivity
33 myProblem = solverlab.DiffusionEquation(spaceDim,FECalculation,rho_ur,cp_ur,lambda_ur);
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);
45 print("Loading unstructured mesh and initial data" )
47 myProblem.setInitialField(inputfile,fieldName,time_iteration, solverlab.NODES)
49 myProblem.setInitialField(inputfile,fieldName,time_iteration, solverlab.CELLS)
51 # the boundary conditions :
53 boundaryNodeGroupNames=myProblem.getMesh().getNameOfNodeGroups()
54 print(len(boundaryNodeGroupNames), " Boundary Node Group detected : ", boundaryNodeGroupNames)
56 boundaryFaceGroupNames=myProblem.getMesh().getNameOfFaceGroups()
57 print(len(boundaryFaceGroupNames), " Boundary Face Group detected : ", boundaryFaceGroupNames)
59 myProblem.setNeumannBoundaryCondition("GAUCHE");
60 myProblem.setNeumannBoundaryCondition("DROITE");
61 myProblem.setNeumannBoundaryCondition("HAUT");
62 myProblem.setNeumannBoundaryCondition("BAS");
64 # set the numerical method
65 myProblem.setTimeScheme( solverlab.Explicit);
66 myProblem.setLinearSolver(solverlab.GMRES,solverlab.ILU);
70 fileName = "2DSpherical_FE";
72 fileName = "2DSpherical_FV";
74 # computation parameters
81 myProblem.setCFL(cfl);
82 myProblem.setPrecision(precision);
83 myProblem.setMaxNbOfTimeStep(MaxNbOfTimeStep);
84 myProblem.setTimeMax(maxTime);
85 myProblem.setFreqSave(freqSave);
86 myProblem.setFileName(fileName);
89 myProblem.initialize();
90 print("Running python "+ fileName );
94 print( "Simulation python " + fileName + " is successful !" );
97 print( "Simulation python " + fileName + " failed ! " );
100 print( "------------ End of calculation !!! -----------" );
102 myProblem.terminate();
105 if __name__ == """__main__""":
106 if len(sys.argv) >1 :
107 FECalculation = bool(int(sys.argv[1]))
108 DiffusionEquation_2DSpherical(FECalculation)
110 raise ValueError("DiffusionEquation_2DSpherical : missing one argument")