Changeset 21964
- Timestamp:
- 08/17/17 05:27:12 (8 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
r21915 r21964 16 16 int sedimentlimit_flag; 17 17 int transfer_flag; 18 int unconfined_flag; 18 19 int penalty_lock; 19 20 int hydro_maxiter; … … 32 33 iomodel->FetchData(&sedimentlimit_flag, "md.hydrology.sedimentlimit_flag" ); 33 34 iomodel->FetchData(&transfer_flag, "md.hydrology.transfer_flag" ); 35 iomodel->FetchData(&unconfined_flag, "md.hydrology.unconfined_flag" ); 34 36 iomodel->FetchData(&penalty_factor, "md.hydrology.penalty_factor" ); 35 37 iomodel->FetchData(&isefficientlayer, "md.hydrology.isefficientlayer"); … … 41 43 parameters->AddObject(new IntParam(HydrologydcSedimentlimitFlagEnum,sedimentlimit_flag)); 42 44 parameters->AddObject(new IntParam(HydrologydcTransferFlagEnum,transfer_flag)); 45 parameters->AddObject(new IntParam(HydrologydcUnconfinedFlagEnum,unconfined_flag)); 43 46 parameters->AddObject(new IntParam(HydrologydcPenaltyLockEnum,penalty_lock)); 44 47 parameters->AddObject(new IntParam(HydrologydcMaxIterEnum,hydro_maxiter)); … … 79 82 } 80 83 } 81 82 84 iomodel->FetchDataToInput(elements,"md.geometry.thickness",ThicknessEnum); 83 85 iomodel->FetchDataToInput(elements,"md.geometry.base",BaseEnum); … … 220 222 /* Start looping on the number of gaussian points: */ 221 223 Gauss* gauss=basalelement->NewGauss(2); 224 222 225 for(int ig=gauss -> begin();ig<gauss->end();ig++){ 223 226 gauss -> GaussPoint(ig); … … 317 320 Input* base_input = basalelement->GetInput(BaseEnum); 318 321 Input* water_input = basalelement->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(water_input); 322 319 323 if(dt!= 0.){ 320 324 old_wh_input = basalelement->GetInput(SedimentHeadOldEnum); _assert_(old_wh_input); … … 513 517 514 518 IssmDouble HydrologyDCInefficientAnalysis::SedimentStoring(Element* element,Gauss* gauss,Input* sed_head_input, Input* base_input){/*{{{*/ 519 int unconf_scheme; 520 IssmDouble expfac; 515 521 IssmDouble sediment_storing; 516 522 IssmDouble storing; … … 522 528 IssmDouble sediment_compressibility = element->GetMaterialParameter(HydrologydcSedimentCompressibilityEnum); 523 529 IssmDouble water_compressibility = element->GetMaterialParameter(HydrologydcWaterCompressibilityEnum); 524 base_input->GetInputValue(&base_elev,gauss); 525 sed_head_input->GetInputValue(&prestep_head,gauss); 526 water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness))); 527 528 storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity)); 530 element->FindParam(&unconf_scheme,HydrologydcUnconfinedFlagEnum); 531 switch(unconf_scheme){ 532 case 0: 533 sediment_storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity)); 534 break; 535 case 1: 536 base_input->GetInputValue(&base_elev,gauss); 537 sed_head_input->GetInputValue(&prestep_head,gauss); 538 water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness))); 539 540 storing=rho_freshwater*g*sediment_porosity*sediment_thickness*(water_compressibility+(sediment_compressibility/sediment_porosity)); 529 541 530 //Heavyside approximation (1/(1+exp(-2kx))) with k=25 centering at thickness minus 1% 531 sediment_storing=(sediment_porosity*exp(-20.*(water_sheet-0.99*sediment_thickness))+storing)/(1+exp(-20.*(water_sheet-0.99*sediment_thickness))); 532 542 // using logistic function for heavyside approximation 543 expfac=10.; 544 sediment_storing=sediment_porosity+(storing-sediment_porosity)/(1+exp(-2*expfac*(water_sheet-0.99*sediment_thickness))); 545 break; 546 default: 547 _error_("UnconfinedFlag is 0 or 1"); 548 } 533 549 return sediment_storing; 534 550 }/*}}}*/ 535 551 536 552 IssmDouble HydrologyDCInefficientAnalysis::SedimentTransmitivity(Element* element,Gauss* gauss,Input* sed_head_input, Input* base_input,Input* SedTrans_input){/*{{{*/ 553 int unconf_scheme; 554 IssmDouble ratio,expfac; 537 555 IssmDouble sediment_transmitivity; 538 556 IssmDouble FullLayer_transmitivity; 539 557 IssmDouble base_elev,prestep_head,water_sheet; 540 558 IssmDouble sediment_thickness = element->GetMaterialParameter(HydrologydcSedimentThicknessEnum); 541 base_input->GetInputValue(&base_elev,gauss); 542 sed_head_input->GetInputValue(&prestep_head,gauss);559 560 element->FindParam(&unconf_scheme,HydrologydcUnconfinedFlagEnum); 543 561 SedTrans_input->GetInputValue(&FullLayer_transmitivity,gauss); 544 water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness))); 545 546 if (water_sheet<=sediment_thickness){ 547 sediment_transmitivity=FullLayer_transmitivity*water_sheet/sediment_thickness; 548 } 549 else{ 562 switch(unconf_scheme){ 563 case 0: 550 564 sediment_transmitivity=FullLayer_transmitivity; 565 break; 566 case 1: 567 base_input->GetInputValue(&base_elev,gauss); 568 sed_head_input->GetInputValue(&prestep_head,gauss); 569 water_sheet=max(0.0,(prestep_head-(base_elev-sediment_thickness))); 570 571 if (water_sheet<=sediment_thickness){ 572 sediment_transmitivity=FullLayer_transmitivity*water_sheet/sediment_thickness; 573 } 574 else{ 575 sediment_transmitivity=FullLayer_transmitivity; 576 } 577 break; 578 default: 579 _error_("UnconfinedFlag is 0 or 1"); 551 580 } 552 581 return sediment_transmitivity; -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r21931 r21964 162 162 HydrologydcSedimentlimitEnum, 163 163 HydrologydcTransferFlagEnum, 164 HydrologydcUnconfinedFlagEnum, 164 165 HydrologydcLeakageFactorEnum, 165 166 HydrologydcPenaltyFactorEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r21931 r21964 168 168 case HydrologydcSedimentlimitEnum : return "HydrologydcSedimentlimit"; 169 169 case HydrologydcTransferFlagEnum : return "HydrologydcTransferFlag"; 170 case HydrologydcUnconfinedFlagEnum : return "HydrologydcUnconfinedFlag"; 170 171 case HydrologydcLeakageFactorEnum : return "HydrologydcLeakageFactor"; 171 172 case HydrologydcPenaltyFactorEnum : return "HydrologydcPenaltyFactor"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r21931 r21964 171 171 else if (strcmp(name,"HydrologydcSedimentlimit")==0) return HydrologydcSedimentlimitEnum; 172 172 else if (strcmp(name,"HydrologydcTransferFlag")==0) return HydrologydcTransferFlagEnum; 173 else if (strcmp(name,"HydrologydcUnconfinedFlag")==0) return HydrologydcUnconfinedFlagEnum; 173 174 else if (strcmp(name,"HydrologydcLeakageFactor")==0) return HydrologydcLeakageFactorEnum; 174 175 else if (strcmp(name,"HydrologydcPenaltyFactor")==0) return HydrologydcPenaltyFactorEnum; … … 259 260 else if (strcmp(name,"Damage")==0) return DamageEnum; 260 261 else if (strcmp(name,"NewDamage")==0) return NewDamageEnum; 261 else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum; 265 if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum; 266 else if (strcmp(name,"CalvingLaw")==0) return CalvingLawEnum; 266 267 else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum; 267 268 else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum; … … 382 383 else if (strcmp(name,"BalancethicknessDiffusionCoefficient")==0) return BalancethicknessDiffusionCoefficientEnum; 383 384 else if (strcmp(name,"BalancethicknessOmega")==0) return BalancethicknessOmegaEnum; 384 else if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"Smb")==0) return SmbEnum; 388 if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum; 389 else if (strcmp(name,"Smb")==0) return SmbEnum; 389 390 else if (strcmp(name,"SmbAnalysis")==0) return SmbAnalysisEnum; 390 391 else if (strcmp(name,"SmbSolution")==0) return SmbSolutionEnum; … … 505 506 else if (strcmp(name,"Internal")==0) return InternalEnum; 506 507 else if (strcmp(name,"MassFlux")==0) return MassFluxEnum; 507 else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"Misfit")==0) return MisfitEnum; 511 if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum; 512 else if (strcmp(name,"Misfit")==0) return MisfitEnum; 512 513 else if (strcmp(name,"Pressure")==0) return PressureEnum; 513 514 else if (strcmp(name,"PressurePicard")==0) return PressurePicardEnum; … … 628 629 else if (strcmp(name,"Outputdefinition20")==0) return Outputdefinition20Enum; 629 630 else if (strcmp(name,"Outputdefinition21")==0) return Outputdefinition21Enum; 630 else if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum; 634 if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum; 635 else if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum; 635 636 else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum; 636 637 else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum; … … 751 752 else if (strcmp(name,"OutputFilePointer")==0) return OutputFilePointerEnum; 752 753 else if (strcmp(name,"ToolkitsFileName")==0) return ToolkitsFileNameEnum; 753 else if (strcmp(name,"RootPath")==0) return RootPathEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum; 757 if (strcmp(name,"RootPath")==0) return RootPathEnum; 758 else if (strcmp(name,"OutputFileName")==0) return OutputFileNameEnum; 758 759 else if (strcmp(name,"InputFileName")==0) return InputFileNameEnum; 759 760 else if (strcmp(name,"LockFileName")==0) return LockFileNameEnum; … … 874 875 else if (strcmp(name,"ElementHook")==0) return ElementHookEnum; 875 876 else if (strcmp(name,"Hook")==0) return HookEnum; 876 else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"FileParam")==0) return FileParamEnum; 880 if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum; 881 else if (strcmp(name,"FileParam")==0) return FileParamEnum; 881 882 else if (strcmp(name,"Input")==0) return InputEnum; 882 883 else if (strcmp(name,"IntInput")==0) return IntInputEnum; … … 997 998 else if (strcmp(name,"MinVel")==0) return MinVelEnum; 998 999 else if (strcmp(name,"MaxVel")==0) return MaxVelEnum; 999 else if (strcmp(name,"MinVx")==0) return MinVxEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"MaxVx")==0) return MaxVxEnum; 1003 if (strcmp(name,"MinVx")==0) return MinVxEnum; 1004 else if (strcmp(name,"MaxVx")==0) return MaxVxEnum; 1004 1005 else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum; 1005 1006 else if (strcmp(name,"MinVy")==0) return MinVyEnum;
Note:
See TracChangeset
for help on using the changeset viewer.