Changeset 24434
- Timestamp:
- 12/05/19 11:30:04 (5 years ago)
- Location:
- issm/trunk-jpl/src/c/classes/Elements
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r24431 r24434 1108 1108 /*}}}*/ 1109 1109 void Element::GetInputListOnNodes(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue){/*{{{*/ 1110 1111 _assert_(pvalue);1112 1113 1110 Input2 *input = this->GetInput2(enumtype); 1114 int numnodes = this->GetNumberOfNodes(); 1115 1116 /* Start looping on the number of vertices: */ 1117 if(input){ 1118 Gauss* gauss=this->NewGauss(); 1119 for(int iv=0;iv<numnodes;iv++){ 1120 gauss->GaussNode(this->FiniteElement(),iv); 1121 input->GetInputValue(&pvalue[iv],gauss); 1122 } 1123 delete gauss; 1124 } 1125 else{ 1126 for(int iv=0;iv<numnodes;iv++) pvalue[iv]=defaultvalue; 1127 } 1111 this->GetInputListOnNodes(pvalue,input,defaultvalue); 1128 1112 } 1129 1113 /*}}}*/ 1130 1114 void Element::GetInputListOnNodes(IssmDouble* pvalue,int enumtype){/*{{{*/ 1131 1115 1132 _assert_(pvalue);1133 1134 int numnodes = this->GetNumberOfNodes();1135 1116 Input2 *input = this->GetInput2(enumtype); 1136 1117 if(!input) _error_("Input " << EnumToStringx(enumtype) << " not found in element"); 1137 1138 /* Start looping on the number of vertices: */ 1139 Gauss* gauss=this->NewGauss(); 1140 for(int iv=0;iv<numnodes;iv++){ 1141 gauss->GaussNode(this->FiniteElement(),iv); 1142 input->GetInputValue(&pvalue[iv],gauss); 1143 } 1144 delete gauss; 1118 this->GetInputListOnNodes(pvalue,input,0.); 1119 1145 1120 } 1146 1121 /*}}}*/ … … 1162 1137 } 1163 1138 /*}}}*/ 1164 void Element::GetInputListOnVertices(IssmDouble* pvalue,ElementInput2* input){/*{{{*/1165 1166 /*Fetch number vertices for this element*/1167 const int NUM_VERTICES = this->GetNumberOfVertices();1168 1169 /*Checks in debugging mode*/1170 _assert_(input);1171 _assert_(pvalue);1172 1173 /* Start looping on the number of vertices: */1174 Gauss*gauss=this->NewGauss();1175 for(int iv=0;iv<NUM_VERTICES;iv++){1176 gauss->GaussVertex(iv);1177 input->GetInputValue(&pvalue[iv],gauss);1178 }1179 delete gauss;1180 }1181 /*}}}*/1182 1139 void Element::GetInputListOnVertices(IssmDouble* pvalue,int enumtype){/*{{{*/ 1183 1184 /*Fetch number vertices for this element*/1185 const int NUM_VERTICES = this->GetNumberOfVertices();1186 1187 /*Checks in debugging mode*/1188 _assert_(pvalue);1189 1140 1190 1141 /*Recover input*/ 1191 1142 Input2* input2=this->GetInput2(enumtype); 1192 1143 if(!input2) _error_("input "<<EnumToStringx(enumtype)<<" not found in element"); 1193 /* Start looping on the number of vertices: */ 1194 Gauss*gauss=this->NewGauss(); 1195 for(int iv=0;iv<NUM_VERTICES;iv++){ 1196 gauss->GaussVertex(iv); 1197 input2->GetInputValue(&pvalue[iv],gauss); 1198 } 1199 delete gauss; 1144 this->GetInputListOnVertices(pvalue,input2,0.); 1200 1145 } 1201 1146 /*}}}*/ … … 1205 1150 Input2* input=this->GetInput2(enumtype,time); 1206 1151 if (!input) _error_("Input " << EnumToStringx(enumtype) << " not found in element"); 1207 1208 /*Fetch number vertices for this element*/ 1209 const int NUM_VERTICES = this->GetNumberOfVertices(); 1210 1211 /*Checks in debugging mode*/ 1212 _assert_(pvalue); 1213 1214 /* Start looping on the number of vertices: */ 1215 Gauss*gauss=this->NewGauss(); 1216 for(int iv=0;iv<NUM_VERTICES;iv++){ 1217 gauss->GaussVertex(iv); 1218 input->GetInputValue(&pvalue[iv],gauss); 1219 } 1220 1221 /*clean-up*/ 1222 delete gauss; 1152 this->GetInputListOnVertices(pvalue,input,0.); 1223 1153 } 1224 1154 /*}}}*/ 1225 1155 void Element::GetInputListOnVertices(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue){/*{{{*/ 1226 1227 /*Recover input*/1228 1156 Input2* input=this->GetInput2(enumtype); 1229 1230 /*Checks in debugging mode*/ 1231 _assert_(pvalue); 1232 1233 /*Fetch number vertices for this element*/ 1234 const int NUM_VERTICES = this->GetNumberOfVertices(); 1235 1236 /* Start looping on the number of vertices: */ 1237 if (input){ 1238 Gauss* gauss=this->NewGauss(); 1239 for (int iv=0;iv<NUM_VERTICES;iv++){ 1240 gauss->GaussVertex(iv); 1241 input->GetInputValue(&pvalue[iv],gauss); 1242 } 1243 delete gauss; 1244 } 1245 else{ 1246 for(int iv=0;iv<NUM_VERTICES;iv++) pvalue[iv]=defaultvalue; 1247 } 1157 this->GetInputListOnVertices(pvalue,input,defaultvalue); 1248 1158 } 1249 1159 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r24431 r24434 94 94 void GetInputListOnNodes(IssmDouble* pvalue,int enumtype,IssmDouble defaultvalue); 95 95 void GetInputListOnNodesVelocity(IssmDouble* pvalue,int enumtype); 96 void GetInputListOnVertices(IssmDouble* pvalue,ElementInput2* input);97 96 void GetInputListOnVertices(IssmDouble* pvalue,int enumtype); 98 97 void GetInputListOnVerticesAtTime(IssmDouble* pvalue,int enumtype,IssmDouble time); … … 253 252 virtual void GetInputValue(IssmDouble* pvalue,Vertex* vertex,int enumtype){_error_("not implemented yet");}; 254 253 virtual void GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){_error_("not implemented yet");}; 254 virtual void GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value)=0; 255 virtual void GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value)=0; 255 256 virtual void GetLevelCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum,IssmDouble level)=0; 256 257 virtual void GetLevelsetPositivePart(int* point1,IssmDouble* fraction1,IssmDouble* fraction2, bool* mainlynegative,IssmDouble* levelsetvalues)=0; -
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r24426 r24434 432 432 433 433 /*Recover parameters and values*/ 434 GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum);434 Element::GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum); 435 435 436 436 /*Be sure that values are not zero*/ … … 554 554 555 555 /*Recover parameters and values*/ 556 GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum);556 Element::GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum); 557 557 558 558 /*Be sure that values are not zero*/ … … 985 985 /*Get current field and vertex coordinates*/ 986 986 IssmDouble ls[NUMVERTICES],distance; 987 GetInputListOnVertices(&ls[0],distanceenum);987 Element::GetInputListOnVertices(&ls[0],distanceenum); 988 988 989 989 /*Get distance from list of segments and reset ls*/ … … 1110 1110 IssmDouble sigmayz[NUMVERTICES],sigmaxz[NUMVERTICES],sigma_nn[NUMVERTICES]; 1111 1111 IssmDouble viscosity,epsilon[NUMVERTICES]; 1112 GetInputListOnVertices(&base[0],BaseEnum);1113 GetInputListOnVertices(&bed[0],BedEnum);1114 GetInputListOnVertices(&surface[0],SurfaceEnum);1115 GetInputListOnVertices(&pressure[0],PressureEnum);1116 GetInputListOnVertices(&phi[0],MaskGroundediceLevelsetEnum);1112 Element::GetInputListOnVertices(&base[0],BaseEnum); 1113 Element::GetInputListOnVertices(&bed[0],BedEnum); 1114 Element::GetInputListOnVertices(&surface[0],SurfaceEnum); 1115 Element::GetInputListOnVertices(&pressure[0],PressureEnum); 1116 Element::GetInputListOnVertices(&phi[0],MaskGroundediceLevelsetEnum); 1117 1117 IssmDouble rho_ice = FindParam(MaterialsRhoIceEnum); 1118 1118 IssmDouble rho_water = FindParam(MaterialsRhoSeawaterEnum); … … 1253 1253 1254 1254 /*Recover parameters and values*/ 1255 GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum);1255 Element::GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum); 1256 1256 1257 1257 /*Be sure that values are not zero*/ … … 1307 1307 1308 1308 /*Recover parameters and values*/ 1309 GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum);1309 Element::GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum); 1310 1310 1311 1311 /*Be sure that values are not zero*/ … … 1413 1413 1414 1414 /*Retrieve all inputs and parameters*/ 1415 GetInputListOnVertices(&bed[0],BedEnum);1416 GetInputListOnVertices(&surfaces[0],SurfaceEnum);1417 GetInputListOnVertices(&bases[0],BaseEnum);1418 GetInputListOnVertices(&lsf[0],MaskIceLevelsetEnum);1415 Element::GetInputListOnVertices(&bed[0],BedEnum); 1416 Element::GetInputListOnVertices(&surfaces[0],SurfaceEnum); 1417 Element::GetInputListOnVertices(&bases[0],BaseEnum); 1418 Element::GetInputListOnVertices(&lsf[0],MaskIceLevelsetEnum); 1419 1419 1420 1420 nrfrontbed=0; … … 1508 1508 1509 1509 /*Recover parameters and values*/ 1510 GetInputListOnVertices(&levelset[0],levelsetenum);1510 Element::GetInputListOnVertices(&levelset[0],levelsetenum); 1511 1511 1512 1512 int* indicesfront = xNew<int>(NUMVERTICES); … … 1596 1596 return input; 1597 1597 }/*}}}*/ 1598 void Penta::GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value){/*{{{*/ 1599 1600 /*Checks in debugging mode*/ 1601 _assert_(pvalue); 1602 1603 /* Start looping on the number of vertices: */ 1604 if(input){ 1605 GaussPenta gauss; 1606 for(int iv=0;iv<NUMVERTICES;iv++){ 1607 gauss.GaussVertex(iv); 1608 input->GetInputValue(&pvalue[iv],&gauss); 1609 } 1610 } 1611 else{ 1612 for(int iv=0;iv<NUMVERTICES;iv++) pvalue[iv] = default_value; 1613 } 1614 } 1615 /*}}}*/ 1616 void Penta::GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value){/*{{{*/ 1617 1618 /*Checks in debugging mode*/ 1619 _assert_(pvalue); 1620 1621 /*What type of finite element are we dealing with?*/ 1622 int fe = this->FiniteElement(); 1623 int numnodes = this->GetNumberOfNodes(); 1624 1625 /* Start looping on the number of vertices: */ 1626 if(input){ 1627 GaussPenta gauss; 1628 for(int iv=0;iv<numnodes;iv++){ 1629 gauss.GaussNode(fe,iv); 1630 input->GetInputValue(&pvalue[iv],&gauss); 1631 } 1632 } 1633 else{ 1634 for(int iv=0;iv<numnodes;iv++) pvalue[iv] = default_value; 1635 } 1636 } 1637 /*}}}*/ 1598 1638 DatasetInput2* Penta::GetDatasetInput2(int inputenum){/*{{{*/ 1599 1639 … … 1675 1715 1676 1716 /*Retrieve all inputs and parameters*/ 1677 GetInputListOnVertices(&lsf[0],levelset_enum);1717 Element::GetInputListOnVertices(&lsf[0],levelset_enum); 1678 1718 1679 1719 /* Determine distribution of ice over element. … … 1911 1951 1912 1952 /*Recover parameters and values*/ 1913 GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum);1953 Element::GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum); 1914 1954 1915 1955 /*Be sure that values are not zero*/ … … 2030 2070 2031 2071 /*Recover parameters and values*/ 2032 GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum);2072 Element::GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum); 2033 2073 2034 2074 /*Be sure that values are not zero*/ … … 2291 2331 /*Extrude values first*/ 2292 2332 IssmDouble extrudedvalues[NUMVERTICES]; 2293 this->GetInputListOnVertices(&extrudedvalues[0],pentainput );2333 this->GetInputListOnVertices(&extrudedvalues[0],pentainput,0.); 2294 2334 2295 2335 if(start==-1){ … … 2359 2399 IssmDouble extrudedvalues3[NUMVERTICES]; 2360 2400 2361 this->GetInputListOnVertices(&extrudedvalues[0],pentainput );2362 this->GetInputListOnVertices(&extrudedvalues2[0],pentainput2 );2363 this->GetInputListOnVertices(&extrudedvalues3[0],pentainput3 );2401 this->GetInputListOnVertices(&extrudedvalues[0],pentainput,0.); 2402 this->GetInputListOnVertices(&extrudedvalues2[0],pentainput2,0.); 2403 this->GetInputListOnVertices(&extrudedvalues3[0],pentainput3,0.); 2364 2404 2365 2405 if(start==-1){ … … 2425 2465 IssmDouble extrudedvalues[NUMVERTICES]; 2426 2466 2427 this->GetInputListOnVertices(&extrudedvalues[0],enum_type);2467 Element::GetInputListOnVertices(&extrudedvalues[0],enum_type); 2428 2468 if(start==-1){ 2429 2469 for(int i=0;i<NUMVERTICES2D;i++) extrudedvalues[i+NUMVERTICES2D]=extrudedvalues[i]; … … 2628 2668 2629 2669 /*Retrieve all inputs and parameters*/ 2630 GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum);2670 Element::GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum); 2631 2671 2632 2672 /* If only one vertex has ice, there is an ice front here */ … … 2660 2700 2661 2701 /*Retrieve all inputs and parameters*/ 2662 GetInputListOnVertices(&ls[0],levelset_enum);2702 Element::GetInputListOnVertices(&ls[0],levelset_enum); 2663 2703 2664 2704 /*If the level set has always same sign, there is no ice front here*/ … … 3011 3051 rho_ice=FindParam(MaterialsRhoIceEnum); 3012 3052 density=rho_ice/rho_water; 3013 GetInputListOnVertices(&h[0],ThicknessEnum);3014 GetInputListOnVertices(&r[0],BedEnum);3015 GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum);3053 Element::GetInputListOnVertices(&h[0],ThicknessEnum); 3054 Element::GetInputListOnVertices(&r[0],BedEnum); 3055 Element::GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum); 3016 3056 3017 3057 /*go through vertices, and figure out which ones are on the ice sheet, and want to unground: */ … … 3187 3227 Input2* qsg_input = this->GetInput2(FrontalForcingsSubglacialDischargeEnum); _assert_(qsg_input); 3188 3228 Input2* TF_input = this->GetInput2(FrontalForcingsThermalForcingEnum); _assert_(TF_input); 3189 GetInputListOnVertices(&basinid[0],FrontalForcingsBasinIdEnum);3229 Element::GetInputListOnVertices(&basinid[0],FrontalForcingsBasinIdEnum); 3190 3230 3191 3231 this->FindParam(&yts, ConstantsYtsEnum); … … 3750 3790 3751 3791 /*Recover parameters and values*/ 3752 GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum);3792 Element::GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum); 3753 3793 3754 3794 /*Be sure that values are not zero*/ … … 3868 3908 3869 3909 /*Recover parameters and values*/ 3870 GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum);3910 Element::GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum); 3871 3911 3872 3912 /*Be sure that values are not zero*/ … … 4735 4775 4736 4776 /*retrieve inputs: */ 4737 GetInputListOnVertices(&thickness_init[0],ThicknessEnum);4738 GetInputListOnVertices(&hydrostatic_ratio[0],GeometryHydrostaticRatioEnum);4739 GetInputListOnVertices(&bed[0],BaseEnum);4740 GetInputListOnVertices(&surface[0],SurfaceEnum);4777 Element::GetInputListOnVertices(&thickness_init[0],ThicknessEnum); 4778 Element::GetInputListOnVertices(&hydrostatic_ratio[0],GeometryHydrostaticRatioEnum); 4779 Element::GetInputListOnVertices(&bed[0],BaseEnum); 4780 Element::GetInputListOnVertices(&surface[0],SurfaceEnum); 4741 4781 4742 4782 /*build new thickness: */ -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r24376 r24434 85 85 Input2* GetInput2(int enumtype); 86 86 Input2* GetInput2(int enumtype,IssmDouble time); 87 void GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value); 88 void GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value); 87 89 DatasetInput2* GetDatasetInput2(int inputenum); 88 90 void GetInputValue(IssmDouble* pvalue,Vertex* vertex,int enumtype); -
issm/trunk-jpl/src/c/classes/Elements/Seg.cpp
r24378 r24434 164 164 165 165 /*Recover parameters and values*/ 166 GetInputListOnVertices(&levelset[0],levelsetenum); 166 Element::GetInputListOnVertices(&levelset[0],levelsetenum); 167 167 168 /* Get nodes where there is no ice */ 168 169 nrfrontnodes=0; … … 263 264 264 265 /*Recover parameters and values*/ 265 GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum);266 Element::GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum); 266 267 267 268 /*Be sure that values are not zero*/ … … 300 301 301 302 }/*}}}*/ 303 void Seg::GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value){/*{{{*/ 304 305 /*Checks in debugging mode*/ 306 _assert_(pvalue); 307 308 /* Start looping on the number of vertices: */ 309 if(input){ 310 GaussSeg gauss; 311 for(int iv=0;iv<NUMVERTICES;iv++){ 312 gauss.GaussVertex(iv); 313 input->GetInputValue(&pvalue[iv],&gauss); 314 } 315 } 316 else{ 317 for(int iv=0;iv<NUMVERTICES;iv++) pvalue[iv] = default_value; 318 } 319 } 320 /*}}}*/ 321 void Seg::GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value){/*{{{*/ 322 323 /*Checks in debugging mode*/ 324 _assert_(pvalue); 325 326 /*What type of finite element are we dealing with?*/ 327 int fe = this->FiniteElement(); 328 int numnodes = this->GetNumberOfNodes(); 329 330 /* Start looping on the number of vertices: */ 331 if(input){ 332 GaussSeg gauss; 333 for(int iv=0;iv<numnodes;iv++){ 334 gauss.GaussNode(fe,iv); 335 input->GetInputValue(&pvalue[iv],&gauss); 336 } 337 } 338 else{ 339 for(int iv=0;iv<numnodes;iv++) pvalue[iv] = default_value; 340 } 341 } 342 /*}}}*/ 302 343 bool Seg::IsIcefront(void){/*{{{*/ 303 344 … … 307 348 308 349 /*Retrieve all inputs and parameters*/ 309 GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum);350 Element::GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum); 310 351 311 352 /* If only one vertex has ice, there is an ice front here */ -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r24376 r24434 65 65 Input2* GetInput2(int enumtype); 66 66 Input2* GetInput2(int enumtype,IssmDouble time); 67 void GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value); 68 void GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value); 67 69 void GetInputValue(IssmDouble* pvalue,Vertex* vertex,int enumtype){_error_("not implemented yet");}; 68 70 void GetLevelCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum,IssmDouble level){_error_("not implemented");}; -
issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp
r24378 r24434 194 194 195 195 /*Retrieve all inputs and parameters*/ 196 GetInputListOnVertices(&values[0],MeshVertexonbaseEnum);196 Element::GetInputListOnVertices(&values[0],MeshVertexonbaseEnum); 197 197 198 198 for(int i=0;i<4;i++){ … … 214 214 215 215 /*Retrieve all inputs and parameters*/ 216 GetInputListOnVertices(&values[0],MaskIceLevelsetEnum);216 Element::GetInputListOnVertices(&values[0],MaskIceLevelsetEnum); 217 217 218 218 for(int i=0;i<4;i++){ … … 234 234 235 235 /*Retrieve all inputs and parameters*/ 236 GetInputListOnVertices(&values[0],MeshVertexonsurfaceEnum);236 Element::GetInputListOnVertices(&values[0],MeshVertexonsurfaceEnum); 237 237 238 238 for(int i=0;i<4;i++){ … … 263 263 _error_("not implemented yet"); 264 264 }/*}}}*/ 265 void Tetra::GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value){/*{{{*/ 266 267 /*Checks in debugging mode*/ 268 _assert_(pvalue); 269 270 /* Start looping on the number of vertices: */ 271 if(input){ 272 GaussTetra gauss; 273 for(int iv=0;iv<NUMVERTICES;iv++){ 274 gauss.GaussVertex(iv); 275 input->GetInputValue(&pvalue[iv],&gauss); 276 } 277 } 278 else{ 279 for(int iv=0;iv<NUMVERTICES;iv++) pvalue[iv] = default_value; 280 } 281 } 282 /*}}}*/ 283 void Tetra::GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value){/*{{{*/ 284 285 /*Checks in debugging mode*/ 286 _assert_(pvalue); 287 288 /*What type of finite element are we dealing with?*/ 289 int fe = this->FiniteElement(); 290 int numnodes = this->GetNumberOfNodes(); 291 292 /* Start looping on the number of vertices: */ 293 if(input){ 294 GaussTetra gauss; 295 for(int iv=0;iv<numnodes;iv++){ 296 gauss.GaussNode(fe,iv); 297 input->GetInputValue(&pvalue[iv],&gauss); 298 } 299 } 300 else{ 301 for(int iv=0;iv<numnodes;iv++) pvalue[iv] = default_value; 302 } 303 } 304 /*}}}*/ 265 305 void Tetra::GetInputValue(IssmDouble* pvalue,Node* node,int enumtype){/*{{{*/ 266 306 … … 323 363 324 364 /*Retrieve all inputs and parameters*/ 325 GetInputListOnVertices(&values[0],MeshVertexonbaseEnum);365 Element::GetInputListOnVertices(&values[0],MeshVertexonbaseEnum); 326 366 sum = values[0]+values[1]+values[2]+values[3]; 327 367 … … 342 382 343 383 /*Retrieve all inputs and parameters*/ 344 GetInputListOnVertices(&values[0],MeshVertexonsurfaceEnum);384 Element::GetInputListOnVertices(&values[0],MeshVertexonsurfaceEnum); 345 385 sum = values[0]+values[1]+values[2]+values[3]; 346 386 … … 413 453 /*Retrieve all inputs and parameters*/ 414 454 IssmDouble ls[NUMVERTICES]; 415 GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum);455 Element::GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum); 416 456 417 457 /* If only one vertex has ice, there is an ice front here */ -
issm/trunk-jpl/src/c/classes/Elements/Tetra.h
r24376 r24434 69 69 Input2* GetInput2(int enumtype); 70 70 Input2* GetInput2(int enumtype,IssmDouble time); 71 void GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value); 72 void GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value); 71 73 void GetInputValue(IssmDouble* pvalue,Node* node,int enumtype); 72 74 void GetLevelCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum,IssmDouble level){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r24379 r24434 561 561 /*Recover parameters and values*/ 562 562 parameters->FindParam(&domaintype,DomainTypeEnum); 563 GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum);563 Element::GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum); 564 564 565 565 /*Be sure that values are not zero*/ … … 698 698 /*Recover parameters and values*/ 699 699 parameters->FindParam(&domaintype,DomainTypeEnum); 700 GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum);700 Element::GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum); 701 701 702 702 /*Be sure that values are not zero*/ … … 1169 1169 /*Get current field and vertex coordinates*/ 1170 1170 IssmDouble ls[NUMVERTICES],distance; 1171 GetInputListOnVertices(&ls[0],distanceenum);1171 Element::GetInputListOnVertices(&ls[0],distanceenum); 1172 1172 1173 1173 /*Get distance from list of segments and reset ls*/ … … 1197 1197 1198 1198 /*Retrieve all inputs and parameters*/ 1199 GetInputListOnVertices(&values[0],MeshVertexonbaseEnum);1199 Element::GetInputListOnVertices(&values[0],MeshVertexonbaseEnum); 1200 1200 1201 1201 for(int i=0;i<3;i++){ … … 1215 1215 1216 1216 /*Retrieve all inputs and parameters*/ 1217 GetInputListOnVertices(&values[0],MeshVertexonbaseEnum);1217 Element::GetInputListOnVertices(&values[0],MeshVertexonbaseEnum); 1218 1218 1219 1219 for(int i=0;i<3;i++){ … … 1235 1235 1236 1236 /*Retrieve all inputs and parameters*/ 1237 GetInputListOnVertices(&values[0],MeshVertexonsurfaceEnum);1237 Element::GetInputListOnVertices(&values[0],MeshVertexonsurfaceEnum); 1238 1238 1239 1239 for(int i=0;i<3;i++){ … … 1253 1253 1254 1254 /*Retrieve all inputs and parameters*/ 1255 GetInputListOnVertices(&values[0],MeshVertexonsurfaceEnum);1255 Element::GetInputListOnVertices(&values[0],MeshVertexonsurfaceEnum); 1256 1256 1257 1257 for(int i=0;i<3;i++){ … … 1360 1360 IssmDouble sigmaxx[NUMVERTICES],sigmayy[NUMVERTICES],sigmaxy[NUMVERTICES],sigma_nn[NUMVERTICES]; 1361 1361 IssmDouble viscosity,epsilon[NUMVERTICES]; 1362 GetInputListOnVertices(&base[0],BaseEnum);1363 GetInputListOnVertices(&bed[0],BedEnum);1364 GetInputListOnVertices(&surface[0],SurfaceEnum);1365 GetInputListOnVertices(&pressure[0],PressureEnum);1366 GetInputListOnVertices(&phi[0],MaskGroundediceLevelsetEnum);1362 Element::GetInputListOnVertices(&base[0],BaseEnum); 1363 Element::GetInputListOnVertices(&bed[0],BedEnum); 1364 Element::GetInputListOnVertices(&surface[0],SurfaceEnum); 1365 Element::GetInputListOnVertices(&pressure[0],PressureEnum); 1366 Element::GetInputListOnVertices(&phi[0],MaskGroundediceLevelsetEnum); 1367 1367 IssmDouble rho_ice = FindParam(MaterialsRhoIceEnum); 1368 1368 IssmDouble rho_water = FindParam(MaterialsRhoSeawaterEnum); … … 1570 1570 1571 1571 /*Recover parameters and values*/ 1572 GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum);1572 Element::GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum); 1573 1573 1574 1574 /*Be sure that values are not zero*/ … … 1626 1626 /*Recover parameters and values*/ 1627 1627 parameters->FindParam(&domaintype,DomainTypeEnum); 1628 GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum);1628 Element::GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum); 1629 1629 1630 1630 /*Be sure that values are not zero*/ … … 1752 1752 1753 1753 /*Retrieve all inputs and parameters*/ 1754 GetInputListOnVertices(&bed[0],BedEnum);1755 GetInputListOnVertices(&surfaces[0],SurfaceEnum);1756 GetInputListOnVertices(&bases[0],BaseEnum);1757 GetInputListOnVertices(&lsf[0],MaskIceLevelsetEnum);1754 Element::GetInputListOnVertices(&bed[0],BedEnum); 1755 Element::GetInputListOnVertices(&surfaces[0],SurfaceEnum); 1756 Element::GetInputListOnVertices(&bases[0],BaseEnum); 1757 Element::GetInputListOnVertices(&lsf[0],MaskIceLevelsetEnum); 1758 1758 1759 1759 nrfrontbed=0; … … 1846 1846 1847 1847 /*Recover parameters and values*/ 1848 GetInputListOnVertices(&levelset[0],levelsetenum);1848 Element::GetInputListOnVertices(&levelset[0],levelsetenum); 1849 1849 1850 1850 /* Get nodes where there is no ice */ … … 1911 1911 } 1912 1912 }/*}}}*/ 1913 void Tria::GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value){/*{{{*/ 1914 1915 /*Checks in debugging mode*/ 1916 _assert_(pvalue); 1917 1918 /* Start looping on the number of vertices: */ 1919 if(input){ 1920 GaussTria gauss; 1921 for(int iv=0;iv<NUMVERTICES;iv++){ 1922 gauss.GaussVertex(iv); 1923 input->GetInputValue(&pvalue[iv],&gauss); 1924 } 1925 } 1926 else{ 1927 for(int iv=0;iv<NUMVERTICES;iv++) pvalue[iv] = default_value; 1928 } 1929 } 1930 /*}}}*/ 1931 void Tria::GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value){/*{{{*/ 1932 1933 /*Checks in debugging mode*/ 1934 _assert_(pvalue); 1935 1936 /*What type of finite element are we dealing with?*/ 1937 int fe = this->FiniteElement(); 1938 int numnodes = this->GetNumberOfNodes(); 1939 1940 /* Start looping on the number of vertices: */ 1941 if(input){ 1942 GaussTria gauss; 1943 for(int iv=0;iv<numnodes;iv++){ 1944 gauss.GaussNode(fe,iv); 1945 input->GetInputValue(&pvalue[iv],&gauss); 1946 } 1947 } 1948 else{ 1949 for(int iv=0;iv<numnodes;iv++) pvalue[iv] = default_value; 1950 } 1951 } 1952 /*}}}*/ 1913 1953 void Tria::InputServe(Input2* input_in){/*{{{*/ 1914 1954 … … 2252 2292 2253 2293 /*Recover parameters and values*/ 2254 GetInputListOnVertices(&levelset[0],levelsetenum);2294 Element::GetInputListOnVertices(&levelset[0],levelsetenum); 2255 2295 2256 2296 /* Get nodes where there is no ice */ … … 2297 2337 2298 2338 /*Retrieve all inputs and parameters*/ 2299 GetInputListOnVertices(&lsf[0],levelset_enum);2339 Element::GetInputListOnVertices(&lsf[0],levelset_enum); 2300 2340 2301 2341 /* Determine distribution of ice over element. … … 2602 2642 2603 2643 /*Retrieve all inputs and parameters*/ 2604 GetInputListOnVertices(&values[0],MeshVertexonbaseEnum);2644 Element::GetInputListOnVertices(&values[0],MeshVertexonbaseEnum); 2605 2645 sum = values[0]+values[1]+values[2]; 2606 2646 … … 2623 2663 2624 2664 /*Retrieve all inputs and parameters*/ 2625 GetInputListOnVertices(&values[0],MeshVertexonsurfaceEnum);2665 Element::GetInputListOnVertices(&values[0],MeshVertexonsurfaceEnum); 2626 2666 sum = values[0]+values[1]+values[2]; 2627 2667 … … 2714 2754 /*Recover parameters and values*/ 2715 2755 parameters->FindParam(&domaintype,DomainTypeEnum); 2716 GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum);2756 Element::GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum); 2717 2757 2718 2758 /*Be sure that values are not zero*/ … … 2843 2883 /*Recover parameters and values*/ 2844 2884 parameters->FindParam(&domaintype,DomainTypeEnum); 2845 GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum);2885 Element::GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum); 2846 2886 2847 2887 /*Be sure that values are not zero*/ … … 2979 3019 area_base=this->GetAreaIce(); 2980 3020 if(scaled==true){ 2981 GetInputListOnVertices(&scalefactors[0],MeshScaleFactorEnum);3021 Element::GetInputListOnVertices(&scalefactors[0],MeshScaleFactorEnum); 2982 3022 for(i=0;i<NUMVERTICES;i++) SFaux[i]= scalefactors[indices[i]]; //sort thicknesses in ice/noice 2983 3023 switch(numiceverts){ … … 3002 3042 area_base=area_base*scalefactor; 3003 3043 } 3004 GetInputListOnVertices(&surfaces[0],SurfaceEnum);3005 GetInputListOnVertices(&bases[0],BaseEnum);3044 Element::GetInputListOnVertices(&surfaces[0],SurfaceEnum); 3045 Element::GetInputListOnVertices(&bases[0],BaseEnum); 3006 3046 for(i=0;i<NUMVERTICES;i++) Haux[i]= surfaces[indices[i]]-bases[indices[i]]; //sort thicknesses in ice/noice 3007 3047 switch(numiceverts){ … … 3270 3310 3271 3311 /*Retrieve all inputs and parameters*/ 3272 GetInputListOnVertices(&values[0],MeshVertexonboundaryEnum);3312 Element::GetInputListOnVertices(&values[0],MeshVertexonboundaryEnum); 3273 3313 sum = values[0]+values[1]+values[2]; 3274 3314 … … 3291 3331 3292 3332 /*Retrieve all inputs and parameters*/ 3293 GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum);3333 Element::GetInputListOnVertices(&ls[0],MaskIceLevelsetEnum); 3294 3334 3295 3335 /* If only one vertex has ice, there is an ice front here */ … … 3323 3363 3324 3364 /*Retrieve all inputs and parameters*/ 3325 GetInputListOnVertices(&ls[0],levelset_enum);3365 Element::GetInputListOnVertices(&ls[0],levelset_enum); 3326 3366 3327 3367 /*If the level set is awlays <0, there is no ice front here*/ … … 3773 3813 rho_ice=FindParam(MaterialsRhoIceEnum); 3774 3814 density=rho_ice/rho_water; 3775 GetInputListOnVertices(&h[0],ThicknessEnum);3776 GetInputListOnVertices(&r[0],BedEnum);3777 GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum);3815 Element::GetInputListOnVertices(&h[0],ThicknessEnum); 3816 Element::GetInputListOnVertices(&r[0],BedEnum); 3817 Element::GetInputListOnVertices(&gl[0],MaskGroundediceLevelsetEnum); 3778 3818 3779 3819 /*go through vertices, and figure out which ones are grounded and want to unground: */ … … 3915 3955 Input2* qsg_input = this->GetInput2(FrontalForcingsSubglacialDischargeEnum); _assert_(qsg_input); 3916 3956 Input2* TF_input = this->GetInput2(FrontalForcingsThermalForcingEnum); _assert_(TF_input); 3917 GetInputListOnVertices(&basinid[0],FrontalForcingsBasinIdEnum);3957 Element::GetInputListOnVertices(&basinid[0],FrontalForcingsBasinIdEnum); 3918 3958 3919 3959 this->FindParam(&yts, ConstantsYtsEnum); … … 4326 4366 /*Recover parameters and values*/ 4327 4367 parameters->FindParam(&domaintype,DomainTypeEnum); 4328 GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum);4368 Element::GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum); 4329 4369 4330 4370 /*Be sure that values are not zero*/ … … 4455 4495 /*Recover parameters and values*/ 4456 4496 parameters->FindParam(&domaintype,DomainTypeEnum); 4457 GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum);4497 Element::GetInputListOnVertices(&gl[0],MaskIceLevelsetEnum); 4458 4498 4459 4499 /*Be sure that values are not zero*/ … … 4936 4976 /*Get field on vertices (we do not allow for higher order elements!!)*/ 4937 4977 IssmDouble lsf[NUMVERTICES]; 4938 this->GetInputListOnVertices(&lsf[0],fieldenum);4978 Element::GetInputListOnVertices(&lsf[0],fieldenum); 4939 4979 4940 4980 /*1. check that we do cross fieldvalue in this element*/ … … 6144 6184 6145 6185 /*retrieve inputs: */ 6146 GetInputListOnVertices(&thickness_init[0],ThicknessEnum);6147 GetInputListOnVertices(&hydrostatic_ratio[0],GeometryHydrostaticRatioEnum);6148 GetInputListOnVertices(&bed[0],BaseEnum);6149 GetInputListOnVertices(&surface[0],SurfaceEnum);6186 Element::GetInputListOnVertices(&thickness_init[0],ThicknessEnum); 6187 Element::GetInputListOnVertices(&hydrostatic_ratio[0],GeometryHydrostaticRatioEnum); 6188 Element::GetInputListOnVertices(&bed[0],BaseEnum); 6189 Element::GetInputListOnVertices(&surface[0],SurfaceEnum); 6150 6190 6151 6191 /*build new bed and surface: */ -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r24376 r24434 84 84 IssmDouble GetIcefrontArea(); 85 85 void GetIcefrontCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum); 86 void GetInputListOnVertices(IssmDouble* pvalue,Input2* input,IssmDouble default_value); 87 void GetInputListOnNodes(IssmDouble* pvalue,Input2* input,IssmDouble default_value); 86 88 void GetLevelCoordinates(IssmDouble** pxyz_front,IssmDouble* xyz_list,int levelsetenum,IssmDouble level); 87 89 int GetVertexIndex(Vertex* vertex);
Note:
See TracChangeset
for help on using the changeset viewer.