Changeset 22199
- Timestamp:
- 10/27/17 17:06:52 (7 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 1 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
r22192 r22199 75 75 iomodel->FetchDataToInput(elements,"md.calving.water_height",WaterheightEnum); 76 76 break; 77 case CalvingDev2Enum: 78 iomodel->FetchDataToInput(elements,"md.calving.stress_threshold_groundedice",CalvingStressThresholdGroundediceEnum); 79 iomodel->FetchDataToInput(elements,"md.calving.stress_threshold_floatingice",CalvingStressThresholdFloatingiceEnum); 80 break; 77 81 default: 78 82 _error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet"); … … 100 104 parameters->AddObject(iomodel->CopyConstantObject("md.calving.critical_fraction",CalvingCrevasseDepthEnum)); 101 105 break; 106 case CalvingDev2Enum: 107 parameters->AddObject(iomodel->CopyConstantObject("md.calving.height_above_floatation",CalvingHeightAboveFloatationEnum)); 108 break; 102 109 default: 103 110 _error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet"); … … 154 161 IssmDouble vel; 155 162 IssmDouble norm_dlsf, norm_calving, calvingrate, meltingrate, groundedice; 156 IssmDouble calvingmax ;163 IssmDouble calvingmax, calvinghaf, heaviside, haf_eps; 157 164 IssmDouble* xyz_list = NULL; 158 165 … … 259 266 meltingrate_input = basalelement->GetInput(CalvingMeltingrateEnum); _assert_(meltingrate_input); 260 267 break; 268 case CalvingDev2Enum: 269 basalelement->FindParam(&calvinghaf,CalvingHeightAboveFloatationEnum); 270 lsf_slopex_input = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); 271 if(dim==2) lsf_slopey_input = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); 272 calvingrate_input = basalelement->GetInput(CalvingCalvingrateEnum); _assert_(calvingrate_input); 273 gr_input=basalelement->GetInput(MaskGroundediceLevelsetEnum); _assert_(gr_input); 274 break; 261 275 default: 262 276 _error_("Calving law "<<EnumToStringx(calvinglaw)<<" not supported yet"); … … 315 329 } 316 330 break; 317 331 318 332 case CalvingLevermannEnum: 319 333 calvingratex_input->GetInputValue(&c[0],gauss); … … 394 408 } 395 409 break; 410 411 case CalvingDev2Enum: 412 { 413 lsf_slopex_input->GetInputValue(&dlsf[0],gauss); 414 if(dim==2) lsf_slopey_input->GetInputValue(&dlsf[1],gauss); 415 calvingrate_input->GetInputValue(&calvingrate,gauss); 416 gr_input->GetInputValue(&groundedice,gauss); 417 418 //idea: no retreat on ice above critical calving height "calvinghaf" . Limit using regularized Heaviside function. 419 vel=sqrt(v[0]*v[0] + v[1]*v[1]); 420 haf_eps=10.; 421 if(groundedice-calvinghaf<=-haf_eps){ 422 // ice floats freely below calvinghaf: calve freely 423 } 424 else if(groundedice-calvinghaf>=haf_eps){ 425 // ice is well above calvinghaf -> no calving back, i.e. limit calving rate to ice velocity 426 calvingrate=min(calvingrate,vel); 427 } 428 else{ // ice is close to calvinghaf: smooth transition between limitation and free calving. 429 heaviside=(groundedice-calvinghaf+haf_eps)/(2.*haf_eps) + sin(PI*(groundedice-calvinghaf)/haf_eps)/(2.*PI); 430 calvingrate=heaviside*(min(calvingrate,vel)-calvingrate)+calvingrate; 431 } 432 433 norm_dlsf=0.; 434 for(i=0;i<dim;i++) norm_dlsf+=pow(dlsf[i],2); 435 norm_dlsf=sqrt(norm_dlsf); 436 437 if(norm_dlsf>1.e-10) 438 for(i=0;i<dim;i++){ 439 c[i]=calvingrate*dlsf[i]/norm_dlsf; 440 m[i]=0.; 441 } 442 else 443 for(i=0;i<dim;i++){ 444 c[i]=0.; 445 m[i]=0.; 446 } 447 break; 448 } 396 449 397 450 default: -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r22197 r22199 2353 2353 break; 2354 2354 case CalvingVonmisesEnum: 2355 case CalvingDev2Enum: 2355 2356 this->CalvingRateVonmises(); 2356 2357 break; -
issm/trunk-jpl/src/c/modules/Calvingx/Calvingx.cpp
r22192 r22199 32 32 break; 33 33 case CalvingVonmisesEnum: 34 case CalvingDev2Enum: 34 35 femmodel->CalvingRateVonmisesx(); 35 36 femmodel->ElementOperationx(&Element::CalvingRateVonmises); -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r22193 r22199 256 256 CalvingCalvingrateEnum, 257 257 CalvingMeltingrateEnum, 258 CalvingHeightAboveFloatationEnum, 258 259 CalvingLevermannEnum, 259 260 CalvingVonmisesEnum, … … 261 262 CalvingHabEnum, 262 263 CalvingCrevasseDepthEnum, 264 CalvingDev2Enum, 263 265 SurfaceCrevasseEnum, 264 266 BasalCrevasseEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r22193 r22199 262 262 case CalvingCalvingrateEnum : return "CalvingCalvingrate"; 263 263 case CalvingMeltingrateEnum : return "CalvingMeltingrate"; 264 case CalvingHeightAboveFloatationEnum : return "CalvingHeightAboveFloatation"; 264 265 case CalvingLevermannEnum : return "CalvingLevermann"; 265 266 case CalvingVonmisesEnum : return "CalvingVonmises"; … … 267 268 case CalvingHabEnum : return "CalvingHab"; 268 269 case CalvingCrevasseDepthEnum : return "CalvingCrevasseDepth"; 270 case CalvingDev2Enum : return "CalvingDev2"; 269 271 case SurfaceCrevasseEnum : return "SurfaceCrevasse"; 270 272 case BasalCrevasseEnum : return "BasalCrevasse"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r22193 r22199 268 268 else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum; 269 269 else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum; 270 else if (strcmp(name,"CalvingHeightAboveFloatation")==0) return CalvingHeightAboveFloatationEnum; 270 271 else if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum; 271 272 else if (strcmp(name,"CalvingVonmises")==0) return CalvingVonmisesEnum; … … 273 274 else if (strcmp(name,"CalvingHab")==0) return CalvingHabEnum; 274 275 else if (strcmp(name,"CalvingCrevasseDepth")==0) return CalvingCrevasseDepthEnum; 276 else if (strcmp(name,"CalvingDev2")==0) return CalvingDev2Enum; 275 277 else if (strcmp(name,"SurfaceCrevasse")==0) return SurfaceCrevasseEnum; 276 278 else if (strcmp(name,"BasalCrevasse")==0) return BasalCrevasseEnum; … … 381 383 else if (strcmp(name,"TransientIsthermal")==0) return TransientIsthermalEnum; 382 384 else if (strcmp(name,"TransientIsgia")==0) return TransientIsgiaEnum; 383 else if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum;384 else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum; 388 if (strcmp(name,"TransientIsesa")==0) return TransientIsesaEnum; 389 else if (strcmp(name,"TransientIsdamageevolution")==0) return TransientIsdamageevolutionEnum; 390 else if (strcmp(name,"TransientIshydrology")==0) return TransientIshydrologyEnum; 389 391 else if (strcmp(name,"TransientIsmovingfront")==0) return TransientIsmovingfrontEnum; 390 392 else if (strcmp(name,"TransientIsslr")==0) return TransientIsslrEnum; … … 504 506 else if (strcmp(name,"SmbBMin")==0) return SmbBMinEnum; 505 507 else if (strcmp(name,"Adjointp")==0) return AdjointpEnum; 506 else if (strcmp(name,"Adjointx")==0) return AdjointxEnum;507 else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"Adjointz")==0) return AdjointzEnum; 511 if (strcmp(name,"Adjointx")==0) return AdjointxEnum; 512 else if (strcmp(name,"Adjointy")==0) return AdjointyEnum; 513 else if (strcmp(name,"Adjointz")==0) return AdjointzEnum; 512 514 else if (strcmp(name,"BalancethicknessMisfit")==0) return BalancethicknessMisfitEnum; 513 515 else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum; … … 627 629 else if (strcmp(name,"Outputdefinition10")==0) return Outputdefinition10Enum; 628 630 else if (strcmp(name,"Outputdefinition11")==0) return Outputdefinition11Enum; 629 else if (strcmp(name,"Outputdefinition12")==0) return Outputdefinition12Enum;630 else if (strcmp(name,"Outputdefinition13")==0) return Outputdefinition13Enum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"Outputdefinition14")==0) return Outputdefinition14Enum; 634 if (strcmp(name,"Outputdefinition12")==0) return Outputdefinition12Enum; 635 else if (strcmp(name,"Outputdefinition13")==0) return Outputdefinition13Enum; 636 else if (strcmp(name,"Outputdefinition14")==0) return Outputdefinition14Enum; 635 637 else if (strcmp(name,"Outputdefinition15")==0) return Outputdefinition15Enum; 636 638 else if (strcmp(name,"Outputdefinition16")==0) return Outputdefinition16Enum; … … 750 752 else if (strcmp(name,"Gradient")==0) return GradientEnum; 751 753 else if (strcmp(name,"GroundinglineMigration")==0) return GroundinglineMigrationEnum; 752 else if (strcmp(name,"Gset")==0) return GsetEnum;753 else if (strcmp(name,"Index")==0) return IndexEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"Indexed")==0) return IndexedEnum; 757 if (strcmp(name,"Gset")==0) return GsetEnum; 758 else if (strcmp(name,"Index")==0) return IndexEnum; 759 else if (strcmp(name,"Indexed")==0) return IndexedEnum; 758 760 else if (strcmp(name,"Intersect")==0) return IntersectEnum; 759 761 else if (strcmp(name,"Nodal")==0) return NodalEnum; … … 873 875 else if (strcmp(name,"AmrIceFrontResolution")==0) return AmrIceFrontResolutionEnum; 874 876 else if (strcmp(name,"AmrIceFrontDistance")==0) return AmrIceFrontDistanceEnum; 875 else if (strcmp(name,"AmrThicknessErrorResolution")==0) return AmrThicknessErrorResolutionEnum;876 else if (strcmp(name,"AmrThicknessErrorThreshold")==0) return AmrThicknessErrorThresholdEnum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"AmrDeviatoricErrorResolution")==0) return AmrDeviatoricErrorResolutionEnum; 880 if (strcmp(name,"AmrThicknessErrorResolution")==0) return AmrThicknessErrorResolutionEnum; 881 else if (strcmp(name,"AmrThicknessErrorThreshold")==0) return AmrThicknessErrorThresholdEnum; 882 else if (strcmp(name,"AmrDeviatoricErrorResolution")==0) return AmrDeviatoricErrorResolutionEnum; 881 883 else if (strcmp(name,"AmrDeviatoricErrorThreshold")==0) return AmrDeviatoricErrorThresholdEnum; 882 884 else if (strcmp(name,"DeviatoricStressErrorEstimator")==0) return DeviatoricStressErrorEstimatorEnum; … … 996 998 else if (strcmp(name,"GiaIvinsAnalysis")==0) return GiaIvinsAnalysisEnum; 997 999 else if (strcmp(name,"EsaSolution")==0) return EsaSolutionEnum; 998 else if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;999 else if (strcmp(name,"LoveSolution")==0) return LoveSolutionEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum; 1003 if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum; 1004 else if (strcmp(name,"LoveSolution")==0) return LoveSolutionEnum; 1005 else if (strcmp(name,"LoveAnalysis")==0) return LoveAnalysisEnum; 1004 1006 else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum; 1005 1007 else if (strcmp(name,"ExtrapolationAnalysis")==0) return ExtrapolationAnalysisEnum; -
issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
r22196 r22199 153 153 case 5: return CalvingHabEnum; 154 154 case 6: return CalvingCrevasseDepthEnum; 155 case 7: return CalvingDev2Enum; 155 156 default: _error_("Marshalled Calving law code \""<<enum_in<<"\" not supported yet"); 156 157 }
Note:
See TracChangeset
for help on using the changeset viewer.