Changeset 17024


Ignore:
Timestamp:
12/16/13 15:45:23 (11 years ago)
Author:
bdef
Message:

CHG: new solution sequence hydrology BUG:adding delete in efficient analysis

Location:
issm/trunk-jpl/src/c
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp

    r17021 r17024  
    128128
    129129        /*Check that all nodes are active, else return empty matrix*/
    130         if(!basalelement->AllActive()) return NULL;
    131 
     130        if(!basalelement->AllActive()) {
     131                if(meshtype!=Mesh2DhorizontalEnum){
     132                        basalelement->DeleteMaterials();
     133                        delete basalelement;
     134                }
     135                return NULL;
     136        }
    132137        /* Intermediaries */
    133138        IssmDouble  D_scalar,Jdet,dt;
     
    186191        xDelete<IssmDouble>(B);
    187192        delete gauss;
     193        if(meshtype!=Mesh2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
    188194        return Ke;
    189195
     
    209215
    210216        /*Check that all nodes are active, else return empty matrix*/
    211         if(!basalelement->AllActive()) return NULL;
    212 
     217        if(!basalelement->AllActive()){
     218                if(meshtype!=Mesh2DhorizontalEnum){
     219                        basalelement->DeleteMaterials();
     220                        delete basalelement;
     221                }
     222                return NULL;
     223        }
    213224        /*Intermediaries */
    214225        IssmDouble dt,scalar,water_head,connectivity;
  • issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp

    r17021 r17024  
    2323        Vector<IssmDouble>* ug_epl_main_iter=NULL;
    2424
    25 
    2625        Vector<IssmDouble>* ys=NULL;
    2726        Vector<IssmDouble>* dug=NULL;
    28 
    29         //testing stuff
    3027        Vector<IssmDouble>* duf=NULL;
    3128
    3229        Matrix<IssmDouble>* Kff=NULL;
    3330        Matrix<IssmDouble>* Kfs=NULL;
     31
    3432        Vector<IssmDouble>* pf=NULL;
    3533        Vector<IssmDouble>* df=NULL;
     
    5149        femmodel->parameters->FindParam(&eps_hyd,HydrologydcRelTolEnum);
    5250        femmodel->parameters->FindParam(&time,TimeEnum);
     51
    5352        /*FIXME, hardcoded, put on an enum*/
    5453        hydro_maxiter=150;
     54
    5555        hydrocount=1;
    5656        hydroconverged=false;
     57        /*We don't need the outer loop if only one layer is used*/
     58        if(!isefficientlayer) hydroconverged=true;
    5759
    5860        /*Retrieve inputs as the initial state for the non linear iteration*/
     
    6365                femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum);
    6466                GetSolutionFromInputsx(&ug_epl,femmodel);
    65 
    66                 /*Initialize the transfer input*/
     67               
     68                /*Initialize the element mask*/
    6769                HydrologyDCInefficientAnalysis* analysis = new HydrologyDCInefficientAnalysis();
    6870                analysis->ElementizeEplMask(femmodel);
     
    7274        femmodel->HydrologyTransferx();
    7375
    74         /*Iteration on the two layers*/
     76        /*The real computation starts here, outermost loop is on the two layer system*/
    7577        for(;;){
    7678                sedcount=1;
    7779                eplcount=1;
    78                 //save pointer to old velocity
    79                 ug_sed_main_iter=ug_sed->Duplicate();
    80                 ug_sed->Copy(ug_sed_main_iter);
    81                
     80
     81                /*If there is two layers we need an outer loop value to compute convergence*/
    8282                if(isefficientlayer){
     83                        ug_sed_main_iter=ug_sed->Duplicate();
     84                        ug_sed->Copy(ug_sed_main_iter);
    8385                        ug_epl_main_iter=ug_epl->Duplicate();
    8486                        ug_epl->Copy(ug_epl_main_iter);
    8587                }
    86 
     88                /*Loop on sediment layer to deal with transfer and head value*/
    8789                femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum);
    8890                InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum);
     
    9092                femmodel->UpdateConstraintsx();
    9193                femmodel->parameters->SetParam(HydrologySedimentEnum,HydrologyLayerEnum);
    92 
    93                 /*Reset constraint on the ZigZag Lock*/
     94               
     95                /*Reset constraint on the ZigZag Lock, this thing doesn't work, it have to disapear*/
    9496                ResetConstraintsx(femmodel);
    95                
    96                 /*Iteration on the sediment layer*/
    9797                sedconverged=false;
     98                /* {{{ *//*Treating the sediment*/
    9899                for(;;){
    99                         /* if(isefficientlayer){  */
    100                         /*      /\*Updating Elemental Mask*\/ */
    101                         /*      HydrologyDCInefficientAnalysis* analysis = new HydrologyDCInefficientAnalysis(); */
    102                         /*      analysis->ElementizeEplMask(femmodel); */
    103                         /*      delete analysis; */
    104                         /*      femmodel->HydrologyTransferx(); */
    105                         /* } */
    106100                        uf_sed_sub_iter=uf_sed->Duplicate();_assert_(uf_sed_sub_iter);
    107101                        uf_sed->Copy(uf_sed_sub_iter);
    108                         SystemMatricesx(&Kff,&Kfs,&pf,&df,&sediment_kmax,femmodel);
    109                         CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCInefficientAnalysisEnum);
    110                         Reduceloadx(pf,Kfs,ys); delete Kfs;
    111                         delete uf_sed;
    112                         Solverx(&uf_sed,Kff,pf,uf_sed_sub_iter,df,femmodel->parameters);
    113                         delete Kff; delete pf; delete df;
    114                         delete ug_sed;
    115                         Mergesolutionfromftogx(&ug_sed,uf_sed,ys,femmodel->nodes,femmodel->parameters); delete ys;
    116                         InputUpdateFromSolutionx(femmodel,ug_sed);
    117                         ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel);
    118 
    119                         if (!sedconverged){
    120                                 if(VerboseConvergence()) _printf0_("   # Sediment unstable constraints = " << num_unstable_constraints << "\n");
    121                                 if(num_unstable_constraints==0) sedconverged = true;
    122                                 if (sedcount>=hydro_maxiter){
    123                                         //sedconverged=true;
    124                                         _error_("   maximum number of Sediment iterations (" << hydro_maxiter << ") exceeded");
    125                                 }
    126                         }
    127 
    128                         sedcount++;
    129 
     102                        /* {{{ *//*Loop on the sediment layer to deal with the penalization*/
     103                        for(;;){
     104                                /* {{{ *//*Core of the computation*/
     105                                SystemMatricesx(&Kff,&Kfs,&pf,&df,&sediment_kmax,femmodel);
     106                                CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCInefficientAnalysisEnum);
     107                                Reduceloadx(pf,Kfs,ys); delete Kfs;
     108                                delete uf_sed;
     109                                Solverx(&uf_sed,Kff,pf,uf_sed_sub_iter,df,femmodel->parameters);
     110                                delete Kff; delete pf; delete df;
     111                                delete ug_sed;
     112                                Mergesolutionfromftogx(&ug_sed,uf_sed,ys,femmodel->nodes,femmodel->parameters); delete ys;
     113                                InputUpdateFromSolutionx(femmodel,ug_sed);
     114                                ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel);
     115                                /* }}} */
     116                                if (!sedconverged){
     117                                        if(VerboseConvergence()) _printf0_("   # Sediment unstable constraints = " << num_unstable_constraints << "\n");
     118                                        if(num_unstable_constraints==0) sedconverged = true;
     119                                        if (sedcount>=hydro_maxiter){
     120                                                _error_("   maximum number of Sediment iterations (" << hydro_maxiter << ") exceeded");
     121                                        }
     122                                }
     123                                /*Add an iteration and get out of the loop if the penalisation is converged*/
     124                                sedcount++;
     125                                if(sedconverged)break;
     126                        }
     127                        /* }}} *//*End of the sediment penalization loop*/
     128                        sedconverged=false;
     129                        /*Update Elemental Mask and compute transfer*/
     130                        if(isefficientlayer){
     131                                HydrologyDCInefficientAnalysis* analysis = new HydrologyDCInefficientAnalysis();
     132                                analysis->ElementizeEplMask(femmodel);
     133                                delete analysis;
     134                                femmodel->HydrologyTransferx();
     135                        }
     136                        /*Checking convegence on the value of the sediment head*/
     137                        duf=uf_sed_sub_iter->Duplicate();_assert_(duf);
     138                        uf_sed_sub_iter->Copy(duf);
     139                        duf->AYPX(uf_sed,-1.0);
     140                        ndu_sed=duf->Norm(NORM_TWO);
     141                        delete duf;
     142                        nu_sed=uf_sed_sub_iter->Norm(NORM_TWO);
     143                        if (xIsNan<IssmDouble>(ndu_sed) || xIsNan<IssmDouble>(nu_sed)) _error_("convergence criterion is NaN!");
     144                        if (ndu_sed==0.0 && nu_sed==0.0) nu_sed=1.0e-6; /*Hacking the case where the layer is empty*/
     145                        if(VerboseConvergence()) _printf0_(setw(50) << left << "   Inner Sediment Convergence criterion:" << ndu_sed/nu_sed*100 << " aiming lower than " << eps_hyd*100 << " %\n");
     146                        if((ndu_sed/nu_sed)<eps_hyd){
     147                                if(VerboseConvergence()) _printf0_("   # Inner sediment convergence achieve \n");
     148                                sedconverged=true;
     149                        }
     150                        delete uf_sed_sub_iter;
    130151                        if(sedconverged){
    131                                 sedconverged=false;     
    132                                 /*Checking convegence on the value of the sediment head*/
    133                                 duf=uf_sed_sub_iter->Duplicate();_assert_(duf);
    134                                 uf_sed_sub_iter->Copy(duf);
    135                                 duf->AYPX(uf_sed,-1.0);
    136                                 ndu_sed=duf->Norm(NORM_TWO);
    137                                 delete duf;
    138                                 nu_sed=uf_sed_sub_iter->Norm(NORM_TWO);
    139                                 if (xIsNan<IssmDouble>(ndu_sed) || xIsNan<IssmDouble>(nu_sed)) _error_("convergence criterion is NaN!");
    140                                 if (ndu_sed==0.0 && nu_sed==0.0) nu_sed=1.0e-6; /*Hacking the case where the EPL is used but empty*/
    141                                 if(VerboseConvergence()) _printf0_(setw(50) << left << "   Inner Sediment Convergence criterion:" << ndu_sed/nu_sed*100 << " aiming lower than " << eps_hyd*100 << " %\n");
    142                                 if((ndu_sed/nu_sed)<eps_hyd){
    143                                         if(VerboseConvergence()) _printf0_("   # Inner sediment convergence achieve \n");
    144                                         sedconverged=true;
    145                                 }
    146                         }
    147                         delete uf_sed_sub_iter;
    148 
    149                         if(sedconverged){
    150                                 if(isefficientlayer){
    151                                         /*Updating Elemental Mask*/
    152                                         HydrologyDCInefficientAnalysis* analysis = new HydrologyDCInefficientAnalysis();
    153                                         analysis->ElementizeEplMask(femmodel);
    154                                         delete analysis;
    155                                         femmodel->HydrologyTransferx();
    156                                 }
    157152                                femmodel->parameters->SetParam(sediment_kmax,HydrologySedimentKmaxEnum);
    158153                                InputUpdateFromConstantx(femmodel,sedconverged,ConvergedEnum);
     
    162157                        }
    163158                }
    164 
    165                 /*Second layer*/
     159                /* }}} *//*End of the global sediment loop*/
     160
     161                /* {{{ *//*Now dealing with the EPL in the same way*/
    166162                if(isefficientlayer){
    167                        
     163               
    168164                        femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum);
     165                        /*updating mask*/
     166                        femmodel->HydrologyEPLupdateDomainx();
    169167                        InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum);
    170168                        InputUpdateFromConstantx(femmodel,false,ConvergedEnum);
    171169                        femmodel->parameters->SetParam(HydrologyEfficientEnum,HydrologyLayerEnum);
     170               
     171                        eplconverged = false;
    172172                       
    173                                
    174 
    175                         /*Iteration on the EPL layer*/
    176                         eplconverged = false;
    177173                        for(;;){
    178                                
    179                                 //updating mask after the computation of the epl thickness (Allow to close too thin EPL)
    180                                 femmodel->HydrologyEPLupdateDomainx();
    181                                 /*Start by retrieving the EPL head slopes and compute EPL Thickness*/
     174                                ug_epl_sub_iter=ug_epl->Duplicate();_assert_(ug_epl_sub_iter);
     175                                ug_epl->Copy(ug_epl_sub_iter);
     176                                       
     177                                /* {{{ *//*Start by retrieving the EPL head slopes and compute EPL Thickness*/
    182178                                if(VerboseSolution()) _printf0_("computing EPL Head slope...\n");
    183179                                femmodel->SetCurrentConfiguration(L2ProjectionEPLAnalysisEnum);
     
    188184                                solutionsequence_linear(femmodel);
    189185                                femmodel->HydrologyEPLThicknessx();
     186                                //updating mask after the computation of the epl thickness (Allow to close too thin EPL)
     187                                femmodel->HydrologyEPLupdateDomainx();
     188                                /* }}} */
     189                                femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum);
    190190                               
    191                                 femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum);
    192                        
    193                                 /*Updating Elemental Mask*/
     191                                /* {{{ *//*Loop on the epl layer to deal with the penalization*/
     192                                for(;;){
     193                                        SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
     194                                        CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCEfficientAnalysisEnum);
     195                                        Reduceloadx(pf,Kfs,ys); delete Kfs;
     196                                        delete uf_epl;
     197                                        Solverx(&uf_epl,Kff,pf,uf_epl_sub_iter,df,femmodel->parameters);
     198                                        delete Kff; delete pf; delete df;
     199                                        delete uf_epl_sub_iter;
     200                                        uf_epl_sub_iter=uf_epl->Duplicate();
     201                                        uf_epl->Copy(uf_epl_sub_iter);
     202                                        delete ug_epl;
     203                                        Mergesolutionfromftogx(&ug_epl,uf_epl,ys,femmodel->nodes,femmodel->parameters); delete ys;
     204                                        InputUpdateFromSolutionx(femmodel,ug_epl);
     205                                        ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel);
     206                               
     207                                        if (!eplconverged){
     208                                                if(VerboseConvergence()) _printf0_("   # EPL unstable constraints = " << num_unstable_constraints << "\n");
     209                                                if(num_unstable_constraints==0) eplconverged = true;
     210                                                if (eplcount>=hydro_maxiter){
     211                                                        _error_("   maximum number of EPL iterations (" << hydro_maxiter << ") exceeded");
     212                                                }
     213                                        }
     214                                        /*Add an iteration and get out of the loop if the penalisation is converged*/
     215                                        eplcount++;
     216                                        if(eplconverged) break;
     217                                }
     218                                /* }}} */ /*End of the EPL penalization loop*/
     219
     220                                eplconverged=false;
     221                                /*Update Elemental Mask and compute transfer*/
    194222                                HydrologyDCInefficientAnalysis* analysis = new HydrologyDCInefficientAnalysis();
    195223                                analysis->ElementizeEplMask(femmodel);
    196224                                delete analysis;
    197225                                femmodel->HydrologyTransferx();
    198                                        
    199                                 ug_epl_sub_iter=ug_epl->Duplicate();_assert_(ug_epl_sub_iter);
    200                                 ug_epl->Copy(ug_epl_sub_iter);
    201                                
    202                                 SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);
    203                                 CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCEfficientAnalysisEnum);
    204                                 Reduceloadx(pf,Kfs,ys); delete Kfs;
    205                                 delete uf_epl;
    206                                 Solverx(&uf_epl,Kff,pf,uf_epl_sub_iter,df,femmodel->parameters);
    207                                 delete Kff; delete pf; delete df;
    208                                 delete uf_epl_sub_iter;
    209                                 uf_epl_sub_iter=uf_epl->Duplicate();
    210                                 uf_epl->Copy(uf_epl_sub_iter);
    211                                 delete ug_epl;
    212                                 Mergesolutionfromftogx(&ug_epl,uf_epl,ys,femmodel->nodes,femmodel->parameters); delete ys;
    213                                 InputUpdateFromSolutionx(femmodel,ug_epl);
    214                                 ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel);
    215 
    216 
    217                                 if (!eplconverged){
    218                                         if(VerboseConvergence()) _printf0_("   # EPL unstable constraints = " << num_unstable_constraints << "\n");
    219                                         if(num_unstable_constraints==0) eplconverged = true;
    220                                         if (eplcount>=hydro_maxiter){
    221                                                 //eplconverged =true;
    222                                                 _error_("   maximum number of EPL iterations (" << hydro_maxiter << ") exceeded");
    223                                         }
    224                                 }
    225                                 eplcount++;
    226 
     226
     227                                dug=ug_epl_sub_iter->Duplicate();_assert_(dug);
     228                                ug_epl_sub_iter->Copy(dug);
     229                                dug->AYPX(ug_epl,-1.0);
     230                                ndu_epl=dug->Norm(NORM_TWO);
     231                                delete dug;
     232                                nu_epl=ug_epl_sub_iter->Norm(NORM_TWO);
     233                                if (xIsNan<IssmDouble>(ndu_epl) || xIsNan<IssmDouble>(nu_epl)) _error_("convergence criterion is NaN!");
     234                                if (ndu_epl==0.0 && nu_epl==0.0) nu_epl=1.0e-6; /*Hacking the case where the EPL is used but empty*/
     235                                if(VerboseConvergence()) _printf0_(setw(50) << left << "   Inner EPL Convergence criterion:" << ndu_epl/nu_epl*100 << " aiming lower than " << eps_hyd*100 << " %\n");
     236                                if((ndu_epl/nu_epl)<eps_hyd) eplconverged=true;
     237                       
     238                                delete ug_epl_sub_iter;
    227239                                if(eplconverged){
    228                                         eplconverged=false;
    229                                
    230                                         dug=ug_epl_sub_iter->Duplicate();_assert_(dug);
    231                                         ug_epl_sub_iter->Copy(dug);
    232                                         dug->AYPX(ug_epl,-1.0);
    233                                         ndu_epl=dug->Norm(NORM_TWO);
    234                                         delete dug;
    235                                         nu_epl=ug_epl_sub_iter->Norm(NORM_TWO);
    236                                        
    237                                         if (xIsNan<IssmDouble>(ndu_epl) || xIsNan<IssmDouble>(nu_epl)) _error_("convergence criterion is NaN!");
    238                                         if (ndu_epl==0.0 && nu_epl==0.0) nu_epl=1.0e-6; /*Hacking the case where the EPL is used but empty*/
    239                                         if(VerboseConvergence()) _printf0_(setw(50) << left << "   Inner EPL Convergence criterion:" << ndu_epl/nu_epl*100 << " aiming lower than " << eps_hyd*100 << " %\n");
    240                                         if((ndu_epl/nu_epl)<eps_hyd)eplconverged=true;
    241                                 }
    242                                 delete ug_epl_sub_iter;
    243 
    244                                 if(eplconverged){
    245                                
    246240                                        InputUpdateFromConstantx(femmodel,eplconverged,ConvergedEnum);
    247241                                        InputUpdateFromConstantx(femmodel,sediment_kmax,MeltingOffsetEnum);
     
    251245                        }
    252246                }
    253                
    254                 /*System convergence check*/
     247                /* }}} */ /*End of the global EPL loop*/
     248
     249                /* {{{ */ /*Now dealing with the convergence of the whole system*/
    255250                if(!hydroconverged){
    256251                        //compute norm(du)/norm(u)
     
    264259                        if (xIsNan<IssmDouble>(ndu_sed) || xIsNan<IssmDouble>(nu_sed)) _error_("Sed convergence criterion is NaN!");
    265260                        if (ndu_sed==0.0 && nu_sed==0.0) nu_sed=1.0e-6; /*Hacking the case where the Sediment is used but empty*/
     261                        dug=ug_epl_main_iter->Duplicate();_assert_(dug);
     262                        ug_epl_main_iter->Copy(dug);
     263                        dug->AYPX(ug_epl,-1.0);
     264                        ndu_epl=dug->Norm(NORM_TWO);
     265                        delete dug;
     266                        nu_epl=ug_epl_main_iter->Norm(NORM_TWO);
     267                        delete ug_epl_main_iter;
     268                        if (xIsNan<IssmDouble>(ndu_epl) || xIsNan<IssmDouble>(nu_epl)) _error_("EPL convergence criterion is NaN!");
     269                        if (ndu_epl==0.0 && nu_epl==0.0) nu_epl=1.0e-6; /*Hacking the case where the EPL is used but empty*/
    266270                        if (!xIsNan<IssmDouble>(eps_hyd)){
    267                                 if (!isefficientlayer){
    268                                         if ((ndu_sed/nu_sed)<eps_hyd){
    269                                                 if(VerboseConvergence()) _printf0_(setw(50) << left << "   Converged after, " << hydrocount << " iterations \n");
    270                                                 hydroconverged=true;
    271                                         }
    272                                         else{
    273                                                 if(VerboseConvergence()) _printf0_(setw(50) << left << "   Sediment Convergence criterion:" << ndu_sed/nu_sed*100 << " > " << eps_hyd*100 << " %\n");
    274                                                 hydroconverged=false;
    275                                         }
    276                                 }
    277                                 else{
    278                                         dug=ug_epl_main_iter->Duplicate();_assert_(dug);
    279                                         ug_epl_main_iter->Copy(dug);
    280                                         dug->AYPX(ug_epl,-1.0);
    281                                         ndu_epl=dug->Norm(NORM_TWO);
    282                                         delete dug;
    283                                         nu_epl=ug_epl_main_iter->Norm(NORM_TWO);
    284                                         delete ug_epl_main_iter;
    285                                         if (xIsNan<IssmDouble>(ndu_epl) || xIsNan<IssmDouble>(nu_epl)) _error_("EPL convergence criterion is NaN!");
    286                                         if (ndu_epl==0.0 && nu_epl==0.0) nu_epl=1.0e-6; /*Hacking the case where the EPL is used but empty*/
    287                                         if ((ndu_epl/nu_epl)<eps_hyd && (ndu_sed/nu_sed)<(eps_hyd*10)){
    288                                                 if (VerboseConvergence()) _printf0_(setw(50) << left << "   Converged after, " << hydrocount << " iterations \n");
    289                                                 hydroconverged=true;
    290                                         }
    291                                         else{
    292                                                 if(VerboseConvergence()) _printf0_(setw(50) << left << "   Sediment Convergence criterion:" << ndu_sed/nu_sed*100 << " aiming lower than " << eps_hyd*100 << " %\n");
    293                                                 if(VerboseConvergence()) _printf0_(setw(50) << left << "   EPL Convergence criterion:" << ndu_epl/nu_epl*100 << " aiming lower than " << eps_hyd*100 << " %\n");
    294                                                 hydroconverged=false;
    295                                         }
     271                                if ((ndu_epl/nu_epl)<eps_hyd && (ndu_sed/nu_sed)<(eps_hyd*10)){
     272                                        if (VerboseConvergence()) _printf0_(setw(50) << left << "   Converged after, " << hydrocount << " iterations \n");
     273                                        hydroconverged=true;
     274                                }
     275                                else{
     276                                        if(VerboseConvergence()) _printf0_(setw(50) << left << "   Sediment Convergence criterion:" << ndu_sed/nu_sed*100 << " aiming lower than " << eps_hyd*100 << " %\n");
     277                                        if(VerboseConvergence()) _printf0_(setw(50) << left << "   EPL Convergence criterion:" << ndu_epl/nu_epl*100 << " aiming lower than " << eps_hyd*100 << " %\n");
     278                                        hydroconverged=false;
    296279                                }
    297280                        }
    298281                        else _printf0_(setw(50) << left << "   Convergence criterion:" << ndu_sed/nu_sed*100 << " %\n");
    299282                        if (hydrocount>=hydro_maxiter){
    300                                         /*Hacking to get the results of non converged runs*/
    301                                         //hydroconverged = true;
    302                                         _error_("   maximum number for hydrological global iterations (" << hydro_maxiter << ") exceeded");
     283                                _error_("   maximum number for hydrological global iterations (" << hydro_maxiter << ") exceeded");
    303284                        }
    304285                }
    305286                hydrocount++;
    306287                if(hydroconverged)break;
    307 }
    308        
     288        }
     289        /* }}} */
    309290        InputUpdateFromSolutionx(femmodel,ug_sed);
    310291        if(isefficientlayer)InputUpdateFromSolutionx(femmodel,ug_epl);
    311 
    312292        /*Free ressources: */
    313293        delete ug_epl;
     
    316296        delete uf_epl;
    317297        delete uf_epl_sub_iter;
    318 
     298       
    319299}
Note: See TracChangeset for help on using the changeset viewer.