Changeset 16137 for issm/trunk/src/c/solutionsequences
- Timestamp:
- 09/16/13 09:43:55 (12 years ago)
- Location:
- issm/trunk
- Files:
-
- 1 deleted
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk
- Property svn:ignore
-
old new 1 nightlylog 2 configure.sh 1 3 par 2 4 ad
-
- Property svn:mergeinfo changed
/issm/trunk-jpl merged: 15397-15401,15403-15487,15489-15701,15704-15735,15737-16076,16082-16133
- Property svn:ignore
-
issm/trunk/src
- Property svn:mergeinfo changed
-
issm/trunk/src/c
- Property svn:ignore
-
old new 14 14 probe.results 15 15 stXXXX* 16 16 .deps 17 .dirstamp
-
- Property svn:ignore
-
issm/trunk/src/c/solutionsequences
-
Property svn:ignore
set to
.deps
.dirstamp
-
Property svn:ignore
set to
-
issm/trunk/src/c/solutionsequences/convergence.cpp
r15104 r16137 40 40 41 41 /*get convergence options*/ 42 parameters->FindParam(&eps_res, DiagnosticRestolEnum);43 parameters->FindParam(&eps_rel, DiagnosticReltolEnum);44 parameters->FindParam(&eps_abs, DiagnosticAbstolEnum);42 parameters->FindParam(&eps_res,StressbalanceRestolEnum); 43 parameters->FindParam(&eps_rel,StressbalanceReltolEnum); 44 parameters->FindParam(&eps_abs,StressbalanceAbstolEnum); 45 45 parameters->FindParam(&yts,ConstantsYtsEnum); 46 46 -
issm/trunk/src/c/solutionsequences/solutionsequence_adjoint_linear.cpp
r15002 r16137 26 26 femmodel->UpdateConstraintsx(); 27 27 28 femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);28 SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL,femmodel); 29 29 CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type); 30 30 Reduceloadx(pf, Kfs, ys,true); delete Kfs; //true means spc = 0 31 31 Solverx(&uf, Kff, pf, NULL, df, femmodel->parameters); delete Kff; delete pf; delete df; 32 32 Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters,true); delete ys; //true means spc0 33 InputUpdateFromSolutionx(femmodel ->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);33 InputUpdateFromSolutionx(femmodel,ug); 34 34 delete ug; delete uf; 35 35 } -
issm/trunk/src/c/solutionsequences/solutionsequence_hydro_nonlinear.cpp
r15352 r16137 10 10 void solutionsequence_hydro_nonlinear(FemModel* femmodel){ 11 11 /*solution : */ 12 Vector<IssmDouble>* ug_sed=NULL; 12 Vector<IssmDouble>* ug_sed=NULL; 13 Vector<IssmDouble>* uf_sed=NULL; 14 Vector<IssmDouble>* uf_sed_sub_iter=NULL; 15 Vector<IssmDouble>* ug_sed_main_iter=NULL; 16 13 17 Vector<IssmDouble>* ug_epl=NULL; 14 Vector<IssmDouble>* uf =NULL;15 Vector<IssmDouble>* uf_ int_iter=NULL;16 Vector<IssmDouble>* ug_ sed_main_iter=NULL;17 Vector<IssmDouble>* ug_epl_main_iter=NULL; 18 Vector<IssmDouble>* uf_epl=NULL; 19 Vector<IssmDouble>* uf_epl_sub_iter=NULL; 20 Vector<IssmDouble>* ug_epl_main_iter=NULL; 21 18 22 Vector<IssmDouble>* ys=NULL; 19 Vector<IssmDouble>* dug=NULL; 20 Vector<IssmDouble>* old_ug=NULL; 21 23 Vector<IssmDouble>* dug=NULL; 24 22 25 Matrix<IssmDouble>* Kff=NULL; 23 26 Matrix<IssmDouble>* Kfs=NULL; … … 37 40 38 41 /*Recover parameters: */ 39 femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum); //FIXME42 femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum); 40 43 femmodel->parameters->FindParam(&isefficientlayer,HydrologydcIsefficientlayerEnum); 41 44 femmodel->parameters->FindParam(&eps_hyd,HydrologydcRelTolEnum); … … 43 46 hydro_maxiter=150; 44 47 hydrocount=1; 45 46 /*Iteration on the two layers*/ 47 femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum); 48 GetSolutionFromInputsx(&ug_sed, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters); 48 hydroconverged=false; 49 50 /*Retrieve inputs as the initial state for the non linear iteration*/ 51 //femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum); 52 GetSolutionFromInputsx(&ug_sed,femmodel); 53 49 54 if(isefficientlayer) { 50 55 femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum); 51 GetSolutionFromInputsx(&ug_epl, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);56 GetSolutionFromInputsx(&ug_epl,femmodel); 52 57 } 53 58 54 hydroconverged=false;59 /*Iteration on the two layers*/ 55 60 for(;;){ 56 61 sedcount=1; 57 62 eplcount=1; 58 63 //save pointer to old velocity 59 delete ug_sed_main_iter;60 ug_sed _main_iter=ug_sed;64 ug_sed_main_iter=ug_sed->Duplicate(); 65 ug_sed->Copy(ug_sed_main_iter); 61 66 if(isefficientlayer){ 62 delete ug_epl_main_iter;63 ug_epl _main_iter=ug_epl;67 ug_epl_main_iter=ug_epl->Duplicate(); 68 ug_epl->Copy(ug_epl_main_iter); 64 69 } 65 70 66 71 femmodel->SetCurrentConfiguration(HydrologyDCInefficientAnalysisEnum); 67 InputUpdateFromConstantx(femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,true,ResetPenaltiesEnum);68 InputUpdateFromConstantx(femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,false,ConvergedEnum);72 InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum); 73 InputUpdateFromConstantx(femmodel,false,ConvergedEnum); 69 74 femmodel->UpdateConstraintsx(); 70 75 femmodel->parameters->SetParam(HydrologySedimentEnum,HydrologyLayerEnum); … … 74 79 for(;;){ 75 80 femmodel->HydrologyTransferx(); 76 femmodel->SystemMatricesx(&Kff, &Kfs, &pf,&df, &sediment_kmax);81 SystemMatricesx(&Kff,&Kfs,&pf,&df,&sediment_kmax,femmodel); 77 82 CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCInefficientAnalysisEnum); 78 83 Reduceloadx(pf,Kfs,ys); delete Kfs; 79 delete uf; 80 Solverx(&uf, Kff, pf,uf_int_iter, df, femmodel->parameters); 81 delete uf_int_iter; uf_int_iter=uf->Duplicate(); 82 if(sedcount>1)delete ug_sed; /*Not on first time to avoid deleting ug_sed_main_iter*/ 84 delete uf_sed; 85 Solverx(&uf_sed,Kff,pf,uf_sed_sub_iter,df,femmodel->parameters); 83 86 delete Kff; delete pf; delete df; 84 85 Mergesolutionfromftogx(&ug_sed,uf,ys,femmodel->nodes,femmodel->parameters); delete ys; 86 InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_sed); 87 ConstraintsStatex(&constraints_converged,&num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters); 87 delete uf_sed_sub_iter; 88 uf_sed_sub_iter=uf_sed->Duplicate(); 89 uf_sed->Copy(uf_sed_sub_iter); 90 delete ug_sed; 91 Mergesolutionfromftogx(&ug_sed,uf_sed,ys,femmodel->nodes,femmodel->parameters); delete ys; 92 InputUpdateFromSolutionx(femmodel,ug_sed); 93 ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel); 88 94 89 95 if (!sedconverged){ … … 98 104 if(sedconverged){ 99 105 femmodel->parameters->SetParam(sediment_kmax,HydrologySedimentKmaxEnum); 100 InputUpdateFromConstantx(femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,sedconverged,ConvergedEnum);101 InputUpdateFromSolutionx(femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_sed);102 InputUpdateFromConstantx(femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,sediment_kmax,HydrologySedimentKmaxEnum);106 InputUpdateFromConstantx(femmodel,sedconverged,ConvergedEnum); 107 InputUpdateFromSolutionx(femmodel,ug_sed); 108 InputUpdateFromConstantx(femmodel,sediment_kmax,HydrologySedimentKmaxEnum); 103 109 break; 104 110 } … … 108 114 if(isefficientlayer){ 109 115 femmodel->SetCurrentConfiguration(HydrologyDCEfficientAnalysisEnum); 110 InputUpdateFromConstantx(femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,true,ResetPenaltiesEnum);111 InputUpdateFromConstantx(femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,false,ConvergedEnum);116 InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum); 117 InputUpdateFromConstantx(femmodel,false,ConvergedEnum); 112 118 femmodel->HydrologyEPLupdateDomainx(); 113 119 femmodel->parameters->SetParam(HydrologyEfficientEnum,HydrologyLayerEnum); 120 121 /*Iteration on the EPL layer*/ 114 122 eplconverged = false; 115 /*Iteration on the EPL layer*/116 123 for(;;){ 117 124 femmodel->HydrologyTransferx(); 118 femmodel->SystemMatricesx(&Kff, &Kfs, &pf,&df,NULL);125 SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel); 119 126 CreateNodalConstraintsx(&ys,femmodel->nodes,HydrologyDCEfficientAnalysisEnum); 120 127 Reduceloadx(pf,Kfs,ys); delete Kfs; 121 delete uf; 122 Solverx(&uf, Kff, pf,uf_int_iter, df, femmodel->parameters); 123 delete uf_int_iter; uf_int_iter=uf->Duplicate(); 124 if(eplcount>1) delete ug_epl; 125 delete Kff;delete pf; 126 delete df; 127 Mergesolutionfromftogx(&ug_epl,uf,ys,femmodel->nodes,femmodel->parameters); delete ys; 128 InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_epl); 129 ConstraintsStatex(&constraints_converged,&num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters); 128 delete uf_epl; 129 Solverx(&uf_epl,Kff,pf,uf_epl_sub_iter,df,femmodel->parameters); 130 delete Kff; delete pf; delete df; 131 delete uf_epl_sub_iter; 132 uf_epl_sub_iter=uf_epl->Duplicate(); 133 uf_epl->Copy(uf_epl_sub_iter); 134 delete ug_epl; 135 Mergesolutionfromftogx(&ug_epl,uf_epl,ys,femmodel->nodes,femmodel->parameters); delete ys; 136 InputUpdateFromSolutionx(femmodel,ug_epl); 137 ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel); 130 138 femmodel->HydrologyEPLupdateDomainx(); 131 139 132 140 if (!eplconverged){ 133 141 if(VerboseConvergence()) _printf0_(" # EPL unstable constraints = " << num_unstable_constraints << "\n"); … … 140 148 141 149 if(eplconverged){ 142 InputUpdateFromConstantx(femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,eplconverged,ConvergedEnum);143 InputUpdateFromConstantx(femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,sediment_kmax,MeltingOffsetEnum);144 InputUpdateFromSolutionx(femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug_epl);150 InputUpdateFromConstantx(femmodel,eplconverged,ConvergedEnum); 151 InputUpdateFromConstantx(femmodel,sediment_kmax,MeltingOffsetEnum); 152 InputUpdateFromSolutionx(femmodel,ug_epl); 145 153 break; 146 154 } … … 153 161 ug_sed_main_iter->Copy(dug); 154 162 dug->AYPX(ug_sed,-1.0); 155 ndu_sed=dug->Norm(NORM_TWO); nu_sed=ug_sed_main_iter->Norm(NORM_TWO); 163 ndu_sed=dug->Norm(NORM_TWO); 164 delete dug; 165 nu_sed=ug_sed_main_iter->Norm(NORM_TWO); 166 delete ug_sed_main_iter; 156 167 if (xIsNan<IssmDouble>(ndu_sed) || xIsNan<IssmDouble>(nu_sed)) _error_("Sed convergence criterion is NaN!"); 157 168 if (!xIsNan<IssmDouble>(eps_hyd)){ … … 171 182 dug->AYPX(ug_epl,-1.0); 172 183 ndu_epl=dug->Norm(NORM_TWO); 184 delete dug; 173 185 nu_epl=ug_epl_main_iter->Norm(NORM_TWO); 174 186 delete ug_epl_main_iter; 175 187 if (xIsNan<IssmDouble>(ndu_epl) || xIsNan<IssmDouble>(nu_epl)) _error_("EPL convergence criterion is NaN!"); 176 188 if (ndu_epl==0.0 && nu_epl==0.0) nu_epl=1.0e-6; /*Hacking the case where the EPL is used but empty*/ … … 194 206 if(hydroconverged)break; 195 207 } 196 InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_sed); 197 if(isefficientlayer)InputUpdateFromSolutionx(femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_epl); 208 209 InputUpdateFromSolutionx(femmodel,ug_sed); 210 if(isefficientlayer)InputUpdateFromSolutionx(femmodel,ug_epl); 198 211 199 212 /*Free ressources: */ 200 213 delete ug_epl; 201 214 delete ug_sed; 202 delete uf ;203 delete uf_ int_iter;204 delete u g_sed_main_iter;205 delete u g_epl_main_iter;206 delete dug;215 delete uf_sed; 216 delete uf_epl; 217 delete uf_sed_sub_iter; 218 delete uf_epl_sub_iter; 219 //delete dug; 207 220 } -
issm/trunk/src/c/solutionsequences/solutionsequence_linear.cpp
r15002 r16137 24 24 femmodel->UpdateConstraintsx(); 25 25 26 femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);26 SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel); 27 27 CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type); 28 28 Reduceloadx(pf, Kfs, ys); delete Kfs; … … 35 35 //#endif 36 36 Mergesolutionfromftogx(&ug, uf,ys,femmodel->nodes,femmodel->parameters);delete uf; delete ys; 37 InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);37 InputUpdateFromSolutionx(femmodel,ug); 38 38 delete ug; 39 39 } -
issm/trunk/src/c/solutionsequences/solutionsequence_newton.cpp
r15104 r16137 33 33 34 34 /*Recover parameters: */ 35 femmodel->parameters->FindParam(&max_nonlinear_iterations, DiagnosticMaxiterEnum);35 femmodel->parameters->FindParam(&max_nonlinear_iterations,StressbalanceMaxiterEnum); 36 36 femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum); 37 femmodel->parameters->FindParam(&newton, DiagnosticIsnewtonEnum);37 femmodel->parameters->FindParam(&newton,StressbalanceIsnewtonEnum); 38 38 femmodel->UpdateConstraintsx(); 39 39 … … 42 42 43 43 /*Start non-linear iteration using input velocity: */ 44 GetSolutionFromInputsx(&ug,femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);44 GetSolutionFromInputsx(&ug,femmodel); 45 45 Reducevectorgtofx(&uf,ug,femmodel->nodes,femmodel->parameters); 46 46 47 47 //Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate) 48 InputUpdateFromConstantx(femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,converged,ConvergedEnum);49 InputUpdateFromSolutionx(femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);48 InputUpdateFromConstantx(femmodel,converged,ConvergedEnum); 49 InputUpdateFromSolutionx(femmodel,ug); 50 50 51 51 for(;;){ … … 56 56 /*Solver forward model*/ 57 57 if(count==1 || newton==2){ 58 femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);58 SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel); 59 59 CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type); 60 60 Reduceloadx(pf,Kfs,ys);delete Kfs; 61 61 Solverx(&uf,Kff,pf,old_uf,df,femmodel->parameters);delete df; delete Kff; delete pf; 62 62 Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);delete ys; 63 InputUpdateFromSolutionx(femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);63 InputUpdateFromSolutionx(femmodel,ug); 64 64 delete old_ug;old_ug=ug; 65 65 delete old_uf;old_uf=uf; … … 68 68 69 69 /*Prepare next iteration using Newton's method*/ 70 femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);delete df;70 SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel);delete df; 71 71 CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type); 72 72 Reduceloadx(pf,Kfs,ys);delete Kfs; 73 73 74 74 pJf=pf->Duplicate(); 75 Kff->MatMult(uf,pJf); // delete Kff);76 pJf->Scale(-1.0); pJf->AXPY(pf,+1.0); //delete pf);75 Kff->MatMult(uf,pJf); 76 pJf->Scale(-1.0); pJf->AXPY(pf,+1.0); 77 77 78 femmodel->CreateJacobianMatrixx(&Jff,kmax);78 CreateJacobianMatrixx(&Jff,femmodel,kmax); 79 79 Solverx(&duf,Jff,pJf,NULL,NULL,femmodel->parameters); delete Jff; delete pJf; 80 80 uf->AXPY(duf, 1.0); delete duf; 81 81 Mergesolutionfromftogx(&ug,uf,ys,femmodel->nodes,femmodel->parameters);delete ys; 82 InputUpdateFromSolutionx(femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,ug);82 InputUpdateFromSolutionx(femmodel,ug); 83 83 84 84 /*Check convergence*/ -
issm/trunk/src/c/solutionsequences/solutionsequence_nonlinear.cpp
r15197 r16137 33 33 34 34 /*Recover parameters: */ 35 femmodel->parameters->FindParam(&min_mechanical_constraints, DiagnosticRiftPenaltyThresholdEnum);36 femmodel->parameters->FindParam(&max_nonlinear_iterations, DiagnosticMaxiterEnum);35 femmodel->parameters->FindParam(&min_mechanical_constraints,StressbalanceRiftPenaltyThresholdEnum); 36 femmodel->parameters->FindParam(&max_nonlinear_iterations,StressbalanceMaxiterEnum); 37 37 femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum); 38 38 femmodel->UpdateConstraintsx(); … … 47 47 48 48 /*Start non-linear iteration using input velocity: */ 49 GetSolutionFromInputsx(&ug, femmodel->elements, femmodel->nodes, femmodel->vertices,femmodel->loads, femmodel->materials, femmodel->parameters);49 GetSolutionFromInputsx(&ug,femmodel); 50 50 Reducevectorgtofx(&uf, ug, femmodel->nodes,femmodel->parameters); 51 51 52 52 //Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate) 53 InputUpdateFromConstantx(femmodel ->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum);54 InputUpdateFromSolutionx(femmodel ->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);53 InputUpdateFromConstantx(femmodel,converged,ConvergedEnum); 54 InputUpdateFromSolutionx(femmodel,ug); 55 55 56 56 for(;;){ … … 60 60 delete ug; 61 61 62 femmodel->SystemMatricesx(&Kff, &Kfs, &pf, &df, NULL);62 SystemMatricesx(&Kff,&Kfs,&pf,&df,NULL,femmodel); 63 63 CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type); 64 64 Reduceloadx(pf, Kfs, ys); delete Kfs; … … 67 67 68 68 convergence(&converged,Kff,pf,uf,old_uf,femmodel->parameters); delete Kff; delete pf; delete df; 69 InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum);70 InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);69 InputUpdateFromConstantx(femmodel,converged,ConvergedEnum); 70 InputUpdateFromSolutionx(femmodel,ug); 71 71 72 ConstraintsStatex(&constraints_converged, &num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);72 ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel); 73 73 if(VerboseConvergence()) _printf0_(" number of unstable constraints: " << num_unstable_constraints << "\n"); 74 74 … … 93 93 _printf0_(" maximum number of nonlinear iterations (" << max_nonlinear_iterations << ") exceeded\n"); 94 94 converged=true; 95 InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum);96 InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug);95 InputUpdateFromConstantx(femmodel,converged,ConvergedEnum); 96 InputUpdateFromSolutionx(femmodel,ug); 97 97 bool max_iteration_state=true; 98 98 int tempStep=1; -
issm/trunk/src/c/solutionsequences/solutionsequence_stokescoupling_nonlinear.cpp
r15104 r16137 1 /*!\file: solutionsequence_ stokescoupling_nonlinear.cpp2 * \brief: core of the coupling between stokes and macayealpattyn1 /*!\file: solutionsequence_FScoupling_nonlinear.cpp 2 * \brief: core of the coupling between FS and SSAHO 3 3 */ 4 4 … … 9 9 #include "../modules/modules.h" 10 10 11 void solutionsequence_ stokescoupling_nonlinear(FemModel* femmodel,bool conserve_loads){11 void solutionsequence_FScoupling_nonlinear(FemModel* femmodel,bool conserve_loads){ 12 12 13 13 /*intermediary: */ … … 35 35 36 36 /*Recover parameters: */ 37 femmodel->parameters->FindParam(&min_mechanical_constraints, DiagnosticRiftPenaltyThresholdEnum);38 femmodel->parameters->FindParam(&max_nonlinear_iterations, DiagnosticMaxiterEnum);37 femmodel->parameters->FindParam(&min_mechanical_constraints,StressbalanceRiftPenaltyThresholdEnum); 38 femmodel->parameters->FindParam(&max_nonlinear_iterations,StressbalanceMaxiterEnum); 39 39 femmodel->UpdateConstraintsx(); 40 40 … … 43 43 44 44 /*First get ug_horiz:*/ 45 femmodel->SetCurrentConfiguration( DiagnosticHorizAnalysisEnum);46 GetSolutionFromInputsx(&ug_horiz, femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters);45 femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum); 46 GetSolutionFromInputsx(&ug_horiz,femmodel); 47 47 Reducevectorgtofx(&uf_horiz, ug_horiz, femmodel->nodes,femmodel->parameters); 48 48 49 49 for(;;){ 50 50 51 /*First diagnostichoriz:*/52 femmodel->SetCurrentConfiguration( DiagnosticHorizAnalysisEnum);51 /*First stressbalance horiz:*/ 52 femmodel->SetCurrentConfiguration(StressbalanceAnalysisEnum); 53 53 femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum); 54 54 55 55 //Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate) 56 InputUpdateFromSolutionx(femmodel ->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_horiz);56 InputUpdateFromSolutionx(femmodel,ug_horiz); 57 57 delete ug_horiz; 58 58 … … 61 61 62 62 /*solve: */ 63 femmodel->SystemMatricesx(&Kff_horiz, &Kfs_horiz, &pf_horiz, &df_horiz, NULL);63 SystemMatricesx(&Kff_horiz, &Kfs_horiz, &pf_horiz, &df_horiz, NULL,femmodel); 64 64 CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type); 65 65 Reduceloadx(pf_horiz, Kfs_horiz, ys); delete Kfs_horiz; 66 66 Solverx(&uf_horiz, Kff_horiz, pf_horiz, old_uf_horiz, df_horiz,femmodel->parameters); 67 67 Mergesolutionfromftogx(&ug_horiz, uf_horiz,ys,femmodel->nodes,femmodel->parameters); delete ys; 68 InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_horiz);68 InputUpdateFromSolutionx(femmodel,ug_horiz); 69 69 70 70 convergence(&converged,Kff_horiz,pf_horiz,uf_horiz,old_uf_horiz,femmodel->parameters); delete Kff_horiz; delete pf_horiz; delete df_horiz; 71 71 72 72 /*Second compute vertical velocity: */ 73 femmodel->SetCurrentConfiguration( DiagnosticVertAnalysisEnum);73 femmodel->SetCurrentConfiguration(StressbalanceVerticalAnalysisEnum); 74 74 femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum); 75 75 76 76 /*solve: */ 77 femmodel->SystemMatricesx(&Kff_vert, &Kfs_vert, &pf_vert, &df_vert,NULL);77 SystemMatricesx(&Kff_vert, &Kfs_vert, &pf_vert, &df_vert,NULL,femmodel); 78 78 CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type); 79 79 Reduceloadx(pf_vert, Kfs_vert, ys); delete Kfs_vert; … … 82 82 delete uf_vert; 83 83 delete ys; 84 InputUpdateFromSolutionx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,ug_vert);84 InputUpdateFromSolutionx(femmodel,ug_vert); 85 85 delete ug_vert; 86 86 -
issm/trunk/src/c/solutionsequences/solutionsequence_thermal_nonlinear.cpp
r15104 r16137 41 41 converged=false; 42 42 43 InputUpdateFromConstantx(femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,true,ResetPenaltiesEnum);44 InputUpdateFromConstantx(femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,false,ConvergedEnum);43 InputUpdateFromConstantx(femmodel,true,ResetPenaltiesEnum); 44 InputUpdateFromConstantx(femmodel,false,ConvergedEnum); 45 45 femmodel->UpdateConstraintsx(); 46 46 47 47 for(;;){ 48 48 49 femmodel->SystemMatricesx(&Kff, &Kfs, &pf,&df, &melting_offset); 49 delete tf_old; tf_old=tf; 50 SystemMatricesx(&Kff, &Kfs, &pf,&df, &melting_offset,femmodel); 50 51 CreateNodalConstraintsx(&ys,femmodel->nodes,configuration_type); 51 Reduceloadx(pf, Kfs, ys); delete Kfs; delete tf;52 Reduceloadx(pf, Kfs, ys); delete Kfs; 52 53 Solverx(&tf, Kff, pf,tf_old, df, femmodel->parameters); 53 delete tf_old; tf_old=tf->Duplicate();54 54 delete Kff;delete pf;delete tg; delete df; 55 55 Mergesolutionfromftogx(&tg, tf,ys,femmodel->nodes,femmodel->parameters); delete ys; 56 InputUpdateFromSolutionx(femmodel ->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,tg);56 InputUpdateFromSolutionx(femmodel,tg); 57 57 58 ConstraintsStatex(&constraints_converged, &num_unstable_constraints, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);58 ConstraintsStatex(&constraints_converged,&num_unstable_constraints,femmodel); 59 59 60 60 if (!converged){ … … 68 68 count++; 69 69 70 InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,converged,ConvergedEnum);70 InputUpdateFromConstantx(femmodel,converged,ConvergedEnum); 71 71 72 72 if(converged)break; 73 73 } 74 74 75 InputUpdateFromSolutionx(femmodel ->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,tg);76 InputUpdateFromConstantx( femmodel->elements,femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,melting_offset,MeltingOffsetEnum);75 InputUpdateFromSolutionx(femmodel,tg); 76 InputUpdateFromConstantx(femmodel,melting_offset,MeltingOffsetEnum); 77 77 78 78 /*Free ressources: */ -
issm/trunk/src/c/solutionsequences/solutionsequences.h
r15055 r16137 16 16 void solutionsequence_nonlinear(FemModel* femmodel,bool conserve_loads); 17 17 void solutionsequence_newton(FemModel* femmodel); 18 void solutionsequence_ stokescoupling_nonlinear(FemModel* femmodel,bool conserve_loads);18 void solutionsequence_FScoupling_nonlinear(FemModel* femmodel,bool conserve_loads); 19 19 void solutionsequence_linear(FemModel* femmodel); 20 20 void solutionsequence_adjoint_linear(FemModel* femmodel);
Note:
See TracChangeset
for help on using the changeset viewer.