Changeset 27061
- Timestamp:
- 06/14/22 16:18:05 (3 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/SealevelchangeAnalysis.cpp
r27053 r27061 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)); 266 269 267 270 if (rotation){ … … 271 274 iomodel->FetchData(&love_pmtf_colinear,&dummy,&precomputednt,"md.solidearth.lovenumbers.pmtf_colinear"); 272 275 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)); 273 282 } 274 283 … … 586 595 xDelete<IssmDouble>(G_viscoelastic); 587 596 xDelete<IssmDouble>(G_viscoelastic_local); 588 xDelete<IssmDouble>(G_viscoelastic_interpolated);589 597 xDelete<IssmDouble>(U_viscoelastic); 590 598 xDelete<IssmDouble>(U_viscoelastic_local); 591 xDelete<IssmDouble>(U_viscoelastic_interpolated);592 599 if(horiz){ 593 600 xDelete<IssmDouble>(H_viscoelastic); 594 601 xDelete<IssmDouble>(H_viscoelastic_local); 595 xDelete<IssmDouble>(H_viscoelastic_interpolated);596 602 } 597 603 if(rotation){ 598 xDelete<IssmDouble>(Love_th2_interpolated);599 xDelete<IssmDouble>(Love_tk2_interpolated);600 if (horiz) xDelete<IssmDouble>(Love_tl2_interpolated);601 604 xDelete<IssmDouble>(love_pmtf_colinear); 602 605 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
r27060 r27061 6398 6398 IssmDouble* LoveRothoriz = NULL; 6399 6399 IssmDouble* Grot = NULL; 6400 6401 6400 IssmDouble* GUrot = NULL; 6402 6401 IssmDouble* GNrot = NULL; … … 6584 6583 LoveRotRSL = xNewZeroInit<IssmDouble>(nt); 6585 6584 LoveRotU = xNewZeroInit<IssmDouble>(nt); 6586 if (horiz)LoveRothoriz= xNewZeroInit<IssmDouble>(nt);6585 LoveRothoriz= xNewZeroInit<IssmDouble>(nt); 6587 6586 Grot = xNewZeroInit<IssmDouble>(3*3*nt); //3 polar motion components * 3 vertices * number of time steps 6588 6587 GUrot = xNewZeroInit<IssmDouble>(3*3*nt); 6589 6590 6588 6591 6589 if (horiz){ … … 6681 6679 this->inputs->SetArrayInput(SealevelchangeViscousUEnum,this->lid,viscousU,3*nt); 6682 6680 this->parameters->SetParam(0,SealevelchangeViscousIndexEnum); 6683 6684 6681 if(horiz){ 6685 6682 viscousN=xNewZeroInit<IssmDouble>(3*nt); … … 6694 6691 #ifdef _HAVE_RESTRICT_ 6695 6692 delete G; 6696 delete G_gravi_precomputed;6697 6693 if(computeelastic){ 6698 6694 delete GU; 6699 delete G_viscoelastic_precomputed;6700 delete U_viscoelastic_precomputed;6701 6695 if(horiz){ 6702 6696 delete GN; 6703 6697 delete GE; 6704 delete H_viscoelastic_precomputed;6705 6698 } 6706 6699 if(computerotation){ 6707 6700 delete Grot; 6708 6701 delete GUrot; 6709 delete tide_love_h;6710 delete tide_love_k;6711 delete LoveRotRSL;6712 delete LoveRotU;6713 6702 if (horiz){ 6714 6703 delete GNrot; 6715 6704 delete GErot; 6716 delete tide_love_l; 6717 delete LoveRothoriz; 6718 } 6719 } 6720 } 6721 if(computeviscous){ 6722 delete viscousRSL; 6723 delete viscousU; 6724 6725 if(horiz){ 6726 delete viscousN; 6727 delete viscousE; 6705 } 6728 6706 } 6729 6707 } 6730 6708 #else 6731 6709 xDelete(G); 6732 xDelete(G_gravi_precomputed);6733 6710 if(computeelastic){ 6734 6711 xDelete(GU); 6735 xDelete(G_viscoelastic_precomputed);6736 xDelete(U_viscoelastic_precomputed);6737 6712 if(horiz){ 6738 6713 xDelete(GN); 6739 6714 xDelete(GE); 6740 xDelete(H_viscoelastic_precomputed);6741 6715 } 6742 6716 if(computerotation){ 6743 6717 xDelete(Grot); 6744 6718 xDelete(GUrot); 6745 xDelete(tide_love_h);6746 xDelete(tide_love_k);6747 xDelete(LoveRotRSL);6748 xDelete(LoveRotU);6749 6719 if (horiz){ 6750 6720 xDelete(GNrot); 6751 6721 xDelete(GErot); 6752 xDelete(tide_love_l); 6753 xDelete(LoveRothoriz); 6754 } 6755 } 6756 6757 } 6758 if(computeviscous){ 6759 xDelete(viscousRSL); 6760 xDelete(viscousU); 6761 6762 if(horiz){ 6763 xDelete(viscousN); 6764 xDelete(viscousE); 6722 } 6765 6723 } 6766 6724 } … … 7304 7262 } 7305 7263 xDelete<IssmDouble*>(Gsubel); 7306 xDelete<IssmDouble>(G_gravi_precomputed);7307 7264 if(computeelastic){ 7308 7265 xDelete<IssmDouble*>(GUsubel); 7309 xDelete<IssmDouble>(G_viscoelastic_precomputed);7310 xDelete<IssmDouble>(U_viscoelastic_precomputed);7311 7266 if(horiz){ 7312 xDelete<IssmDouble>(H_viscoelastic_precomputed);7313 7267 xDelete<IssmDouble*>(GNsubel); 7314 7268 xDelete<IssmDouble*>(GEsubel); … … 7324 7278 /*Inputs:*/ 7325 7279 IssmDouble* viscousRSL=NULL; 7326 IssmDouble* viscousSG=NULL;7327 7280 IssmDouble* viscousU=NULL; 7328 7281 IssmDouble* viscousN=NULL; … … 7357 7310 } 7358 7311 7359 /*Free ressources*/7360 xDelete<IssmDouble>(viscousRSL);7361 xDelete<IssmDouble>(viscousU);7362 xDelete<IssmDouble>(viscousN);7363 xDelete<IssmDouble>(viscousE);7364 7365 7312 } 7366 7313 /*}}}*/ … … 7446 7393 barycontrib->Set(this->Sid(),bslcice,bslchydro,bslcbp); 7447 7394 7448 xDelete<IssmDouble>(areae);7449 7450 7395 } 7451 7396 /*}}}*/ … … 7455 7400 IssmDouble* G=NULL; 7456 7401 IssmDouble* Grot=NULL; 7457 IssmDouble* * Gsub=NULL;7402 IssmDouble* Gsub[SLGEOM_NUMLOADS]; 7458 7403 bool computefuture=false; 7459 7404 … … 7465 7410 int nel,nbar; 7466 7411 7467 Gsub=xNew<IssmDouble*>(SLGEOM_NUMLOADS);7468 7412 7469 7413 this->parameters->FindParam(&sal,SolidearthSettingsSelfAttractionEnum); … … 7481 7425 this->SealevelchangeGxL(sealevelpercpu, G, Gsub, Grot, loads, polarmotionvector, slgeom, nel,percpu=true,SealevelchangeViscousRSLEnum,computefuture=false); 7482 7426 } 7483 7484 xDelete<IssmDouble>(G);7485 xDelete<IssmDouble>(Grot);7486 xDelete<IssmDouble*>(Gsub);7487 7427 7488 7428 return; … … 7538 7478 IssmDouble* GN=NULL; 7539 7479 IssmDouble* Grot=NULL; 7540 IssmDouble* GSGrot=NULL;7541 7480 IssmDouble* GUrot=NULL; 7542 7481 IssmDouble* GNrot=NULL; 7543 7482 IssmDouble* GErot=NULL; 7544 IssmDouble* * Gsub;7545 IssmDouble* * GUsub;7546 IssmDouble* * GNsub;7547 IssmDouble* * GEsub;7483 IssmDouble* Gsub[SLGEOM_NUMLOADS]; 7484 IssmDouble* GUsub[SLGEOM_NUMLOADS]; 7485 IssmDouble* GNsub[SLGEOM_NUMLOADS]; 7486 IssmDouble* GEsub[SLGEOM_NUMLOADS]; 7548 7487 bool computefuture=false; 7549 7488 … … 7555 7494 bool percpu=false; 7556 7495 bool planethasocean=false; 7557 7558 Gsub=xNew<IssmDouble*>(SLGEOM_NUMLOADS);7559 GUsub=xNew<IssmDouble*>(SLGEOM_NUMLOADS);7560 GEsub=xNew<IssmDouble*>(SLGEOM_NUMLOADS);7561 GNsub=xNew<IssmDouble*>(SLGEOM_NUMLOADS);7562 7496 7563 7497 this->parameters->FindParam(&nel,MeshNumberofelementsEnum); … … 7620 7554 7621 7555 /*Create geoid: */ 7622 for(int i=0;i<NUMVERTICES;i++){ 7623 SealevelGrd[i]=UGrd[i]+RSLGrd[i]; 7624 } 7556 for(int i=0;i<NUMVERTICES;i++)SealevelGrd[i]=UGrd[i]+RSLGrd[i]; 7625 7557 7626 7558 /*Create inputs*/ … … 7631 7563 this->AddInput(BedEastGRDEnum,EGrd,P1Enum); 7632 7564 } 7633 7634 /*Free ressources*/7635 7636 xDelete<IssmDouble>(G);7637 xDelete<IssmDouble>(GU);7638 xDelete<IssmDouble>(GE);7639 xDelete<IssmDouble>(GN);7640 xDelete<IssmDouble>(Grot);7641 xDelete<IssmDouble>(GSGrot);7642 xDelete<IssmDouble>(GUrot);7643 xDelete<IssmDouble>(GNrot);7644 xDelete<IssmDouble>(GErot);7645 xDelete<IssmDouble*>(Gsub);7646 xDelete<IssmDouble*>(GUsub);7647 xDelete<IssmDouble*>(GEsub);7648 xDelete<IssmDouble*>(GNsub);7649 7565 7650 7566 } /*}}}*/ … … 7661 7577 int viscousindex=0; //important 7662 7578 int viscousnumsteps=1; //important 7663 7664 IssmDouble* grdfieldinterp=NULL;7665 IssmDouble* viscoustimes=NULL;7666 IssmDouble final_time;7667 IssmDouble lincoeff;7668 IssmDouble timeacc;7669 7579 7670 7580 this->parameters->FindParam(&computeviscous,SolidearthSettingsViscousEnum); … … 7751 7661 // 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 7752 7662 7663 IssmDouble* grdfieldinterp=NULL; 7664 IssmDouble* viscoustimes=NULL; 7665 IssmDouble final_time; 7666 IssmDouble lincoeff; 7667 IssmDouble timeacc; 7668 7753 7669 this->parameters->FindParam(&viscoustimes,NULL,SealevelchangeViscousTimesEnum); 7754 7670 this->parameters->FindParam(&final_time,TimesteppingFinalTimeEnum); … … 7794 7710 } 7795 7711 7712 /*Free allocatoins:*/ 7713 xDelete<IssmDouble>(viscoustimes); 7796 7714 } 7797 7715 /*}}}*/ … … 7809 7727 } 7810 7728 7811 7812 /*Free allocatoins:*/7813 xDelete<IssmDouble>(grdfield);7814 if (computeviscous){7815 xDelete<IssmDouble>(viscoustimes);7816 xDelete<IssmDouble>(viscousfield);7817 if(computefuture){7818 xDelete<IssmDouble>(grdfieldinterp);7819 }7820 }7821 7822 7729 } /*}}}*/ 7823 7730 … … 7833 7740 7834 7741 } /*}}}*/ 7835 7836 7742 #endif 7837 7743 -
issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp
r27059 r27061 340 340 } 341 341 342 cout << "DEBUG: Sealevelchange convolution cleared\n";343 344 342 /*retrieve sea level average and ocean area:*/ 345 343 for(Object* & object : femmodel->elements->objects){ … … 347 345 element->SealevelchangeOceanAverage(loads, oceanareas, subelementoceanareas, sealevelpercpu, slgeom); 348 346 } 349 350 cout << "DEBUG: Sealevelchange Oceanavaverage cleared\n";351 347 352 348 loads->AssembleSealevelLoads(); … … 364 360 ConserveOceanMass(femmodel,loads,barycontrib->Total()/totaloceanarea - oceanaverage,slgeom); 365 361 366 cout << "DEBUG: Sealevelchange Conserve ocean mass cleared\n";367 368 362 //broadcast sea level loads 369 363 loads->BroadcastSealevelLoads(); … … 372 366 if(slcconvergence(loads->vsealevelloads,oldsealevelloads,eps_rel,eps_abs))break; 373 367 374 cout << "DEBUG: Sealevelchange convergence cleared\n";375 368 //early return? 376 369 if(iterations>=max_nonlinear_iterations)break; … … 437 430 } 438 431 439 /*Free ressources*/440 delete loads;441 delete oldsealevelloads;442 delete oceanareas;443 delete subelementoceanareas;444 445 432 } 446 433 /*}}}*/ … … 620 607 #endif 621 608 622 xDelete<IssmDouble>(xxe);623 xDelete<IssmDouble>(yye);624 xDelete<IssmDouble>(zze);625 xDelete<IssmDouble>(areae);626 627 609 return; 628 610 … … 690 672 femmodel->parameters->AddObject(new DoubleVecParam(ZzeEnum,zze,nel)); 691 673 femmodel->parameters->AddObject(new DoubleVecParam(AreaeEnum,areae,nel)); 692 693 xDelete<IssmDouble>(xxe);694 xDelete<IssmDouble>(yye);695 xDelete<IssmDouble>(zze);696 xDelete<IssmDouble>(areae);697 674 698 675 return slgeom; … … 887 864 xDelete<IssmDouble>(m2); 888 865 xDelete<IssmDouble>(m3); 889 890 xDelete<IssmDouble>(pmtf_col);891 xDelete<IssmDouble>(pmtf_ortho);892 xDelete<IssmDouble>(pmtf_z);893 866 if (viscous){ 894 xDelete<IssmDouble>(viscoustimes);895 xDelete<IssmDouble>(viscouspolarmotion);896 867 if (computefuture){ 897 868 xDelete<IssmDouble>(m1interp); … … 964 935 /*free allocations:*/ 965 936 xDelete<IssmDouble>(viscoustimes); 966 if (rotation) xDelete<IssmDouble>(viscouspolarmotion); 967 } 968 969 970 } /*}}}*/ 937 } 938 939 940 } 971 941 void ConserveOceanMass(FemModel* femmodel,GrdLoads* loads, IssmDouble offset, SealevelGeometry* slgeom){ /*{{{*/ 972 942 … … 1004 974 loadcopy=vloadcopy->ToMPISerial(); 1005 975 1006 delete vloadcopy;1007 976 return loadcopy; 1008 977
Note:
See TracChangeset
for help on using the changeset viewer.