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_constbuoyancy_forcing_from_data_overridebuoyancy_forcing_from_filesbuoyancy_forcing_linearbuoyancy_forcing_zeromom_error_handler::calltree_entermom_error_handler::calltree_leavedumbbell_surface_forcing::dumbbell_buoyancy_forcingid_clock_forcingneverworld_wind_forcingscurve_wind_forcingwind_forcing_1gyrewind_forcing_2gyrewind_forcing_by_data_overridewind_forcing_constwind_forcing_from_filewind_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_entermom_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_entermom_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_entermom_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_entermom_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_entermom_error_handler::calltree_leavemom_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_entermom_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_entermom_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_entermom_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_entermom_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_entermom_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_entermom_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_initmom_get_input::get_mom_inputid_clock_forcingmeso_surface_forcing::meso_surface_forcing_initmom_io::num_timelevelsmom_restart::restart_init_endmom_restart::restore_stateuser_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