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 #================================================================================================================================
19 def DiffusionEquation_2DSpherical(FECalculation):
21 # Prepare for the mesh
22 inputfile="../resources/BoxWithMeshWithTriangularCells";
23 fieldName="Temperature";
26 # Mandatory physical values
27 cp_ur=300# heat capacity
29 lambda_ur=5# conductivity
31 myProblem = solverlab.DiffusionEquation(spaceDim,FECalculation,rho_ur,cp_ur,lambda_ur);
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);
43 print("Loading unstructured mesh and initial data" )
45 myProblem.setInitialField(inputfile,fieldName,time_iteration, solverlab.NODES)
47 myProblem.setInitialField(inputfile,fieldName,time_iteration, solverlab.CELLS)
49 # the boundary conditions :
51 boundaryNodeGroupNames=myProblem.getMesh().getNameOfNodeGroups()
52 print(len(boundaryNodeGroupNames), " Boundary Node Group detected : ", boundaryNodeGroupNames)
54 boundaryFaceGroupNames=myProblem.getMesh().getNameOfFaceGroups()
55 print(len(boundaryFaceGroupNames), " Boundary Face Group detected : ", boundaryFaceGroupNames)
57 myProblem.setNeumannBoundaryCondition("GAUCHE");
58 myProblem.setNeumannBoundaryCondition("DROITE");
59 myProblem.setNeumannBoundaryCondition("HAUT");
60 myProblem.setNeumannBoundaryCondition("BAS");
62 # set the numerical method
63 myProblem.setTimeScheme( solverlab.Explicit);
64 myProblem.setLinearSolver(solverlab.GMRES,solverlab.ILU,True);
68 fileName = "2DSpherical_FE";
70 fileName = "2DSpherical_FV";
72 # computation parameters
79 myProblem.setCFL(cfl);
80 myProblem.setPrecision(precision);
81 myProblem.setMaxNbOfTimeStep(MaxNbOfTimeStep);
82 myProblem.setTimeMax(maxTime);
83 myProblem.setFreqSave(freqSave);
84 myProblem.setFileName(fileName);
87 myProblem.initialize();
88 print("Running python "+ fileName );
92 print( "Simulation python " + fileName + " is successful !" );
95 print( "Simulation python " + fileName + " failed ! " );
98 print( "------------ End of calculation !!! -----------" );
100 myProblem.terminate();
103 if __name__ == """__main__""":
104 if len(sys.argv) >1 :
105 FECalculation = bool(int(sys.argv[1]))
106 DiffusionEquation_2DSpherical(FECalculation)
108 raise ValueError("DiffusionEquation_2DSpherical : missing one argument")