- Timestamp:
- 09/14/22 12:59:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp
r26325 r27282 10 10 #include "../modules.h" 11 11 12 void SetActiveNodesLSMx(FemModel* femmodel ){/*{{{*/12 void SetActiveNodesLSMx(FemModel* femmodel,bool ishydrology){/*{{{*/ 13 13 /* activate/deactivate nodes for levelset method according to IceMaskNodeActivation */ 14 14 15 /* find parameters */ 16 int domaintype; 17 femmodel->parameters->FindParam(&domaintype,DomainTypeEnum); 15 /*Determine which node activation mask to pull from*/ 16 int nodeactivationmask = IceMaskNodeActivationEnum; 17 if(ishydrology) nodeactivationmask = HydrologyMaskNodeActivationEnum; 18 18 19 19 20 for(Object* & object : femmodel->elements->objects){ … … 28 29 case TaylorHoodEnum:case XTaylorHoodEnum:case LATaylorHoodEnum: 29 30 case CrouzeixRaviartEnum:case LACrouzeixRaviartEnum:case OneLayerP4zEnum:{ 30 Input* input=element->GetInput( IceMaskNodeActivationEnum);31 if(!input) _error_("Input " << EnumToStringx( IceMaskNodeActivationEnum) << " not found in element");31 Input* input=element->GetInput(nodeactivationmask); 32 if(!input) _error_("Input " << EnumToStringx(nodeactivationmask) << " not found in element"); 32 33 33 34 /* Start looping on the number of vertices: */ … … 45 46 } 46 47 default: 47 element->GetInputListOnNodes(&mask[0], IceMaskNodeActivationEnum);48 element->GetInputListOnNodes(&mask[0],nodeactivationmask); 48 49 break; 49 50 } … … 58 59 }/*}}}*/ 59 60 60 void GetMaskOfIceVerticesLSMx0(FemModel* femmodel){/*{{{*/ 61 void GetMaskOfIceVerticesLSMx0(FemModel* femmodel,bool ishydrology){/*{{{*/ 62 63 /*Determine which node activation to construct*/ 64 int nodeactivationmask = IceMaskNodeActivationEnum; 65 if(ishydrology) nodeactivationmask = HydrologyMaskNodeActivationEnum; 61 66 62 67 /*Initialize vector with number of vertices*/ … … 68 73 69 74 /*Fill vector with values: */ 70 for(Object* & object : femmodel->elements->objects){ 71 Element* element=xDynamicCast<Element*>(object); 72 if(element->IsIceInElement()){ 73 int nbv = element->GetNumberOfVertices(); 74 for(int iv=0;iv<nbv;iv++){ 75 vec_mask_ice->SetValue(element->vertices[iv]->Pid(),1.,INS_VAL); 75 if(ishydrology){ 76 for(Object* & object : femmodel->elements->objects){ 77 Element* element=xDynamicCast<Element*>(object); 78 if(element->IsIceInElement()){ 79 int nbv = element->GetNumberOfVertices(); 80 for(int iv=0;iv<nbv;iv++){ 81 vec_mask_ice->SetValue(element->vertices[iv]->Pid(),1.,INS_VAL); 82 } 83 } 84 } 85 } 86 else{ 87 for(Object* & object : femmodel->elements->objects){ 88 Element* element=xDynamicCast<Element*>(object); 89 if(element->IsIceInElement() && element->IsGrounded()){ 90 int nbv = element->GetNumberOfVertices(); 91 for(int iv=0;iv<nbv;iv++){ 92 vec_mask_ice->SetValue(element->vertices[iv]->Pid(),1.,INS_VAL); 93 } 76 94 } 77 95 } … … 80 98 /*Assemble vector and serialize */ 81 99 vec_mask_ice->Assemble(); 82 InputUpdateFromVectorx(femmodel,vec_mask_ice, IceMaskNodeActivationEnum,VertexPIdEnum);100 InputUpdateFromVectorx(femmodel,vec_mask_ice,nodeactivationmask,VertexPIdEnum); 83 101 delete vec_mask_ice; 84 102 }/*}}}*/ 85 void GetMaskOfIceVerticesLSMx(FemModel* femmodel ){/*{{{*/103 void GetMaskOfIceVerticesLSMx(FemModel* femmodel,bool ishydrology){/*{{{*/ 86 104 87 femmodel->SetCurrentConfiguration(LevelsetAnalysisEnum); 105 /*Set configuration to levelset*/ 106 if(ishydrology){ 107 /*We may not be running with ismovingfront so we can't assume LevelsetAnalysis is active*/ 108 femmodel->SetCurrentConfiguration(HydrologyGlaDSAnalysisEnum); 109 } 110 else{ 111 femmodel->SetCurrentConfiguration(LevelsetAnalysisEnum); 112 } 113 114 /*Determine which node activation to construct*/ 115 int nodeactivationmask = IceMaskNodeActivationEnum; 116 if(ishydrology) nodeactivationmask = HydrologyMaskNodeActivationEnum; 88 117 89 118 /*Create vector on gset*/ … … 97 126 Element* element=xDynamicCast<Element*>(object); 98 127 99 if(element->IsIceInElement()){ 100 int numnodes = element->GetNumberOfNodes(); 101 int gsize_local=GetNumberOfDofs(element->nodes,numnodes,GsetEnum,NoneEnum); 102 int* glist_local=GetGlobalDofList(element->nodes,numnodes,GsetEnum,NoneEnum); 103 IssmDouble* ones = xNew<IssmDouble>(gsize_local); 104 for(int n=0;n<gsize_local;n++) ones[n] = 1.; 105 vec_mask_ice->SetValues(gsize_local,glist_local,ones,INS_VAL); 106 xDelete<IssmDouble>(ones); 107 xDelete<int>(glist_local); 128 if(ishydrology){ 129 if(element->IsIceInElement() && element->IsGrounded()){ 130 int numnodes = element->GetNumberOfNodes(); 131 int gsize_local=GetNumberOfDofs(element->nodes,numnodes,GsetEnum,NoneEnum); 132 int* glist_local=GetGlobalDofList(element->nodes,numnodes,GsetEnum,NoneEnum); 133 IssmDouble* ones = xNew<IssmDouble>(gsize_local); 134 for(int n=0;n<gsize_local;n++) ones[n] = 1.; 135 vec_mask_ice->SetValues(gsize_local,glist_local,ones,INS_VAL); 136 xDelete<IssmDouble>(ones); 137 xDelete<int>(glist_local); 138 } 139 } 140 else{ 141 if(element->IsIceInElement()){ 142 int numnodes = element->GetNumberOfNodes(); 143 int gsize_local=GetNumberOfDofs(element->nodes,numnodes,GsetEnum,NoneEnum); 144 int* glist_local=GetGlobalDofList(element->nodes,numnodes,GsetEnum,NoneEnum); 145 IssmDouble* ones = xNew<IssmDouble>(gsize_local); 146 for(int n=0;n<gsize_local;n++) ones[n] = 1.; 147 vec_mask_ice->SetValues(gsize_local,glist_local,ones,INS_VAL); 148 xDelete<IssmDouble>(ones); 149 xDelete<int>(glist_local); 150 } 108 151 } 109 152 } … … 120 163 for(Object* & object : femmodel->elements->objects){ 121 164 Element* element=xDynamicCast<Element*>(object); 122 element->InputUpdateFromSolutionOneDof(local_ug, IceMaskNodeActivationEnum);165 element->InputUpdateFromSolutionOneDof(local_ug,nodeactivationmask); 123 166 } 124 167
Note:
See TracChangeset
for help on using the changeset viewer.