Changeset 28233


Ignore:
Timestamp:
04/29/24 13:59:08 (11 months ago)
Author:
timhill2
Message:

GlaDS: options to include sheet thickness in hydraulic potential and turn off cavity creep opening

Location:
issm/trunk-jpl/src/c
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp

    r28050 r28233  
    191191        parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.omega",HydrologyOmegaEnum));
    192192        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));
    193195        parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.englacial_void_ratio",HydrologyEnglacialVoidRatioEnum));
    194196
     
    241243        /*Get all inputs and parameters*/
    242244        bool istransition;
     245        bool isincludesheetthickness;
     246        bool creep_open_flag;
    243247        element->FindParam(&istransition,HydrologyIsTransitionEnum);
     248        element->FindParam(&isincludesheetthickness,HydrologyIsIncludeSheetThicknessEnum);
     249        element->FindParam(&creep_open_flag,HydrologyCreepOpenFlagEnum);
    244250        IssmDouble alpha     = element->FindParam(HydrologySheetAlphaEnum);
    245251        IssmDouble beta      = element->FindParam(HydrologySheetBetaEnum);
     
    305311
    306312                /*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;
    308315                A=pow(B,-n);
    309316                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                }
    310322                for(int i=0;i<numnodes;i++){
    311323                        for(int j=0;j<numnodes;j++){
     
    354366
    355367        /*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);
    356372        element->GetVerticesCoordinates(&xyz_list);
    357373        element->FindParam(&meltflag,HydrologyMeltFlagEnum);
     
    422438
    423439                /*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;
    425442                A=pow(B,-n);
    426443                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                }
    427449
    428450                for(int i=0;i<numnodes;i++) pe->values[i]+= - Jdet*gauss->weight*(w-v2-m)*basis[i];
     
    645667
    646668        /*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);
    647673        IssmDouble  dt       = element->FindParam(TimesteppingTimeStepEnum);
    648674        IssmDouble  l_r      = element->FindParam(HydrologyCavitySpacingEnum);
     
    687713
    688714                /*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;
    690717                N = phi_0 - phi;
    691718
     
    699726                if(h_old<h_r){
    700727                        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                        }
    701733                        beta  = ub*h_r/l_r;
    702734                }
    703735                else{
    704736                        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                        }
    705742                        beta  = 0.;
    706743                }
     
    732769        /*Intermediary*/
    733770        IssmDouble phi_0, phi_m, p_i;
    734         IssmDouble H,b,phi;
     771        IssmDouble H,b,phi,h;
    735772        IssmDouble oceanLS,iceLS;
    736773
     
    738775
    739776        /*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);
    740780   IssmDouble* N = xNew<IssmDouble>(numnodes);
    741781        IssmDouble  rho_ice   = element->FindParam(MaterialsRhoIceEnum);
     
    767807                oceanLS_input->GetInputValue(&oceanLS,gauss);
    768808                iceLS_input->GetInputValue(&iceLS,gauss);
     809                h_input->GetInputValue(&h,gauss);
    769810
    770811                /*Elevation potential*/
     
    776817                /*Compute overburden potential*/
    777818                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;
    778821
    779822                /*Calculate effective pressure*/
  • issm/trunk-jpl/src/c/classes/Loads/Channel.cpp

    r28050 r28233  
    380380        bool istransition;
    381381        element->FindParam(&istransition,HydrologyIsTransitionEnum);
     382        bool isincludesheetthickness;
     383        element->FindParam(&isincludesheetthickness,HydrologyIsIncludeSheetThicknessEnum);
    382384        IssmDouble L         = element->FindParam(MaterialsLatentheatEnum);
    383385        IssmDouble mu_water  = element->FindParam(MaterialsMuWaterEnum);
     
    435437                /*Get values for a few potentials*/
    436438                phi_0   = rho_water*g*b + rho_ice*g*H;
     439                if(isincludesheetthickness) phi_0 += rho_water*g*h;
    437440                dphids  = dphi[0]*tx + dphi[1]*ty;
    438441                dphimds = rho_water*g*(db[0]*tx + db[1]*ty);
     
    541544        bool istransition;
    542545        element->FindParam(&istransition,HydrologyIsTransitionEnum);
     546        bool isincludesheetthickness;
     547        element->FindParam(&isincludesheetthickness,HydrologyIsIncludeSheetThicknessEnum);
    543548        IssmDouble L         = element->FindParam(MaterialsLatentheatEnum);
    544549        IssmDouble mu_water  = element->FindParam(MaterialsMuWaterEnum);
     
    592597                /*Get values for a few potentials*/
    593598                phi_0   = rho_water*g*b + rho_ice*g*H;
     599                if(isincludesheetthickness) phi_0 += rho_water*g*h;
    594600                dphids  = dphi[0]*tx + dphi[1]*ty;
    595601                dphimds = rho_water*g*(db[0]*tx + db[1]*ty);
     
    691697        bool istransition;
    692698        element->FindParam(&istransition,HydrologyIsTransitionEnum);
     699        bool isincludesheetthickness;
     700        element->FindParam(&isincludesheetthickness,HydrologyIsIncludeSheetThicknessEnum);
    693701        IssmDouble L         = element->FindParam(MaterialsLatentheatEnum);
    694702        IssmDouble rho_ice   = element->FindParam(MaterialsRhoIceEnum);
     
    738746        /*Get values for a few potentials*/
    739747        phi_0   = rho_water*g*b + rho_ice*g*H;
     748        if(isincludesheetthickness) phi_0 += rho_water*g*h;
    740749        dphids  = dphi[0]*tx + dphi[1]*ty;
    741750        dphimds = rho_water*g*(db[0]*tx + db[1]*ty);
Note: See TracChangeset for help on using the changeset viewer.