SAMSIM
|
Contains various subroutines for flushing. More...
Functions/Subroutines | |
subroutine, public | flush3 (freeboard, psi_l, thick, thick_0, S_abs, H_abs, m, T, dt, Nlayer, N_active, T_bottom, S_bu_bottom, melt_thick, debug_flag, flush_heat_flag, melt_err, perm, flush_v, flush_h, psi_g, thick_snow, rho_l, snow_flush_flag, fl_brine_bgc) |
Subroutine for complex flushing. More... | |
subroutine, public | flush4 (psi_l, thick, T, thick_0, S_abs, H_abs, m, dt, Nlayer, N_active, N_top, N_middle, N_bottom, melt_thick, debug_flag) |
An alternative subroutine for calculating flushing. More... | |
Contains various subroutines for flushing.
Which subroutine is called is determined by flush_flag.
subroutine, public mo_flush::flush3 | ( | real(wp), intent(in) | freeboard, |
real(wp), dimension(nlayer), intent(inout) | psi_l, | ||
real(wp), dimension(nlayer), intent(inout) | thick, | ||
real(wp), intent(in) | thick_0, | ||
real(wp), dimension(nlayer), intent(inout) | S_abs, | ||
real(wp), dimension(nlayer), intent(inout) | H_abs, | ||
real(wp), dimension(nlayer), intent(inout) | m, | ||
real(wp), dimension(nlayer), intent(in) | T, | ||
real(wp), intent(in) | dt, | ||
integer, intent(in) | Nlayer, | ||
integer, intent(inout) | N_active, | ||
real(wp), intent(in) | T_bottom, | ||
real(wp), intent(in) | S_bu_bottom, | ||
real(wp), intent(inout) | melt_thick, | ||
integer, intent(in) | debug_flag, | ||
integer, intent(in) | flush_heat_flag, | ||
real(wp), intent(inout) | melt_err, | ||
real(wp), dimension(nlayer), intent(out) | perm, | ||
real(wp), dimension(n_active), intent(inout) | flush_v, | ||
real(wp), dimension(n_active), intent(inout) | flush_h, | ||
real(wp), dimension(nlayer), intent(inout) | psi_g, | ||
real(wp), intent(in) | thick_snow, | ||
real(wp), intent(in) | rho_l, | ||
integer, intent(in) | snow_flush_flag, | ||
real(wp), dimension(nlayer+1,nlayer+1), intent(inout), optional | fl_brine_bgc | ||
) |
Subroutine for complex flushing.
Each layer splits the flushing brine into a fraction that moves downward, and a fraction that leaves the ice. A fraction of the top layer is considered melt water. This approach uses hydraulic resistivity R = mu*thick/perm . The hydraulic head is assumed to be the freeboard. The vertical resistance R_v of each layer is a determined by its viscosity * thickness divided by it's permeability. Additionally, each layer is given horizontal resistivity R_h. It is assumed that there is an average length horizontally which brine needs to flow to reach a drainage feature in the ice. We assume this length is a linear function of the ice thickness. The only tuning parameter is para_flush_horiz. The total resistance of layer i to the bottom is R.
For flush_heat_flag==2 the amount of heat which leaves by dynamics from the lowest layer is added to the lowest layer to keep results comparable to the other approaches. See PhD Griewank for details
[in] | snow_flush_flag | Niels, 2017 add: snow_flush_flag |
[in] | t | Niels, 2017 add: moved psi_l -> INTENT(inout) |
[in,out] | psi_g | Niels, 2017 add: psi_l, psi_g |
[in,out] | flush_v | mass of vertically flushed brine of each layer [kg] !< Niels, 2017 add: inout |
[in,out] | flush_h | mass of brine which leaves the ice of each layer [kg] !< Niels, 2017 add: inout |
[out] | perm | Niels, 2017 add: out |
[in,out] | fl_brine_bgc | Niels, 2017 add: if loop, enhanced the permeability, revise |
[in,out] | fl_brine_bgc | Niels, 2017 add: psi_g to permeability calculation, improved the results but must be checked |
[in,out] | fl_brine_bgc | Niels, 2017 add: melt thich is on top of the ice and therefore also part of the hydraulic head |
[in,out] | fl_brine_bgc | Niels, 2017 add: melt_err, check how much meltwater vanishes in the line above |
subroutine, public mo_flush::flush4 | ( | real(wp), dimension(nlayer), intent(in) | psi_l, |
real(wp), dimension(nlayer), intent(inout) | thick, | ||
real(wp), dimension(nlayer), intent(in) | T, | ||
real(wp), intent(in) | thick_0, | ||
real(wp), dimension(nlayer), intent(inout) | S_abs, | ||
real(wp), dimension(nlayer), intent(inout) | H_abs, | ||
real(wp), dimension(nlayer), intent(inout) | m, | ||
real(wp), intent(in) | dt, | ||
integer, intent(in) | Nlayer, | ||
integer, intent(in) | N_active, | ||
integer, intent(in) | N_top, | ||
integer, intent(in) | N_middle, | ||
integer, intent(in) | N_bottom, | ||
real(wp), intent(inout) | melt_thick, | ||
integer, intent(in) | debug_flag | ||
) |
An alternative subroutine for calculating flushing.
Simplified approach. Melt_thick of top layer is simply removed with brine salinity. Salinity of a layer is reduced if the solid fraction is lower than that of the layer above it. Flushing stops as soon as a layer has a higher solid fraction than the layer below it.