Ice Sheet System Model  4.18
Code documentation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Functions
SetActiveNodesLSMx.h File Reference

header file for updating single point constraints for next time step More...

#include "../../classes/classes.h"

Go to the source code of this file.

Functions

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

Detailed Description

header file for updating single point constraints for next time step

Definition in file SetActiveNodesLSMx.h.

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