Changeset 15077
- Timestamp:
- 05/22/13 09:24:09 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
r15062 r15077 29 29 int constraints_converged; 30 30 int num_unstable_constraints; 31 int count;31 int sedcount,eplcount,hydrocount; 32 32 int hydro_maxiter; 33 33 IssmDouble sediment_kmax,time; … … 43 43 femmodel->BasisIntegralsx(); 44 44 hydro_maxiter=100; 45 count=1;45 hydrocount=1; 46 46 sedconverged=false; 47 47 eplconverged=false; … … 60 60 61 61 for(;;){ 62 sedcount=1; 63 eplcount=1; 62 64 //save pointer to old velocity 63 65 delete aged_uf_sed;aged_uf_sed=uf_sed; … … 78 80 femmodel->SystemMatricesx(&Kff, &Kfs, &pf,&df, &sediment_kmax); 79 81 CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCInefficientAnalysisEnum); 80 Reduceloadx(pf,Kfs,ys); delete Kfs; delete uf_sed; 82 Reduceloadx(pf,Kfs,ys); delete Kfs; 83 if(sedcount>1)delete uf_sed; 81 84 Solverx(&uf_sed, Kff, pf,old_uf, df, femmodel->parameters); 82 85 delete old_uf; old_uf=uf_sed->Duplicate(); … … 90 93 if(VerboseConvergence()) _pprintLine_(" #unstable constraints = " << num_unstable_constraints); 91 94 if(num_unstable_constraints==0) sedconverged = true; 92 if ( count>=hydro_maxiter){93 _error_(" maximum number of iterations (" << hydro_maxiter << ") exceeded");94 } 95 } 96 count++;95 if (sedcount>=hydro_maxiter){ 96 _error_(" maximum number of Sediment iterations (" << hydro_maxiter << ") exceeded"); 97 } 98 } 99 sedcount++; 97 100 98 101 if(sedconverged){ … … 117 120 femmodel->SystemMatricesx(&Kff, &Kfs, &pf,&df,NULL); 118 121 CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCEfficientAnalysisEnum); 119 Reduceloadx(pf,Kfs,ys); delete Kfs; delete uf_epl; 122 Reduceloadx(pf,Kfs,ys); delete Kfs; 123 if(eplcount>1) delete uf_epl; 120 124 Solverx(&uf_epl, Kff, pf,old_uf, df, femmodel->parameters); 121 125 delete old_uf; old_uf=uf_epl->Duplicate(); … … 129 133 if(VerboseConvergence()) _pprintLine_(" #unstable constraints = " << num_unstable_constraints); 130 134 if(num_unstable_constraints==0) eplconverged = true; 131 if ( count>=hydro_maxiter){132 _error_(" maximum number of iterations (" << hydro_maxiter << ") exceeded");133 } 134 } 135 count++;135 if (eplcount>=hydro_maxiter){ 136 _error_(" maximum number of EPL iterations (" << hydro_maxiter << ") exceeded"); 137 } 138 } 139 eplcount++; 136 140 137 141 if(eplconverged){ … … 148 152 _assert_(aged_uf_sed); _assert_(uf_sed); 149 153 duf=uf_sed->Duplicate(); _assert_(duf); 150 aged_uf_sed->Copy(duf); duf->AYPX(uf_sed,-1.0); 154 aged_uf_sed->Copy(duf); 155 duf->AYPX(uf_sed,-1.0); 151 156 ndu_sed=duf->Norm(NORM_TWO); nu_sed=aged_uf_sed->Norm(NORM_TWO); 152 157 if (xIsNan<IssmDouble>(ndu_sed) || xIsNan<IssmDouble>(nu_sed)) _error_("convergence criterion is NaN!"); 153 154 158 if(isefficientlayer){ 155 159 duf=aged_uf_epl->Duplicate(); aged_uf_epl->Copy(duf); duf->AYPX(uf_epl,-1.0); … … 160 164 if (!xIsNan<IssmDouble>(eps_hyd)){ 161 165 if((ndu_sed/nu_sed)<eps_hyd){ 162 if(VerboseConvergence()) _pprintLine_(setw(50) << left << " Sediment Convergence criterion: norm(du)/norm(u)" << ndu_sed/nu_sed*100 << " < " << eps_hyd*100 << " %");166 if(VerboseConvergence()) _pprintLine_(setw(50) << left << " Sediment Convergence criterion:" << ndu_sed/nu_sed*100 << " < " << eps_hyd*100 << " %"); 163 167 hydroconverged=true; 164 168 } 165 169 else{ 166 if(VerboseConvergence()) _pprintLine_(setw(50) << left << " Sediment Convergence criterion: norm(du)/norm(u)" << ndu_sed/nu_sed*100 << " > " << eps_hyd*100 << " %");170 if(VerboseConvergence()) _pprintLine_(setw(50) << left << " Sediment Convergence criterion:" << ndu_sed/nu_sed*100 << " > " << eps_hyd*100 << " %"); 167 171 hydroconverged=false; 168 172 } 169 173 if(isefficientlayer){ 170 174 if((ndu_epl/nu_epl)<eps_hyd){ 171 if(VerboseConvergence()) _pprintLine_(setw(50) << left << " EPL Convergence criterion: norm(du)/norm(u)" << ndu_epl/nu_epl*100 << " < " << eps_hyd*100 << " %");175 if(VerboseConvergence()) _pprintLine_(setw(50) << left << " EPL Convergence criterion:" << ndu_epl/nu_epl*100 << " < " << eps_hyd*100 << " %"); 172 176 } 173 177 else{ 174 if(VerboseConvergence()) _pprintLine_(setw(50) << left << " EPL Convergence criterion: norm(du)/norm(u)" << ndu_epl/nu_epl*100 << " > " << eps_hyd*100 << " %");178 if(VerboseConvergence()) _pprintLine_(setw(50) << left << " EPL Convergence criterion:" << ndu_epl/nu_epl*100 << " > " << eps_hyd*100 << " %"); 175 179 hydroconverged=false; 176 180 } 177 181 } 178 182 } 179 else _pprintLine_(setw(50) << left << " Convergence criterion: norm(du)/norm(u)" << ndu_sed/nu_sed*100 << " %"); 180 } 181 183 else _pprintLine_(setw(50) << left << " Convergence criterion:" << ndu_sed/nu_sed*100 << " %"); 184 if (hydrocount>=hydro_maxiter){ 185 _error_(" maximum number for hydrological global iterations (" << hydro_maxiter << ") exceeded"); 186 } 187 } 188 hydrocount++; 189 182 190 if(hydroconverged)break; 183 191 }
Note:
See TracChangeset
for help on using the changeset viewer.