Changeset 18619
- Timestamp:
- 10/13/14 08:46:11 (10 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/solutionsequences/convergence.cpp
r18601 r18619 7 7 #include "../shared/shared.h" 8 8 9 void convergence(bool* pconverged, Matrix<IssmDouble>* Kff,Vector<IssmDouble>* pf,Vector<IssmDouble>* uf,Vector<IssmDouble>* old_uf, Parameters* parameters){9 void convergence(bool* pconverged, Matrix<IssmDouble>* Kff,Vector<IssmDouble>* pf,Vector<IssmDouble>* uf,Vector<IssmDouble>* old_uf,IssmDouble eps_res,IssmDouble eps_rel,IssmDouble eps_abs){ 10 10 11 11 /*output*/ … … 25 25 int analysis_type; 26 26 27 /*convergence options*/28 IssmDouble eps_res;29 IssmDouble eps_rel;30 IssmDouble eps_abs;31 IssmDouble yts;32 33 27 if(VerboseModule()) _printf0_(" checking convergence\n"); 34 28 … … 39 33 return; 40 34 } 41 42 /*get convergence options*/43 parameters->FindParam(&eps_res,StressbalanceRestolEnum);44 // get analysis type45 parameters->FindParam(&analysis_type,AnalysisTypeEnum);46 if(analysis_type==StressbalanceAnalysisEnum)47 parameters->FindParam(&eps_rel,StressbalanceReltolEnum);48 else if(analysis_type==EnthalpyAnalysisEnum)49 parameters->FindParam(&eps_rel,ThermalReltolEnum);50 else51 eps_rel = NAN;52 53 parameters->FindParam(&eps_abs,StressbalanceAbstolEnum);54 parameters->FindParam(&yts,ConstantsYtsEnum);55 35 56 36 /*Display solver caracteristics*/ … … 139 119 //print 140 120 if (!xIsNan<IssmDouble>(eps_abs)){ 141 if ((nduinf *yts)<eps_abs){142 if(VerboseConvergence()) _printf0_(setw(50) << left << " Convergence criterion: max(du)" << nduinf *yts << " < " << eps_abs << " m/yr\n");121 if ((nduinf)<eps_abs){ 122 if(VerboseConvergence()) _printf0_(setw(50) << left << " Convergence criterion: max(du)" << nduinf << " < " << eps_abs << "\n"); 143 123 } 144 124 else{ 145 if(VerboseConvergence()) _printf0_(setw(50) << left << " Convergence criterion: max(du)" << nduinf *yts << " > " << eps_abs << " m/yr\n");125 if(VerboseConvergence()) _printf0_(setw(50) << left << " Convergence criterion: max(du)" << nduinf << " > " << eps_abs << "\n"); 146 126 converged=false; 147 127 } 148 128 } 149 else _printf0_(setw(50) << left << " Convergence criterion: max(du)" << nduinf *yts << " m/yr\n");129 else _printf0_(setw(50) << left << " Convergence criterion: max(du)" << nduinf << "\n"); 150 130 151 131 } -
issm/trunk-jpl/src/c/solutionsequences/solutionsequence_newton.cpp
r17816 r18619 30 30 /*parameters:*/ 31 31 int max_nonlinear_iterations; 32 int configuration_type; 32 int configuration_type; 33 IssmDouble eps_res,eps_rel,eps_abs; 33 34 34 35 /*Recover parameters: */ … … 36 37 femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum); 37 38 femmodel->parameters->FindParam(&newton,StressbalanceIsnewtonEnum); 39 femmodel->parameters->FindParam(&eps_res,StressbalanceRestolEnum); 40 femmodel->parameters->FindParam(&eps_rel,StressbalanceReltolEnum); 41 femmodel->parameters->FindParam(&eps_abs,StressbalanceAbstolEnum); 38 42 femmodel->UpdateConstraintsx(); 39 43 … … 83 87 84 88 /*Check convergence*/ 85 convergence(&converged,Kff,pf,uf,old_uf, femmodel->parameters);89 convergence(&converged,Kff,pf,uf,old_uf,eps_res,eps_rel,eps_abs); 86 90 delete Kff; delete pf; 87 91 if(converged==true){ -
issm/trunk-jpl/src/c/solutionsequences/solutionsequence_nonlinear.cpp
r17055 r18619 31 31 int max_nonlinear_iterations; 32 32 int configuration_type; 33 IssmDouble eps_res,eps_rel,eps_abs; 34 33 35 34 36 /*Recover parameters: */ 35 37 femmodel->parameters->FindParam(&min_mechanical_constraints,StressbalanceRiftPenaltyThresholdEnum); 36 38 femmodel->parameters->FindParam(&max_nonlinear_iterations,StressbalanceMaxiterEnum); 39 femmodel->parameters->FindParam(&eps_res,StressbalanceRestolEnum); 40 femmodel->parameters->FindParam(&eps_rel,StressbalanceReltolEnum); 41 femmodel->parameters->FindParam(&eps_abs,StressbalanceAbstolEnum); 37 42 femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum); 38 43 femmodel->UpdateConstraintsx(); … … 66 71 Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters);delete ys; 67 72 68 convergence(&converged,Kff,pf,uf,old_uf, femmodel->parameters); delete Kff; delete pf; delete df;73 convergence(&converged,Kff,pf,uf,old_uf,eps_res,eps_rel,eps_abs); delete Kff; delete pf; delete df; 69 74 InputUpdateFromConstantx(femmodel,converged,ConvergedEnum); 70 75 InputUpdateFromSolutionx(femmodel,ug); -
issm/trunk-jpl/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp
r16126 r18619 33 33 int max_nonlinear_iterations; 34 34 int configuration_type; 35 IssmDouble eps_res,eps_rel,eps_abs; 35 36 36 37 /*Recover parameters: */ 37 38 femmodel->parameters->FindParam(&min_mechanical_constraints,StressbalanceRiftPenaltyThresholdEnum); 38 39 femmodel->parameters->FindParam(&max_nonlinear_iterations,StressbalanceMaxiterEnum); 40 femmodel->parameters->FindParam(&eps_res,StressbalanceRestolEnum); 41 femmodel->parameters->FindParam(&eps_rel,StressbalanceReltolEnum); 42 femmodel->parameters->FindParam(&eps_abs,StressbalanceAbstolEnum); 39 43 femmodel->UpdateConstraintsx(); 40 44 … … 68 72 InputUpdateFromSolutionx(femmodel,ug_horiz); 69 73 70 convergence(&converged,Kff_horiz,pf_horiz,uf_horiz,old_uf_horiz, femmodel->parameters); delete Kff_horiz; delete pf_horiz; delete df_horiz;74 convergence(&converged,Kff_horiz,pf_horiz,uf_horiz,old_uf_horiz,eps_res,eps_rel,eps_abs); delete Kff_horiz; delete pf_horiz; delete df_horiz; 71 75 72 76 /*Second compute vertical velocity: */ -
issm/trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp
r18590 r18619 31 31 int thermal_penalty_threshold; 32 32 int thermal_maxiter; 33 IssmDouble thermal_reltol;34 33 35 34 /*parameters:*/ 36 35 int configuration_type; 36 IssmDouble eps_rel; 37 37 38 38 /*Recover parameters: */ … … 40 40 femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum); 41 41 femmodel->parameters->FindParam(&thermal_maxiter,ThermalMaxiterEnum); 42 femmodel->parameters->FindParam(&eps_rel,ThermalReltolEnum); 42 43 43 44 converged=false; … … 46 47 if(isenthalpy){ 47 48 femmodel->parameters->FindParam(&isdynamicbasalspc,ThermalIsdynamicbasalspcEnum); 48 femmodel->parameters->FindParam(& thermal_reltol,ThermalReltolEnum);49 femmodel->parameters->FindParam(&eps_rel,ThermalReltolEnum); 49 50 femmodel->UpdateConstraintsx(); 50 51 … … 73 74 Mergesolutionfromftogx(&tg, tf,ys,femmodel->nodes,femmodel->parameters); delete ys; 74 75 if(isenthalpy){ 75 convergence(&converged,Kff,pf,tf,tf_old, femmodel->parameters);76 convergence(&converged,Kff,pf,tf,tf_old,0.05,eps_rel,NAN); 76 77 InputUpdateFromConstantx(femmodel,converged,ConvergedEnum); 77 78 } -
issm/trunk-jpl/src/c/solutionsequences/solutionsequences.h
r18344 r18619 24 24 25 25 /*convergence*/ 26 void convergence(bool* pconverged, Matrix<IssmDouble>* K_ff,Vector<IssmDouble>* p_f,Vector<IssmDouble>* u_f,Vector<IssmDouble>* u_f_old, Parameters* parameters);26 void convergence(bool* pconverged, Matrix<IssmDouble>* K_ff,Vector<IssmDouble>* p_f,Vector<IssmDouble>* u_f,Vector<IssmDouble>* u_f_old,IssmDouble eps_res,IssmDouble eps_rel,IssmDouble eps_abs); 27 27 28 28 #endif -
issm/trunk-jpl/src/m/classes/stressbalance.m
r18579 r18619 223 223 WriteData(fid,'object',obj,'class','stressbalance','fieldname','restol','format','Double'); 224 224 WriteData(fid,'object',obj,'class','stressbalance','fieldname','reltol','format','Double'); 225 WriteData(fid,'object',obj,'class','stressbalance','fieldname','abstol','format','Double' );225 WriteData(fid,'object',obj,'class','stressbalance','fieldname','abstol','format','Double','scale',1./yts); 226 226 WriteData(fid,'object',obj,'class','stressbalance','fieldname','isnewton','format','Integer'); 227 227 WriteData(fid,'object',obj,'class','stressbalance','fieldname','FSreconditioning','format','Double'); -
issm/trunk-jpl/src/m/classes/stressbalance.py
r17686 r18619 173 173 WriteData(fid,'object',self,'class','stressbalance','fieldname','restol','format','Double') 174 174 WriteData(fid,'object',self,'class','stressbalance','fieldname','reltol','format','Double') 175 WriteData(fid,'object',self,'class','stressbalance','fieldname','abstol','format','Double' )175 WriteData(fid,'object',self,'class','stressbalance','fieldname','abstol','format','Double','scale',1./yts) 176 176 WriteData(fid,'object',self,'class','stressbalance','fieldname','isnewton','format','Integer') 177 177 WriteData(fid,'object',self,'class','stressbalance','fieldname','FSreconditioning','format','Double')
Note:
See TracChangeset
for help on using the changeset viewer.