mom_surface_forcing module reference¶
Functions that calculate the surface wind stresses and fluxes of buoyancy or temperature/salinity andfresh water, in ocean-only (solo) mode.
Data Types¶
Structure containing pointers to the forcing fields that may be used to drive MOM. |
Functions/Subroutines¶
Calls subroutines in this file to get surface forcing fields. |
|
Sets the surface wind stresses to constant values. |
|
Sets the surface wind stresses to set up two idealized gyres. |
|
Sets the surface wind stresses to set up a single idealized gyre. |
|
Sets the surface wind stresses to set up idealized gyres. |
|
Sets the surface wind stresses, forcestaux and forcestauy for the Neverworld forcing configuration. |
|
Sets the zonal wind stresses to a piecewise series of s-curves. |
|
Returns the value of a cosine-bell function evaluated at x/L. |
|
Specifies zero surface bouyancy fluxes from input files. |
|
Specifies zero surface bouyancy fluxes from data over-ride. |
|
This subroutine specifies zero surface bouyancy fluxes. |
|
Sets up spatially and temporally constant surface heat fluxes. |
|
Sets surface fluxes of heat and salinity by restoring to temperature and salinity profiles that vary linearly with latitude. |
|
Save a restart file for the forcing fields. |
|
Initialize the surface forcing module. |
|
Deallocate memory associated with the surface forcing module. |
Detailed Description¶
These functions are called every time step, even if the wind stresses or buoyancy fluxes are constant in time - in that case these routines return quickly without doing anything. In addition, any I/O of forcing fields is controlled by surface_forcing_init, located in this file.
Type Documentation¶
-
type
mom_surface_forcing/
surface_forcing_cs
¶ Structure containing pointers to the forcing fields that may be used to drive MOM. All fluxes are positive into the ocean.
- Type fields
%
urf_cs
[type(user_revise_forcing_cs),pointer] :: Control structures for named forcing packages.%
user_forcing_csp
[type(user_surface_forcing_cs),pointer] :: Control structures for named forcing packages.%
bfb_forcing_csp
[type(bfb_surface_forcing_cs),pointer] :: Control structures for named forcing packages.%
dumbbell_forcing_csp
[type(dumbbell_surface_forcing_cs),pointer] :: Control structures for named forcing packages.%
meso_forcing_csp
[type(meso_surface_forcing_cs),pointer] :: Control structures for named forcing packages.%
idealized_hurricane_csp
[type(idealized_hurricane_cs),pointer] :: Control structures for named forcing packages.%
scm_cvmix_tests_csp
[type(scm_cvmix_tests_cs),pointer] :: Control structures for named forcing packages.%
use_temperature
[logical] :: if true, temp & salinity used as state variables%
restorebuoy
[logical] :: if true, use restoring surface buoyancy forcing%
adiabatic
[logical] :: if true, no diapycnal mass fluxes or surface buoyancy forcing%
variable_winds
[logical] :: if true, wind stresses vary with time%
variable_buoyforce
[logical] :: if true, buoyancy forcing varies with time.%
south_lat
[real] :: southern latitude of the domain%
len_lat
[real] :: domain length in latitude%
rho0
[real] :: Boussinesq reference density [R ~> kg m-3].%
g_earth
[real] :: gravitational acceleration [L2 Z-1 T-2 ~> m s-2]%
flux_const
[real] :: piston velocity for surface restoring [Z T-1 ~> m s-1]%
flux_const_t
[real] :: piston velocity for surface temperature restoring [m s-1]%
flux_const_s
[real] :: piston velocity for surface salinity restoring [Z T-1 ~> m s-1]%
latent_heat_fusion
[real] :: latent heat of fusion times [Q ~> J kg-1]%
latent_heat_vapor
[real] :: latent heat of vaporization [Q ~> J kg-1]%
tau_x0
[real] :: Constant zonal wind stress used in the WIND_CONFIG=”const” forcing.%
tau_y0
[real] :: Constant meridional wind stress used in the WIND_CONFIG=”const” forcing.%
gust_const
[real] :: constant unresolved background gustiness for ustar [R L Z T-1 ~> Pa]%
read_gust_2d
[logical] :: if true, use 2-dimensional gustiness supplied from a file%
gust
[real(:,:),pointer] :: spatially varying unresolved background gustiness [R L Z T-1 ~> Pa] gust is used when read_gust_2d is true.%
t_restore
[real(:,:),pointer] :: temperature to damp (restore) the SST to [degC]%
s_restore
[real(:,:),pointer] :: salinity to damp (restore) the SSS [ppt]%
dens_restore
[real(:,:),pointer] :: density to damp (restore) surface density [R ~> kg m-3]%
buoy_last_lev_read
[integer] :: The last time level read from buoyancy input files.%
gyres_taux_const
[real] :: A constant wind stress [Pa].%
gyres_taux_sin_amp
[real] :: The amplitude of cosine wind stress gyres [Pa], if WIND_CONFIG==’gyres’.%
gyres_taux_cos_amp
[real] :: The amplitude of cosine wind stress gyres [Pa], if WIND_CONFIG==’gyres’.%
gyres_taux_n_pis
[real] :: The number of sine lobes in the basin if if WIND_CONFIG==’gyres’.%
answers_2018
[logical] :: If true, use the order of arithmetic and expressions that recover the answers from the end of 2018. Otherwise, use a form of the gyre wind stresses that are rotationally invariant and more likely to be the same between compilers.%
fix_ustar_gustless_bug
[logical] :: If true correct a bug in the time-averaging of the gustless wind friction velocity.%
scurves_ydata
[real(20)] :: Latitudes of scurve nodes [degreesN].%
scurves_taux
[real(20)] :: Zonal wind stress values at scurve nodes [Pa].%
t_north
[real] :: target temperatures at north used in buoyancy_forcing_linear%
t_south
[real] :: target temperatures at south used in buoyancy_forcing_linear%
s_north
[real] :: target salinity at north used in buoyancy_forcing_linear%
s_south
[real] :: target salinity at south used in buoyancy_forcing_linear%
first_call_set_forcing
[logical] :: True until after the first call to set_forcing.%
archaic_omip_file
[logical] :: If true use the variable names and data fields from a very old version of the OMIP forcing.%
dataoverrideisinitialized
[logical] :: If true, data override has been initialized.%
wind_scale
[real] :: value by which wind-stresses are scaled, ND.%
constantheatforcing
[real] :: value used for sensible heat flux when buoy_config=”const” [Q R Z T-1 ~> W m-2]%
wind_stagger
[character (len=8)] :: A character indicating how the wind stress components are staggered in WIND_FILE. Valid values are A or C for now.%
tracer_flow_csp
[type(tracer_flow_control_cs),pointer] :: A pointer to the structure that is used to orchestrate the calling of tracer packages.%
restart_csp
[type(mom_restart_cs),pointer] :: A pointer to the restart control structure.%
diag
[type(diag_ctrl),pointer] :: structure used to regulate timing of diagnostic output%
inputdir
[character (len=200)] :: directory where NetCDF input files are.%
wind_config
[character (len=200)] :: indicator for wind forcing type (2gyre, USER, FILE..)%
wind_file
[character (len=200)] :: if wind_config is “file”, file to use%
buoy_config
[character (len=200)] :: indicator for buoyancy forcing type%
longwave_file
[character (len=200)] :: The file from which the longwave heat flux is read.%
shortwave_file
[character (len=200)] :: The file from which the shortwave heat flux is read.%
evaporation_file
[character (len=200)] :: The file from which the evaporation is read.%
sensibleheat_file
[character (len=200)] :: The file from which the sensible heat flux is read.%
latentheat_file
[character (len=200)] :: The file from which the latent heat flux is read.%
rain_file
[character (len=200)] :: The file from which the rainfall is read.%
snow_file
[character (len=200)] :: The file from which the snowfall is read.%
runoff_file
[character (len=200)] :: The file from which the runoff is read.%
longwaveup_file
[character (len=200)] :: The file from which the upward longwave heat flux is read.%
shortwaveup_file
[character (len=200)] :: The file from which the upward shorwave heat flux is read.%
sstrestore_file
[character (len=200)] :: The file from which to read the sea surface temperature to restore toward.%
salinityrestore_file
[character (len=200)] :: The file from which to read the sea surface salinity to restore toward.%
stress_x_var
[character (len=80)] :: X-windstress variable name in the input file.%
stress_y_var
[character (len=80)] :: Y-windstress variable name in the input file.%
ustar_var
[character (len=80)] :: ustar variable name in the input file%
lw_var
[character (len=80)] :: lonngwave heat flux variable name in the input file%
sw_var
[character (len=80)] :: shortwave heat flux variable name in the input file%
latent_var
[character (len=80)] :: latent heat flux variable name in the input file%
sens_var
[character (len=80)] :: sensible heat flux variable name in the input file%
evap_var
[character (len=80)] :: evaporation variable name in the input file%
rain_var
[character (len=80)] :: rainfall variable name in the input file%
snow_var
[character (len=80)] :: snowfall variable name in the input file%
lrunoff_var
[character (len=80)] :: liquid runoff variable name in the input file%
frunoff_var
[character (len=80)] :: frozen runoff variable name in the input file%
sst_restore_var
[character (len=80)] :: target sea surface temeperature variable name in the input file%
sss_restore_var
[character (len=80)] :: target sea surface salinity variable name in the input file%
wind_nlev
[integer] :: The number of time levels in the file of wind stress.%
sw_nlev
[integer] :: The number of time levels in the file of shortwave heat flux.%
lw_nlev
[integer] :: The number of time levels in the file of longwave heat flux.%
latent_nlev
[integer] :: The number of time levels in the file of latent heat flux.%
sens_nlev
[integer] :: The number of time levels in the file of sensible heat flux.%
evap_nlev
[integer] :: The number of time levels in the file of evaporation.%
precip_nlev
[integer] :: The number of time levels in the file of precipitation.%
runoff_nlev
[integer] :: The number of time levels in the file of runoff.%
sst_nlev
[integer] :: The number of time levels in the file of target SST.%
sss_nlev
[integer] :: The number of time levels in the file of target SSS.%
wind_last_lev
[integer] :: The last time level read of wind stress.%
sw_last_lev
[integer] :: The last time level read of shortwave heat flux.%
lw_last_lev
[integer] :: The last time level read of longwave heat flux.%
latent_last_lev
[integer] :: The last time level read of latent heat flux.%
sens_last_lev
[integer] :: The last time level read of sensible heat flux.%
evap_last_lev
[integer] :: The last time level read of evaporation.%
precip_last_lev
[integer] :: The last time level read of precipitation.%
runoff_last_lev
[integer] :: The last time level read of runoff.%
sst_last_lev
[integer] :: The last time level read of target SST.%
sss_last_lev
[integer] :: The last time level read of target SSS.%
handles
[type(forcing_diags),public] :: A structure with diagnostics handles.
Function/Subroutine Documentation¶
-
subroutine
mom_surface_forcing/
set_forcing
(sfc_state, forces, fluxes, day_start, day_interval, G, US, CS)¶ Calls subroutines in this file to get surface forcing fields.
It also allocates and initializes the fields in the forcing and mech_forcing types the first time it is called.
- Parameters
sfc_state :: [inout] A structure containing fields that describe the surface state of the ocean.
forces :: [inout] A structure with the driving mechanical forces
fluxes :: [inout] A structure containing thermodynamic forcing fields
day_start :: [in] The start time of the fluxes
day_interval :: [in] Length of time over which these fluxes applied
g :: [inout] The ocean’s grid structure
us :: [in] A dimensional unit scaling type
cs :: pointer to control struct returned by a previous surface_forcing_init call
- Call to
buoyancy_forcing_const
buoyancy_forcing_from_data_override
buoyancy_forcing_from_files
buoyancy_forcing_linear
buoyancy_forcing_zero
mom_error_handler::calltree_enter
mom_error_handler::calltree_leave
dumbbell_surface_forcing::dumbbell_buoyancy_forcing
id_clock_forcing
neverworld_wind_forcing
scurve_wind_forcing
wind_forcing_1gyre
wind_forcing_2gyre
wind_forcing_by_data_override
wind_forcing_const
wind_forcing_from_file
wind_forcing_gyres
- Called from
mom_main
-
subroutine
mom_surface_forcing/
wind_forcing_const
(sfc_state, forces, tau_x0, tau_y0, day, G, US, CS)¶ Sets the surface wind stresses to constant values.
- Parameters
sfc_state :: [inout] A structure containing fields that describe the surface state of the ocean.
forces :: [inout] A structure with the driving mechanical forces
tau_x0 :: [in] The zonal wind stress [Pa]
tau_y0 :: [in] The meridional wind stress [Pa]
day :: [in] The time of the fluxes
g :: [in] The ocean’s grid structure
us :: [in] A dimensional unit scaling type
cs :: pointer to control struct returned by a previous surface_forcing_init call
- Call to
mom_error_handler::calltree_enter
mom_error_handler::calltree_leave
- Called from
-
subroutine
mom_surface_forcing/
wind_forcing_2gyre
(sfc_state, forces, day, G, US, CS)¶ Sets the surface wind stresses to set up two idealized gyres.
- Parameters
sfc_state :: [inout] A structure containing fields that describe the surface state of the ocean.
forces :: [inout] A structure with the driving mechanical forces
day :: [in] The time of the fluxes
g :: [in] The ocean’s grid structure
us :: [in] A dimensional unit scaling type
cs :: pointer to control struct returned by a previous surface_forcing_init call
- Call to
mom_error_handler::calltree_enter
mom_error_handler::calltree_leave
- Called from
-
subroutine
mom_surface_forcing/
wind_forcing_1gyre
(sfc_state, forces, day, G, US, CS)¶ Sets the surface wind stresses to set up a single idealized gyre.
- Parameters
sfc_state :: [inout] A structure containing fields that describe the surface state of the ocean.
forces :: [inout] A structure with the driving mechanical forces
day :: [in] The time of the fluxes
g :: [in] The ocean’s grid structure
us :: [in] A dimensional unit scaling type
cs :: pointer to control struct returned by a previous surface_forcing_init call
- Call to
mom_error_handler::calltree_enter
mom_error_handler::calltree_leave
- Called from
-
subroutine
mom_surface_forcing/
wind_forcing_gyres
(sfc_state, forces, day, G, US, CS)¶ Sets the surface wind stresses to set up idealized gyres.
- Parameters
sfc_state :: [inout] A structure containing fields that describe the surface state of the ocean.
forces :: [inout] A structure with the driving mechanical forces
day :: [in] The time of the fluxes
g :: [in] The ocean’s grid structure
us :: [in] A dimensional unit scaling type
cs :: pointer to control struct returned by a previous surface_forcing_init call
- Call to
mom_error_handler::calltree_enter
mom_error_handler::calltree_leave
- Called from
-
subroutine
mom_surface_forcing/
neverworld_wind_forcing
(sfc_state, forces, day, G, US, CS)¶ Sets the surface wind stresses, forcestaux and forcestauy for the Neverworld forcing configuration.
- Parameters
sfc_state :: [inout] A structure containing fields that describe the surface state of the ocean.
forces :: [inout] A structure with the driving mechanical forces
day :: [in] Time used for determining the fluxes.
g :: [inout] Grid structure.
us :: [in] A dimensional unit scaling type
cs :: pointer to control struct returned by a previous surface_forcing_init call
- Called from
-
subroutine
mom_surface_forcing/
scurve_wind_forcing
(sfc_state, forces, day, G, US, CS)¶ Sets the zonal wind stresses to a piecewise series of s-curves.
- Parameters
sfc_state :: [inout] A structure containing fields that describe the surface state of the ocean.
forces :: [inout] A structure with the driving mechanical forces
day :: [in] Time used for determining the fluxes.
g :: [inout] Grid structure.
us :: [in] A dimensional unit scaling type
cs :: pointer to control struct returned by a previous surface_forcing_init call
- Call to
- Called from
-
function
mom_surface_forcing/
scurve
(x, L) [real]¶ Returns the value of a cosine-bell function evaluated at x/L.
- Parameters
x :: [in] non-dimensional position
l :: [in] non-dimensional width
- Called from
-
subroutine
mom_surface_forcing/
wind_forcing_from_file
(sfc_state, forces, day, G, US, CS)¶ - Parameters
sfc_state :: [inout] A structure containing fields that describe the surface state of the ocean.
forces :: [inout] A structure with the driving mechanical forces
day :: [in] The time of the fluxes
g :: [inout] The ocean’s grid structure
us :: [in] A dimensional unit scaling type
cs :: pointer to control struct returned by a previous surface_forcing_init call
- Call to
mom_error_handler::calltree_enter
mom_error_handler::calltree_leave
mom_string_functions::uppercase
- Called from
-
subroutine
mom_surface_forcing/
wind_forcing_by_data_override
(sfc_state, forces, day, G, US, CS)¶ - Parameters
sfc_state :: [inout] A structure containing fields that describe the surface state of the ocean.
forces :: [inout] A structure with the driving mechanical forces
day :: [in] The time of the fluxes
g :: [inout] The ocean’s grid structure
us :: [in] A dimensional unit scaling type
cs :: pointer to control struct returned by a previous surface_forcing_init call
- Call to
mom_error_handler::calltree_enter
mom_error_handler::calltree_leave
- Called from
-
subroutine
mom_surface_forcing/
buoyancy_forcing_from_files
(sfc_state, fluxes, day, dt, G, US, CS)¶ Specifies zero surface bouyancy fluxes from input files.
- Parameters
sfc_state :: [inout] A structure containing fields that describe the surface state of the ocean.
fluxes :: [inout] A structure containing thermodynamic forcing fields
day :: [in] The time of the fluxes
dt :: [in] The amount of time over which the fluxes apply [s]
g :: [inout] The ocean’s grid structure
us :: [in] A dimensional unit scaling type
cs :: pointer to control struct returned by a previous surface_forcing_init call
- Call to
mom_error_handler::calltree_enter
mom_error_handler::calltree_leave
- Called from
-
subroutine
mom_surface_forcing/
buoyancy_forcing_from_data_override
(sfc_state, fluxes, day, dt, G, US, CS)¶ Specifies zero surface bouyancy fluxes from data over-ride.
- Parameters
sfc_state :: [inout] A structure containing fields that describe the surface state of the ocean.
fluxes :: [inout] A structure containing thermodynamic forcing fields
day :: [in] The time of the fluxes
dt :: [in] The amount of time over which the fluxes apply [s]
g :: [inout] The ocean’s grid structure
us :: [in] A dimensional unit scaling type
cs :: pointer to control struct returned by a previous surface_forcing_init call
- Call to
mom_error_handler::calltree_enter
mom_error_handler::calltree_leave
- Called from
-
subroutine
mom_surface_forcing/
buoyancy_forcing_zero
(sfc_state, fluxes, day, dt, G, CS)¶ This subroutine specifies zero surface bouyancy fluxes.
- Parameters
sfc_state :: [inout] A structure containing fields that describe the surface state of the ocean.
fluxes :: [inout] A structure containing thermodynamic forcing fields
day :: [in] The time of the fluxes
dt :: [in] The amount of time over which the fluxes apply [s]
g :: [in] The ocean’s grid structure
cs :: pointer to control struct returned by a previous surface_forcing_init call
- Call to
mom_error_handler::calltree_enter
mom_error_handler::calltree_leave
- Called from
-
subroutine
mom_surface_forcing/
buoyancy_forcing_const
(sfc_state, fluxes, day, dt, G, US, CS)¶ Sets up spatially and temporally constant surface heat fluxes.
- Parameters
sfc_state :: [inout] A structure containing fields that describe the surface state of the ocean.
fluxes :: [inout] A structure containing thermodynamic forcing fields
day :: [in] The time of the fluxes
dt :: [in] The amount of time over which the fluxes apply [s]
g :: [in] The ocean’s grid structure
us :: [in] A dimensional unit scaling type
cs :: pointer to control struct returned by a previous surface_forcing_init call
- Call to
mom_error_handler::calltree_enter
mom_error_handler::calltree_leave
- Called from
-
subroutine
mom_surface_forcing/
buoyancy_forcing_linear
(sfc_state, fluxes, day, dt, G, US, CS)¶ Sets surface fluxes of heat and salinity by restoring to temperature and salinity profiles that vary linearly with latitude.
- Parameters
sfc_state :: [inout] A structure containing fields that describe the surface state of the ocean.
fluxes :: [inout] A structure containing thermodynamic forcing fields
day :: [in] The time of the fluxes
dt :: [in] The amount of time over which the fluxes apply [s]
g :: [in] The ocean’s grid structure
us :: [in] A dimensional unit scaling type
cs :: pointer to control struct returned by a previous surface_forcing_init call
- Call to
mom_error_handler::calltree_enter
mom_error_handler::calltree_leave
- Called from
-
subroutine
mom_surface_forcing/
forcing_save_restart
(CS, G, Time, directory, time_stamped, filename_suffix)¶ Save a restart file for the forcing fields.
- Parameters
cs :: pointer to control struct returned by a previous surface_forcing_init call
g :: [inout] The ocean’s grid structure
time :: [in] model time at this call; needed for mpp_write calls
directory :: [in] directory into which to write these restart files
time_stamped :: [in] If true, the restart file names include a unique time stamp; the default is false.
filename_suffix :: [in] optional suffix (e.g., a time-stamp) to append to the restart fname
- Call to
- Called from
mom_main
-
subroutine
mom_surface_forcing/
surface_forcing_init
(Time, G, US, param_file, diag, CS, tracer_flow_CSp)¶ Initialize the surface forcing module.
- Parameters
time :: [in] The current model time
g :: [in] The ocean’s grid structure
us :: [in] A dimensional unit scaling type
param_file :: [in] A structure to parse for run-time parameters
diag :: [inout] structure used to regulate diagnostic output
cs :: pointer to control struct returned by a previous surface_forcing_init call
tracer_flow_csp :: Forcing for tracers?
- Call to
bfb_surface_forcing::bfb_surface_forcing_init
mom_get_input::get_mom_input
id_clock_forcing
meso_surface_forcing::meso_surface_forcing_init
mom_io::num_timelevels
mom_restart::restart_init_end
mom_restart::restore_state
user_surface_forcing::user_surface_forcing_init
- Called from
mom_main
-
subroutine
mom_surface_forcing/
surface_forcing_end
(CS, fluxes)¶ Deallocate memory associated with the surface forcing module.
- Parameters
cs :: pointer to control struct returned by a previous surface_forcing_init call
fluxes :: [inout] A structure containing thermodynamic forcing fields