Changeset 26137
- Timestamp:
- 03/23/21 13:56:17 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r26134 r26137 2555 2555 2556 2556 /*Intermediaries*/ 2557 IssmDouble Jdet,thickness,b ed,sealevel,water_pressure,ice_pressure;2557 IssmDouble Jdet,thickness,base,sealevel,water_pressure,ice_pressure; 2558 2558 IssmDouble surface_under_water,base_under_water,pressure; 2559 2559 IssmDouble *xyz_list = NULL; … … 2583 2583 while(gauss->next()){ 2584 2584 thickness_input->GetInputValue(&thickness,gauss); 2585 base_input->GetInputValue(&b ed,gauss);2585 base_input->GetInputValue(&base,gauss); 2586 2586 sealevel_input->GetInputValue(&sealevel,gauss); 2587 2587 element->JacobianDeterminantSurface(&Jdet,xyz_list_front,gauss); 2588 2588 element->NodalFunctions(basis,gauss); 2589 2589 2590 surface_under_water = min(0.,thickness+b ed-sealevel); // 0 if the top of the glacier is above water level2591 base_under_water = min(0.,b ed-sealevel); // 0 if the bottom of the glacier is above water level2590 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 2592 2592 water_pressure = 1.0/2.0*gravity*rho_water*(surface_under_water*surface_under_water - base_under_water*base_under_water); 2593 2593 ice_pressure = 1.0/2.0*gravity*rho_ice*thickness*thickness; … … 2949 2949 2950 2950 /*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; 2952 2953 IssmDouble surface_under_water,base_under_water,pressure; 2953 2954 IssmDouble *xyz_list = NULL; … … 2964 2965 /*Retrieve all inputs and parameters*/ 2965 2966 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); 2968 2970 IssmDouble rho_water = element->FindParam(MaterialsRhoSeawaterEnum); 2969 2971 IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum); … … 2977 2979 while(gauss->next()){ 2978 2980 thickness_input->GetInputValue(&thickness,gauss); 2979 base_input->GetInputValue(&bed,gauss); 2981 base_input->GetInputValue(&base,gauss); 2982 n_input->GetInputValue(&n,gauss); 2980 2983 sealevel_input->GetInputValue(&sealevel,gauss); 2981 2984 element->JacobianDeterminantSurface(&Jdet,xyz_list_front,gauss); 2982 2985 element->NodalFunctions(basis,gauss); 2983 2986 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*/ 2986 2990 water_pressure = 1.0/2.0*gravity*rho_water*(surface_under_water*surface_under_water - base_under_water*base_under_water); 2987 2991 ice_pressure = 1.0/2.0*gravity*rho_ice*thickness*thickness; 2988 2992 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; 2989 2999 2990 3000 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 2993 3005 } 2994 3006 }
Note:
See TracChangeset
for help on using the changeset viewer.