Changeset 24984
- Timestamp:
- 06/08/20 17:07:15 (5 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp ¶
r24981 r24984 24 24 if(world_rank!=0){ 25 25 femmodel_init= new FemModel(argc,argv,evaluation_comm); 26 27 /*hack: we don't have any place to put solution modules that fit between the model processor28 *and the cores:*/29 //for (int i=0;i<femmodel_init->nummodels;i++) if(femmodel_init->analysis_type_list[i]==SealevelriseAnalysisEnum)sealevelrise_core_geometry(femmodel_init);30 31 26 femmodel_init->profiler->Start(CORE); 32 27 } -
TabularUnified issm/trunk-jpl/src/c/classes/FemModel.cpp ¶
r24949 r24984 4673 4673 #endif 4674 4674 #ifdef _HAVE_SEALEVELRISE_ 4675 void FemModel::SealevelriseGeometry(IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz) { /*{{{*/4676 4677 /*Run sealevelrie geometry routine in elements:*/4678 for(int i=0;i<elements->Size();i++){4679 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i));4680 element->SealevelriseGeometry(latitude,longitude,radius,xx,yy,zz);4681 }4682 4683 }4684 /*}}}*/4685 4675 void FemModel::SealevelriseEustatic(Vector<IssmDouble>* pRSLgi, IssmDouble* poceanarea, IssmDouble* peustatic, SealevelMasks* masks) { /*{{{*/ 4686 4676 -
TabularUnified issm/trunk-jpl/src/c/classes/FemModel.h ¶
r24949 r24984 164 164 #ifdef _HAVE_SEALEVELRISE_ 165 165 void SealevelriseEustatic(Vector<IssmDouble>* pSgi, IssmDouble* poceanarea, IssmDouble* peustatic, SealevelMasks* masks); 166 void SealevelriseGeometry(IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz);167 166 void SealevelriseNonEustatic(Vector<IssmDouble>* pSgo, Vector<IssmDouble>* pSg_old, SealevelMasks* masks,bool verboseconvolution); 168 167 void SealevelriseRotationalFeedback(Vector<IssmDouble>* pRSLgo_rot, Vector<IssmDouble>* pRSLg_old, IssmDouble* pIxz, IssmDouble* pIyz, IssmDouble* pIzz, SealevelMasks* masks); -
TabularUnified issm/trunk-jpl/src/c/cores/CorePointerFromSolutionEnum.cpp ¶
r22009 r24984 60 60 break; 61 61 case SealevelriseSolutionEnum: 62 solutioncore=&sealevel rise_core;62 solutioncore=&sealevelchange_core; 63 63 break; 64 64 case EsaSolutionEnum: -
TabularUnified issm/trunk-jpl/src/c/cores/cores.h ¶
r24940 r24984 53 53 void bmb_core(FemModel* femmodel); 54 54 void damage_core(FemModel* femmodel); 55 void sealevel rise_core(FemModel* femmodel);56 void g eodetic_core(FemModel* femmodel);57 void steric_core(FemModel* femmodel);55 void sealevelchange_core(FemModel* femmodel); 56 void grd_core(FemModel* femmodel); 57 void dynstr_core(FemModel* femmodel); 58 58 void sealevelrise_core_geometry(FemModel* femmodel); 59 59 SealevelMasks* sealevelrise_core_masks(FemModel* femmodel); -
TabularUnified issm/trunk-jpl/src/c/cores/sealevelrise_core.cpp ¶
r24983 r24984 1 /*!\file: sealevel rise_core.cpp2 * \brief: core of the SLRsolution1 /*!\file: sealevelchange_core.cpp 2 * \brief: core of the sea-level change solution 3 3 */ 4 4 … … 14 14 15 15 16 /* cores:*/17 void sealevel rise_core(FemModel* femmodel){ /*{{{*/16 /*main cores:*/ 17 void sealevelchange_core(FemModel* femmodel){ /*{{{*/ 18 18 19 19 /*Start profiler*/ … … 46 46 47 47 /*Run geodetic:*/ 48 g eodetic_core(femmodel);48 grd_core(femmodel); 49 49 50 50 /*Run steric core for sure:*/ 51 steric_core(femmodel);51 dynstr_core(femmodel); 52 52 53 53 /*Save results: */ … … 69 69 } 70 70 /*}}}*/ 71 void geodetic_core(FemModel* femmodel){ /*{{{*/ 71 void grd_core(FemModel* femmodel){ /*{{{*/ 72 73 /*Gravity rotation deformation core GRD: */ 72 74 73 75 /*variables:*/ … … 242 244 } 243 245 /*}}}*/ 246 void dynstr_core(FemModel* femmodel){ /*{{{*/ 247 248 /*variables:*/ 249 Vector<IssmDouble> *bedrock = NULL; 250 Vector<IssmDouble> *SL = NULL; 251 Vector<IssmDouble> *steric_rate_g = NULL; 252 Vector<IssmDouble> *dynamic_rate_g = NULL; 253 Vector<IssmDouble> *hydro_rate_g = NULL; 254 Vector<IssmDouble> *U_esa_rate= NULL; 255 Vector<IssmDouble> *N_esa_rate= NULL; 256 Vector<IssmDouble> *U_gia_rate= NULL; 257 Vector<IssmDouble> *N_gia_rate= NULL; 258 259 /*parameters: */ 260 bool isslr=0; 261 int solution_type; 262 IssmDouble dt; 263 int geodetic=0; 264 265 /*Retrieve parameters:*/ 266 femmodel->parameters->FindParam(&isslr,TransientIsslrEnum); 267 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 268 femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); 269 femmodel->parameters->FindParam(&geodetic,SealevelriseGeodeticEnum); 270 271 /*in case we are running SealevelriseSolutionEnum, then bypass transient settings:*/ 272 if(solution_type==SealevelriseSolutionEnum)isslr=1; 273 274 /*Should we be here?:*/ 275 if(!isslr)return; 276 277 /*Verbose: */ 278 if(VerboseSolution()) _printf0_(" computing steric sea level rise\n"); 279 280 /*Retrieve geoid viscous and elastic rates, bedrock uplift viscous and elastic rates + steric rate, as vectors:*/ 281 GetVectorFromInputsx(&bedrock,femmodel,BedEnum,VertexSIdEnum); 282 GetVectorFromInputsx(&SL,femmodel,SealevelEnum,VertexSIdEnum); 283 GetStericRate(&steric_rate_g,femmodel); 284 GetDynamicRate(&dynamic_rate_g,femmodel); 285 GetVectorFromInputsx(&hydro_rate_g,femmodel,SealevelriseHydroRateEnum,VertexSIdEnum); 286 if(geodetic){ 287 GetVectorFromInputsx(&U_esa_rate,femmodel,SealevelUEsaRateEnum,VertexSIdEnum); 288 GetVectorFromInputsx(&U_gia_rate,femmodel,SealevelUGiaRateEnum,VertexSIdEnum); 289 GetVectorFromInputsx(&N_esa_rate,femmodel,SealevelNEsaRateEnum,VertexSIdEnum); 290 GetVectorFromInputsx(&N_gia_rate,femmodel,SealevelNGiaRateEnum,VertexSIdEnum); 291 } 292 293 /*compute: sea level change = initial sea level + (N_gia_rate+N_esa_rate) * dt + steric_rate + dynamic_rate + hydro_rate* dt*/ 294 if(geodetic){ 295 SL->AXPY(N_gia_rate,dt); 296 SL->AXPY(N_esa_rate,dt); 297 } 298 SL->AXPY(steric_rate_g,dt); 299 SL->AXPY(dynamic_rate_g,dt); 300 SL->AXPY(hydro_rate_g,dt); 301 302 /*compute new bedrock position: */ 303 if(geodetic){ 304 bedrock->AXPY(U_esa_rate,dt); 305 bedrock->AXPY(U_gia_rate,dt); 306 } 307 308 /*update element inputs:*/ 309 InputUpdateFromVectorx(femmodel,bedrock,BedEnum,VertexSIdEnum); 310 InputUpdateFromVectorx(femmodel,SL,SealevelEnum,VertexSIdEnum); 311 312 /*Free ressources:*/ 313 delete bedrock; 314 delete SL; 315 delete steric_rate_g; 316 delete dynamic_rate_g; 317 delete hydro_rate_g; 318 if(geodetic){ 319 delete U_esa_rate; 320 delete U_gia_rate; 321 delete N_esa_rate; 322 delete N_gia_rate; 323 } 324 } 325 /*}}}*/ 326 244 327 SealevelMasks* sealevelrise_core_masks(FemModel* femmodel) { /*{{{*/ 245 328 … … 289 372 if(horiz) VertexCoordinatesx(&xx,&yy,&zz,femmodel->vertices); 290 373 291 /*call the FemModel geometry module: */ 292 femmodel->SealevelriseGeometry(latitude, longitude, xx,yy,zz,radius); 374 375 /*Run sealevelrie geometry routine in elements:*/ 376 for(int i=0;i<femmodel->elements->Size();i++){ 377 Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i)); 378 element->SealevelriseGeometry(latitude,longitude,radius,xx,yy,zz); 379 } 293 380 294 381 /*Free ressources:*/ … … 652 739 } 653 740 /*}}}*/ 654 void steric_core(FemModel* femmodel){ /*{{{*/655 656 /*variables:*/657 Vector<IssmDouble> *bedrock = NULL;658 Vector<IssmDouble> *SL = NULL;659 Vector<IssmDouble> *steric_rate_g = NULL;660 Vector<IssmDouble> *dynamic_rate_g = NULL;661 Vector<IssmDouble> *hydro_rate_g = NULL;662 Vector<IssmDouble> *U_esa_rate= NULL;663 Vector<IssmDouble> *N_esa_rate= NULL;664 Vector<IssmDouble> *U_gia_rate= NULL;665 Vector<IssmDouble> *N_gia_rate= NULL;666 667 /*parameters: */668 bool isslr=0;669 int solution_type;670 IssmDouble dt;671 int geodetic=0;672 673 /*Retrieve parameters:*/674 femmodel->parameters->FindParam(&isslr,TransientIsslrEnum);675 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);676 femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);677 femmodel->parameters->FindParam(&geodetic,SealevelriseGeodeticEnum);678 679 /*in case we are running SealevelriseSolutionEnum, then bypass transient settings:*/680 if(solution_type==SealevelriseSolutionEnum)isslr=1;681 682 /*Should we be here?:*/683 if(!isslr)return;684 685 /*Verbose: */686 if(VerboseSolution()) _printf0_(" computing steric sea level rise\n");687 688 /*Retrieve geoid viscous and elastic rates, bedrock uplift viscous and elastic rates + steric rate, as vectors:*/689 GetVectorFromInputsx(&bedrock,femmodel,BedEnum,VertexSIdEnum);690 GetVectorFromInputsx(&SL,femmodel,SealevelEnum,VertexSIdEnum);691 GetStericRate(&steric_rate_g,femmodel);692 GetDynamicRate(&dynamic_rate_g,femmodel);693 GetVectorFromInputsx(&hydro_rate_g,femmodel,SealevelriseHydroRateEnum,VertexSIdEnum);694 if(geodetic){695 GetVectorFromInputsx(&U_esa_rate,femmodel,SealevelUEsaRateEnum,VertexSIdEnum);696 GetVectorFromInputsx(&U_gia_rate,femmodel,SealevelUGiaRateEnum,VertexSIdEnum);697 GetVectorFromInputsx(&N_esa_rate,femmodel,SealevelNEsaRateEnum,VertexSIdEnum);698 GetVectorFromInputsx(&N_gia_rate,femmodel,SealevelNGiaRateEnum,VertexSIdEnum);699 }700 701 /*compute: sea level change = initial sea level + (N_gia_rate+N_esa_rate) * dt + steric_rate + dynamic_rate + hydro_rate* dt*/702 if(geodetic){703 SL->AXPY(N_gia_rate,dt);704 SL->AXPY(N_esa_rate,dt);705 }706 SL->AXPY(steric_rate_g,dt);707 SL->AXPY(dynamic_rate_g,dt);708 SL->AXPY(hydro_rate_g,dt);709 710 /*compute new bedrock position: */711 if(geodetic){712 bedrock->AXPY(U_esa_rate,dt);713 bedrock->AXPY(U_gia_rate,dt);714 }715 716 /*update element inputs:*/717 InputUpdateFromVectorx(femmodel,bedrock,BedEnum,VertexSIdEnum);718 InputUpdateFromVectorx(femmodel,SL,SealevelEnum,VertexSIdEnum);719 720 /*Free ressources:*/721 delete bedrock;722 delete SL;723 delete steric_rate_g;724 delete dynamic_rate_g;725 delete hydro_rate_g;726 if(geodetic){727 delete U_esa_rate;728 delete U_gia_rate;729 delete N_esa_rate;730 delete N_gia_rate;731 }732 }733 /*}}}*/734 741 735 742 /*support routines:*/ -
TabularUnified issm/trunk-jpl/src/c/cores/transient_core.cpp ¶
r24924 r24984 228 228 229 229 /*Sea level rise: */ 230 if(isslr) sealevel rise_core(femmodel);230 if(isslr) sealevelchange_core(femmodel); 231 231 232 232 /*unload results*/
Note:
See TracChangeset
for help on using the changeset viewer.