Salome HOME
update CoreFlows
[tools/solverlab.git] / CoreFlows / Models / src / DiffusionEquation.cxx
index bbc5cf55d83a879288040e9155da70fd29a3792d..59cad625dfddee120d849712a5b2498fb16bc3f0 100755 (executable)
@@ -224,7 +224,7 @@ void DiffusionEquation::initialize()
             cout<<"!!!!! Warning : all nodes are boundary nodes !!!!!"<<endl;
 
         for(int i=0; i<_NboundaryNodes; i++)
-            if(_limitField[(_mesh.getNode(_boundaryNodeIds[i])).getGroupName()].bcType==Dirichlet)
+            if(_limitField[(_mesh.getNode(_boundaryNodeIds[i])).getGroupName()].bcType==DirichletDiffusion)
                 _dirichletNodeIds.push_back(_boundaryNodeIds[i]);
         _NdirichletNodes=_dirichletNodeIds.size();
         _NunknownNodes=_Nnodes - _NdirichletNodes;
@@ -439,9 +439,10 @@ double DiffusionEquation::computeDiffusionMatrixFV(bool & stop){
                        }
                        nameOfGroup = Fj.getGroupName();
 
-                       if (_limitField[nameOfGroup].bcType==Neumann){//Nothing to do
+                       if (_limitField[nameOfGroup].bcType==NeumannDiffusion){
+                VecSetValue(_b,idm,   -dn*inv_dxi*_limitField[nameOfGroup].normalFlux, ADD_VALUES);
                        }
-                       else if(_limitField[nameOfGroup].bcType==Dirichlet){
+                       else if(_limitField[nameOfGroup].bcType==DirichletDiffusion){
                                barycenterDistance=Cell1.getBarryCenter().distance(Fj.getBarryCenter());
                                MatSetValue(_A,idm,idm,dn*inv_dxi/barycenterDistance                           , ADD_VALUES);
                                VecSetValue(_b,idm,    dn*inv_dxi/barycenterDistance*_limitField[nameOfGroup].T, ADD_VALUES);
@@ -450,7 +451,7 @@ double DiffusionEquation::computeDiffusionMatrixFV(bool & stop){
                 stop=true ;
                                cout<<"!!!!!!!!!!!!!!!!! Error DiffusionEquation::computeDiffusionMatrixFV !!!!!!!!!!"<<endl;
                 cout<<"Boundary condition not accepted for boundary named "<<nameOfGroup<< ", _limitField[nameOfGroup].bcType= "<<_limitField[nameOfGroup].bcType<<endl;
-                               cout<<"Accepted boundary conditions are Neumann "<<Neumann<< " and Dirichlet "<<Dirichlet<<endl;
+                               cout<<"Accepted boundary conditions are NeumannDiffusion "<<NeumannDiffusion<< " and DirichletDiffusion "<<DirichletDiffusion<<endl;
                 *_runLogFile<<"Boundary condition not accepted for boundary named "<<nameOfGroup<< ", _limitField[nameOfGroup].bcType= "<<_limitField[nameOfGroup].bcType<<endl;
                                throw CdmathException("Boundary condition not accepted");
                        }
@@ -742,7 +743,9 @@ void DiffusionEquation::save(){
        _VV.setTime(_time,_nbTimeStep);
 
        // create mesh and component info
-       if (_nbTimeStep ==0){
+       if (_nbTimeStep ==0 || _restartWithNewFileName){
+               if (_restartWithNewFileName)
+                       _restartWithNewFileName=false;
                string suppress ="rm -rf "+resultFile+"_*";
                system(suppress.c_str());//Nettoyage des précédents calculs identiques
         
@@ -803,3 +806,26 @@ void DiffusionEquation::terminate(){
        MatDestroy(&_A);
 }
 
+vector<string> DiffusionEquation::getOutputFieldsNames()
+{
+       vector<string> result(2);
+       
+       result[0]="FluidTemperature";
+       result[1]="RodTemperature";
+       
+       return result;
+}
+
+Field& DiffusionEquation::getOutputField(const string& nameField )
+{
+       if(nameField=="FluidTemperature" || nameField=="FLUIDTEMPERATURE" || nameField=="TemperatureFluide" || nameField=="TEMPERATUREFLUIDE" )
+               return getFluidTemperatureField();
+       else if(nameField=="RodTemperature" || nameField=="RODTEMPERATURE" || nameField=="TEMPERATURECOMBUSTIBLE" || nameField=="TemperatureCombustible" )
+               return getRodTemperatureField();
+    else
+    {
+        cout<<"Error : Field name "<< nameField << " does not exist, call getOutputFieldsNames first" << endl;
+        throw CdmathException("DiffusionEquation::getOutputField error : Unknown Field name");
+    }
+}
+