Changeset 26152
- Timestamp:
- 03/26/21 10:48:14 (4 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Element.h
r26149 r26152 398 398 virtual void SealevelchangeDeformationConvolution(IssmDouble* sealevelloads, IssmDouble* loads, IssmDouble* rotationvector, SealevelMasks* masks)=0; 399 399 virtual void OceanAverageOptim(IssmDouble* poceanaverage, IssmDouble* poceanarea, IssmDouble* Sg, SealevelMasks* masks)=0; 400 virtual void SealevelchangeShift(Vector<IssmDouble>* loads, IssmDouble offset, SealevelMasks* masks)=0; 400 401 #endif 401 402 -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r26149 r26152 235 235 void SealevelchangeDeformationConvolution(IssmDouble* sealevelloads, IssmDouble* loads, IssmDouble* rotationvector, SealevelMasks* masks){_error_("not implemented yet");}; 236 236 void OceanAverageOptim(IssmDouble* poceanaverage, IssmDouble* poceanarea, IssmDouble* Sg, SealevelMasks* masks){_error_("not implemented yet");}; 237 void SealevelchangeShift(Vector<IssmDouble>* loads, IssmDouble offset, SealevelMasks* masks){_error_("not implemented yet");}; 237 238 #endif 238 239 -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r26149 r26152 190 190 void SealevelchangeDeformationConvolution(IssmDouble* sealevelloads, IssmDouble* loads, IssmDouble* rotationvector, SealevelMasks* masks){_error_("not implemented yet");}; 191 191 void OceanAverageOptim(IssmDouble* poceanaverage, IssmDouble* poceanarea, IssmDouble* Sg, SealevelMasks* masks){_error_("not implemented yet");}; 192 void SealevelchangeShift(Vector<IssmDouble>* loads, IssmDouble offset, SealevelMasks* masks){_error_("not implemented yet");}; 192 193 193 194 #endif -
issm/trunk-jpl/src/c/classes/Elements/Tetra.h
r26149 r26152 196 196 void SealevelchangeDeformationConvolution(IssmDouble* sealevelloads, IssmDouble* loads, IssmDouble* rotationvector, SealevelMasks* masks){_error_("not implemented yet");}; 197 197 void OceanAverageOptim(IssmDouble* poceanaverage, IssmDouble* poceanarea, IssmDouble* Sg, SealevelMasks* masks){_error_("not implemented yet");}; 198 void SealevelchangeShift(Vector<IssmDouble>* loads, IssmDouble offset, SealevelMasks* masks){_error_("not implemented yet");}; 198 199 199 200 #endif -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r26149 r26152 6965 6965 return; 6966 6966 }/*}}}*/ 6967 void Tria::SealevelchangeShift(Vector<IssmDouble>* loads, IssmDouble offset, SealevelMasks* masks){ /*{{{*/ 6968 6969 if(masks->isoceanin[this->lid]){ 6970 loads->SetValue(this->sid,offset,ADD_VAL); 6971 } 6972 6973 } /*}}}*/ 6967 6974 #endif 6968 6975 -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r26149 r26152 180 180 void SealevelchangeDeformationConvolution(IssmDouble* sealevelloads, IssmDouble* loads, IssmDouble* rotationvector, SealevelMasks* masks); 181 181 void OceanAverageOptim(IssmDouble* poceanaverage, IssmDouble* poceanarea, IssmDouble* Sg, SealevelMasks* masks); 182 void SealevelchangeShift(Vector<IssmDouble>* loads, IssmDouble offset, SealevelMasks* masks); 182 183 #endif 183 184 /*}}}*/ -
issm/trunk-jpl/src/c/classes/SealevelMasks.h
r24938 r26152 18 18 19 19 /*SealevelMasks constructors, destructors :*/ 20 SealevelMasks(int nel){20 SealevelMasks(int localnel){ 21 21 /*allocate fields:*/ 22 this->isiceonly=xNew<bool>( nel);23 this->isfullyfloating=xNew<bool>( nel);24 this->notfullygrounded=xNew<bool>( nel);25 this->isoceanin=xNew<bool>( nel);22 this->isiceonly=xNew<bool>(localnel); 23 this->isfullyfloating=xNew<bool>(localnel); 24 this->notfullygrounded=xNew<bool>(localnel); 25 this->isoceanin=xNew<bool>(localnel); 26 26 }; 27 27 ~SealevelMasks(){ -
issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp
r26151 r26152 12 12 #include "../modules/modules.h" 13 13 #include "../solutionsequences/solutionsequences.h" 14 14 15 /*support routines local definitions:{{{*/ 15 16 void TransferForcing(FemModel* femmodel,int forcingenum); … … 19 20 SealevelMasks* sealevel_masks(FemModel* femmodel); 20 21 void RotationAxisMotion(IssmDouble* m, FemModel* femmodel,IssmDouble* loads, IssmDouble* sealeveloads); 22 void ConserveOceanMass(FemModel* femmodel,Vector<IssmDouble>* sealevelloads, IssmDouble offset, SealevelMasks* masks); 21 23 /*}}}*/ 22 24 … … 503 505 if(scaleoceanarea) oceanarea=3.619e+14; // use true ocean area, m^2 504 506 505 //substract ocean average and barystatic contributionfrom sea level loads: 506 sealevelloads->Shift(barycontrib->Total()/oceanarea - SealevelloadsOceanAverage(sealevelloads,oceanareas,oceanarea)); 507 507 //conserve ocean mass: 508 oceanaverage=SealevelloadsOceanAverage(sealevelloads,oceanareas,oceanarea); 509 ConserveOceanMass(femmodel,sealevelloads,barycontrib->Total()/oceanarea - oceanaverage,masks); 510 508 511 //broadcast sea level loads 509 512 allsealevelloads=sealevelloads->ToMPISerial(); 513 514 femmodel->results->AddObject(new GenericExternalResult<IssmDouble*>(femmodel->results->Size()+1,DummyEnum,allsealevelloads,nel,1,1,1)); 510 515 511 516 //compute rotation axis motion: … … 523 528 } 524 529 sealevelloads->Assemble(); 525 526 // substract ocean average and barystatic contribution530 531 //Conserve ocean mass: 527 532 oceanaverage=SealevelloadsOceanAverage(sealevelloads,oceanareas,oceanarea); 528 sealevelloads->Shift(barycontrib->Total()/oceanarea- oceanaverage);529 533 ConserveOceanMass(femmodel,sealevelloads,barycontrib->Total()/oceanarea - oceanaverage,masks); 534 530 535 //broadcast sea level loads 531 536 allsealevelloads=sealevelloads->ToMPISerial(); … … 1318 1323 m[2]=m3; 1319 1324 } /*}}}*/ 1325 void ConserveOceanMass(FemModel* femmodel,Vector<IssmDouble>* sealevelloads, IssmDouble offset, SealevelMasks* masks){ /*{{{*/ 1326 1327 /*Shift sealevel loads by ocean average, only on ocean! :*/ 1328 for(Object* & object : femmodel->elements->objects){ 1329 Element* element = xDynamicCast<Element*>(object); 1330 element->SealevelchangeShift(sealevelloads,offset,masks); 1331 } 1332 sealevelloads->Assemble(); 1333 1334 } /*}}}*/
Note:
See TracChangeset
for help on using the changeset viewer.