MOM6
|
Routines used to calculate the opacity of the ocean.
opacity_from_chl: In this routine, the Morel (modified) or Manizza (modified) schemes use the "blue" band in the paramterizations to determine the e-folding depth of the incoming shortwave attenuation. The red portion is lumped into the net heating at the surface.
Morel, A., 1988: Optical modeling of the upper ocean in relation to its biogenous matter content (case-i waters)., J. Geo. Res., 93, 10,749-10,768.
Manizza, M., C. LeQuere, A. J. Watson, and E. T. Buitenhuis, 2005: Bio-optical feedbacks among phytoplankton, upper ocean physics and sea-ice in a global model, Geophys. Res. Let., 32, L05603, doi:10.1029/2004GL020778.
Data Types | |
type | opacity_cs |
The control structure with paramters for the MOM_opacity module. More... | |
type | optics_type |
This type is used to store information about ocean optical properties. More... | |
integer, parameter | no_scheme = 0 |
Coded integers to specify the opacity scheme. More... | |
integer, parameter | manizza_05 = 1 |
Coded integers to specify the opacity scheme. More... | |
integer, parameter | morel_88 = 2 |
Coded integers to specify the opacity scheme. More... | |
integer, parameter | single_exp = 3 |
Coded integers to specify the opacity scheme. More... | |
integer, parameter | double_exp = 4 |
Coded integers to specify the opacity scheme. More... | |
character *(10), parameter | manizza_05_string = "MANIZZA_05" |
String to specify the opacity scheme. More... | |
character *(10), parameter | morel_88_string = "MOREL_88" |
String to specify the opacity scheme. More... | |
character *(10), parameter | single_exp_string = "SINGLE_EXP" |
String to specify the opacity scheme. More... | |
character *(10), parameter | double_exp_string = "DOUBLE_EXP" |
String to specify the opacity scheme. More... | |
real, parameter | op_diag_len = 1e-10 |
Lengthscale L used to remap opacity from op to 1/L * tanh(op * L) More... | |
subroutine, public | set_opacity (optics, sw_total, sw_vis_dir, sw_vis_dif, sw_nir_dir, sw_nir_dif, G, GV, CS, chl_2d, chl_3d) |
This sets the opacity of sea water based based on one of several different schemes. More... | |
subroutine | opacity_from_chl (optics, sw_total, sw_vis_dir, sw_vis_dif, sw_nir_dir, sw_nir_dif, G, GV, CS, chl_2d, chl_3d) |
This sets the "blue" band opacity based on chloophyll A concencentrations The red portion is lumped into the net heating at the surface. More... | |
real function, public | opacity_morel (chl_data) |
This sets the blue-wavelength opacity according to the scheme proposed by Morel and Antoine (1994). More... | |
real function | sw_pen_frac_morel (chl_data) |
This sets the penetrating shortwave fraction according to the scheme proposed by Morel and Antoine (1994). More... | |
real function, public | opacity_manizza (chl_data) |
This sets the blue-wavelength opacity according to the scheme proposed by Manizza, M. et al, 2005. More... | |
subroutine, public | extract_optics_slice (optics, j, G, GV, opacity, opacity_scale, penSW_top, penSW_scale) |
This subroutine returns a 2-d slice at constant j of fields from an optics_type, with the potential for rescaling these fields. More... | |
subroutine, public | extract_optics_fields (optics, nbands) |
Set arguments to fields from the optics type. More... | |
integer function, public | optics_nbands (optics) |
Return the number of bands of penetrating shortwave radiation. More... | |
subroutine, public | absorbremainingsw (G, GV, US, h, opacity_band, nsw, optics, j, dt, H_limit_fluxes, adjustAbsorptionProfile, absorbAllSW, T, Pen_SW_bnd, eps, ksort, htot, Ttot, TKE, dSV_dT) |
Apply shortwave heating below the boundary layer (when running with the bulk mixed layer inhereted from GOLD) or throughout the water column. More... | |
subroutine, public | sumswoverbands (G, GV, US, h, nsw, optics, j, dt, H_limit_fluxes, absorbAllSW, iPen_SW_bnd, netPen) |
This subroutine calculates the total shortwave heat flux integrated over bands as a function of depth. This routine is only called for computing buoyancy fluxes for use in KPP. This routine does not updat e the state. More... | |
subroutine, public | opacity_init (Time, G, GV, US, param_file, diag, CS, optics) |
This routine initalizes the opacity module, including an optics_type. More... | |
subroutine, public | opacity_end (CS, optics) |
subroutine, public mom_opacity::absorbremainingsw | ( | type(ocean_grid_type), intent(in) | G, |
type(verticalgrid_type), intent(in) | GV, | ||
type(unit_scale_type), intent(in) | US, | ||
real, dimension( g %isd: g %ied, gv %ke), intent(in) | h, | ||
real, dimension(max(1,nsw), g %isd: g %ied, gv %ke), intent(in) | opacity_band, | ||
integer, intent(in) | nsw, | ||
type(optics_type), intent(in) | optics, | ||
integer, intent(in) | j, | ||
real, intent(in) | dt, | ||
real, intent(in) | H_limit_fluxes, | ||
logical, intent(in) | adjustAbsorptionProfile, | ||
logical, intent(in) | absorbAllSW, | ||
real, dimension( g %isd: g %ied, gv %ke), intent(inout) | T, | ||
real, dimension(max(1,nsw), g %isd: g %ied), intent(inout) | Pen_SW_bnd, | ||
real, dimension( g %isd: g %ied, gv %ke), intent(in), optional | eps, | ||
integer, dimension( g %isd: g %ied, gv %ke), intent(in), optional | ksort, | ||
real, dimension( g %isd: g %ied), intent(in), optional | htot, | ||
real, dimension( g %isd: g %ied), intent(inout), optional | Ttot, | ||
real, dimension( g %isd: g %ied, gv %ke), intent(inout), optional | TKE, | ||
real, dimension( g %isd: g %ied, gv %ke), intent(in), optional | dSV_dT | ||
) |
Apply shortwave heating below the boundary layer (when running with the bulk mixed layer inhereted from GOLD) or throughout the water column.
In addition, it causes all of the remaining SW radiation to be absorbed, provided that the total water column thickness is greater than H_limit_fluxes. For thinner water columns, the heating is scaled down proportionately, the assumption being that the remaining heating (which is left in Pen_SW) should go into an (absent for now) ocean bottom sediment layer.
[in] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[in] | us | A dimensional unit scaling type |
[in] | nsw | Number of bands of penetrating shortwave radiation. |
[in] | h | Layer thicknesses [H ~> m or kg m-2]. |
[in] | opacity_band | Opacity in each band of penetrating shortwave radiation [H-1 ~> m-1 or m2 kg-1]. The indicies are band, i, k. |
[in] | optics | An optics structure that has values of opacities and shortwave fluxes. |
[in] | j | j-index to work on. |
[in] | dt | Time step [T ~> s]. |
[in] | h_limit_fluxes | If the total ocean depth is less than this, they are scaled away to avoid numerical instabilities [H ~> m or kg m-2]. This would not be necessary if a finite heat capacity mud-layer were added. |
[in] | adjustabsorptionprofile | If true, apply heating above the layers in which it should have occurred to get the correct mean depth (and potential energy change) of the shortwave that should be absorbed by each layer. |
[in] | absorballsw | If true, apply heating above the layers in which it should have occurred to get the correct mean depth (and potential energy change) of the shortwave that should be absorbed by each layer. |
[in,out] | t | Layer potential/conservative temperatures [degC] |
[in,out] | pen_sw_bnd | Penetrating shortwave heating in each band that hits the bottom and will will be redistributed through the water column [degC H ~> degC m or degC kg m-2], size nsw x G isd: G ied. |
[in] | eps | Small thickness that must remain in each layer, and which will not be subject to heating [H ~> m or kg m-2] |
[in] | ksort | Density-sorted k-indicies. |
[in] | htot | Total mixed layer thickness [H ~> m or kg m-2]. |
[in,out] | ttot | Depth integrated mixed layer temperature [degC H ~> degC m or degC kg m-2] |
[in] | dsv_dt | The partial derivative of specific volume with temperature [R-1 degC-1]. |
[in,out] | tke | The TKE sink from mixing the heating throughout a layer [R Z3 T-2 ~> J m-2]. |
Definition at line 512 of file MOM_opacity.F90.
Referenced by mom_diabatic_aux::applyboundaryfluxesinout(), and mom_bulk_mixed_layer::bulkmixedlayer().
subroutine, public mom_opacity::extract_optics_fields | ( | type(optics_type), intent(in) | optics, |
integer, intent(out), optional | nbands | ||
) |
Set arguments to fields from the optics type.
[in] | optics | An optics structure that has values of opacities and shortwave fluxes. |
[out] | nbands | The number of penetrating bands of SW radiation |
Definition at line 485 of file MOM_opacity.F90.
subroutine, public mom_opacity::extract_optics_slice | ( | type(optics_type), intent(in) | optics, |
integer, intent(in) | j, | ||
type(ocean_grid_type), intent(in) | G, | ||
type(verticalgrid_type), intent(in) | GV, | ||
real, dimension(max(optics%nbands,1), g %isd: g %ied, gv %ke), intent(out), optional | opacity, | ||
real, intent(in), optional | opacity_scale, | ||
real, dimension(max(optics%nbands,1), g %isd: g %ied), intent(out), optional | penSW_top, | ||
real, intent(in), optional | penSW_scale | ||
) |
This subroutine returns a 2-d slice at constant j of fields from an optics_type, with the potential for rescaling these fields.
[in] | optics | An optics structure that has values of opacities and shortwave fluxes. |
[in] | j | j-index to extract |
[in] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[out] | opacity | The opacity in each band, i-point, and layer |
[in] | opacity_scale | A factor by which to rescale the opacity. |
[out] | pensw_top | The shortwave radiation [W m-2] at the surface |
[in] | pensw_scale | A factor by which to rescale the shortwave flux. |
Definition at line 447 of file MOM_opacity.F90.
Referenced by mom_bulk_mixed_layer::bulkmixedlayer(), and mom_forcing_type::extractfluxes1d().
subroutine, public mom_opacity::opacity_end | ( | type(opacity_cs), pointer | CS, |
type(optics_type), optional, pointer | optics | ||
) |
cs | An opacity control structure that should be deallocated. |
optics | An optics type structure that should be deallocated. |
Definition at line 1121 of file MOM_opacity.F90.
|
private |
This sets the "blue" band opacity based on chloophyll A concencentrations The red portion is lumped into the net heating at the surface.
[in,out] | optics | An optics structure that has values set based on the opacities. |
sw_total | Total shortwave flux into the ocean [W m-2] | |
sw_vis_dir | Visible, direct shortwave into the ocean [W m-2] | |
sw_vis_dif | Visible, diffuse shortwave into the ocean [W m-2] | |
sw_nir_dir | Near-IR, direct shortwave into the ocean [W m-2] | |
sw_nir_dif | Near-IR, diffuse shortwave into the ocean [W m-2] | |
[in] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
cs | The control structure. | |
[in] | chl_2d | Vertically uniform chlorophyll-A concentractions [mg m-3] |
[in] | chl_3d | A 3-d field of chlorophyll-A concentractions [mg m-3] |
Definition at line 222 of file MOM_opacity.F90.
References manizza_05, mom_error_handler::mom_error(), morel_88, opacity_morel(), and sw_pen_frac_morel().
Referenced by set_opacity().
subroutine, public mom_opacity::opacity_init | ( | type(time_type), intent(in), target | Time, |
type(ocean_grid_type), intent(in) | G, | ||
type(verticalgrid_type), intent(in) | GV, | ||
type(unit_scale_type), intent(in) | US, | ||
type(param_file_type), intent(in) | param_file, | ||
type(diag_ctrl), intent(inout), target | diag, | ||
type(opacity_cs), pointer | CS, | ||
type(optics_type), pointer | optics | ||
) |
This routine initalizes the opacity module, including an optics_type.
[in] | time | The current model time. |
[in] | g | The ocean's grid structure. |
[in] | gv | model vertical grid structure |
[in] | us | A dimensional unit scaling type |
[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. | |
optics | An optics structure that has parameters set and arrays allocated here. |
Definition at line 922 of file MOM_opacity.F90.
References double_exp, double_exp_string, manizza_05, manizza_05_string, mom_error_handler::mom_error(), mom_error_handler::mom_mesg(), morel_88, morel_88_string, no_scheme, mom_diag_mediator::register_diag_field(), single_exp, single_exp_string, and mom_string_functions::uppercase().
real function, public mom_opacity::opacity_manizza | ( | real, intent(in) | chl_data | ) |
This sets the blue-wavelength opacity according to the scheme proposed by Manizza, M. et al, 2005.
[in] | chl_data | The chlorophyll-A concentration in mg m-3. |
Definition at line 437 of file MOM_opacity.F90.
real function, public mom_opacity::opacity_morel | ( | real, intent(in) | chl_data | ) |
This sets the blue-wavelength opacity according to the scheme proposed by Morel and Antoine (1994).
[in] | chl_data | The chlorophyll-A concentration in mg m-3. |
Definition at line 397 of file MOM_opacity.F90.
Referenced by opacity_from_chl().
integer function, public mom_opacity::optics_nbands | ( | type(optics_type), intent(in) | optics | ) |
Return the number of bands of penetrating shortwave radiation.
[in] | optics | An optics structure that has values of opacities and shortwave fluxes. |
Definition at line 495 of file MOM_opacity.F90.
Referenced by mom_forcing_type::calculatebuoyancyflux1d(), mom_forcing_type::calculatebuoyancyflux2d(), mom_diabatic_driver::diabatic_ale(), mom_diabatic_driver::diabatic_ale_legacy(), and mom_forcing_type::extractfluxes1d().
subroutine, public mom_opacity::set_opacity | ( | type(optics_type), intent(inout) | optics, |
real, dimension(:,:), pointer | sw_total, | ||
real, dimension(:,:), pointer | sw_vis_dir, | ||
real, dimension(:,:), pointer | sw_vis_dif, | ||
real, dimension(:,:), pointer | sw_nir_dir, | ||
real, dimension(:,:), pointer | sw_nir_dif, | ||
type(ocean_grid_type), intent(in) | G, | ||
type(verticalgrid_type), intent(in) | GV, | ||
type(opacity_cs), pointer | CS, | ||
real, dimension( g %isd: g %ied, g %jsd: g %jed), intent(in), optional | chl_2d, | ||
real, dimension( g %isd: g %ied, g %jsd: g %jed, gv %ke), intent(in), optional | chl_3d | ||
) |
This sets the opacity of sea water based based on one of several different schemes.
[in,out] | optics | An optics structure that has values set based on the opacities. |
sw_total | Total shortwave flux into the ocean [W m-2] | |
sw_vis_dir | Visible, direct shortwave into the ocean [W m-2] | |
sw_vis_dif | Visible, diffuse shortwave into the ocean [W m-2] | |
sw_nir_dir | Near-IR, direct shortwave into the ocean [W m-2] | |
sw_nir_dif | Near-IR, diffuse shortwave into the ocean [W m-2] | |
[in] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
cs | The control structure earlier set up by opacity_init. | |
[in] | chl_2d | Vertically uniform chlorophyll-A concentractions[mg m-3] |
[in] | chl_3d | The chlorophyll-A concentractions of each layer [mg m-3] |
Definition at line 93 of file MOM_opacity.F90.
References double_exp, manizza_05, mom_error_handler::mom_error(), op_diag_len, opacity_from_chl(), and mom_diag_mediator::query_averaging_enabled().
subroutine, public mom_opacity::sumswoverbands | ( | type(ocean_grid_type), intent(in) | G, |
type(verticalgrid_type), intent(in) | GV, | ||
type(unit_scale_type), intent(in) | US, | ||
real, dimension( g %isd: g %ied, gv %ke), intent(in) | h, | ||
integer, intent(in) | nsw, | ||
type(optics_type), intent(in) | optics, | ||
integer, intent(in) | j, | ||
real, intent(in) | dt, | ||
real, intent(in) | H_limit_fluxes, | ||
logical, intent(in) | absorbAllSW, | ||
real, dimension(max(nsw,1), g %isd: g %ied), intent(in) | iPen_SW_bnd, | ||
real, dimension( g %isd: g %ied, gv %ke+1), intent(inout) | netPen | ||
) |
This subroutine calculates the total shortwave heat flux integrated over bands as a function of depth. This routine is only called for computing buoyancy fluxes for use in KPP. This routine does not updat e the state.
[in] | g | The ocean's grid structure. |
[in] | gv | The ocean's vertical grid structure. |
[in] | us | A dimensional unit scaling type |
[in] | h | Layer thicknesses [H ~> m or kg m-2]. |
[in] | nsw | The number of bands of penetrating shortwave radiation, perhaps from optics_nbands(optics), |
[in] | optics | An optics structure that has values set based on the opacities. |
[in] | j | j-index to work on. |
[in] | dt | Time step [T ~> s]. |
[in] | h_limit_fluxes | the total depth at which the surface fluxes start to be limited to avoid excessive heating of a thin ocean [H ~> m or kg m-2] |
[in] | absorballsw | If true, ensure that all shortwave radiation is absorbed in the ocean water column. |
[in] | ipen_sw_bnd | The incident penetrating shortwave heating in each band that hits the bottom and will be redistributed through the water column [degC H ~> degC m or degC kg m-2]; size nsw x G isd: G ied. |
[in,out] | netpen | Net penetrating shortwave heat flux at each |
Definition at line 783 of file MOM_opacity.F90.
Referenced by mom_forcing_type::calculatebuoyancyflux1d().
|
private |
This sets the penetrating shortwave fraction according to the scheme proposed by Morel and Antoine (1994).
[in] | chl_data | The chlorophyll-A concentration in mg m-3. |
Definition at line 417 of file MOM_opacity.F90.
Referenced by opacity_from_chl().
|
private |
Coded integers to specify the opacity scheme.
Definition at line 77 of file MOM_opacity.F90.
Referenced by opacity_init(), and set_opacity().
|
private |
String to specify the opacity scheme.
Definition at line 83 of file MOM_opacity.F90.
Referenced by opacity_init().
|
private |
Coded integers to specify the opacity scheme.
Definition at line 77 of file MOM_opacity.F90.
Referenced by opacity_from_chl(), opacity_init(), and set_opacity().
|
private |
String to specify the opacity scheme.
Definition at line 80 of file MOM_opacity.F90.
Referenced by opacity_init().
|
private |
Coded integers to specify the opacity scheme.
Definition at line 77 of file MOM_opacity.F90.
Referenced by opacity_from_chl(), and opacity_init().
|
private |
String to specify the opacity scheme.
Definition at line 81 of file MOM_opacity.F90.
Referenced by opacity_init().
integer, parameter mom_opacity::no_scheme = 0 |
Coded integers to specify the opacity scheme.
Definition at line 77 of file MOM_opacity.F90.
Referenced by opacity_init().
|
private |
Lengthscale L used to remap opacity from op to 1/L * tanh(op * L)
Definition at line 85 of file MOM_opacity.F90.
Referenced by set_opacity().
|
private |
Coded integers to specify the opacity scheme.
Definition at line 77 of file MOM_opacity.F90.
Referenced by opacity_init().
|
private |
String to specify the opacity scheme.
Definition at line 82 of file MOM_opacity.F90.
Referenced by opacity_init().