mom_surface_forcing module reference¶
Functions that calculate the surface wind stresses and fluxes of buoyancy or temperature/salinity and fresh 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. |
|
Translate the wind stresses into the friction velocity, including effects of background gustiness. |
|
Specifies zero surface buoyancy fluxes from input files. |
|
Specifies zero surface buoyancy fluxes from data over-ride. |
|
This subroutine specifies zero surface buoyancy 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%
nonbous
[logical] :: If true, this run is fully non-Boussinesq.%
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 [degrees_N] or [km] or [m]%
len_lat
[real] :: domain length in latitude [degrees_N] or [km] or [m]%
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 [Z T-1 ~> m s-1]%
flux_const_s
[real] :: piston velocity for surface salinity restoring [Z T-1 ~> m s-1]%
rho_restore
[real] :: The density that is used to convert piston velocities into salt or heat fluxes with salinity or temperature restoring [R ~> kg m-3].%
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 [R L Z T-2 ~> Pa].%
tau_y0
[real] :: Constant meridional wind stress used in the WIND_CONFIG=”const” forcing [R L Z T-2 ~> Pa].%
taux_mag
[real] :: Peak magnitude of the zonal wind stress for several analytic profiles [R L Z T-2 ~> Pa].%
gust_const
[real] :: constant unresolved background gustiness for ustar [R L Z T-2 ~> 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-2 ~> Pa] gust is used when read_gust_2d is true.%
t_restore
[real(:,:),pointer] :: temperature to damp (restore) the SST to [C ~> degC]%
s_restore
[real(:,:),pointer] :: salinity to damp (restore) the SSS [S ~> 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 [R L Z T-2 ~> Pa].%
gyres_taux_sin_amp
[real] :: The amplitude of cosine wind stress gyres [R L Z T-2 ~> Pa], if WIND_CONFIG==’gyres’.%
gyres_taux_cos_amp
[real] :: The amplitude of cosine wind stress gyres [R L Z T-2 ~> Pa], if WIND_CONFIG==’gyres’.%
gyres_taux_n_pis
[real] :: The number of sine lobes in the basin if WIND_CONFIG==’gyres’ [nondim].%
answer_date
[integer] :: This 8-digit integer gives the approximate date with which the order of arithmetic and expressions were added to the code. Dates before 20190101 use original answers. Dates after 20190101 use a form of the gyre wind stresses that are rotationally invariant and more likely to be the same between compilers.%
ustar_gustless_bug
[logical] :: If true, include 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 [R L Z T-2 ~> Pa].%
t_north
[real] :: Target temperatures at north used in buoyancy_forcing_linear [C ~> degC].%
t_south
[real] :: Target temperatures at south used in buoyancy_forcing_linear [C ~> degC].%
s_north
[real] :: Target salinity at north used in buoyancy_forcing_linear [S ~> ppt].%
s_south
[real] :: Target salinity at south used in buoyancy_forcing_linear [S ~> ppt].%
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 [nondim]%
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 shortwave 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-wind stress variable name in the input file.%
stress_y_var
[character (len=80)] :: Y-wind stress variable name in the input file.%
ustar_var
[character (len=80)] :: ustar variable name in the input file%
lw_var
[character (len=80)] :: longwave 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 temperature 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 structure 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:
mom6
-
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 [R Z L T-2 ~> Pa]
tau_y0 :: [in] The meridional wind stress [R Z L T-2 ~> 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 structure 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 structure returned by a previous surface_forcing_init call
- Call to:
mom_error_handler::calltree_enter
mom_error_handler::calltree_leave
stresses_to_ustar
- 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 structure returned by a previous surface_forcing_init call
- Call to:
mom_error_handler::calltree_enter
mom_error_handler::calltree_leave
stresses_to_ustar
- 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 structure returned by a previous surface_forcing_init call
- Call to:
mom_error_handler::calltree_enter
mom_error_handler::calltree_leave
stresses_to_ustar
- 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 structure returned by a previous surface_forcing_init call
- Call to:
- 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 structure 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 [nondim]
l :: [in] non-dimensional width [nondim]
- 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 structure 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 structure 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/
stresses_to_ustar
(forces, G, US, CS)¶ Translate the wind stresses into the friction velocity, including effects of background gustiness.
- Parameters:
forces :: [inout] A structure with the driving mechanical forces
g :: [in] Grid structure.
us :: [in] A dimensional unit scaling type
cs :: pointer to control structure returned by a previous surface_forcing_init call
- Called from:
neverworld_wind_forcing
scurve_wind_forcing
wind_forcing_1gyre
wind_forcing_2gyre
wind_forcing_gyres
-
subroutine
mom_surface_forcing/
buoyancy_forcing_from_files
(sfc_state, fluxes, day, dt, G, US, CS)¶ Specifies zero surface buoyancy 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 [T ~> s]
g :: [inout] The ocean’s grid structure
us :: [in] A dimensional unit scaling type
cs :: pointer to control structure 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 buoyancy 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 [T ~> s]
g :: [inout] The ocean’s grid structure
us :: [in] A dimensional unit scaling type
cs :: pointer to control structure 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 buoyancy 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 [T ~> s]
g :: [in] The ocean’s grid structure
cs :: pointer to control structure 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 [T ~> s]
g :: [in] The ocean’s grid structure
us :: [in] A dimensional unit scaling type
cs :: pointer to control structure 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 [T ~> s]
g :: [in] The ocean’s grid structure
us :: [in] A dimensional unit scaling type
cs :: pointer to control structure 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 structure 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 file name
- Call to:
- Called from:
mom6
-
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 structure 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:
mom6
-
subroutine
mom_surface_forcing/
surface_forcing_end
(CS, fluxes)¶ Deallocate memory associated with the surface forcing module.
- Parameters:
cs :: pointer to control structure returned by a previous surface_forcing_init call
fluxes :: [inout] A structure containing thermodynamic forcing fields