source:
issm/oecreview/Archive/24684-25833/ISSM-24939-24940.diff@
25834
Last change on this file since 25834 was 25834, checked in by , 4 years ago | |
---|---|
File size: 52.0 KB |
-
../trunk-jpl/src/m/classes/slr.m
32 32 horiz = 0; 33 33 Ngia = NaN; 34 34 Ugia = NaN; 35 eartharea = 4*pi*planetradius('earth')^2; 35 36 36 37 requested_outputs = {}; 37 38 transitions = {}; … … 101 102 return; 102 103 end 103 104 104 md = checkfield(md,'fieldname','slr.deltathickness','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]); 105 %md = checkfield(md,'fieldname','slr.deltathickness','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]); 106 md = checkfield(md,'fieldname','slr.deltathickness','timeseries',1,'NaN',1,'Inf',1); 105 107 md = checkfield(md,'fieldname','slr.sealevel','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]); 106 108 md = checkfield(md,'fieldname','slr.spcthickness','Inf',1,'timeseries',1); 107 109 md = checkfield(md,'fieldname','slr.love_h','NaN',1,'Inf',1); … … 131 133 end 132 134 133 135 %cross check that whereever we have an ice load, the mask is <0 on each vertex: 134 pos=find(self.deltathickness);135 maskpos=md.mask.ice_levelset(md.mesh.elements(pos,:));136 [els,vertices]=find(maskpos>0);137 if length(els),138 warning('slr checkconsistency fail: there are elements with ice loads where some vertices are not on the ice!');139 end136 %pos=find(self.deltathickness); 137 %maskpos=md.mask.ice_levelset(md.mesh.elements(pos,:)); 138 %[els,vertices]=find(maskpos>0); 139 %if length(els), 140 % warning('slr checkconsistency fail: there are elements with ice loads where some vertices are not on the ice!'); 141 %end 140 142 141 143 %check that if geodetic is requested, we are a mesh3dsurface model (planet), or if we are not, 142 144 %a coupler to a planet model is provided. … … 220 222 WriteData(fid,prefix,'object',self,'fieldname','loop_increment','format','Integer'); 221 223 WriteData(fid,prefix,'object',self,'fieldname','horiz','format','Integer'); 222 224 WriteData(fid,prefix,'object',self,'fieldname','geodetic','format','Integer'); 225 WriteData(fid,prefix,'object',self,'fieldname','eartharea','format','Double'); 223 226 224 227 %process requested outputs 225 228 outputs = self.requested_outputs; -
../trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp
320 320 parameters->AddObject(iomodel->CopyConstantObject("md.slr.angular_velocity",SealevelriseAngularVelocityEnum)); 321 321 parameters->AddObject(iomodel->CopyConstantObject("md.slr.ocean_area_scaling",SealevelriseOceanAreaScalingEnum)); 322 322 parameters->AddObject(iomodel->CopyConstantObject("md.slr.geodetic",SealevelriseGeodeticEnum)); 323 parameters->AddObject(iomodel->CopyConstantObject("md.slr.eartharea",SealevelEarthAreaEnum)); 323 324 324 325 /*Deal with dsl multi-model ensembles: {{{*/ 325 326 iomodel->FetchData(&dslmodel,"md.dsl.model"); -
../trunk-jpl/src/c/shared/Enum/Enum.vim
301 301 syn keyword cConstant ResultsEnum 302 302 syn keyword cConstant RootPathEnum 303 303 syn keyword cConstant SaveResultsEnum 304 syn keyword cConstant SealevelEarthAreaEnum 304 305 syn keyword cConstant SealevelEustaticEnum 305 306 syn keyword cConstant SealevelriseAbstolEnum 306 307 syn keyword cConstant SealevelriseAngularVelocityEnum … … 1430 1431 syn keyword cType Results 1431 1432 syn keyword cType RiftStruct 1432 1433 syn keyword cType Riftfront 1434 syn keyword cType SealevelMasks 1433 1435 syn keyword cType Seg 1434 1436 syn keyword cType SegInput2 1435 1437 syn keyword cType SegRef -
../trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
295 295 ResultsEnum, 296 296 RootPathEnum, 297 297 SaveResultsEnum, 298 SealevelEarthAreaEnum, 298 299 SealevelEustaticEnum, 299 300 SealevelriseAbstolEnum, 300 301 SealevelriseAngularVelocityEnum, -
../trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
303 303 case ResultsEnum : return "Results"; 304 304 case RootPathEnum : return "RootPath"; 305 305 case SaveResultsEnum : return "SaveResults"; 306 case SealevelEarthAreaEnum : return "SealevelEarthArea"; 306 307 case SealevelEustaticEnum : return "SealevelEustatic"; 307 308 case SealevelriseAbstolEnum : return "SealevelriseAbstol"; 308 309 case SealevelriseAngularVelocityEnum : return "SealevelriseAngularVelocity"; -
../trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
309 309 else if (strcmp(name,"Results")==0) return ResultsEnum; 310 310 else if (strcmp(name,"RootPath")==0) return RootPathEnum; 311 311 else if (strcmp(name,"SaveResults")==0) return SaveResultsEnum; 312 else if (strcmp(name,"SealevelEarthArea")==0) return SealevelEarthAreaEnum; 312 313 else if (strcmp(name,"SealevelEustatic")==0) return SealevelEustaticEnum; 313 314 else if (strcmp(name,"SealevelriseAbstol")==0) return SealevelriseAbstolEnum; 314 315 else if (strcmp(name,"SealevelriseAngularVelocity")==0) return SealevelriseAngularVelocityEnum; … … 381 382 else if (strcmp(name,"SmbK")==0) return SmbKEnum; 382 383 else if (strcmp(name,"SmbNumRequestedOutputs")==0) return SmbNumRequestedOutputsEnum; 383 384 else if (strcmp(name,"SmbPfac")==0) return SmbPfacEnum; 384 else if (strcmp(name,"SmbRdl")==0) return SmbRdlEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"SmbRequestedOutputs")==0) return SmbRequestedOutputsEnum; 388 if (strcmp(name,"SmbRdl")==0) return SmbRdlEnum; 389 else if (strcmp(name,"SmbRequestedOutputs")==0) return SmbRequestedOutputsEnum; 389 390 else if (strcmp(name,"SmbRlaps")==0) return SmbRlapsEnum; 390 391 else if (strcmp(name,"SmbRlapslgm")==0) return SmbRlapslgmEnum; 391 392 else if (strcmp(name,"SmbRunoffalti")==0) return SmbRunoffaltiEnum; … … 504 505 else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum; 505 506 else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum; 506 507 else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum; 507 else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum; 511 if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum; 512 else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum; 512 513 else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum; 513 514 else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum; 514 515 else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum; … … 627 628 else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum; 628 629 else if (strcmp(name,"Ice")==0) return IceEnum; 629 630 else if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum; 630 else if (strcmp(name,"Input")==0) return InputEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum; 634 if (strcmp(name,"Input")==0) return InputEnum; 635 else if (strcmp(name,"InversionCostFunctionsCoefficients")==0) return InversionCostFunctionsCoefficientsEnum; 635 636 else if (strcmp(name,"InversionSurfaceObs")==0) return InversionSurfaceObsEnum; 636 637 else if (strcmp(name,"InversionThicknessObs")==0) return InversionThicknessObsEnum; 637 638 else if (strcmp(name,"InversionVelObs")==0) return InversionVelObsEnum; … … 750 751 else if (strcmp(name,"SmbIsInitialized")==0) return SmbIsInitializedEnum; 751 752 else if (strcmp(name,"SmbMAdd")==0) return SmbMAddEnum; 752 753 else if (strcmp(name,"SmbMassBalanceClimate")==0) return SmbMassBalanceClimateEnum; 753 else if (strcmp(name,"SmbMassBalance")==0) return SmbMassBalanceEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"SmbMassBalanceSubstep")==0) return SmbMassBalanceSubstepEnum; 757 if (strcmp(name,"SmbMassBalance")==0) return SmbMassBalanceEnum; 758 else if (strcmp(name,"SmbMassBalanceSubstep")==0) return SmbMassBalanceSubstepEnum; 758 759 else if (strcmp(name,"SmbMassBalanceTransient")==0) return SmbMassBalanceTransientEnum; 759 760 else if (strcmp(name,"SmbMeanLHF")==0) return SmbMeanLHFEnum; 760 761 else if (strcmp(name,"SmbMeanSHF")==0) return SmbMeanSHFEnum; … … 873 874 else if (strcmp(name,"Outputdefinition10")==0) return Outputdefinition10Enum; 874 875 else if (strcmp(name,"Outputdefinition11")==0) return Outputdefinition11Enum; 875 876 else if (strcmp(name,"Outputdefinition12")==0) return Outputdefinition12Enum; 876 else if (strcmp(name,"Outputdefinition13")==0) return Outputdefinition13Enum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"Outputdefinition14")==0) return Outputdefinition14Enum; 880 if (strcmp(name,"Outputdefinition13")==0) return Outputdefinition13Enum; 881 else if (strcmp(name,"Outputdefinition14")==0) return Outputdefinition14Enum; 881 882 else if (strcmp(name,"Outputdefinition15")==0) return Outputdefinition15Enum; 882 883 else if (strcmp(name,"Outputdefinition16")==0) return Outputdefinition16Enum; 883 884 else if (strcmp(name,"Outputdefinition17")==0) return Outputdefinition17Enum; … … 996 997 else if (strcmp(name,"BalancevelocitySolution")==0) return BalancevelocitySolutionEnum; 997 998 else if (strcmp(name,"BasalforcingsIsmip6")==0) return BasalforcingsIsmip6Enum; 998 999 else if (strcmp(name,"BasalforcingsPico")==0) return BasalforcingsPicoEnum; 999 else if (strcmp(name,"BeckmannGoosseFloatingMeltRate")==0) return BeckmannGoosseFloatingMeltRateEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum; 1003 if (strcmp(name,"BeckmannGoosseFloatingMeltRate")==0) return BeckmannGoosseFloatingMeltRateEnum; 1004 else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum; 1004 1005 else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum; 1005 1006 else if (strcmp(name,"BoolInput")==0) return BoolInputEnum; 1006 1007 else if (strcmp(name,"BoolInput2")==0) return BoolInput2Enum; … … 1119 1120 else if (strcmp(name,"Hydrologyshakti")==0) return HydrologyshaktiEnum; 1120 1121 else if (strcmp(name,"Hydrologyshreve")==0) return HydrologyshreveEnum; 1121 1122 else if (strcmp(name,"IceMass")==0) return IceMassEnum; 1122 else if (strcmp(name,"IceMassScaled")==0) return IceMassScaledEnum;1123 1123 else stage=10; 1124 1124 } 1125 1125 if(stage==10){ 1126 if (strcmp(name,"IceVolumeAboveFloatation")==0) return IceVolumeAboveFloatationEnum; 1126 if (strcmp(name,"IceMassScaled")==0) return IceMassScaledEnum; 1127 else if (strcmp(name,"IceVolumeAboveFloatation")==0) return IceVolumeAboveFloatationEnum; 1127 1128 else if (strcmp(name,"IceVolumeAboveFloatationScaled")==0) return IceVolumeAboveFloatationScaledEnum; 1128 1129 else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum; 1129 1130 else if (strcmp(name,"IceVolumeScaled")==0) return IceVolumeScaledEnum; … … 1242 1243 else if (strcmp(name,"Paterson")==0) return PatersonEnum; 1243 1244 else if (strcmp(name,"Pengrid")==0) return PengridEnum; 1244 1245 else if (strcmp(name,"Penpair")==0) return PenpairEnum; 1245 else if (strcmp(name,"Penta")==0) return PentaEnum;1246 1246 else stage=11; 1247 1247 } 1248 1248 if(stage==11){ 1249 if (strcmp(name,"PentaInput")==0) return PentaInputEnum; 1249 if (strcmp(name,"Penta")==0) return PentaEnum; 1250 else if (strcmp(name,"PentaInput")==0) return PentaInputEnum; 1250 1251 else if (strcmp(name,"Profiler")==0) return ProfilerEnum; 1251 1252 else if (strcmp(name,"ProfilingCurrentFlops")==0) return ProfilingCurrentFlopsEnum; 1252 1253 else if (strcmp(name,"ProfilingCurrentMem")==0) return ProfilingCurrentMemEnum; -
../trunk-jpl/src/c/cores/cores.h
57 57 void steric_core(FemModel* femmodel); 58 58 void sealevelrise_core_geometry(FemModel* femmodel); 59 59 SealevelMasks* sealevelrise_core_masks(FemModel* femmodel); 60 Vector<IssmDouble>* sealevelrise_core_eustatic(FemModel* femmodel,SealevelMasks* mask, IssmDouble* p eartharea,IssmDouble* poceanarea);61 Vector<IssmDouble>* sealevelrise_core_noneustatic(FemModel* femmodel,SealevelMasks* masks, Vector<IssmDouble>* RSLg_eustatic,IssmDouble eartharea,IssmDoubleoceanarea);62 void sealevelrise_core_elastic(Vector<IssmDouble>** pU_radial, Vector<IssmDouble>** pU_north,Vector<IssmDouble>** pU_east,FemModel* femmodel,Vector<IssmDouble>* RSLg, IssmDouble eartharea,SealevelMasks* masks);60 Vector<IssmDouble>* sealevelrise_core_eustatic(FemModel* femmodel,SealevelMasks* mask, IssmDouble* poceanarea); 61 Vector<IssmDouble>* sealevelrise_core_noneustatic(FemModel* femmodel,SealevelMasks* masks, Vector<IssmDouble>* RSLg_eustatic,IssmDouble oceanarea); 62 void sealevelrise_core_elastic(Vector<IssmDouble>** pU_radial, Vector<IssmDouble>** pU_north,Vector<IssmDouble>** pU_east,FemModel* femmodel,Vector<IssmDouble>* RSLg, SealevelMasks* masks); 63 63 void sealevelrise_core_viscous(Vector<IssmDouble>** pU_gia,Vector<IssmDouble>** pN_gia,FemModel* femmodel,Vector<IssmDouble>* RSLg); 64 64 void sealevelrise_diagnostics(FemModel* femmodel,Vector<IssmDouble>* RSLg); 65 65 IssmDouble objectivefunction(IssmDouble search_scalar,FemModel* femmodel); -
../trunk-jpl/src/c/cores/sealevelrise_core.cpp
95 95 int horiz; 96 96 int geodetic=0; 97 97 IssmDouble dt; 98 IssmDouble eartharea,oceanarea;98 IssmDouble oceanarea; 99 99 100 100 /*Should we even be here?:*/ 101 101 femmodel->parameters->FindParam(&geodetic,SealevelriseGeodeticEnum); if(!geodetic)return; … … 152 152 masks=sealevelrise_core_masks(femmodel); 153 153 154 154 /*call eustatic core (generalized eustatic - Farrel and Clark, Eq 4, 1st, 3rd and 4rd terms on the RHS) */ 155 RSLg_eustatic=sealevelrise_core_eustatic(femmodel,masks,& eartharea,&oceanarea);155 RSLg_eustatic=sealevelrise_core_eustatic(femmodel,masks,&oceanarea); 156 156 157 157 /*call non-eustatic core (ocean loading tems - 2nd and 5th terms on the RHS of Farrel and Clark) */ 158 RSLg=sealevelrise_core_noneustatic(femmodel,masks,RSLg_eustatic, eartharea,oceanarea);158 RSLg=sealevelrise_core_noneustatic(femmodel,masks,RSLg_eustatic,oceanarea); 159 159 160 160 /*compute other elastic geodetic signatures, such as components of 3-D crustal motion: */ 161 sealevelrise_core_elastic(&U_esa,&U_north_esa,&U_east_esa,femmodel,RSLg, eartharea,masks);161 sealevelrise_core_elastic(&U_esa,&U_north_esa,&U_east_esa,femmodel,RSLg,masks); 162 162 163 163 /*compute viscosus (GIA) geodetic signatures:*/ 164 164 sealevelrise_core_viscous(&U_gia,&N_gia,femmodel,RSLg); … … 353 353 354 354 355 355 }/*}}}*/ 356 Vector<IssmDouble>* sealevelrise_core_eustatic(FemModel* femmodel,SealevelMasks* masks, IssmDouble* p eartharea,IssmDouble* poceanarea){ /*{{{*/356 Vector<IssmDouble>* sealevelrise_core_eustatic(FemModel* femmodel,SealevelMasks* masks, IssmDouble* poceanarea){ /*{{{*/ 357 357 358 358 /*Eustatic core of the SLR solution (terms that are constant with respect to sea-level)*/ 359 359 … … 367 367 IssmDouble *longitude = NULL; 368 368 IssmDouble *radius = NULL; 369 369 int loop; 370 IssmDouble eartharea,oceanarea;370 IssmDouble oceanarea; 371 371 372 372 /*outputs:*/ 373 373 IssmDouble eustatic; … … 387 387 RSLgi = new Vector<IssmDouble>(gsize); 388 388 389 389 /*call the eustatic main module: */ 390 femmodel->SealevelriseEustatic(RSLgi,& eartharea, &oceanarea,&eustatic, masks, latitude, longitude, radius,loop); //this computes390 femmodel->SealevelriseEustatic(RSLgi,&oceanarea,&eustatic, masks, latitude, longitude, radius,loop); //this computes 391 391 392 392 /*we need to average RSLgi over the ocean: RHS term 4 in Eq.4 of Farrel and clarke. Only the elements can do that: */ 393 393 RSLgi_oceanaverage=femmodel->SealevelriseOceanAverage(RSLgi,masks, oceanarea); … … 405 405 xDelete<IssmDouble>(radius); 406 406 407 407 /*Assign output pointers and return: */ 408 *peartharea=eartharea;409 408 *poceanarea=oceanarea; 410 409 return RSLgi; 411 410 }/*}}}*/ 412 Vector<IssmDouble>* sealevelrise_core_noneustatic(FemModel* femmodel, SealevelMasks* masks, Vector<IssmDouble>* RSLg_eustatic,IssmDouble eartharea,IssmDoubleoceanarea){ /*{{{*/411 Vector<IssmDouble>* sealevelrise_core_noneustatic(FemModel* femmodel, SealevelMasks* masks, Vector<IssmDouble>* RSLg_eustatic,IssmDouble oceanarea){ /*{{{*/ 413 412 414 413 /*sealevelrise_core_noneustatic.cpp //this computes the contributions from Eq.4 of Farrel and Clarke, rhs terms 2 and 5. 415 414 non eustatic core of the SLR solution */ … … 478 477 RSLgo = new Vector<IssmDouble>(gsize); RSLgo->Assemble(); 479 478 480 479 /*call the non eustatic module: */ 481 femmodel->SealevelriseNonEustatic(RSLgo, RSLg_old, eartharea,masks, latitude,longitude, radius,verboseconvolution,loop);480 femmodel->SealevelriseNonEustatic(RSLgo, RSLg_old, masks, latitude,longitude, radius,verboseconvolution,loop); 482 481 483 482 /*assemble solution vector: */ 484 483 RSLgo->Assemble(); … … 487 486 488 487 /*call rotational feedback module: */ 489 488 RSLgo_rot = new Vector<IssmDouble>(gsize); RSLgo_rot->Assemble(); 490 femmodel->SealevelriseRotationalFeedback(RSLgo_rot,RSLg_old,&Ixz,&Iyz,&Izz, eartharea,masks, latitude,longitude,radius);489 femmodel->SealevelriseRotationalFeedback(RSLgo_rot,RSLg_old,&Ixz,&Iyz,&Izz, masks, latitude,longitude,radius); 491 490 RSLgo_rot->Assemble(); 492 491 493 492 /*save changes in inertia tensor as results: */ … … 536 535 537 536 return RSLg; 538 537 } /*}}}*/ 539 void sealevelrise_core_elastic(Vector<IssmDouble>** pU_esa, Vector<IssmDouble>** pU_north_esa,Vector<IssmDouble>** pU_east_esa,FemModel* femmodel,Vector<IssmDouble>* RSLg, IssmDouble eartharea,SealevelMasks* masks){ /*{{{*/538 void sealevelrise_core_elastic(Vector<IssmDouble>** pU_esa, Vector<IssmDouble>** pU_north_esa,Vector<IssmDouble>** pU_east_esa,FemModel* femmodel,Vector<IssmDouble>* RSLg, SealevelMasks* masks){ /*{{{*/ 540 539 541 540 Vector<IssmDouble> *U_esa = NULL; 542 541 Vector<IssmDouble> *U_north_esa = NULL; … … 576 575 VertexCoordinatesx(&xx,&yy,&zz,femmodel->vertices); 577 576 578 577 /*call the elastic main modlule:*/ 579 femmodel->SealevelriseElastic(U_esa,U_north_esa,U_east_esa,RSLg, eartharea,masks, latitude,longitude,radius,xx,yy,zz,loop,horiz);578 femmodel->SealevelriseElastic(U_esa,U_north_esa,U_east_esa,RSLg, masks, latitude,longitude,radius,xx,yy,zz,loop,horiz); 580 579 581 580 /*Assign output pointers:*/ 582 581 *pU_esa=U_esa; -
../trunk-jpl/src/c/classes/Elements/Penta.h
208 208 #endif 209 209 #ifdef _HAVE_ESA_ 210 210 void EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,Vector<IssmDouble>* pX,Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");}; 211 void EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz ,IssmDouble eartharea){_error_("not implemented yet!");};211 void EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz){_error_("not implemented yet!");}; 212 212 #endif 213 213 #ifdef _HAVE_SEALEVELRISE_ 214 214 IssmDouble OceanAverage(IssmDouble* Sg, SealevelMasks* masks){_error_("not implemented yet!");}; 215 215 void SetSealevelMasks(SealevelMasks* masks){_error_("not implemented yet!");}; 216 void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks ,IssmDouble eartharea){_error_("not implemented yet!");};216 void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks){_error_("not implemented yet!");}; 217 217 void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius){_error_("not implemented yet!");}; 218 void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea ,IssmDouble eartharea){_error_("not implemented yet!");};219 void SealevelriseNonEustatic(IssmDouble* Sgo, IssmDouble* Sg_old, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius ,IssmDouble eartharea){_error_("not implemented yet!");};220 void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz, IssmDouble eartharea,int horiz){_error_("not implemented yet!");};218 void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea){_error_("not implemented yet!");}; 219 void SealevelriseNonEustatic(IssmDouble* Sgo, IssmDouble* Sg_old, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius){_error_("not implemented yet!");}; 220 void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,int horiz){_error_("not implemented yet!");}; 221 221 #endif 222 222 223 223 /*}}}*/ -
../trunk-jpl/src/c/classes/Elements/Seg.h
168 168 #endif 169 169 #ifdef _HAVE_ESA_ 170 170 void EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,Vector<IssmDouble>* pX,Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");}; 171 void EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz ,IssmDouble eartharea){_error_("not implemented yet!");};171 void EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz){_error_("not implemented yet!");}; 172 172 #endif 173 173 #ifdef _HAVE_SEALEVELRISE_ 174 void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks ,IssmDouble eartharea){_error_("not implemented yet!");};174 void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks){_error_("not implemented yet!");}; 175 175 void SetSealevelMasks(SealevelMasks* masks){_error_("not implemented yet!");}; 176 176 void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius){_error_("not implemented yet!");}; 177 void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea ,IssmDouble eartharea){_error_("not implemented yet!");};178 void SealevelriseNonEustatic(IssmDouble* Sgo,IssmDouble* Sg_old, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius ,IssmDouble eartharea){_error_("not implemented yet!");};179 void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz, IssmDouble eartharea,int horiz){_error_("not implemented yet!");};177 void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea){_error_("not implemented yet!");}; 178 void SealevelriseNonEustatic(IssmDouble* Sgo,IssmDouble* Sg_old, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius){_error_("not implemented yet!");}; 179 void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,int horiz){_error_("not implemented yet!");}; 180 180 IssmDouble OceanAverage(IssmDouble* Sg, SealevelMasks* masks){_error_("not implemented yet!");}; 181 181 #endif 182 182 -
../trunk-jpl/src/c/classes/Elements/Tetra.h
174 174 #endif 175 175 #ifdef _HAVE_ESA_ 176 176 void EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,Vector<IssmDouble>* pX,Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy){_error_("not implemented yet!");}; 177 void EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz ,IssmDouble eartharea){_error_("not implemented yet!");};177 void EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz){_error_("not implemented yet!");}; 178 178 #endif 179 179 #ifdef _HAVE_SEALEVELRISE_ 180 180 void SetSealevelMasks(SealevelMasks* masks){_error_("not implemented yet!");}; 181 void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks ,IssmDouble eartharea){_error_("not implemented yet!");};181 void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks){_error_("not implemented yet!");}; 182 182 void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius){_error_("not implemented yet!");}; 183 void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea ,IssmDouble eartharea){_error_("not implemented yet!");};184 void SealevelriseNonEustatic(IssmDouble* Sgo, IssmDouble* Sg_old, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius ,IssmDouble eartharea){_error_("not implemented yet!");};185 void SealevelriseGeodetic(IssmDouble* Up ,IssmDouble* North, IssmDouble* East, IssmDouble* Sg, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz, IssmDouble eartharea,int horiz){_error_("not implemented yet!");};183 void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea){_error_("not implemented yet!");}; 184 void SealevelriseNonEustatic(IssmDouble* Sgo, IssmDouble* Sg_old, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius){_error_("not implemented yet!");}; 185 void SealevelriseGeodetic(IssmDouble* Up ,IssmDouble* North, IssmDouble* East, IssmDouble* Sg, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,int horiz){_error_("not implemented yet!");}; 186 186 IssmDouble OceanAverage(IssmDouble* Sg, SealevelMasks* masks){_error_("not implemented yet!");}; 187 187 #endif 188 188 -
../trunk-jpl/src/c/classes/Elements/Element.h
370 370 #endif 371 371 #ifdef _HAVE_ESA_ 372 372 virtual void EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast, Vector<IssmDouble>* pX, Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy)=0; 373 virtual void EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz ,IssmDouble eartharea)=0;373 virtual void EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz)=0; 374 374 #endif 375 375 #ifdef _HAVE_SEALEVELRISE_ 376 376 virtual void SetSealevelMasks(SealevelMasks* masks)=0; … … 377 377 virtual IssmDouble GetArea3D(void)=0; 378 378 virtual IssmDouble GetAreaSpherical(void)=0; 379 379 virtual IssmDouble OceanAverage(IssmDouble* Sg, SealevelMasks* masks)=0; 380 virtual void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks ,IssmDouble eartharea)=0;381 virtual void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic,SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea ,IssmDouble eartharea)=0;380 virtual void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks)=0; 381 virtual void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic,SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea)=0; 382 382 virtual void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius)=0; 383 virtual void SealevelriseNonEustatic(IssmDouble* Sgo, IssmDouble* Sg_old,SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius ,IssmDouble eartharea)=0;384 virtual void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg,SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz, IssmDouble eartharea,int horiz)=0;383 virtual void SealevelriseNonEustatic(IssmDouble* Sgo, IssmDouble* Sg_old,SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius)=0; 384 virtual void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg,SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,int horiz)=0; 385 385 #endif 386 386 387 387 }; -
../trunk-jpl/src/c/classes/Elements/Tria.h
159 159 #endif 160 160 #ifdef _HAVE_ESA_ 161 161 void EsaGeodetic2D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast, Vector<IssmDouble>* pX,Vector<IssmDouble>* pY,IssmDouble* xx,IssmDouble* yy); 162 void EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz ,IssmDouble eartharea);162 void EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz); 163 163 #endif 164 164 #ifdef _HAVE_SEALEVELRISE_ 165 165 IssmDouble OceanAverage(IssmDouble* Sg, SealevelMasks* masks); 166 void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old,SealevelMasks* masks , IssmDouble eartharea);166 void SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old,SealevelMasks* masks); 167 167 void SetSealevelMasks(SealevelMasks* masks); 168 168 void SealevelriseGeometry(IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius); 169 void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic,SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea ,IssmDouble eartharea);170 void SealevelriseEustaticIce(IssmDouble* Sgi, IssmDouble* peustatic,SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea ,IssmDouble eartharea);171 void SealevelriseEustaticBottomPressure(IssmDouble* Sgi, IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea ,IssmDouble eartharea);172 void SealevelriseNonEustatic(IssmDouble* Sgo,IssmDouble* Sg_old,SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius ,IssmDouble eartharea);173 void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg,SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz, IssmDouble eartharea,int horiz);169 void SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic,SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea); 170 void SealevelriseEustaticIce(IssmDouble* Sgi, IssmDouble* peustatic,SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea); 171 void SealevelriseEustaticBottomPressure(IssmDouble* Sgi, IssmDouble* peustatic,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea); 172 void SealevelriseNonEustatic(IssmDouble* Sgo,IssmDouble* Sg_old,SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius); 173 void SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North, IssmDouble* East, IssmDouble* Sg,SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,int horiz); 174 174 #endif 175 175 /*}}}*/ 176 176 /*Tria specific routines:{{{*/ -
../trunk-jpl/src/c/classes/FemModel.h
162 162 void EsaGeodetic3D(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz); 163 163 #endif 164 164 #ifdef _HAVE_SEALEVELRISE_ 165 void SealevelriseEustatic(Vector<IssmDouble>* pSgi, IssmDouble* p eartharea, IssmDouble* poceanarea, IssmDouble* peustatic, SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius,int loop);165 void SealevelriseEustatic(Vector<IssmDouble>* pSgi, IssmDouble* poceanarea, IssmDouble* peustatic, SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius,int loop); 166 166 void SealevelriseGeometry(IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius); 167 void SealevelriseNonEustatic(Vector<IssmDouble>* pSgo, Vector<IssmDouble>* pSg_old, IssmDouble eartharea,SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius,bool verboseconvolution,int loop);168 void SealevelriseRotationalFeedback(Vector<IssmDouble>* pRSLgo_rot, Vector<IssmDouble>* pRSLg_old, IssmDouble* pIxz, IssmDouble* pIyz, IssmDouble* pIzz, IssmDouble eartharea,SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius);169 void SealevelriseElastic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pSg_old, IssmDouble eartharea,SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz,int loop,int horiz);167 void SealevelriseNonEustatic(Vector<IssmDouble>* pSgo, Vector<IssmDouble>* pSg_old, SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius,bool verboseconvolution,int loop); 168 void SealevelriseRotationalFeedback(Vector<IssmDouble>* pRSLgo_rot, Vector<IssmDouble>* pRSLg_old, IssmDouble* pIxz, IssmDouble* pIyz, IssmDouble* pIzz, SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius); 169 void SealevelriseElastic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pSg_old, SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz,int loop,int horiz); 170 170 IssmDouble SealevelriseOceanAverage(Vector<IssmDouble>* Sg,SealevelMasks* masks, IssmDouble oceanarea); 171 171 #endif 172 172 void HydrologyEPLupdateDomainx(IssmDouble* pEplcount); -
../trunk-jpl/src/c/classes/FemModel.cpp
4634 4634 /*}}}*/ 4635 4635 void FemModel::EsaGeodetic3D(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz){/*{{{*/ 4636 4636 4637 IssmDouble eartharea=0;4638 IssmDouble eartharea_cpu=0;4639 4640 4637 int ns,nsmax; 4641 4638 4642 4639 /*Go through elements, and add contribution from each element to the deflection vector wg:*/ … … 4645 4642 /*First, figure out the surface area of Earth: */ 4646 4643 for(int i=0;i<ns;i++){ 4647 4644 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 4648 eartharea_cpu += element->GetAreaSpherical();4649 4645 } 4650 ISSM_MPI_Reduce (&eartharea_cpu,&eartharea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );4651 ISSM_MPI_Bcast(&eartharea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());4652 4646 4653 4647 /*Figure out max of ns: */ 4654 4648 ISSM_MPI_Reduce(&ns,&nsmax,1,ISSM_MPI_INT,ISSM_MPI_MAX,0,IssmComm::GetComm()); … … 4658 4652 for(int i=0;i<nsmax;i++){ 4659 4653 if(i<ns){ 4660 4654 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 4661 element->EsaGeodetic3D(pUp,pNorth,pEast,latitude,longitude,radius,xx,yy,zz ,eartharea);4655 element->EsaGeodetic3D(pUp,pNorth,pEast,latitude,longitude,radius,xx,yy,zz); 4662 4656 } 4663 4657 if(i%100==0){ 4664 4658 pUp->Assemble(); … … 4693 4687 4694 4688 } 4695 4689 /*}}}*/ 4696 void FemModel::SealevelriseEustatic(Vector<IssmDouble>* pRSLgi, IssmDouble* p eartharea, IssmDouble* poceanarea, IssmDouble* peustatic, SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius,int loop) { /*{{{*/4690 void FemModel::SealevelriseEustatic(Vector<IssmDouble>* pRSLgi, IssmDouble* poceanarea, IssmDouble* peustatic, SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius,int loop) { /*{{{*/ 4697 4691 4698 4692 /*serialized vectors:*/ 4699 4693 IssmDouble eustatic = 0.; … … 4701 4695 IssmDouble eustatic_cpu_e = 0.; 4702 4696 IssmDouble oceanarea = 0.; 4703 4697 IssmDouble oceanarea_cpu = 0.; 4704 IssmDouble eartharea = 0.;4705 IssmDouble eartharea_cpu = 0.;4706 4698 4707 4699 /*Initialize temporary vector that will be used to sum eustatic components 4708 4700 * on all local elements, prior to assembly:*/ … … 4715 4707 for(int i=0;i<elements->Size();i++){ 4716 4708 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 4717 4709 IssmDouble area=element->GetAreaSpherical(); 4718 eartharea_cpu += area;4719 4710 if (masks->isoceanin[i]) oceanarea_cpu += area; 4720 4711 } 4721 4712 ISSM_MPI_Reduce (&oceanarea_cpu,&oceanarea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() ); … … 4722 4713 ISSM_MPI_Bcast(&oceanarea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 4723 4714 _assert_(oceanarea>0.); 4724 4715 4725 ISSM_MPI_Reduce (&eartharea_cpu,&eartharea,1,ISSM_MPI_DOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm() );4726 ISSM_MPI_Bcast(&eartharea,1,ISSM_MPI_DOUBLE,0,IssmComm::GetComm());4727 4728 4716 /*Call the sea level rise core: */ 4729 4717 for(int i=0;i<elements->Size();i++){ 4730 4718 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 4731 element->SealevelriseEustatic(RSLgi,&eustatic_cpu_e,masks, latitude,longitude,radius,oceanarea ,eartharea);4719 element->SealevelriseEustatic(RSLgi,&eustatic_cpu_e,masks, latitude,longitude,radius,oceanarea); 4732 4720 eustatic_cpu+=eustatic_cpu_e; 4733 4721 } 4734 4722 … … 4746 4734 xDelete<IssmDouble>(RSLgi); 4747 4735 4748 4736 /*Assign output pointers:*/ 4749 *peartharea = eartharea;4750 4737 *poceanarea = oceanarea; 4751 4738 *peustatic = eustatic; 4752 4739 4753 4740 } 4754 4741 /*}}}*/ 4755 void FemModel::SealevelriseNonEustatic(Vector<IssmDouble>* pRSLgo, Vector<IssmDouble>* pRSLg_old, IssmDouble eartharea,SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, bool verboseconvolution,int loop){/*{{{*/4742 void FemModel::SealevelriseNonEustatic(Vector<IssmDouble>* pRSLgo, Vector<IssmDouble>* pRSLg_old, SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, bool verboseconvolution,int loop){/*{{{*/ 4756 4743 4757 4744 /*serialized vectors:*/ 4758 4745 IssmDouble* RSLg_old=NULL; … … 4773 4760 /*Call the sea level rise core: */ 4774 4761 for(int i=0;i<elements->Size();i++){ 4775 4762 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 4776 element->SealevelriseNonEustatic(RSLgo,RSLg_old,masks, latitude,longitude,radius ,eartharea);4763 element->SealevelriseNonEustatic(RSLgo,RSLg_old,masks, latitude,longitude,radius); 4777 4764 } 4778 4765 pRSLgo->SetValues(gsize,indices,RSLgo,ADD_VAL); 4779 4766 pRSLgo->Assemble(); … … 4785 4772 4786 4773 } 4787 4774 /*}}}*/ 4788 void FemModel::SealevelriseRotationalFeedback(Vector<IssmDouble>* pRSLgo_rot, Vector<IssmDouble>* pRSLg_old, IssmDouble* pIxz, IssmDouble* pIyz, IssmDouble* pIzz, IssmDouble eartharea,SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius){/*{{{*/4775 void FemModel::SealevelriseRotationalFeedback(Vector<IssmDouble>* pRSLgo_rot, Vector<IssmDouble>* pRSLg_old, IssmDouble* pIxz, IssmDouble* pIyz, IssmDouble* pIzz, SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius){/*{{{*/ 4789 4776 4790 4777 /*serialized vectors:*/ 4791 4778 IssmDouble* RSLg_old=NULL; … … 4801 4788 IssmDouble moi_list_cpu[3]={0,0,0}; 4802 4789 for(int i=0;i<elements->Size();i++){ 4803 4790 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 4804 element->SealevelriseMomentOfInertia(&moi_list[0],RSLg_old,masks , eartharea);4791 element->SealevelriseMomentOfInertia(&moi_list[0],RSLg_old,masks ); 4805 4792 moi_list_cpu[0] += moi_list[0]; 4806 4793 moi_list_cpu[1] += moi_list[1]; 4807 4794 moi_list_cpu[2] += moi_list[2]; … … 4861 4848 4862 4849 } 4863 4850 /*}}}*/ 4864 void FemModel::SealevelriseElastic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pRSLg, IssmDouble eartharea,SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz,int loop,int horiz){/*{{{*/4851 void FemModel::SealevelriseElastic(Vector<IssmDouble>* pUp, Vector<IssmDouble>* pNorth, Vector<IssmDouble>* pEast, Vector<IssmDouble>* pRSLg, SealevelMasks* masks, IssmDouble* latitude, IssmDouble* longitude, IssmDouble* radius, IssmDouble* xx, IssmDouble* yy, IssmDouble* zz,int loop,int horiz){/*{{{*/ 4865 4852 4866 4853 /*serialized vectors:*/ 4867 4854 IssmDouble* RSLg=NULL; … … 4887 4874 /*Call the sea level rise core: */ 4888 4875 for(int i=0;i<elements->Size();i++){ 4889 4876 Element* element=xDynamicCast<Element*>(elements->GetObjectByOffset(i)); 4890 element->SealevelriseGeodetic(Up,North,East,RSLg,masks, latitude,longitude,radius,xx,yy,zz, eartharea,horiz);4877 element->SealevelriseGeodetic(Up,North,East,RSLg,masks, latitude,longitude,radius,xx,yy,zz,horiz); 4891 4878 } 4892 4879 4893 4880 pUp->SetValues(gsize,indices,Up,ADD_VAL); -
../trunk-jpl/src/c/classes/Elements/Tria.cpp
5288 5288 return; 5289 5289 } 5290 5290 /*}}}*/ 5291 void Tria::EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz ,IssmDouble eartharea){ /*{{{*/5291 void Tria::EsaGeodetic3D(Vector<IssmDouble>* pUp,Vector<IssmDouble>* pNorth,Vector<IssmDouble>* pEast,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz){ /*{{{*/ 5292 5292 5293 5293 /*diverse:*/ 5294 5294 int gsize; … … 5295 5295 bool spherical=true; 5296 5296 IssmDouble llr_list[NUMVERTICES][3]; 5297 5297 IssmDouble xyz_list[NUMVERTICES][3]; 5298 IssmDouble area ;5298 IssmDouble area,eartharea; 5299 5299 IssmDouble I; //ice/water loading 5300 5300 IssmDouble late,longe,re; 5301 5301 IssmDouble lati,longi,ri; … … 5327 5327 /*recover material parameters: */ 5328 5328 rho_ice=FindParam(MaterialsRhoIceEnum); 5329 5329 rho_earth=FindParam(MaterialsEarthDensityEnum); 5330 5331 /*recover earth area: */ 5332 this->parameters->FindParam(&eartharea,SealevelEarthAreaEnum); 5330 5333 5331 5334 /*how many dofs are we working with here? */ 5332 5335 this->parameters->FindParam(&gsize,MeshNumberofverticesEnum); … … 5464 5467 5465 5468 } 5466 5469 /*}}}*/ 5467 void Tria::SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks , IssmDouble eartharea){/*{{{*/5470 void Tria::SealevelriseMomentOfInertia(IssmDouble* dI_list,IssmDouble* Sg_old, SealevelMasks* masks){/*{{{*/ 5468 5471 /*early return if we are not on an ice cap OR ocean:*/ 5469 5472 if(!masks->isiceonly[this->lid] && !masks->isoceanin[this->lid]){ 5470 5473 dI_list[0] = 0.0; // this is important!!! … … 5474 5477 } 5475 5478 5476 5479 /*Compute area of element:*/ 5477 IssmDouble area ;5480 IssmDouble area,eartharea; 5478 5481 area=GetAreaSpherical(); 5479 5482 5483 /*recover earth area: */ 5484 this->parameters->FindParam(&eartharea,SealevelEarthAreaEnum); 5485 5480 5486 /*Compute lat,long,radius of elemental centroid: */ 5481 5487 bool spherical=true; 5482 5488 IssmDouble llr_list[NUMVERTICES][3]; … … 5660 5666 return; 5661 5667 } 5662 5668 /*}}}*/ 5663 void Tria::SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea ,IssmDouble eartharea){ /*{{{*/5669 void Tria::SealevelriseEustatic(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea){ /*{{{*/ 5664 5670 5665 5671 /*Computational flags:*/ 5666 5672 int bp_compute_fingerprints= 0; … … 5671 5677 if(!masks->isoceanin[this->lid]){ 5672 5678 /*ok, there is ocean in this element, we should compute eustatic loads for the ocean if we have requested 5673 5679 *bottom pressure fingerprints:*/ 5674 if(bp_compute_fingerprints)this->SealevelriseEustaticBottomPressure(Sgi,peustatic,latitude,longitude,radius,oceanarea ,eartharea);5680 if(bp_compute_fingerprints)this->SealevelriseEustaticBottomPressure(Sgi,peustatic,latitude,longitude,radius,oceanarea); 5675 5681 } 5676 5682 //if(!IsIceInElement()){ 5677 5683 /*there is ice in this eleemnt, let's compute the eustatic response for ice changes:*/ 5678 this->SealevelriseEustaticIce(Sgi,peustatic,masks, latitude,longitude,radius,oceanarea ,eartharea);5684 this->SealevelriseEustaticIce(Sgi,peustatic,masks, latitude,longitude,radius,oceanarea); 5679 5685 //} 5680 5686 5681 5687 } 5682 5688 /*}}}*/ 5683 void Tria::SealevelriseEustaticIce(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea ,IssmDouble eartharea){ /*{{{*/5689 void Tria::SealevelriseEustaticIce(IssmDouble* Sgi, IssmDouble* peustatic, SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea){ /*{{{*/ 5684 5690 5685 5691 /*diverse:*/ 5686 5692 int gsize,dummy; 5687 5693 bool spherical=true; 5688 5694 IssmDouble llr_list[NUMVERTICES][3]; 5689 IssmDouble area ;5695 IssmDouble area,eartharea; 5690 5696 IssmDouble I; //change in ice thickness or water level(Farrel and Clarke, Equ. 4) 5691 5697 IssmDouble rho; 5692 5698 IssmDouble late,longe,re; … … 5744 5750 this->parameters->FindParam(&computeelastic,SealevelriseElasticEnum); 5745 5751 this->parameters->FindParam(&scaleoceanarea,SealevelriseOceanAreaScalingEnum); 5746 5752 5753 /*recover earth area: */ 5754 this->parameters->FindParam(&eartharea,SealevelEarthAreaEnum); 5755 5747 5756 /*recover precomputed green function kernels:*/ 5748 5757 DoubleVecParam* parameter = static_cast<DoubleVecParam*>(this->parameters->FindParamObject(SealevelriseGRigidEnum)); _assert_(parameter); 5749 5758 parameter->GetParameterValueByPointer(&G_rigid_precomputed,&M); … … 5835 5844 return; 5836 5845 } 5837 5846 /*}}}*/ 5838 void Tria::SealevelriseEustaticBottomPressure(IssmDouble* Sgi,IssmDouble* peustatic, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea ,IssmDouble eartharea){ /*{{{*/5847 void Tria::SealevelriseEustaticBottomPressure(IssmDouble* Sgi,IssmDouble* peustatic, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble oceanarea){ /*{{{*/ 5839 5848 5840 5849 /*diverse:*/ 5841 5850 int gsize; 5842 5851 bool spherical=true; 5843 5852 IssmDouble llr_list[NUMVERTICES][3]; 5844 IssmDouble area ;5853 IssmDouble area,eartharea; 5845 5854 IssmDouble I; //change in ice thickness or water level(Farrel and Clarke, Equ. 4) 5846 5855 IssmDouble rho; 5847 5856 IssmDouble late,longe,re; … … 5875 5884 rho_water=FindParam(MaterialsRhoSeawaterEnum); 5876 5885 rho_earth=FindParam(MaterialsEarthDensityEnum); 5877 5886 5887 /*recover earth area: */ 5888 this->parameters->FindParam(&eartharea,SealevelEarthAreaEnum); 5889 5878 5890 /*recover love numbers and computational flags: */ 5879 5891 this->parameters->FindParam(&computerigid,SealevelriseRigidEnum); 5880 5892 this->parameters->FindParam(&computeelastic,SealevelriseElasticEnum); … … 5981 5993 return; 5982 5994 } 5983 5995 /*}}}*/ 5984 void Tria::SealevelriseNonEustatic(IssmDouble* Sgo,IssmDouble* Sg_old, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius ,IssmDouble eartharea){ /*{{{*/5996 void Tria::SealevelriseNonEustatic(IssmDouble* Sgo,IssmDouble* Sg_old, SealevelMasks* masks,IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius){ /*{{{*/ 5985 5997 5986 5998 /*diverse:*/ 5987 5999 int gsize,dummy; 5988 6000 bool spherical=true; 5989 6001 IssmDouble llr_list[NUMVERTICES][3]; 5990 IssmDouble area ;6002 IssmDouble area,eartharea; 5991 6003 IssmDouble S; //change in water water level(Farrel and Clarke, Equ. 4) 5992 6004 IssmDouble late,longe; 5993 6005 IssmDouble lati,longi,ri; … … 6025 6037 this->parameters->FindParam(&computerigid,SealevelriseRigidEnum); 6026 6038 this->parameters->FindParam(&computeelastic,SealevelriseElasticEnum); 6027 6039 6040 /*recover earth area: */ 6041 this->parameters->FindParam(&eartharea,SealevelEarthAreaEnum); 6042 6028 6043 /*early return if rigid or elastic not requested:*/ 6029 6044 if(!computerigid && !computeelastic) return; 6030 6045 … … 6080 6095 return; 6081 6096 } 6082 6097 /*}}}*/ 6083 void Tria::SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North ,IssmDouble* East,IssmDouble* Sg, SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz, IssmDouble eartharea,int horiz){ /*{{{*/6098 void Tria::SealevelriseGeodetic(IssmDouble* Up, IssmDouble* North ,IssmDouble* East,IssmDouble* Sg, SealevelMasks* masks, IssmDouble* latitude,IssmDouble* longitude,IssmDouble* radius,IssmDouble* xx,IssmDouble* yy,IssmDouble* zz,int horiz){ /*{{{*/ 6084 6099 6085 6100 /*diverse:*/ 6086 6101 int gsize,dummy; … … 6087 6102 bool spherical=true; 6088 6103 IssmDouble llr_list[NUMVERTICES][3]; 6089 6104 IssmDouble xyz_list[NUMVERTICES][3]; 6090 IssmDouble area ;6105 IssmDouble area,eartharea; 6091 6106 IssmDouble I, S; //change in relative ice thickness and sea level 6092 6107 IssmDouble late,longe,re; 6093 6108 IssmDouble lati,longi,ri; … … 6140 6155 /*how many dofs are we working with here? */ 6141 6156 this->parameters->FindParam(&gsize,MeshNumberofverticesEnum); 6142 6157 6158 /*recover earth area: */ 6159 this->parameters->FindParam(&eartharea,SealevelEarthAreaEnum); 6160 6143 6161 /*retrieve indices:*/ 6144 6162 if(computerigid){this->inputs2->GetArrayPtr(SealevelriseIndicesEnum,this->lid,&indices,&dummy); _assert_(dummy==gsize);} 6145 6163
Note:
See TracBrowser
for help on using the repository browser.