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

Go to the source code of this file.

Functions

void SetActiveNodesLSMx (FemModel *femmodel)
 
void GetMaskOfIceVerticesLSMx0 (FemModel *femmodel)
 
void GetMaskOfIceVerticesLSMx (FemModel *femmodel)
 

Function Documentation

◆ SetActiveNodesLSMx()

void SetActiveNodesLSMx ( FemModel femmodel)

Definition at line 12 of file SetActiveNodesLSMx.cpp.

12  {/*{{{*/
13  /* activate/deactivate nodes for levelset method according to IceMaskNodeActivation */
14 
15  /* find parameters */
16  int domaintype;
18 
19  for(int i=0;i<femmodel->elements->Size();i++){
20  Element *element = xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
21  int numnodes = element->GetNumberOfNodes();
22  IssmDouble *mask = xNew<IssmDouble>(numnodes);
23 
24  /*include switch for elements with multiple different sets of nodes*/
25  switch(element->GetElementType()){
26  case MINIEnum:case MINIcondensedEnum:
30  if(!input) _error_("Input " << EnumToStringx(IceMaskNodeActivationEnum) << " not found in element");
31 
32  /* Start looping on the number of vertices: */
33  Gauss* gauss=element->NewGauss();
34  for(int iv=0;iv<element->NumberofNodesVelocity();iv++){
35  gauss->GaussNode(element->VelocityInterpolation(),iv);
36  input->GetInputValue(&mask[iv],gauss);
37  }
38  for(int iv=0;iv<element->NumberofNodesPressure();iv++){
39  gauss->GaussNode(element->PressureInterpolation(),iv);
40  input->GetInputValue(&mask[element->NumberofNodesVelocity()+iv],gauss);
41  }
42  delete gauss;
43  break;
44  }
45  default:
47  break;
48  }
49 
50  for(int in=0;in<numnodes;in++){
51  Node* node=element->GetNode(in);
52  if(mask[in]==1.) node->Activate();
53  else node->Deactivate();
54  }
55  xDelete<IssmDouble>(mask);
56  }
57 }/*}}}*/

◆ GetMaskOfIceVerticesLSMx0()

void GetMaskOfIceVerticesLSMx0 ( FemModel femmodel)

Definition at line 59 of file SetActiveNodesLSMx.cpp.

59  {/*{{{*/
60 
61  /*Initialize vector with number of vertices*/
62  int numvertices=femmodel->vertices->NumberOfVertices();
63  if(numvertices==0) return;
64  Vector<IssmDouble>* vec_mask_ice=new Vector<IssmDouble>(numvertices);
65 
66  /*Fill vector with values: */
67  for(int i=0;i<femmodel->elements->Size();i++){
68  Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
69  if(element->IsIceInElement()){
70  int nbv = element->GetNumberOfVertices();
71  for(int iv=0;iv<nbv;iv++){
72  vec_mask_ice->SetValue(element->vertices[iv]->Sid(),1.,INS_VAL);
73  }
74  }
75  }
76 
77  /*Assemble vector and serialize */
78  vec_mask_ice->Assemble();
80  delete vec_mask_ice;
81 }/*}}}*/

◆ GetMaskOfIceVerticesLSMx()

void GetMaskOfIceVerticesLSMx ( FemModel femmodel)

Definition at line 82 of file SetActiveNodesLSMx.cpp.

82  {/*{{{*/
83 
85 
86  /*Create vector on gset*/
87  int gsize = femmodel->nodes->NumberOfDofs(GsetEnum);
88  int glocalsize_masters = femmodel->nodes->NumberOfDofsLocal(GsetEnum);
89  if(gsize==0) return;
90  Vector<IssmDouble>* vec_mask_ice=new Vector<IssmDouble>(glocalsize_masters,gsize);
91 
92  /*Fill vector with values: */
93  for(int i=0;i<femmodel->elements->Size();i++){
94  Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
95 
96  if(element->IsIceInElement()){
97  int numnodes = element->GetNumberOfNodes();
98  int gsize_local=GetNumberOfDofs(element->nodes,numnodes,GsetEnum,NoneEnum);
99  int* glist_local=GetGlobalDofList(element->nodes,numnodes,GsetEnum,NoneEnum);
100  IssmDouble* ones = xNew<IssmDouble>(gsize_local);
101  for(int n=0;n<gsize_local;n++) ones[n] = 1.;
102  vec_mask_ice->SetValues(gsize_local,glist_local,ones,INS_VAL);
103  xDelete<IssmDouble>(ones);
104  xDelete<int>(glist_local);
105  }
106  }
107 
108  /*Assemble vector and serialize */
109  vec_mask_ice->Assemble();
110 
111  /*Get local vector with masters and slaves*/
112  IssmDouble *local_ug = NULL;
113  femmodel->GetLocalVectorWithClonesGset(&local_ug,vec_mask_ice);
114  delete vec_mask_ice;
115 
116  /*Now update inputs (analysis specific)*/
117  for(int i=0;i<femmodel->elements->Size();i++){
118  Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
120  }
121 
122  /*cleanup and return*/
123  xDelete<IssmDouble>(local_ug);
124 }/*}}}*/
DataSet::Size
int Size()
Definition: DataSet.cpp:399
CrouzeixRaviartEnum
@ CrouzeixRaviartEnum
Definition: EnumDefinitions.h:1023
Element::GetElementType
virtual int GetElementType(void)=0
Element::GetInputListOnNodes
void GetInputListOnNodes(IssmDouble *pvalue, int enumtype)
Definition: Element.cpp:1106
FemModel::vertices
Vertices * vertices
Definition: FemModel.h:49
IssmDouble
double IssmDouble
Definition: types.h:37
Element::GetNumberOfNodes
virtual int GetNumberOfNodes(void)=0
FemModel::GetLocalVectorWithClonesGset
void GetLocalVectorWithClonesGset(IssmDouble **plocal_ug, Vector< IssmDouble > *ug)
Definition: FemModel.cpp:1337
FemModel::parameters
Parameters * parameters
Definition: FemModel.h:46
Element::PressureInterpolation
virtual int PressureInterpolation()=0
MINIEnum
@ MINIEnum
Definition: EnumDefinitions.h:1156
Vertices::NumberOfVertices
int NumberOfVertices(void)
Definition: Vertices.cpp:255
Element::vertices
Vertex ** vertices
Definition: Element.h:49
IceMaskNodeActivationEnum
@ IceMaskNodeActivationEnum
Definition: EnumDefinitions.h:627
Gauss::GaussNode
virtual void GaussNode(int finitelement, int iv)=0
Element::GetInput2
virtual Input2 * GetInput2(int inputenum)=0
Element::nodes
Node ** nodes
Definition: Element.h:48
Element
Definition: Element.h:41
TaylorHoodEnum
@ TaylorHoodEnum
Definition: EnumDefinitions.h:1299
Nodes::NumberOfDofsLocal
int NumberOfDofsLocal(int setenum)
Definition: Nodes.cpp:326
LATaylorHoodEnum
@ LATaylorHoodEnum
Definition: EnumDefinitions.h:1139
VertexSIdEnum
@ VertexSIdEnum
Definition: EnumDefinitions.h:1325
GetGlobalDofList
int * GetGlobalDofList(Node **nodes, int numnodes, int setenum, int approximation)
Definition: Node.cpp:1035
Vector::SetValues
void SetValues(int ssize, int *list, doubletype *values, InsMode mode)
Definition: Vector.h:153
DomainTypeEnum
@ DomainTypeEnum
Definition: EnumDefinitions.h:124
FemModel::nodes
Nodes * nodes
Definition: FemModel.h:56
InputUpdateFromVectorx
void InputUpdateFromVectorx(FemModel *femmodel, Vector< IssmDouble > *vector, int name, int type)
Definition: InputUpdateFromVectorx.cpp:9
Element::NewGauss
virtual Gauss * NewGauss(void)=0
Element::InputUpdateFromSolutionOneDof
virtual void InputUpdateFromSolutionOneDof(IssmDouble *solution, int inputenum)=0
EnumToStringx
const char * EnumToStringx(int enum_in)
Definition: EnumToStringx.cpp:15
LevelsetAnalysisEnum
@ LevelsetAnalysisEnum
Definition: EnumDefinitions.h:1141
OneLayerP4zEnum
@ OneLayerP4zEnum
Definition: EnumDefinitions.h:1208
GsetEnum
@ GsetEnum
Definition: EnumDefinitions.h:1093
Element::GetNode
Node * GetNode(int nodeindex)
Definition: Element.cpp:1207
MINIcondensedEnum
@ MINIcondensedEnum
Definition: EnumDefinitions.h:1157
INS_VAL
@ INS_VAL
Definition: toolkitsenums.h:14
Element::NumberofNodesPressure
virtual int NumberofNodesPressure(void)=0
FemModel::elements
Elements * elements
Definition: FemModel.h:44
Vector::Assemble
void Assemble(void)
Definition: Vector.h:142
Input2
Definition: Input2.h:18
LACrouzeixRaviartEnum
@ LACrouzeixRaviartEnum
Definition: EnumDefinitions.h:1138
Element::IsIceInElement
bool IsIceInElement()
Definition: Element.cpp:2021
Node
Definition: Node.h:23
NoneEnum
@ NoneEnum
Definition: EnumDefinitions.h:1202
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
Node::Deactivate
void Deactivate(void)
Definition: Node.cpp:681
DataSet::GetObjectByOffset
Object * GetObjectByOffset(int offset)
Definition: DataSet.cpp:334
FemModel::SetCurrentConfiguration
void SetCurrentConfiguration(int configuration_type)
Definition: FemModel.cpp:634
Element::VelocityInterpolation
virtual int VelocityInterpolation()=0
Parameters::FindParam
void FindParam(bool *pinteger, int enum_type)
Definition: Parameters.cpp:262
Input2::GetInputValue
virtual void GetInputValue(IssmDouble *pvalue, Gauss *gauss)
Definition: Input2.h:38
Element::GetNumberOfVertices
virtual int GetNumberOfVertices(void)=0
Nodes::NumberOfDofs
int NumberOfDofs(int setenum)
Definition: Nodes.cpp:314
Vector< IssmDouble >
Gauss
Definition: Gauss.h:8
Vector::SetValue
void SetValue(int dof, doubletype value, InsMode mode)
Definition: Vector.h:163
GetNumberOfDofs
int GetNumberOfDofs(Node **nodes, int numnodes, int setenum, int approximation)
Definition: Node.cpp:1129
Vertex::Sid
int Sid(void)
Definition: Vertex.cpp:168
XTaylorHoodEnum
@ XTaylorHoodEnum
Definition: EnumDefinitions.h:1329
Element::NumberofNodesVelocity
virtual int NumberofNodesVelocity(void)=0
Node::Activate
void Activate(void)
Definition: Node.cpp:632
femmodel
FemModel * femmodel
Definition: esmfbinders.cpp:16