MOM6
|
Data Types | |
type | bulkmixedlayer_cs |
Functions/Subroutines | |
subroutine, public | bulkmixedlayer (h_3d, u_3d, v_3d, tv, fluxes, dt, ea, eb, G, GV, CS, optics, Hml, aggregate_FW_forcing, dt_diag, last_call) |
This subroutine partially steps the bulk mixed layer model. The following processes are executed, in the order listed. More... | |
subroutine | convective_adjustment (h, u, v, R0, Rcv, T, S, eps, d_eb, dKE_CA, cTKE, j, G, GV, CS, nz_conv) |
This subroutine does instantaneous convective entrainment into the buffer layers and mixed layers to remove hydrostatic instabilities. Any water that is lighter than currently in the mixed- or buffer- layer is entrained. More... | |
subroutine | mixedlayer_convection (h, d_eb, htot, Ttot, Stot, uhtot, vhtot, R0_tot, Rcv_tot, u, v, T, S, R0, Rcv, eps, dR0_dT, dRcv_dT, dR0_dS, dRcv_dS, netMassInOut, netMassOut, Net_heat, Net_salt, nsw, Pen_SW_bnd, opacity_band, Conv_en, dKE_FC, j, ksort, G, GV, CS, tv, fluxes, dt, aggregate_FW_forcing) |
This subroutine causes the mixed layer to entrain to the depth of free convection. The depth of free convection is the shallowest depth at which the fluid is denser than the average of the fluid above. More... | |
subroutine | find_starting_tke (htot, h_CA, fluxes, Conv_En, cTKE, dKE_FC, dKE_CA, TKE, TKE_river, Idecay_len_TKE, cMKE, dt, Idt_diag, j, ksort, G, GV, CS) |
This subroutine determines the TKE available at the depth of free convection to drive mechanical entrainment. More... | |
subroutine | mechanical_entrainment (h, d_eb, htot, Ttot, Stot, uhtot, vhtot, R0_tot, Rcv_tot, u, v, T, S, R0, Rcv, eps, dR0_dT, dRcv_dT, cMKE, Idt_diag, nsw, Pen_SW_bnd, opacity_band, TKE, Idecay_len_TKE, j, ksort, G, GV, CS) |
This subroutine calculates mechanically driven entrainment. More... | |
subroutine | sort_ml (h, R0, eps, G, GV, CS, ksort) |
This subroutine generates an array of indices that are sorted by layer density. More... | |
subroutine | resort_ml (h, T, S, R0, Rcv, RcvTgt, eps, d_ea, d_eb, ksort, G, GV, CS, dR0_dT, dR0_dS, dRcv_dT, dRcv_dS) |
This subroutine actually moves properties between layers to achieve a resorted state, with all of the resorted water either moved into the correct interior layers or in the top nkmb layers. More... | |
subroutine | mixedlayer_detrain_2 (h, T, S, R0, Rcv, RcvTgt, dt, dt_diag, d_ea, j, G, GV, CS, dR0_dT, dR0_dS, dRcv_dT, dRcv_dS, max_BL_det) |
This subroutine moves any water left in the former mixed layers into the two buffer layers and may also move buffer layer water into the interior isopycnal layers. More... | |
subroutine | mixedlayer_detrain_1 (h, T, S, R0, Rcv, RcvTgt, dt, dt_diag, d_ea, d_eb, j, G, GV, CS, dRcv_dT, dRcv_dS, max_BL_det) |
This subroutine moves any water left in the former mixed layers into the single buffer layers and may also move buffer layer water into the interior isopycnal layers. More... | |
subroutine, public | bulkmixedlayer_init (Time, G, GV, param_file, diag, CS) |
real function | ef4 (H, E, L, dR_de) |
This subroutine returns an approximation to the integral R = exp(-L*(H+E)) integral(LH to L(H+E)) L/(1-(1+x)exp(-x)) dx. The approximation to the integrand is good to within -2% at x~.3 and +25% at x~3.5, but the exponential deemphasizes the importance of large x. When L=0, EF4 returns E/((H+E)*H). More... | |
Variables | |
integer | id_clock_detrain =0 |
integer | id_clock_mech =0 |
integer | id_clock_conv =0 |
integer | id_clock_adjustment =0 |
integer | id_clock_eos =0 |
integer | id_clock_resort =0 |
integer | id_clock_pass =0 |
integer | num_msg = 0 |
integer | max_msg = 2 |
subroutine, public mom_bulk_mixed_layer::bulkmixedlayer | ( | real, dimension(szi_(g),szj_(g),szk_(gv)), intent(inout) | h_3d, |
real, dimension(szi_(g),szj_(g),szk_(gv)), intent(in) | u_3d, | ||
real, dimension(szi_(g),szj_(g),szk_(gv)), intent(in) | v_3d, | ||
type(thermo_var_ptrs), intent(inout) | tv, | ||
type(forcing), intent(inout) | fluxes, | ||
real, intent(in) | dt, | ||
real, dimension(szi_(g),szj_(g),szk_(gv)), intent(inout) | ea, | ||
real, dimension(szi_(g),szj_(g),szk_(gv)), intent(inout) | eb, | ||
type(ocean_grid_type), intent(inout) | G, | ||
type(verticalgrid_type), intent(in) | GV, | ||
type(bulkmixedlayer_cs), pointer | CS, | ||
type(optics_type), pointer | optics, | ||
real, dimension(:,:), pointer | Hml, | ||
logical, intent(in) | aggregate_FW_forcing, | ||
real, intent(in), optional | dt_diag, | ||
logical, intent(in), optional | last_call | ||
) |
This subroutine partially steps the bulk mixed layer model. The following processes are executed, in the order listed.
The key parameters for the mixed layer are found in the control structure. These include mstar, nstar, nstar2, pen_SW_frac, pen_SW_scale, and TKE_decay. For the Oberhuber (1993) mixed layer, the values of these are: pen_SW_frac = 0.42, pen_SW_scale = 15.0 m, mstar = 1.25, nstar = 1, TKE_decay = 2.5, conv_decay = 0.5 TKE_decay is 1/kappa in eq. 28 of Oberhuber (1993), while conv_decay is 1/mu. Conv_decay has been eliminated in favor of the well-calibrated form for the efficiency of penetrating convection from Wang (2003). For a traditional Kraus-Turner mixed layer, the values are: pen_SW_frac = 0.0, pen_SW_scale = 0.0 m, mstar = 1.25, nstar = 0.4, TKE_decay = 0.0, conv_decay = 0.0
[in,out] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[in,out] | h_3d | Layer thickness, in m or kg m-2. |
[in] | u_3d | Zonal velocities interpolated to h points, |
[in] | v_3d | Zonal velocities interpolated to h points, |
[in,out] | tv | A structure containing pointers to any available thermodynamic fields. Absent fields have NULL ptrs. |
[in,out] | fluxes | A structure containing pointers to any possible forcing fields. Unused fields have NULL ptrs. |
[in] | dt | Time increment, in s. |
[in,out] | ea | The amount of fluid moved downward into a |
[in,out] | eb | The amount of fluid moved upward into a |
cs | The control structure returned by a previous call to mixedlayer_init. | |
optics | The structure containing the inverse of the vertical absorption decay scale for penetrating shortwave radiation, in m-1. | |
hml | active mixed layer depth | |
[in] | dt_diag | The diagnostic time step, which may be less than dt if there are two callse to mixedlayer, in s. |
[in] | last_call | if true, this is the last call to mixedlayer in the current time step, so diagnostics will be written. The default is .true. |
Definition at line 227 of file MOM_bulk_mixed_layer.F90.
References mom_shortwave_abs::absorbremainingsw(), mom_eos::calculate_density_derivs(), convective_adjustment(), mom_diag_mediator::diag_update_remap_grids(), mom_domains::do_group_pass(), mom_forcing_type::extractfluxes1d(), find_starting_tke(), id_clock_adjustment, id_clock_conv, id_clock_detrain, id_clock_eos, id_clock_mech, id_clock_pass, id_clock_resort, mechanical_entrainment(), mixedlayer_convection(), mixedlayer_detrain_1(), mixedlayer_detrain_2(), mom_error_handler::mom_error(), resort_ml(), and sort_ml().
Referenced by mom_diabatic_driver::diabatic().
subroutine, public mom_bulk_mixed_layer::bulkmixedlayer_init | ( | type(time_type), intent(in), target | Time, |
type(ocean_grid_type), intent(in) | G, | ||
type(verticalgrid_type), intent(in) | GV, | ||
type(param_file_type), intent(in) | param_file, | ||
type(diag_ctrl), intent(inout), target | diag, | ||
type(bulkmixedlayer_cs), pointer | CS | ||
) |
[in] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[in] | param_file | A structure to parse for run-time parameters. |
[in,out] | diag | A structure that is used to regulate diagnostic output. |
cs | A pointer that is set to point to the control structure for this module. |
Definition at line 3647 of file MOM_bulk_mixed_layer.F90.
References id_clock_adjustment, id_clock_conv, id_clock_detrain, id_clock_eos, id_clock_mech, id_clock_pass, and id_clock_resort.
Referenced by mom_diabatic_driver::diabatic_driver_init().
|
private |
This subroutine does instantaneous convective entrainment into the buffer layers and mixed layers to remove hydrostatic instabilities. Any water that is lighter than currently in the mixed- or buffer- layer is entrained.
[in] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[in,out] | h | Layer thickness, in m or kg m-2. (Intent in/out) The units of h are referred to as H below. |
[in,out] | u | Zonal velocities interpolated to h points, m s-1. |
[in,out] | v | Zonal velocities interpolated to h points, m s-1. |
[in,out] | t | Layer temperatures, in deg C. |
[in,out] | r0 | Potential density referenced to surface pressure, in kg m-3. |
[in,out] | rcv | The coordinate defining potential density, in kg m-3. |
[in,out] | d_eb | The downward increase across a layer in the entrainment from below, in H. Positive values go with mass gain by a layer. |
[out] | dke_ca | The vertically integrated change in kinetic energy due to convective adjustment, in m3 s-2. |
[out] | ctke | The buoyant turbulent kinetic energy source due to convective adjustment, in m3 s-2. |
[in] | j | The j-index to work on. |
cs | The control structure for this module. | |
[in] | nz_conv | If present, the number of layers over which to do convective adjustment (perhaps CSnkml). |
Definition at line 917 of file MOM_bulk_mixed_layer.F90.
Referenced by bulkmixedlayer().
|
private |
This subroutine returns an approximation to the integral R = exp(-L*(H+E)) integral(LH to L(H+E)) L/(1-(1+x)exp(-x)) dx. The approximation to the integrand is good to within -2% at x~.3 and +25% at x~3.5, but the exponential deemphasizes the importance of large x. When L=0, EF4 returns E/((H+E)*H).
[in] | h | Total thickness, in m or kg m-2. (Intent in) The units of h are referred to as H below. |
[in] | e | Entrainment, in units of H. |
[in] | l | The e-folding scale in H-1. |
[in,out] | dr_de | The partial derivative of the result R with E, in H-2. |
Definition at line 3920 of file MOM_bulk_mixed_layer.F90.
Referenced by mechanical_entrainment().
|
private |
This subroutine determines the TKE available at the depth of free convection to drive mechanical entrainment.
[in] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[in] | htot | The accumlated mixed layer thickness, in m or kg m-2. (Intent in). |
[in] | h_ca | The mixed layer depth after convective adjustment, in H. |
[in] | fluxes | A structure containing pointers to any possible forcing fields. Unused fields have NULL ptrs. |
[in,out] | conv_en | The buoyant turbulent kinetic energy source due to free convection, in m3 s-2. |
[in] | dke_fc | The vertically integrated change in kinetic energy due to free convection, in m3 s-2. |
[in] | ctke | The buoyant turbulent kinetic energy |
[in] | dke_ca | The vertically integrated change in |
[out] | tke | The turbulent kinetic energy available for mixing over a time step, in m3 s-2. |
[out] | idecay_len_tke | The inverse of the vertical decay scale for TKE, in H-1. |
[out] | cmke | Coefficients of HpE and HpE^2 in calculating the denominator of MKE_rate, in H-1 and H-2. |
[in] | dt | The time step in s. |
[in] | j | The j-index to work on. |
[in] | ksort | The density-sorted k-indicies. |
cs | The control structure for this module. |
Definition at line 1431 of file MOM_bulk_mixed_layer.F90.
Referenced by bulkmixedlayer().
|
private |
This subroutine calculates mechanically driven entrainment.
[in] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[in,out] | h | Layer thickness, in m or kg m-2. (Intent in/out) The units of h are referred to as H below. |
[in,out] | d_eb | The downward increase across a layer in the entrainment from below, in H. Positive values go with mass gain by a layer. |
[in,out] | htot | The accumlated mixed layer thickness, in H. |
[in,out] | ttot | The depth integrated mixed layer temperature, in deg C H. |
[in,out] | stot | The depth integrated mixed layer salinity, in psu H. |
[in,out] | uhtot | The depth integrated mixed layer zonal velocity, H m s-1. |
[in,out] | vhtot | The integrated mixed layer meridional velocity, H m s-1. |
[in,out] | r0_tot | The integrated mixed layer potential density referenced to 0 pressure, in H kg m-3. |
[in,out] | rcv_tot | The integrated mixed layer coordinate variable potential density, in H kg m-3. |
[in] | nsw | The number of bands of penetrating shortwave radiation. |
[in,out] | pen_sw_bnd | The penetrating shortwave heating at the sea surface in each penetrating band, in K H, size nsw x SZI_(G). |
[in,out] | tke | The turbulent kinetic energy available for mixing over a time step, in m3 s-2. |
[in] | j | The j-index to work on. |
[in] | ksort | The density-sorted k-indicies. |
cs | The control structure for this module. |
Definition at line 1641 of file MOM_bulk_mixed_layer.F90.
References ef4().
Referenced by bulkmixedlayer().
|
private |
This subroutine causes the mixed layer to entrain to the depth of free convection. The depth of free convection is the shallowest depth at which the fluid is denser than the average of the fluid above.
[in] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[in,out] | h | Layer thickness, in m or kg m-2. (Intent in/out) The units of h are referred to as H below. |
[in,out] | d_eb | The downward increase across a layer in the entrainment from below , in H. Positive values go with mass gain by a layer. |
[out] | htot | The accumulated mixed layer thickness, in H. |
[out] | ttot | The depth integrated mixed layer temperature, in deg C H. |
[out] | stot | The depth integrated mixed layer salinity, in psu H. |
[out] | uhtot | The depth integrated mixed layer zonal velocity, H m s-1. |
[out] | vhtot | The integrated mixed layer meridional velocity, H m s-1. |
[out] | r0_tot | The integrated mixed layer potential density referenced to 0 pressure, in kg m-2. |
[out] | rcv_tot | The integrated mixed layer coordinate variable potential density, in kg m-2. |
[in] | nsw | The number of bands of penetrating shortwave radiation. |
[in,out] | pen_sw_bnd | The penetrating shortwave heating at the sea surface in each penetrating band, in K H, size nsw x SZI_(G). |
[out] | conv_en | The buoyant turbulent kinetic energy source due to free convection, in m3 s-2. |
[out] | dke_fc | The vertically integrated change in kinetic energy due to free convection, in m3 s-2. |
[in] | j | The j-index to work on. |
[in] | ksort | The density-sorted k-indices. |
cs | The control structure for this module. |
Definition at line 1073 of file MOM_bulk_mixed_layer.F90.
Referenced by bulkmixedlayer().
|
private |
This subroutine moves any water left in the former mixed layers into the single buffer layers and may also move buffer layer water into the interior isopycnal layers.
[in] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[in,out] | h | Layer thickness, in m or kg m-2. (Intent in/out) The units of h are referred to as H below. Layer 0 is the new mixed layer. |
[in,out] | t | Potential temperature, in C. |
[in,out] | s | Salinity, in psu. |
[in,out] | r0 | Potential density referenced to surface pressure, in kg m-3. |
[in,out] | rcv | The coordinate defining potential density, in kg m-3. |
[in] | rcvtgt | The target value of Rcv for each layer, in kg m-3. |
[in] | dt | Time increment, in s. |
[in,out] | d_ea | The upward increase across a layer in the entrainment from above, in m or kg m-2 (H). Positive d_ea goes with layer thickness increases. |
[in,out] | d_eb | The downward increase across a layer in the entrainment from below, in H. Positive values go with mass gain by a layer. |
[in] | j | The meridional row to work on. |
cs | The control structure returned by a previous call to mixedlayer_init. | |
[in] | drcv_dt | The partial derivative of coordinate defining potential density with potential temperature, in kg m-3 K-1. |
[in] | drcv_ds | The partial derivative of coordinate defining potential density with salinity, in kg m-3 psu-1. |
[in] | max_bl_det | If non-negative, the maximum detrainment permitted from the buffer layers, in H. |
Definition at line 3332 of file MOM_bulk_mixed_layer.F90.
Referenced by bulkmixedlayer().
|
private |
This subroutine moves any water left in the former mixed layers into the two buffer layers and may also move buffer layer water into the interior isopycnal layers.
[in] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[in,out] | h | Layer thickness, in m or kg m-2. (Intent in/out) The units of h are referred to as H below. Layer 0 is the new mixed layer. |
[in,out] | t | Potential temperature, in C. |
[in,out] | s | Salinity, in psu. |
[in,out] | r0 | Potential density referenced to surface pressure, in kg m-3. |
[in,out] | rcv | The coordinate defining potential density, in kg m-3. |
[in] | rcvtgt | The target value of Rcv for each layer, in kg m-3. |
[in] | dt | Time increment, in s. |
[in] | dt_diag | The diagnostic time step, in s. |
[in,out] | d_ea | The upward increase across a layer in the entrainment from above, in m or kg m-2 (H). Positive d_ea goes with layer thickness increases. |
[in] | j | The meridional row to work on. |
cs | The control structure returned by a previous call to mixedlayer_init. | |
[in] | dr0_dt | The partial derivative of potential density referenced to the surface with potential temperature, in kg m-3 K-1. |
[in] | dr0_ds | The partial derivative of cpotential density referenced to the surface with salinity, in kg m-3 psu-1. |
[in] | drcv_dt | The partial derivative of coordinate defining potential density with potential temperature, in kg m-3 K-1. |
[in] | drcv_ds | The partial derivative of coordinate defining potential density with salinity, in kg m-3 psu-1. |
[in] | max_bl_det | If non-negative, the maximum detrainment permitted from the buffer layers, in H. |
Definition at line 2408 of file MOM_bulk_mixed_layer.F90.
References mom_error_handler::mom_error().
Referenced by bulkmixedlayer().
|
private |
This subroutine actually moves properties between layers to achieve a resorted state, with all of the resorted water either moved into the correct interior layers or in the top nkmb layers.
[in] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[in,out] | h | Layer thickness, in m or kg m-2. (Intent in/out) The units of h are referred to as H below. Layer 0 is the new mixed layer. |
[in,out] | t | Layer temperatures, in deg C. |
[in,out] | s | Layer salinities, in psu. |
[in,out] | r0 | Potential density referenced to surface pressure, in kg m-3. |
[in,out] | rcv | The coordinate defining potential density, in kg m-3. |
[in] | rcvtgt | The target value of Rcv for each layer, in kg m-3. |
[in,out] | eps | The (small) thickness that must remain in each layer, in H. |
[in,out] | d_ea | The upward increase across a layer in the entrainment from above, in m or kg m-2 (H). Positive d_ea goes with layer thickness increases. |
[in,out] | d_eb | The downward increase across a layer in the entrainment from below, in H. Positive values go with mass gain by a layer. |
[in] | ksort | The density-sorted k-indicies. |
cs | The control structure for this module. | |
[in] | dr0_dt | The partial derivative of potential density referenced to the surface with potential temperature, in kg m-3 K-1. |
[in] | dr0_ds | The partial derivative of cpotential density referenced to the surface with salinity, in kg m-3 psu-1. |
[in] | drcv_dt | The partial derivative of coordinate defining potential density with potential temperature, in kg m-3 K-1. |
[in] | drcv_ds | The partial derivative of coordinate defining potential density with salinity, in kg m-3 psu-1. |
Definition at line 2055 of file MOM_bulk_mixed_layer.F90.
Referenced by bulkmixedlayer().
|
private |
This subroutine generates an array of indices that are sorted by layer density.
[in] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[in] | h | Layer thickness, in m or kg m-2. (Intent in/out) The units of h are referred to as H below. |
[in] | r0 | The potential density used to sort the layers, in kg m-3. |
[in] | eps | The (small) thickness that must remain in each layer, in H. |
cs | The control structure returned by a previous call to mixedlayer_init. | |
[out] | ksort | The k-index to use in the sort. |
Definition at line 1987 of file MOM_bulk_mixed_layer.F90.
Referenced by bulkmixedlayer().
|
private |
Definition at line 188 of file MOM_bulk_mixed_layer.F90.
Referenced by bulkmixedlayer(), and bulkmixedlayer_init().
|
private |
Definition at line 188 of file MOM_bulk_mixed_layer.F90.
Referenced by bulkmixedlayer(), and bulkmixedlayer_init().
integer mom_bulk_mixed_layer::id_clock_detrain =0 |
Definition at line 188 of file MOM_bulk_mixed_layer.F90.
Referenced by bulkmixedlayer(), and bulkmixedlayer_init().
|
private |
Definition at line 189 of file MOM_bulk_mixed_layer.F90.
Referenced by bulkmixedlayer(), and bulkmixedlayer_init().
|
private |
Definition at line 188 of file MOM_bulk_mixed_layer.F90.
Referenced by bulkmixedlayer(), and bulkmixedlayer_init().
|
private |
Definition at line 189 of file MOM_bulk_mixed_layer.F90.
Referenced by bulkmixedlayer(), and bulkmixedlayer_init().
|
private |
Definition at line 189 of file MOM_bulk_mixed_layer.F90.
Referenced by bulkmixedlayer(), and bulkmixedlayer_init().
|
private |
Definition at line 191 of file MOM_bulk_mixed_layer.F90.
|
private |
Definition at line 191 of file MOM_bulk_mixed_layer.F90.