Ice Sheet System Model  4.18
Code documentation
Functions
solutionsequence_stokescoupling_nonlinear.cpp File Reference
#include "./solutionsequences.h"
#include "../toolkits/toolkits.h"
#include "../classes/classes.h"
#include "../shared/shared.h"
#include "../modules/modules.h"

Go to the source code of this file.

Functions

void solutionsequence_FScoupling_nonlinear (FemModel *femmodel, bool conserve_loads)
 

Function Documentation

◆ solutionsequence_FScoupling_nonlinear()

void solutionsequence_FScoupling_nonlinear ( FemModel femmodel,
bool  conserve_loads 
)

Definition at line 11 of file solutionsequence_stokescoupling_nonlinear.cpp.

11  {
12 
13  /*intermediary: */
14  Matrix<IssmDouble> *Kff_horiz = NULL;
15  Matrix<IssmDouble> *Kfs_horiz = NULL;
16  Vector<IssmDouble> *ug_horiz = NULL;
17  Vector<IssmDouble> *uf_horiz = NULL;
18  Vector<IssmDouble> *old_uf_horiz = NULL;
19  Vector<IssmDouble> *pf_horiz = NULL;
20  Vector<IssmDouble> *df_horiz = NULL;
21  Matrix<IssmDouble> *Kff_vert = NULL;
22  Matrix<IssmDouble> *Kfs_vert = NULL;
23  Vector<IssmDouble> *ug_vert = NULL;
24  Vector<IssmDouble> *uf_vert = NULL;
25  Vector<IssmDouble> *pf_vert = NULL;
26  Vector<IssmDouble> *df_vert = NULL;
27  Vector<IssmDouble> *ys = NULL;
28  bool converged;
29  int count;
30 
31  /*parameters:*/
32  int min_mechanical_constraints;
33  int max_nonlinear_iterations;
34  IssmDouble eps_res,eps_rel,eps_abs;
35 
36  /*Recover parameters: */
38  femmodel->parameters->FindParam(&max_nonlinear_iterations,StressbalanceMaxiterEnum);
43 
44  count=1;
45  converged=false;
46 
47  /*First get ug_horiz:*/
50  Reducevectorgtofx(&uf_horiz, ug_horiz, femmodel->nodes,femmodel->parameters);
51 
52  for(;;){
53 
54  /*First stressbalance horiz:*/
56 
57  //Update once again the solution to make sure that vx and vxold are similar (for next step in transient or steadystate)
59  delete ug_horiz;
60 
61  //save pointer to old velocity
62  delete old_uf_horiz; old_uf_horiz=uf_horiz;
63 
64  /*solve: */
65  SystemMatricesx(&Kff_horiz, &Kfs_horiz, &pf_horiz, &df_horiz, NULL,femmodel);
67  Reduceloadx(pf_horiz, Kfs_horiz, ys); delete Kfs_horiz;
69  Solverx(&uf_horiz, Kff_horiz, pf_horiz, old_uf_horiz, df_horiz,femmodel->parameters);
71  Mergesolutionfromftogx(&ug_horiz, uf_horiz,ys,femmodel->nodes,femmodel->parameters); delete ys;
73 
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;
75 
76  /*Second compute vertical velocity: */
78 
79  /*solve: */
80  SystemMatricesx(&Kff_vert, &Kfs_vert, &pf_vert, &df_vert,NULL,femmodel);
82  Reduceloadx(pf_vert, Kfs_vert, ys); delete Kfs_vert;
84  Solverx(&uf_vert, Kff_vert, pf_vert, NULL, df_vert,femmodel->parameters); delete Kff_vert; delete pf_vert; delete df_vert;
87  delete uf_vert;
88  delete ys;
90  delete ug_vert;
91 
92  /*Increase count: */
93  count++;
94  if(converged==true)break;
95  if(count>=max_nonlinear_iterations){
96  _printf0_(" maximum number of iterations (" << max_nonlinear_iterations << ") exceeded\n");
97  break;
98  }
99  }
100 
101  /*clean-up*/
102  delete old_uf_horiz;
103  delete uf_horiz;
104  delete ug_horiz;
105 }
Matrix< IssmDouble >
SOLVER
#define SOLVER
Definition: Profiler.h:16
Mergesolutionfromftogx
void Mergesolutionfromftogx(Vector< IssmDouble > **pug, Vector< IssmDouble > *uf, Vector< IssmDouble > *ys, Nodes *nodes, Parameters *parameters, bool flag_ys0)
Definition: Mergesolutionfromftogx.cpp:8
IssmDouble
double IssmDouble
Definition: types.h:37
_printf0_
#define _printf0_(StreamArgs)
Definition: Print.h:29
StressbalanceAnalysisEnum
@ StressbalanceAnalysisEnum
Definition: EnumDefinitions.h:1285
FemModel::parameters
Parameters * parameters
Definition: FemModel.h:46
Solverx
void Solverx(Vector< IssmDouble > **puf, Matrix< IssmDouble > *Kff, Vector< IssmDouble > *pf, Vector< IssmDouble > *uf0, Vector< IssmDouble > *df, Parameters *parameters)
Definition: Solverx.cpp:15
StressbalanceRiftPenaltyThresholdEnum
@ StressbalanceRiftPenaltyThresholdEnum
Definition: EnumDefinitions.h:413
StressbalanceMaxiterEnum
@ StressbalanceMaxiterEnum
Definition: EnumDefinitions.h:407
FemModel::UpdateConstraintsx
void UpdateConstraintsx(void)
Definition: FemModel.cpp:3027
FemModel::nodes
Nodes * nodes
Definition: FemModel.h:56
StressbalanceAbstolEnum
@ StressbalanceAbstolEnum
Definition: EnumDefinitions.h:404
StressbalanceReltolEnum
@ StressbalanceReltolEnum
Definition: EnumDefinitions.h:410
Profiler::Stop
void Stop(int tagenum, bool dontmpisync=true)
Definition: Profiler.cpp:179
Reducevectorgtofx
void Reducevectorgtofx(Vector< IssmDouble > **puf, Vector< IssmDouble > *ug, Nodes *nodes, Parameters *parameters)
Definition: Reducevectorgtofx.cpp:8
Reduceloadx
void Reduceloadx(Vector< IssmDouble > *pf, Matrix< IssmDouble > *Kfs, Vector< IssmDouble > *y_s, bool flag_ys0)
Definition: Reduceloadx.cpp:14
StressbalanceVerticalAnalysisEnum
@ StressbalanceVerticalAnalysisEnum
Definition: EnumDefinitions.h:1289
Profiler::Start
void Start(int tagenum, bool dontmpisync=true)
Definition: Profiler.cpp:139
InputUpdateFromSolutionx
void InputUpdateFromSolutionx(FemModel *femmodel, Vector< IssmDouble > *solution)
Definition: InputUpdateFromSolutionx.cpp:9
StressbalanceRestolEnum
@ StressbalanceRestolEnum
Definition: EnumDefinitions.h:412
GetSolutionFromInputsx
void GetSolutionFromInputsx(Vector< IssmDouble > **psolution, FemModel *femmodel)
Definition: GetSolutionFromInputsx.cpp:9
FemModel::SetCurrentConfiguration
void SetCurrentConfiguration(int configuration_type)
Definition: FemModel.cpp:634
Parameters::FindParam
void FindParam(bool *pinteger, int enum_type)
Definition: Parameters.cpp:262
CreateNodalConstraintsx
void CreateNodalConstraintsx(Vector< IssmDouble > **pys, Nodes *nodes)
Definition: CreateNodalConstraintsx.cpp:10
SystemMatricesx
void SystemMatricesx(Matrix< IssmDouble > **pKff, Matrix< IssmDouble > **pKfs, Vector< IssmDouble > **ppf, Vector< IssmDouble > **pdf, IssmDouble *pkmax, FemModel *femmodel, bool isAllocated)
Definition: SystemMatricesx.cpp:10
convergence
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)
Definition: convergence.cpp:9
FemModel::profiler
Profiler * profiler
Definition: FemModel.h:42
Vector< IssmDouble >
femmodel
FemModel * femmodel
Definition: esmfbinders.cpp:16