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

Go to the source code of this file.

Functions

void movingfront_core (FemModel *femmodel)
 

Function Documentation

◆ movingfront_core()

void movingfront_core ( FemModel femmodel)

Definition at line 12 of file movingfront_core.cpp.

12  {
13 
14  /*Start profiler*/
16 
17  /* intermediaries */
18  bool save_results,isstressbalance,ismasstransport,isthermal,isenthalpy,islevelset,ismovingfront,killicebergs;
19  int domaintype, num_extrapol_vars, index,reinit_frequency,step;
20  int* extrapol_vars=NULL;
21  Analysis *analysis=NULL;
22 
23  /* recover parameters */
33  if(isthermal && domaintype==Domain3DEnum) femmodel->parameters->FindParam(&isenthalpy,ThermalIsenthalpyEnum);
34 
35  if(!ismovingfront) return;
36 
37  /* start the work from here */
40  if(VerboseSolution()) _printf0_(" computing level set transport\n");
41 
42  /* smoothen slope of lsf for computation of normal on ice domain*/
44 
45  /* determine variables for extrapolation */
46  num_extrapol_vars=0;
47  if(isstressbalance){
48  if(domaintype==Domain3DEnum)
49  num_extrapol_vars+=3;
50  else
51  num_extrapol_vars+=2;
52  }
53  if(ismasstransport) num_extrapol_vars+=1;
54  if(isthermal && domaintype==Domain3DEnum) num_extrapol_vars+=1;
55  extrapol_vars=xNew<int>(num_extrapol_vars);
56  index=0;
57  if(isstressbalance){
58  extrapol_vars[index]=VxEnum; index++;
59  extrapol_vars[index]=VyEnum; index++;
60  if(domaintype==Domain3DEnum){
61  extrapol_vars[index]=VzEnum; index++;
62  }
63  }
64  if(ismasstransport){
65  extrapol_vars[index]=ThicknessEnum; index++;
66  }
67  if(isthermal && domaintype==Domain3DEnum){
68  if(isenthalpy){
69  extrapol_vars[index]=EnthalpyEnum;
70  }
71  else{
72  extrapol_vars[index]=TemperatureEnum;
73  }
74  index++;
75  }
76 
77  /* extrapolate */
78  analysis = new ExtrapolationAnalysis();
79  for(int iv=0;iv<num_extrapol_vars;iv++){
81  analysis->Core(femmodel);
82  }
83  xDelete<int>(extrapol_vars);
84  delete analysis;
85 
86  /* solve level set equation */
87  analysis = new LevelsetAnalysis();
88  analysis->Core(femmodel);
89  delete analysis;
90 
91  /*Kill ice berg to avoid free body motion*/
92  if(killicebergs){
93  if(VerboseSolution()) _printf0_(" looking for icebergs to kill\n");
95  }
96 
97  /*Reset levelset if needed*/
98  if(reinit_frequency && (step%reinit_frequency==0)){
99  if(VerboseSolution()) _printf0_(" reinitializing level set\n");
101  }
102 
103  /* update vertices included for next calculation */
105 
106  /* add computation domain mask to outputs */
107  if(save_results){
108  int outputs[1] = {IceMaskNodeActivationEnum};
109  femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1);
110  }
111 
112  /*End profiler*/
114 }
SaveResultsEnum
@ SaveResultsEnum
Definition: EnumDefinitions.h:302
Analysis::Core
virtual void Core(FemModel *femmodel)=0
TransientIsmasstransportEnum
@ TransientIsmasstransportEnum
Definition: EnumDefinitions.h:449
_printf0_
#define _printf0_(StreamArgs)
Definition: Print.h:29
StepEnum
@ StepEnum
Definition: EnumDefinitions.h:403
LevelsetReinitFrequencyEnum
@ LevelsetReinitFrequencyEnum
Definition: EnumDefinitions.h:228
ExtrapolationAnalysis
Definition: ExtrapolationAnalysis.h:11
FemModel::parameters
Parameters * parameters
Definition: FemModel.h:46
FemModel::results
Results * results
Definition: FemModel.h:48
IceMaskNodeActivationEnum
@ IceMaskNodeActivationEnum
Definition: EnumDefinitions.h:627
EnthalpyEnum
@ EnthalpyEnum
Definition: EnumDefinitions.h:551
VyEnum
@ VyEnum
Definition: EnumDefinitions.h:850
Parameters::SetParam
void SetParam(bool boolean, int enum_type)
Definition: Parameters.cpp:441
ExtrapolationVariableEnum
@ ExtrapolationVariableEnum
Definition: EnumDefinitions.h:135
DomainTypeEnum
@ DomainTypeEnum
Definition: EnumDefinitions.h:124
KillIcebergsx
void KillIcebergsx(FemModel *femmodel)
Definition: KillIcebergsx.cpp:11
VzEnum
@ VzEnum
Definition: EnumDefinitions.h:853
ThermalIsenthalpyEnum
@ ThermalIsenthalpyEnum
Definition: EnumDefinitions.h:417
MOVINGFRONTCORE
#define MOVINGFRONTCORE
Definition: Profiler.h:22
GetMaskOfIceVerticesLSMx
void GetMaskOfIceVerticesLSMx(FemModel *femmodel)
Definition: SetActiveNodesLSMx.cpp:82
Profiler::Stop
void Stop(int tagenum, bool dontmpisync=true)
Definition: Profiler.cpp:179
TransientIsthermalEnum
@ TransientIsthermalEnum
Definition: EnumDefinitions.h:455
Domain3DEnum
@ Domain3DEnum
Definition: EnumDefinitions.h:536
LevelsetAnalysis
Definition: LevelsetAnalysis.h:11
TransientIsstressbalanceEnum
@ TransientIsstressbalanceEnum
Definition: EnumDefinitions.h:454
LevelsetKillIcebergsEnum
@ LevelsetKillIcebergsEnum
Definition: EnumDefinitions.h:227
TemperatureEnum
@ TemperatureEnum
Definition: EnumDefinitions.h:831
FemModel::ResetLevelset
void ResetLevelset()
Definition: FemModel.cpp:2545
Profiler::Start
void Start(int tagenum, bool dontmpisync=true)
Definition: Profiler.cpp:139
VerboseSolution
bool VerboseSolution(void)
Definition: Verbosity.cpp:24
VxEnum
@ VxEnum
Definition: EnumDefinitions.h:846
TransientIsmovingfrontEnum
@ TransientIsmovingfrontEnum
Definition: EnumDefinitions.h:450
FemModel::RequestedOutputsx
void RequestedOutputsx(Results **presults, char **requested_outputs, int numoutputs, bool save_results=true)
Definition: FemModel.cpp:2267
Parameters::FindParam
void FindParam(bool *pinteger, int enum_type)
Definition: Parameters.cpp:262
levelsetfunctionslope_core
void levelsetfunctionslope_core(FemModel *femmodel)
Definition: levelsetfunctionslope_core.cpp:12
ThicknessEnum
@ ThicknessEnum
Definition: EnumDefinitions.h:840
Calvingx
void Calvingx(FemModel *femmodel)
Definition: Calvingx.cpp:9
FemModel::profiler
Profiler * profiler
Definition: FemModel.h:42
FrontalForcingsx
void FrontalForcingsx(FemModel *femmodel)
Definition: FrontalForcingsx.cpp:9
Analysis
Definition: Analysis.h:30
femmodel
FemModel * femmodel
Definition: esmfbinders.cpp:16