Changeset 18589
- Timestamp:
- 10/08/14 02:06:27 (10 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp ¶
r18521 r18589 15 15 16 16 parameters->AddObject(iomodel->CopyConstantObject(ThermalStabilizationEnum)); 17 parameters->AddObject(iomodel->CopyConstantObject(ThermalMaxiterEnum)); 18 parameters->AddObject(iomodel->CopyConstantObject(ThermalReltolEnum)); 17 19 parameters->AddObject(iomodel->CopyConstantObject(ThermalIsenthalpyEnum)); 18 20 parameters->AddObject(iomodel->CopyConstantObject(ThermalIsdynamicbasalspcEnum)); -
TabularUnified issm/trunk-jpl/src/c/cores/thermal_core.cpp ¶
r18237 r18589 31 31 if(VerboseSolution()) _printf0_(" computing enthalpy\n"); 32 32 femmodel->SetCurrentConfiguration(EnthalpyAnalysisEnum); 33 solutionsequence_ nonlinear(femmodel,true);33 solutionsequence_thermal_nonlinear(femmodel); 34 34 35 35 /*transfer enthalpy to enthalpy picard for the next step: */ -
TabularUnified issm/trunk-jpl/src/c/solutionsequences/convergence.cpp ¶
r15771 r18589 23 23 IssmDouble nF; 24 24 IssmDouble solver_residue,res; 25 int analysis_type; 25 26 26 27 /*convergence options*/ … … 41 42 /*get convergence options*/ 42 43 parameters->FindParam(&eps_res,StressbalanceRestolEnum); 43 parameters->FindParam(&eps_rel,StressbalanceReltolEnum); 44 // get analysis type 45 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); 44 50 parameters->FindParam(&eps_abs,StressbalanceAbstolEnum); 45 51 parameters->FindParam(&yts,ConstantsYtsEnum); -
TabularUnified issm/trunk-jpl/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp ¶
r17271 r18589 3 3 */ 4 4 5 #include "./solutionsequences.h" 5 6 #include "../toolkits/toolkits.h" 6 7 #include "../classes/classes.h" … … 24 25 25 26 bool converged; 27 bool isenthalpy, isdynamicbasalspc; 26 28 int constraints_converged; 27 29 int num_unstable_constraints; … … 29 31 int thermal_penalty_threshold; 30 32 int thermal_maxiter; 33 IssmDouble thermal_reltol; 31 34 32 35 /*parameters:*/ … … 34 37 35 38 /*Recover parameters: */ 36 femmodel->parameters->FindParam(& thermal_penalty_threshold,ThermalPenaltyThresholdEnum);39 femmodel->parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum); 37 40 femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum); 38 41 femmodel->parameters->FindParam(&thermal_maxiter,ThermalMaxiterEnum); 39 42 43 converged=false; 44 InputUpdateFromConstantx(femmodel,converged,ConvergedEnum); 45 46 if(isenthalpy){ 47 femmodel->parameters->FindParam(&isdynamicbasalspc,ThermalIsdynamicbasalspcEnum); 48 femmodel->parameters->FindParam(&thermal_reltol,ThermalReltolEnum); 49 femmodel->UpdateConstraintsx(); 50 51 //Update the solution to make sure that vx and vxold are similar (for next step in transient or steadystate) 52 GetSolutionFromInputsx(&tg,femmodel); 53 Reducevectorgtofx(&tf, tg, femmodel->nodes,femmodel->parameters); 54 InputUpdateFromSolutionx(femmodel,tg); 55 } 56 else{ 57 femmodel->parameters->FindParam(&thermal_penalty_threshold,ThermalPenaltyThresholdEnum); 58 InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum); 59 femmodel->UpdateConstraintsx(); 60 } 61 40 62 count=1; 41 converged=false; 63 64 for(;;){ 65 delete tf_old;tf_old=tf; 66 delete tg; 42 67 43 InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum); 44 InputUpdateFromConstantx(femmodel,false,ConvergedEnum); 45 femmodel->UpdateConstraintsx(); 46 47 for(;;){ 48 49 delete tf_old; tf_old=tf; 50 SystemMatricesx(&Kff, &Kfs, &pf,&df, &melting_offset,femmodel); 68 if(isenthalpy) SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel); 69 else SystemMatricesx(&Kff, &Kfs, &pf,&df, &melting_offset,femmodel); 51 70 CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type); 52 71 Reduceloadx(pf, Kfs, ys); delete Kfs; 53 Solverx(&tf, Kff, pf,tf_old, df, femmodel->parameters); 54 delete Kff;delete pf;delete tg; delete df; 72 Solverx(&tf, Kff, pf, tf_old, df, femmodel->parameters); 55 73 Mergesolutionfromftogx(&tg, tf,ys,femmodel->nodes,femmodel->parameters); delete ys; 74 if(isenthalpy){ 75 convergence(&converged,Kff,pf,tf,tf_old,femmodel->parameters); delete Kff; delete pf; delete df; 76 InputUpdateFromConstantx(femmodel,converged,ConvergedEnum); 77 } 56 78 InputUpdateFromSolutionx(femmodel,tg); 79 ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel); 80 if(VerboseConvergence()) _printf0_(" number of unstable constraints: " << num_unstable_constraints << "\n"); 57 81 58 ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel); 59 60 if (!converged){ 61 if(VerboseConvergence()) _printf0_(" #unstable constraints = " << num_unstable_constraints << "\n"); 62 if (num_unstable_constraints <= thermal_penalty_threshold)converged=true; 63 if (count>=thermal_maxiter){ 82 if(isenthalpy){ 83 /*Increase count: */ 84 count++; 85 if(converged==true){ 86 bool max_iteration_state=false; 87 int step; IssmDouble time; 88 femmodel->parameters->FindParam(&time,TimeEnum); 89 femmodel->parameters->FindParam(&step,StepEnum); 90 femmodel->results->AddObject(new GenericExternalResult<bool>(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, step, time)); 91 break; 92 } 93 if(count>=thermal_maxiter){ 94 _printf0_(" maximum number of nonlinear iterations (" << thermal_maxiter << ") exceeded\n"); 64 95 converged=true; 65 _printf0_(" maximum number of iterations (" << thermal_maxiter << ") exceeded\n"); 96 InputUpdateFromConstantx(femmodel,converged,ConvergedEnum); 97 InputUpdateFromSolutionx(femmodel,tg); 98 bool max_iteration_state=true; 99 int step; IssmDouble time; 100 femmodel->parameters->FindParam(&time,TimeEnum); 101 femmodel->parameters->FindParam(&step,StepEnum); 102 femmodel->results->AddObject(new GenericExternalResult<bool>(femmodel->results->Size()+1, MaxIterationConvergenceFlagEnum, max_iteration_state, step, time)); 103 break; 66 104 } 67 105 } 68 count++; 69 70 InputUpdateFromConstantx(femmodel,converged,ConvergedEnum); 71 72 if(converged)break; 106 else{ 107 if(!converged){ 108 if(num_unstable_constraints<=thermal_penalty_threshold) converged=true; 109 if(count>=thermal_maxiter){ 110 converged=true; 111 _printf0_(" maximum number of iterations (" << thermal_maxiter << ") exceeded\n"); 112 } 113 } 114 count++; 115 InputUpdateFromConstantx(femmodel,converged,ConvergedEnum); 116 if(converged)break; 117 } 73 118 } 74 119 75 InputUpdateFromSolutionx(femmodel,tg); 76 femmodel->parameters->SetParam(melting_offset,MeltingOffsetEnum); 120 if(isenthalpy){ 121 if(VerboseConvergence()) _printf0_("\n total number of iterations: " << count-1 << "\n"); 122 } 123 else{ 124 InputUpdateFromSolutionx(femmodel,tg); 125 femmodel->parameters->SetParam(melting_offset,MeltingOffsetEnum); 126 } 77 127 78 128 /*Free ressources: */
Note:
See TracChangeset
for help on using the changeset viewer.