Changeset 27053
- Timestamp:
- 06/10/22 14:27:30 (3 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/SealevelchangeAnalysis.cpp
r26800 r27053 264 264 265 265 parameters->AddObject(new DoubleParam(SolidearthSettingsTimeAccEnum,timeacc)); 266 parameters->AddObject(new DoubleMatParam(LoadLoveHEnum,love_h,ndeg,precomputednt));267 parameters->AddObject(new DoubleMatParam(LoadLoveKEnum,love_k,ndeg,precomputednt));268 parameters->AddObject(new DoubleMatParam(LoadLoveLEnum,love_l,ndeg,precomputednt));269 266 270 267 if (rotation){ … … 274 271 iomodel->FetchData(&love_pmtf_colinear,&dummy,&precomputednt,"md.solidearth.lovenumbers.pmtf_colinear"); 275 272 iomodel->FetchData(&love_pmtf_ortho,&dummy,&precomputednt,"md.solidearth.lovenumbers.pmtf_ortho"); 276 277 parameters->AddObject(new DoubleMatParam(LovePolarMotionTransferFunctionColinearEnum,love_pmtf_colinear,1,precomputednt));278 parameters->AddObject(new DoubleMatParam(LovePolarMotionTransferFunctionOrthogonalEnum,love_pmtf_ortho,1,precomputednt));279 parameters->AddObject(new DoubleMatParam(TidalLoveHEnum,love_th,ndeg,precomputednt));280 parameters->AddObject(new DoubleMatParam(TidalLoveKEnum,love_tk,ndeg,precomputednt));281 parameters->AddObject(new DoubleMatParam(TidalLoveLEnum,love_tl,ndeg,precomputednt));282 273 } 283 274 … … 595 586 xDelete<IssmDouble>(G_viscoelastic); 596 587 xDelete<IssmDouble>(G_viscoelastic_local); 588 xDelete<IssmDouble>(G_viscoelastic_interpolated); 597 589 xDelete<IssmDouble>(U_viscoelastic); 598 590 xDelete<IssmDouble>(U_viscoelastic_local); 591 xDelete<IssmDouble>(U_viscoelastic_interpolated); 599 592 if(horiz){ 600 593 xDelete<IssmDouble>(H_viscoelastic); 601 594 xDelete<IssmDouble>(H_viscoelastic_local); 595 xDelete<IssmDouble>(H_viscoelastic_interpolated); 602 596 } 603 597 if(rotation){ 598 xDelete<IssmDouble>(Love_th2_interpolated); 599 xDelete<IssmDouble>(Love_tk2_interpolated); 600 if (horiz) xDelete<IssmDouble>(Love_tl2_interpolated); 604 601 xDelete<IssmDouble>(love_pmtf_colinear); 605 602 xDelete<IssmDouble>(love_pmtf_ortho); 603 xDelete<IssmDouble>(Pmtf_col_interpolated); 604 xDelete<IssmDouble>(Pmtf_ortho_interpolated); 605 xDelete<IssmDouble>(Pmtf_z_interpolated); 606 606 607 607 } -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r27026 r27053 6371 6371 bool computerotation = false; 6372 6372 bool computeviscous = false; 6373 bool computesatgravi = false; 6373 6374 int horiz; 6374 6375 bool istime=true; … … 6384 6385 IssmDouble* __restrict__ tide_love_l = NULL; 6385 6386 IssmDouble* __restrict__ LoveRotRSL = NULL; 6387 IssmDouble* __restrict__ LoveRotSatG = NULL; 6386 6388 IssmDouble* __restrict__ LoveRotU = NULL; 6387 6389 IssmDouble* __restrict__ LoveRothoriz = NULL; … … 6395 6397 IssmDouble* tide_love_l = NULL; 6396 6398 IssmDouble* LoveRotRSL = NULL; 6399 IssmDouble* LoveRotSatG = NULL; 6397 6400 IssmDouble* LoveRotU = NULL; 6398 6401 IssmDouble* LoveRothoriz = NULL; 6399 6402 IssmDouble* Grot = NULL; 6403 6400 6404 IssmDouble* GUrot = NULL; 6401 6405 IssmDouble* GNrot = NULL; … … 6587 6591 GUrot = xNewZeroInit<IssmDouble>(3*3*nt); 6588 6592 6593 6589 6594 if (horiz){ 6590 6595 GErot=xNewZeroInit<IssmDouble>(3*3*nt); … … 6679 6684 this->inputs->SetArrayInput(SealevelchangeViscousUEnum,this->lid,viscousU,3*nt); 6680 6685 this->parameters->SetParam(0,SealevelchangeViscousIndexEnum); 6686 6681 6687 if(horiz){ 6682 6688 viscousN=xNewZeroInit<IssmDouble>(3*nt); … … 6691 6697 #ifdef _HAVE_RESTRICT_ 6692 6698 delete G; 6699 delete G_gravi_precomputed; 6693 6700 if(computeelastic){ 6694 6701 delete GU; 6702 delete G_viscoelastic_precomputed; 6703 delete U_viscoelastic_precomputed; 6695 6704 if(horiz){ 6696 6705 delete GN; 6697 6706 delete GE; 6707 delete H_viscoelastic_precomputed; 6698 6708 } 6699 6709 if(computerotation){ 6700 6710 delete Grot; 6701 6711 delete GUrot; 6712 delete tide_love_h; 6713 delete tide_love_k; 6714 delete tide_love_l; 6715 delete LoveRotRSL; 6716 delete LoveRotU; 6702 6717 if (horiz){ 6703 6718 delete GNrot; 6704 6719 delete GErot; 6705 } 6720 delete LoveRothoriz; 6721 } 6722 } 6723 } 6724 if(computeviscous){ 6725 delete viscousRSL; 6726 delete viscousU; 6727 6728 if(horiz){ 6729 delete viscousN; 6730 delete viscousE; 6706 6731 } 6707 6732 } 6708 6733 #else 6709 6734 xDelete(G); 6735 xDelete(G_gravi_precomputed); 6710 6736 if(computeelastic){ 6711 6737 xDelete(GU); 6738 xDelete(G_viscoelastic_precomputed); 6739 xDelete(U_viscoelastic_precomputed); 6712 6740 if(horiz){ 6713 6741 xDelete(GN); 6714 6742 xDelete(GE); 6743 xDelete(H_viscoelastic_precomputed); 6715 6744 } 6716 6745 if(computerotation){ 6717 6746 xDelete(Grot); 6718 6747 xDelete(GUrot); 6748 xDelete(tide_love_h); 6749 xDelete(tide_love_k); 6750 xDelete(tide_love_l); 6751 xDelete(LoveRotRSL); 6752 xDelete(LoveRotU); 6719 6753 if (horiz){ 6720 6754 xDelete(GNrot); 6721 6755 xDelete(GErot); 6722 } 6756 xDelete(LoveRothoriz); 6757 } 6758 } 6759 6760 } 6761 if(computeviscous){ 6762 xDelete(viscousRSL); 6763 xDelete(viscousU); 6764 6765 if(horiz){ 6766 xDelete(viscousN); 6767 xDelete(viscousE); 6723 6768 } 6724 6769 } … … 7262 7307 } 7263 7308 xDelete<IssmDouble*>(Gsubel); 7309 xDelete<IssmDouble>(G_gravi_precomputed); 7264 7310 if(computeelastic){ 7265 7311 xDelete<IssmDouble*>(GUsubel); 7312 xDelete<IssmDouble>(G_viscoelastic_precomputed); 7313 xDelete<IssmDouble>(U_viscoelastic_precomputed); 7266 7314 if(horiz){ 7315 xDelete<IssmDouble>(H_viscoelastic_precomputed); 7267 7316 xDelete<IssmDouble*>(GNsubel); 7268 7317 xDelete<IssmDouble*>(GEsubel); … … 7278 7327 /*Inputs:*/ 7279 7328 IssmDouble* viscousRSL=NULL; 7329 IssmDouble* viscousSG=NULL; 7280 7330 IssmDouble* viscousU=NULL; 7281 7331 IssmDouble* viscousN=NULL; … … 7293 7343 7294 7344 this->inputs->GetArrayPtr(SealevelchangeViscousRSLEnum,this->lid,&viscousRSL,&dummy); 7345 this->inputs->GetArrayPtr(SealevelchangeViscousSGEnum,this->lid,&viscousSG,&dummy); 7295 7346 this->inputs->GetArrayPtr(SealevelchangeViscousUEnum,this->lid,&viscousU,&dummy); 7296 7347 if(horiz){ … … 7301 7352 for(int i=0;i<NUMVERTICES;i++){ 7302 7353 viscousRSL[i*viscousnumsteps+newindex+offset]=(1-lincoeff)*viscousRSL[i*viscousnumsteps+newindex]+lincoeff*viscousRSL[i*viscousnumsteps+newindex+1]; 7354 viscousSG[i*viscousnumsteps+newindex+offset]=(1-lincoeff)*viscousSG[i*viscousnumsteps+newindex]+lincoeff*viscousSG[i*viscousnumsteps+newindex+1]; 7303 7355 viscousU[i*viscousnumsteps+newindex+offset]=(1-lincoeff)*viscousU[i*viscousnumsteps+newindex]+lincoeff*viscousU[i*viscousnumsteps+newindex+1]; 7304 7356 if(horiz){ … … 7309 7361 7310 7362 } 7363 7364 /*Free ressources*/ 7365 xDelete<IssmDouble>(viscousRSL); 7366 xDelete<IssmDouble>(viscousSG); 7367 xDelete<IssmDouble>(viscousU); 7368 xDelete<IssmDouble>(viscousN); 7369 xDelete<IssmDouble>(viscousE); 7311 7370 7312 7371 } … … 7393 7452 barycontrib->Set(this->Sid(),bslcice,bslchydro,bslcbp); 7394 7453 7454 xDelete<IssmDouble>(areae); 7455 7395 7456 } 7396 7457 /*}}}*/ … … 7426 7487 } 7427 7488 7489 xDelete<IssmDouble>(G); 7490 xDelete<IssmDouble>(Grot); 7491 for (int l=0;l<SLGEOM_NUMLOADS;l++) xDelete<IssmDouble>(Gsub[l]); 7492 xDelete<IssmDouble>(Gsub[SLGEOM_NUMLOADS]); 7493 7428 7494 return; 7429 7495 } /*}}}*/ … … 7468 7534 IssmDouble SealevelGrd[3]={0,0,0}; 7469 7535 IssmDouble RSLGrd[3]={0,0,0}; 7536 IssmDouble SGGrd[3]={0,0,0}; //Satellite Gravimetry 7470 7537 IssmDouble UGrd[3]={0,0,0}; 7471 7538 IssmDouble NGrd[3]={0,0,0}; … … 7478 7545 IssmDouble* GN=NULL; 7479 7546 IssmDouble* Grot=NULL; 7547 IssmDouble* GSGrot=NULL; 7480 7548 IssmDouble* GUrot=NULL; 7481 7549 IssmDouble* GNrot=NULL; … … 7494 7562 bool percpu=false; 7495 7563 bool planethasocean=false; 7564 bool SatelliteGravi=false; 7496 7565 7497 7566 this->parameters->FindParam(&nel,MeshNumberofelementsEnum); … … 7501 7570 this->parameters->FindParam(&horiz,SolidearthSettingsHorizEnum); 7502 7571 this->parameters->FindParam(&planethasocean,SolidearthSettingsGrdOceanEnum); 7572 this->parameters->FindParam(&SatelliteGravi,SolidearthSettingsSatelliteGraviEnum); 7503 7573 7504 7574 if(sal){ … … 7528 7598 this->inputs->GetArrayPtr(SealevelchangeGrotEnum,this->lid,&Grot,&size); 7529 7599 this->inputs->GetArrayPtr(SealevelchangeGUrotEnum,this->lid,&GUrot,&size); 7600 if (SatelliteGravi) this->inputs->GetArrayPtr(SealevelchangeGSatGravirotEnum,this->lid,&GSGrot,&size); 7530 7601 if (horiz){ 7531 7602 this->inputs->GetArrayPtr(SealevelchangeGErotEnum,this->lid,&GErot,&size); … … 7535 7606 } 7536 7607 this->SealevelchangeGxL(&RSLGrd[0],G, Gsub, Grot, loads, polarmotionvector, slgeom, nel,percpu=false,SealevelchangeViscousRSLEnum,computefuture=true); 7608 if (SatelliteGravi) this->SealevelchangeGxL(&SGGrd[0],G, Gsub, GSGrot, loads, polarmotionvector, slgeom, nel,percpu=false,SealevelchangeViscousSGEnum,computefuture=true); 7537 7609 7538 7610 if(elastic){ … … 7554 7626 7555 7627 /*Create geoid: */ 7556 for(int i=0;i<NUMVERTICES;i++)SealevelGrd[i]=UGrd[i]+RSLGrd[i]; 7628 for(int i=0;i<NUMVERTICES;i++){ 7629 SealevelGrd[i]=UGrd[i]+RSLGrd[i]; 7630 if (SatelliteGravi) SGGrd[i]+=UGrd[i]; 7631 } 7557 7632 7558 7633 /*Create inputs*/ 7559 7634 this->AddInput(SealevelGRDEnum,SealevelGrd,P1Enum); 7560 7635 this->AddInput(BedGRDEnum,UGrd,P1Enum); 7636 if (SatelliteGravi) this->AddInput(SatGraviGRDEnum,SGGrd,P1Enum); 7561 7637 if(horiz){ 7562 7638 this->AddInput(BedNorthGRDEnum,NGrd,P1Enum); 7563 7639 this->AddInput(BedEastGRDEnum,EGrd,P1Enum); 7564 7640 } 7641 7642 /*Free ressources*/ 7643 7644 xDelete<IssmDouble>(G); 7645 xDelete<IssmDouble>(GU); 7646 xDelete<IssmDouble>(GE); 7647 xDelete<IssmDouble>(GN); 7648 xDelete<IssmDouble>(Grot); 7649 xDelete<IssmDouble>(GSGrot); 7650 xDelete<IssmDouble>(GUrot); 7651 xDelete<IssmDouble>(GNrot); 7652 xDelete<IssmDouble>(GErot); 7653 7654 for (int l=0;l<SLGEOM_NUMLOADS;l++){ 7655 xDelete<IssmDouble>(Gsub[l]); 7656 xDelete<IssmDouble>(GUsub[l]); 7657 xDelete<IssmDouble>(GNsub[l]); 7658 xDelete<IssmDouble>(GEsub[l]); 7659 } 7660 xDelete<IssmDouble>(Gsub[SLGEOM_NUMLOADS]); 7661 xDelete<IssmDouble>(GUsub[SLGEOM_NUMLOADS]); 7662 xDelete<IssmDouble>(GNsub[SLGEOM_NUMLOADS]); 7663 xDelete<IssmDouble>(GEsub[SLGEOM_NUMLOADS]); 7565 7664 7566 7665 } /*}}}*/ … … 7577 7676 int viscousindex=0; //important 7578 7677 int viscousnumsteps=1; //important 7678 7679 IssmDouble* grdfieldinterp=NULL; 7680 IssmDouble* viscoustimes=NULL; 7681 IssmDouble final_time; 7682 IssmDouble lincoeff; 7683 IssmDouble timeacc; 7579 7684 7580 7685 this->parameters->FindParam(&computeviscous,SolidearthSettingsViscousEnum); … … 7661 7766 // 3*: subtract from viscous stack the grdfield that has already been accounted for so we don't add it again at the next time step 7662 7767 7663 IssmDouble* grdfieldinterp=NULL;7664 IssmDouble* viscoustimes=NULL;7665 IssmDouble final_time;7666 IssmDouble lincoeff;7667 IssmDouble timeacc;7668 7669 7768 this->parameters->FindParam(&viscoustimes,NULL,SealevelchangeViscousTimesEnum); 7670 7769 this->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum); … … 7710 7809 } 7711 7810 7712 /*Free allocatoins:*/7713 xDelete<IssmDouble>(viscoustimes);7714 7811 } 7715 7812 /*}}}*/ … … 7727 7824 } 7728 7825 7826 7827 /*Free allocatoins:*/ 7828 xDelete<IssmDouble>(grdfield); 7829 if (computeviscous){ 7830 xDelete<IssmDouble>(viscoustimes); 7831 xDelete<IssmDouble>(viscousfield); 7832 if(computefuture){ 7833 xDelete<IssmDouble>(grdfieldinterp); 7834 } 7835 } 7836 7729 7837 } /*}}}*/ 7730 7838 … … 7740 7848 7741 7849 } /*}}}*/ 7850 7742 7851 #endif 7743 7852 -
issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp
r26800 r27053 430 430 } 431 431 432 /*Free ressources*/ 433 delete loads; 434 delete oldsealevelloads; 435 delete oceanareas; 436 delete subelementoceanareas; 437 432 438 } 433 439 /*}}}*/ … … 607 613 #endif 608 614 615 xDelete<IssmDouble>(xxe); 616 xDelete<IssmDouble>(yye); 617 xDelete<IssmDouble>(zze); 618 xDelete<IssmDouble>(areae); 619 609 620 return; 610 621 … … 672 683 femmodel->parameters->AddObject(new DoubleVecParam(ZzeEnum,zze,nel)); 673 684 femmodel->parameters->AddObject(new DoubleVecParam(AreaeEnum,areae,nel)); 685 686 xDelete<IssmDouble>(xxe); 687 xDelete<IssmDouble>(yye); 688 xDelete<IssmDouble>(zze); 689 xDelete<IssmDouble>(areae); 674 690 675 691 return slgeom; … … 864 880 xDelete<IssmDouble>(m2); 865 881 xDelete<IssmDouble>(m3); 882 883 xDelete<IssmDouble>(pmtf_col); 884 xDelete<IssmDouble>(pmtf_ortho); 885 xDelete<IssmDouble>(pmtf_z); 866 886 if (viscous){ 887 xDelete<IssmDouble>(viscoustimes); 888 xDelete<IssmDouble>(viscouspolarmotion); 867 889 if (computefuture){ 868 890 xDelete<IssmDouble>(m1interp); … … 935 957 /*free allocations:*/ 936 958 xDelete<IssmDouble>(viscoustimes); 937 } 938 939 940 } 959 if (rotation) xDelete<IssmDouble>(viscouspolarmotion); 960 } 961 962 963 } /*}}}*/ 941 964 void ConserveOceanMass(FemModel* femmodel,GrdLoads* loads, IssmDouble offset, SealevelGeometry* slgeom){ /*{{{*/ 942 965 … … 974 997 loadcopy=vloadcopy->ToMPISerial(); 975 998 999 delete vloadcopy; 976 1000 return loadcopy; 977 1001
Note:
See TracChangeset
for help on using the changeset viewer.