Changeset 24950
- Timestamp:
- 06/01/20 17:42:54 (5 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/EsaAnalysis.cpp
r24335 r24950 59 59 /*some constant parameters: */ 60 60 parameters->AddObject(iomodel->CopyConstantObject("md.esa.hemisphere",EsaHemisphereEnum)); 61 61 parameters->AddObject(iomodel->CopyConstantObject("md.slr.eartharea",SealevelEarthAreaEnum)); 62 parameters->AddObject(iomodel->CopyConstantObject("md.slr.rigid",SealevelriseRigidEnum)); 63 parameters->AddObject(iomodel->CopyConstantObject("md.slr.horiz",SealevelriseHorizEnum)); 64 parameters->AddObject(iomodel->CopyConstantObject("md.slr.elastic",SealevelriseElasticEnum)); 65 parameters->AddObject(iomodel->CopyConstantObject("md.slr.rotation",SealevelriseRotationEnum)); 66 62 67 /*love numbers: */ 63 68 iomodel->FetchData(&love_h,&nl,NULL,"md.esa.love_h"); -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r24949 r24950 5336 5336 5337 5337 /*Get area of element: precomputed in the sealevelrise_core_geometry:*/ 5338 this->GetInput2Value(&area,AreaEnum);5338 area=GetAreaSpherical(); 5339 5339 5340 5340 /*element centroid (spherical): */ … … 6084 6084 S=0; for(int i=0;i<NUMVERTICES;i++) S+=Sg_old[this->vertices[i]->Sid()]/NUMVERTICES; 6085 6085 6086 /*convert to SI: */6086 /*convert to kg/m^2: */ 6087 6087 S=S*rho_water; 6088 6088 6089 6089 for(int i=0;i<gsize;i++) Sgo[i]+=G[i]*S; 6090 //cblas_daxpy(gsize,S,&G[0],1,&Sgo[0],1); //for later. 6090 6091 6091 6092 return; -
issm/trunk-jpl/src/c/cores/esa_core.cpp
r23587 r24950 72 72 if(isesa)femmodel->SetCurrentConfiguration(EsaAnalysisEnum); 73 73 74 if(VerboseSolution()) _printf0_(" computing elastic geodetic core\n"); 74 75 if(isesa){ 75 76 -
issm/trunk-jpl/src/c/cores/sealevelrise_core.cpp
r24949 r24950 232 232 } 233 233 /*}}}*/ 234 void steric_core(FemModel* femmodel){ /*{{{*/235 236 /*variables:*/237 Vector<IssmDouble> *bedrock = NULL;238 Vector<IssmDouble> *SL = NULL;239 Vector<IssmDouble> *steric_rate_g = NULL;240 Vector<IssmDouble> *dynamic_rate_g = NULL;241 Vector<IssmDouble> *hydro_rate_g = NULL;242 Vector<IssmDouble> *U_esa_rate= NULL;243 Vector<IssmDouble> *N_esa_rate= NULL;244 Vector<IssmDouble> *U_gia_rate= NULL;245 Vector<IssmDouble> *N_gia_rate= NULL;246 247 /*parameters: */248 bool isslr=0;249 int solution_type;250 IssmDouble dt;251 int geodetic=0;252 253 /*Retrieve parameters:*/254 femmodel->parameters->FindParam(&isslr,TransientIsslrEnum);255 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);256 femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);257 femmodel->parameters->FindParam(&geodetic,SealevelriseGeodeticEnum);258 259 /*in case we are running SealevelriseSolutionEnum, then bypass transient settings:*/260 if(solution_type==SealevelriseSolutionEnum)isslr=1;261 262 /*Should we be here?:*/263 if(!isslr)return;264 265 /*Verbose: */266 if(VerboseSolution()) _printf0_(" computing steric sea level rise\n");267 268 /*Retrieve geoid viscous and elastic rates, bedrock uplift viscous and elastic rates + steric rate, as vectors:*/269 GetVectorFromInputsx(&bedrock,femmodel,BedEnum,VertexSIdEnum);270 GetVectorFromInputsx(&SL,femmodel,SealevelEnum,VertexSIdEnum);271 GetStericRate(&steric_rate_g,femmodel);272 GetDynamicRate(&dynamic_rate_g,femmodel);273 GetVectorFromInputsx(&hydro_rate_g,femmodel,SealevelriseHydroRateEnum,VertexSIdEnum);274 if(geodetic){275 GetVectorFromInputsx(&U_esa_rate,femmodel,SealevelUEsaRateEnum,VertexSIdEnum);276 GetVectorFromInputsx(&U_gia_rate,femmodel,SealevelUGiaRateEnum,VertexSIdEnum);277 GetVectorFromInputsx(&N_esa_rate,femmodel,SealevelNEsaRateEnum,VertexSIdEnum);278 GetVectorFromInputsx(&N_gia_rate,femmodel,SealevelNGiaRateEnum,VertexSIdEnum);279 }280 281 /*compute: sea level change = initial sea level + (N_gia_rate+N_esa_rate) * dt + steric_rate + dynamic_rate + hydro_rate* dt*/282 if(geodetic){283 SL->AXPY(N_gia_rate,dt);284 SL->AXPY(N_esa_rate,dt);285 }286 SL->AXPY(steric_rate_g,dt);287 SL->AXPY(dynamic_rate_g,dt);288 SL->AXPY(hydro_rate_g,dt);289 290 /*compute new bedrock position: */291 if(geodetic){292 bedrock->AXPY(U_esa_rate,dt);293 bedrock->AXPY(U_gia_rate,dt);294 }295 296 /*update element inputs:*/297 InputUpdateFromVectorx(femmodel,bedrock,BedEnum,VertexSIdEnum);298 InputUpdateFromVectorx(femmodel,SL,SealevelEnum,VertexSIdEnum);299 300 /*Free ressources:*/301 delete bedrock;302 delete SL;303 delete steric_rate_g;304 delete dynamic_rate_g;305 delete hydro_rate_g;306 if(geodetic){307 delete U_esa_rate;308 delete U_gia_rate;309 delete N_esa_rate;310 delete N_gia_rate;311 }312 }313 /*}}}*/314 234 SealevelMasks* sealevelrise_core_masks(FemModel* femmodel) { /*{{{*/ 315 235 … … 321 241 /*go through elements and fill the masks: */ 322 242 for (int i=0;i<femmodel->elements->Size();i++){ 323 324 243 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i)); 325 244 element->SetSealevelMasks(masks); … … 699 618 } 700 619 /*}}}*/ 620 void steric_core(FemModel* femmodel){ /*{{{*/ 621 622 /*variables:*/ 623 Vector<IssmDouble> *bedrock = NULL; 624 Vector<IssmDouble> *SL = NULL; 625 Vector<IssmDouble> *steric_rate_g = NULL; 626 Vector<IssmDouble> *dynamic_rate_g = NULL; 627 Vector<IssmDouble> *hydro_rate_g = NULL; 628 Vector<IssmDouble> *U_esa_rate= NULL; 629 Vector<IssmDouble> *N_esa_rate= NULL; 630 Vector<IssmDouble> *U_gia_rate= NULL; 631 Vector<IssmDouble> *N_gia_rate= NULL; 632 633 /*parameters: */ 634 bool isslr=0; 635 int solution_type; 636 IssmDouble dt; 637 int geodetic=0; 638 639 /*Retrieve parameters:*/ 640 femmodel->parameters->FindParam(&isslr,TransientIsslrEnum); 641 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 642 femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); 643 femmodel->parameters->FindParam(&geodetic,SealevelriseGeodeticEnum); 644 645 /*in case we are running SealevelriseSolutionEnum, then bypass transient settings:*/ 646 if(solution_type==SealevelriseSolutionEnum)isslr=1; 647 648 /*Should we be here?:*/ 649 if(!isslr)return; 650 651 /*Verbose: */ 652 if(VerboseSolution()) _printf0_(" computing steric sea level rise\n"); 653 654 /*Retrieve geoid viscous and elastic rates, bedrock uplift viscous and elastic rates + steric rate, as vectors:*/ 655 GetVectorFromInputsx(&bedrock,femmodel,BedEnum,VertexSIdEnum); 656 GetVectorFromInputsx(&SL,femmodel,SealevelEnum,VertexSIdEnum); 657 GetStericRate(&steric_rate_g,femmodel); 658 GetDynamicRate(&dynamic_rate_g,femmodel); 659 GetVectorFromInputsx(&hydro_rate_g,femmodel,SealevelriseHydroRateEnum,VertexSIdEnum); 660 if(geodetic){ 661 GetVectorFromInputsx(&U_esa_rate,femmodel,SealevelUEsaRateEnum,VertexSIdEnum); 662 GetVectorFromInputsx(&U_gia_rate,femmodel,SealevelUGiaRateEnum,VertexSIdEnum); 663 GetVectorFromInputsx(&N_esa_rate,femmodel,SealevelNEsaRateEnum,VertexSIdEnum); 664 GetVectorFromInputsx(&N_gia_rate,femmodel,SealevelNGiaRateEnum,VertexSIdEnum); 665 } 666 667 /*compute: sea level change = initial sea level + (N_gia_rate+N_esa_rate) * dt + steric_rate + dynamic_rate + hydro_rate* dt*/ 668 if(geodetic){ 669 SL->AXPY(N_gia_rate,dt); 670 SL->AXPY(N_esa_rate,dt); 671 } 672 SL->AXPY(steric_rate_g,dt); 673 SL->AXPY(dynamic_rate_g,dt); 674 SL->AXPY(hydro_rate_g,dt); 675 676 /*compute new bedrock position: */ 677 if(geodetic){ 678 bedrock->AXPY(U_esa_rate,dt); 679 bedrock->AXPY(U_gia_rate,dt); 680 } 681 682 /*update element inputs:*/ 683 InputUpdateFromVectorx(femmodel,bedrock,BedEnum,VertexSIdEnum); 684 InputUpdateFromVectorx(femmodel,SL,SealevelEnum,VertexSIdEnum); 685 686 /*Free ressources:*/ 687 delete bedrock; 688 delete SL; 689 delete steric_rate_g; 690 delete dynamic_rate_g; 691 delete hydro_rate_g; 692 if(geodetic){ 693 delete U_esa_rate; 694 delete U_gia_rate; 695 delete N_esa_rate; 696 delete N_gia_rate; 697 } 698 } 699 /*}}}*/ 701 700 702 701 /*support routines:*/
Note:
See TracChangeset
for help on using the changeset viewer.