Changeset 28233
- Timestamp:
- 04/29/24 13:59:08 (11 months ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp
r28050 r28233 191 191 parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.omega",HydrologyOmegaEnum)); 192 192 parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.istransition",HydrologyIsTransitionEnum)); 193 parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.isincludesheetthickness",HydrologyIsIncludeSheetThicknessEnum)); 194 parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.creep_open_flag",HydrologyCreepOpenFlagEnum)); 193 195 parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.englacial_void_ratio",HydrologyEnglacialVoidRatioEnum)); 194 196 … … 241 243 /*Get all inputs and parameters*/ 242 244 bool istransition; 245 bool isincludesheetthickness; 246 bool creep_open_flag; 243 247 element->FindParam(&istransition,HydrologyIsTransitionEnum); 248 element->FindParam(&isincludesheetthickness,HydrologyIsIncludeSheetThicknessEnum); 249 element->FindParam(&creep_open_flag,HydrologyCreepOpenFlagEnum); 244 250 IssmDouble alpha = element->FindParam(HydrologySheetAlphaEnum); 245 251 IssmDouble beta = element->FindParam(HydrologySheetBetaEnum); … … 305 311 306 312 /*Closing rate term, see Gagliardini and Werder 2018 eq. A2 (v = v1*phi_i + v2(phi_{i+1}))*/ 307 phi_0 = rho_water*g*b + rho_ice*g*H; 313 phi_0 = rho_water*g*b + rho_ice*g*H; 314 if(isincludesheetthickness) phi_0 += rho_water*g*h; 308 315 A=pow(B,-n); 309 316 v1 = 2./pow(n,n)*A*h*(pow(fabs(phi_0 - phi),n-1.)*( - n)); 317 if (!creep_open_flag) { 318 if (phi_0-phi<0) { 319 v1 = 0; 320 } 321 } 310 322 for(int i=0;i<numnodes;i++){ 311 323 for(int j=0;j<numnodes;j++){ … … 354 366 355 367 /*Retrieve all inputs and parameters*/ 368 bool isincludesheetthickness; 369 bool creep_open_flag; 370 element->FindParam(&isincludesheetthickness,HydrologyIsIncludeSheetThicknessEnum); 371 element->FindParam(&creep_open_flag,HydrologyCreepOpenFlagEnum); 356 372 element->GetVerticesCoordinates(&xyz_list); 357 373 element->FindParam(&meltflag,HydrologyMeltFlagEnum); … … 422 438 423 439 /*Compute closing rate*/ 424 phi_0 = rho_water*g*b + rho_ice*g*H; 440 phi_0 = rho_water*g*b + rho_ice*g*H; 441 if(isincludesheetthickness) phi_0 += rho_water*g*h; 425 442 A=pow(B,-n); 426 443 v2 = 2./pow(n,n)*A*h*(pow(fabs(phi_0 - phi),n-1.)*(phi_0 +(n-1.)*phi)); 444 if (!creep_open_flag) { 445 if (phi_0-phi<0) { 446 v2 = 0.; 447 } 448 } 427 449 428 450 for(int i=0;i<numnodes;i++) pe->values[i]+= - Jdet*gauss->weight*(w-v2-m)*basis[i]; … … 645 667 646 668 /*Retrieve all inputs and parameters*/ 669 bool isincludesheetthickness; 670 bool creep_open_flag; 671 element->FindParam(&isincludesheetthickness,HydrologyIsIncludeSheetThicknessEnum); 672 element->FindParam(&creep_open_flag,HydrologyCreepOpenFlagEnum); 647 673 IssmDouble dt = element->FindParam(TimesteppingTimeStepEnum); 648 674 IssmDouble l_r = element->FindParam(HydrologyCavitySpacingEnum); … … 687 713 688 714 /*Get values for a few potentials*/ 689 phi_0 = rho_water*g*b + rho_ice*g*H; 715 phi_0 = rho_water*g*b + rho_ice*g*H; 716 if(isincludesheetthickness) phi_0 += rho_water*g*h_old; 690 717 N = phi_0 - phi; 691 718 … … 699 726 if(h_old<h_r){ 700 727 alpha = -ub/l_r - 2./pow(n,n)*A*pow(fabs(N),n-1.)*N; 728 if (!creep_open_flag) { 729 if (N<0) { 730 alpha = -ub/l_r; 731 } 732 } 701 733 beta = ub*h_r/l_r; 702 734 } 703 735 else{ 704 736 alpha = - 2./pow(n,n)*A*pow(fabs(N),n-1.)*N; 737 if (!creep_open_flag) { 738 if (N<0) { 739 alpha = 0.; 740 } 741 } 705 742 beta = 0.; 706 743 } … … 732 769 /*Intermediary*/ 733 770 IssmDouble phi_0, phi_m, p_i; 734 IssmDouble H,b,phi ;771 IssmDouble H,b,phi,h; 735 772 IssmDouble oceanLS,iceLS; 736 773 … … 738 775 739 776 /*Get thickness and base on nodes to apply cap on water head*/ 777 bool isincludesheetthickness; 778 element->FindParam(&isincludesheetthickness,HydrologyIsIncludeSheetThicknessEnum); 779 Input *h_input = element->GetInput(HydrologySheetThicknessEnum); _assert_(h_input); 740 780 IssmDouble* N = xNew<IssmDouble>(numnodes); 741 781 IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum); … … 767 807 oceanLS_input->GetInputValue(&oceanLS,gauss); 768 808 iceLS_input->GetInputValue(&iceLS,gauss); 809 h_input->GetInputValue(&h,gauss); 769 810 770 811 /*Elevation potential*/ … … 776 817 /*Compute overburden potential*/ 777 818 phi_0 = phi_m + p_i; 819 phi_0 = rho_water*g*b + rho_ice*g*H; 820 if(isincludesheetthickness) phi_0 += rho_water*g*h; 778 821 779 822 /*Calculate effective pressure*/ -
issm/trunk-jpl/src/c/classes/Loads/Channel.cpp
r28050 r28233 380 380 bool istransition; 381 381 element->FindParam(&istransition,HydrologyIsTransitionEnum); 382 bool isincludesheetthickness; 383 element->FindParam(&isincludesheetthickness,HydrologyIsIncludeSheetThicknessEnum); 382 384 IssmDouble L = element->FindParam(MaterialsLatentheatEnum); 383 385 IssmDouble mu_water = element->FindParam(MaterialsMuWaterEnum); … … 435 437 /*Get values for a few potentials*/ 436 438 phi_0 = rho_water*g*b + rho_ice*g*H; 439 if(isincludesheetthickness) phi_0 += rho_water*g*h; 437 440 dphids = dphi[0]*tx + dphi[1]*ty; 438 441 dphimds = rho_water*g*(db[0]*tx + db[1]*ty); … … 541 544 bool istransition; 542 545 element->FindParam(&istransition,HydrologyIsTransitionEnum); 546 bool isincludesheetthickness; 547 element->FindParam(&isincludesheetthickness,HydrologyIsIncludeSheetThicknessEnum); 543 548 IssmDouble L = element->FindParam(MaterialsLatentheatEnum); 544 549 IssmDouble mu_water = element->FindParam(MaterialsMuWaterEnum); … … 592 597 /*Get values for a few potentials*/ 593 598 phi_0 = rho_water*g*b + rho_ice*g*H; 599 if(isincludesheetthickness) phi_0 += rho_water*g*h; 594 600 dphids = dphi[0]*tx + dphi[1]*ty; 595 601 dphimds = rho_water*g*(db[0]*tx + db[1]*ty); … … 691 697 bool istransition; 692 698 element->FindParam(&istransition,HydrologyIsTransitionEnum); 699 bool isincludesheetthickness; 700 element->FindParam(&isincludesheetthickness,HydrologyIsIncludeSheetThicknessEnum); 693 701 IssmDouble L = element->FindParam(MaterialsLatentheatEnum); 694 702 IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum); … … 738 746 /*Get values for a few potentials*/ 739 747 phi_0 = rho_water*g*b + rho_ice*g*H; 748 if(isincludesheetthickness) phi_0 += rho_water*g*h; 740 749 dphids = dphi[0]*tx + dphi[1]*ty; 741 750 dphimds = rho_water*g*(db[0]*tx + db[1]*ty);
Note:
See TracChangeset
for help on using the changeset viewer.