Ice Sheet System Model  4.18
Code documentation
Functions
stressbalance_core.cpp File Reference

: core of the stressbalance solution More...

#include "./cores.h"
#include "../toolkits/toolkits.h"
#include "../classes/classes.h"
#include "../analyses/analyses.h"
#include "../shared/shared.h"
#include "../modules/modules.h"
#include "../solutionsequences/solutionsequences.h"

Go to the source code of this file.

Functions

void stressbalance_core (FemModel *femmodel)
 

Detailed Description

: core of the stressbalance solution

Definition in file stressbalance_core.cpp.

Function Documentation

◆ stressbalance_core()

void stressbalance_core ( FemModel femmodel)

Definition at line 13 of file stressbalance_core.cpp.

13  {
14 
15  /*Start profiler*/
17 
18  /*parameters: */
19  bool dakota_analysis,control_analysis;
20  int domaintype;
21  bool isSIA,isSSA,isL1L2,isHO,isFS;
22  bool save_results;
23  int solution_type;
24  int numoutputs = 0;
25  char **requested_outputs = NULL;
26  Analysis *analysis = NULL;
27 
28  /* recover parameters:*/
39  if(numoutputs) femmodel->parameters->FindParam(&requested_outputs,&numoutputs,StressbalanceRequestedOutputsEnum);
40 
41  if(VerboseSolution()) _printf0_(" computing new velocity\n");
42  /*Compute slopes if necessary */
43  if(isSIA || (isFS && domaintype==Domain2DverticalEnum)) surfaceslope_core(femmodel);
44  if(isFS){
45  /*We need bed slopoes for the non-penetration condition*/
49 
50  /*We need basal melt rates for the shelf dampening*/
52  }
53 
54  /*Compute SIA velocities*/
55  if(isSIA){
56 
57  /*Take the last velocity into account so that the velocity on the SSA domain is not zero*/
58  if(isSSA || isL1L2 || isHO ){
61  }
62 
63  analysis = new StressbalanceSIAAnalysis();
64  analysis->Core(femmodel);
65  delete analysis;
66 
67  /*Reset velocities for other ice flow models*/
68  if(isSSA || isL1L2 || isHO){
71  }
72  }
73 
74  /*Compute stressbalance for SSA L1L2 HO and FS*/
75  if(isSSA || isL1L2 || isHO || isFS){
76  analysis = new StressbalanceAnalysis();
77  analysis->Core(femmodel);
78  delete analysis;
79  }
80 
81  /*Compute vertical velocities*/
82  if (domaintype==Domain3DEnum && (isSIA || isSSA || isL1L2 || isHO)){
83 
84  /*We need basal melt rates for vertical velocity*/
86 
87  analysis = new StressbalanceVerticalAnalysis();
88  analysis->Core(femmodel);
89  delete analysis;
90  }
91 
92  if(save_results){
93  if(VerboseSolution()) _printf0_(" saving stressbalance results\n");
94  femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs);
95  if(VerboseSolution()) _printf0_(" results saved\n");
96  }
97 
98  if(solution_type==StressbalanceSolutionEnum && !control_analysis)femmodel->RequestedDependentsx();
99 
100  /*Free ressources:*/
101  if(numoutputs){for(int i=0;i<numoutputs;i++){xDelete<char>(requested_outputs[i]);} xDelete<char*>(requested_outputs);}
102 
103  /*End profiler*/
105 }
StressbalanceAnalysis
Definition: StressbalanceAnalysis.h:11
SaveResultsEnum
@ SaveResultsEnum
Definition: EnumDefinitions.h:302
FemModel::vertices
Vertices * vertices
Definition: FemModel.h:49
Analysis::Core
virtual void Core(FemModel *femmodel)=0
StressbalanceSIAAnalysis
Definition: StressbalanceSIAAnalysis.h:11
_printf0_
#define _printf0_(StreamArgs)
Definition: Print.h:29
StressbalanceAnalysisEnum
@ StressbalanceAnalysisEnum
Definition: EnumDefinitions.h:1285
FlowequationIsSSAEnum
@ FlowequationIsSSAEnum
Definition: EnumDefinitions.h:142
FemModel::parameters
Parameters * parameters
Definition: FemModel.h:46
InversionIscontrolEnum
@ InversionIscontrolEnum
Definition: EnumDefinitions.h:218
FemModel::results
Results * results
Definition: FemModel.h:48
FemModel::RequestedDependentsx
void RequestedDependentsx(void)
Definition: FemModel.cpp:2220
ResetBoundaryConditions
void ResetBoundaryConditions(FemModel *femmodel, int analysis_type)
Definition: ResetBoundaryConditions.cpp:9
StressbalanceVerticalAnalysis
Definition: StressbalanceVerticalAnalysis.h:11
DomainTypeEnum
@ DomainTypeEnum
Definition: EnumDefinitions.h:124
FemModel::nodes
Nodes * nodes
Definition: FemModel.h:56
ResetFSBasalBoundaryConditionx
void ResetFSBasalBoundaryConditionx(Elements *elements, Nodes *nodes, Vertices *vertices, Loads *loads, Materials *materials, Parameters *parameters)
Definition: ResetFSBasalBoundaryConditionx.cpp:9
FemModel::materials
Materials * materials
Definition: FemModel.h:45
StressbalanceSolutionEnum
@ StressbalanceSolutionEnum
Definition: EnumDefinitions.h:1288
SolutionTypeEnum
@ SolutionTypeEnum
Definition: EnumDefinitions.h:398
FemModel::loads
Loads * loads
Definition: FemModel.h:54
Profiler::Stop
void Stop(int tagenum, bool dontmpisync=true)
Definition: Profiler.cpp:179
Domain3DEnum
@ Domain3DEnum
Definition: EnumDefinitions.h:536
FemModel::elements
Elements * elements
Definition: FemModel.h:44
surfaceslope_core
void surfaceslope_core(FemModel *femmodel)
Definition: surfaceslope_core.cpp:12
bmb_core
void bmb_core(FemModel *femmodel)
Definition: bmb_core.cpp:12
StressbalanceSIAAnalysisEnum
@ StressbalanceSIAAnalysisEnum
Definition: EnumDefinitions.h:1287
StressbalanceRequestedOutputsEnum
@ StressbalanceRequestedOutputsEnum
Definition: EnumDefinitions.h:411
StressbalanceNumRequestedOutputsEnum
@ StressbalanceNumRequestedOutputsEnum
Definition: EnumDefinitions.h:408
FlowequationIsFSEnum
@ FlowequationIsFSEnum
Definition: EnumDefinitions.h:138
Profiler::Start
void Start(int tagenum, bool dontmpisync=true)
Definition: Profiler.cpp:139
VerboseSolution
bool VerboseSolution(void)
Definition: Verbosity.cpp:24
FemModel::RequestedOutputsx
void RequestedOutputsx(Results **presults, char **requested_outputs, int numoutputs, bool save_results=true)
Definition: FemModel.cpp:2267
FemModel::SetCurrentConfiguration
void SetCurrentConfiguration(int configuration_type)
Definition: FemModel.cpp:634
STRESSBALANCECORE
#define STRESSBALANCECORE
Definition: Profiler.h:20
Parameters::FindParam
void FindParam(bool *pinteger, int enum_type)
Definition: Parameters.cpp:262
bedslope_core
void bedslope_core(FemModel *femmodel)
Definition: bedslope_core.cpp:12
Domain2DverticalEnum
@ Domain2DverticalEnum
Definition: EnumDefinitions.h:535
FemModel::profiler
Profiler * profiler
Definition: FemModel.h:42
FlowequationIsSIAEnum
@ FlowequationIsSIAEnum
Definition: EnumDefinitions.h:141
Analysis
Definition: Analysis.h:30
FlowequationIsHOEnum
@ FlowequationIsHOEnum
Definition: EnumDefinitions.h:139
FlowequationIsL1L2Enum
@ FlowequationIsL1L2Enum
Definition: EnumDefinitions.h:140
femmodel
FemModel * femmodel
Definition: esmfbinders.cpp:16