Changeset 26137


Ignore:
Timestamp:
03/23/21 13:56:17 (4 years ago)
Author:
tsantos
Message:

CHG: working on mono layer HO

File:
1 edited

Legend:

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

    r26134 r26137  
    25552555
    25562556        /*Intermediaries*/
    2557         IssmDouble  Jdet,thickness,bed,sealevel,water_pressure,ice_pressure;
     2557        IssmDouble  Jdet,thickness,base,sealevel,water_pressure,ice_pressure;
    25582558        IssmDouble  surface_under_water,base_under_water,pressure;
    25592559        IssmDouble *xyz_list = NULL;
     
    25832583        while(gauss->next()){
    25842584                thickness_input->GetInputValue(&thickness,gauss);
    2585                 base_input->GetInputValue(&bed,gauss);
     2585                base_input->GetInputValue(&base,gauss);
    25862586                sealevel_input->GetInputValue(&sealevel,gauss);
    25872587                element->JacobianDeterminantSurface(&Jdet,xyz_list_front,gauss);
    25882588                element->NodalFunctions(basis,gauss);
    25892589
    2590                 surface_under_water = min(0.,thickness+bed-sealevel); // 0 if the top of the glacier is above water level
    2591                 base_under_water    = min(0.,bed-sealevel);           // 0 if the bottom of the glacier is above water level
     2590                surface_under_water = min(0.,thickness+base-sealevel); // 0 if the top of the glacier is above water level
     2591                base_under_water    = min(0.,base-sealevel);           // 0 if the bottom of the glacier is above water level
    25922592                water_pressure = 1.0/2.0*gravity*rho_water*(surface_under_water*surface_under_water - base_under_water*base_under_water);
    25932593                ice_pressure   = 1.0/2.0*gravity*rho_ice*thickness*thickness;
     
    29492949
    29502950        /*Intermediaries*/
    2951         IssmDouble  Jdet,thickness,bed,sealevel,water_pressure,ice_pressure;
     2951        IssmDouble  Jdet,thickness,base,sealevel,water_pressure,ice_pressure;
     2952        IssmDouble  water_pressure_sh,ice_pressure_sh,pressure_sh,n,s,b;
    29522953        IssmDouble  surface_under_water,base_under_water,pressure;
    29532954        IssmDouble *xyz_list = NULL;
     
    29642965        /*Retrieve all inputs and parameters*/
    29652966        Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);
    2966         Input* base_input       = element->GetInput(BaseEnum);       _assert_(base_input);
    2967         Input* sealevel_input       = element->GetInput(SealevelEnum);       _assert_(sealevel_input);
     2967        Input* base_input      = element->GetInput(BaseEnum);       _assert_(base_input);
     2968        Input* sealevel_input  = element->GetInput(SealevelEnum);       _assert_(sealevel_input);
     2969        Input* n_input         = element->GetInput(MaterialsRheologyNEnum); _assert_(n_input);
    29682970        IssmDouble rho_water   = element->FindParam(MaterialsRhoSeawaterEnum);
    29692971        IssmDouble rho_ice     = element->FindParam(MaterialsRhoIceEnum);
     
    29772979        while(gauss->next()){
    29782980                thickness_input->GetInputValue(&thickness,gauss);
    2979                 base_input->GetInputValue(&bed,gauss);
     2981                base_input->GetInputValue(&base,gauss);
     2982                n_input->GetInputValue(&n,gauss);
    29802983                sealevel_input->GetInputValue(&sealevel,gauss);
    29812984                element->JacobianDeterminantSurface(&Jdet,xyz_list_front,gauss);
    29822985                element->NodalFunctions(basis,gauss);
    29832986
    2984                 surface_under_water = min(0.,thickness+bed-sealevel); // 0 if the top of the glacier is above water level
    2985                 base_under_water    = min(0.,bed-sealevel);           // 0 if the bottom of the glacier is above water level
     2987                surface_under_water = min(0.,thickness+base-sealevel); // 0 if the top of the glacier is above water level
     2988                base_under_water    = min(0.,base-sealevel);           // 0 if the bottom of the glacier is above water level
     2989                /*Vertically integrated pressure - SSA type*/
    29862990                water_pressure = 1.0/2.0*gravity*rho_water*(surface_under_water*surface_under_water - base_under_water*base_under_water);
    29872991                ice_pressure   = 1.0/2.0*gravity*rho_ice*thickness*thickness;
    29882992                pressure = ice_pressure + water_pressure;
     2993                /*Vertically integrated pressure - HO type*/
     2994                s=max(0.,thickness+base-sealevel);
     2995                b=min(0.,base-sealevel);
     2996                water_pressure_sh = gravity*rho_water*(-b*b/2 + pow(-b,n+2)*( -s/(n+2) -b/(n+3) )/pow(thickness,n+1));
     2997                ice_pressure_sh   = gravity*rho_ice*thickness*thickness*(n+1)/(2*(n+3));
     2998                pressure_sh = ice_pressure_sh + water_pressure_sh;
    29892999
    29903000                for (int i=0;i<numnodes;i++){
    2991                         pe->values[2*i+0]+= pressure*Jdet*gauss->weight*normal[0]*basis[i];
    2992                         pe->values[2*i+1]+= pressure*Jdet*gauss->weight*normal[1]*basis[i];
     3001                        pe->values[i+0]+= pressure*Jdet*gauss->weight*normal[0]*basis[i]; // F1
     3002                        pe->values[i+3]+= pressure_sh*Jdet*gauss->weight*normal[0]*basis[i]; // F2
     3003                        pe->values[i+6]+= pressure*Jdet*gauss->weight*normal[1]*basis[i]; // F3
     3004                        pe->values[i+9]+= pressure_sh*Jdet*gauss->weight*normal[1]*basis[i]; // F4
    29933005                }
    29943006        }
Note: See TracChangeset for help on using the changeset viewer.