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.

More…

Data Types

surface_forcing_cs

Structure containing pointers to the forcing fields that may be used to drive MOM.

Functions/Subroutines

set_forcing()

Calls subroutines in this file to get surface forcing fields.

wind_forcing_const()

Sets the surface wind stresses to constant values.

wind_forcing_2gyre()

Sets the surface wind stresses to set up two idealized gyres.

wind_forcing_1gyre()

Sets the surface wind stresses to set up a single idealized gyre.

wind_forcing_gyres()

Sets the surface wind stresses to set up idealized gyres.

neverworld_wind_forcing()

Sets the surface wind stresses, forcestaux and forcestauy for the Neverworld forcing configuration.

scurve_wind_forcing()

Sets the zonal wind stresses to a piecewise series of s-curves.

scurve()

Returns the value of a cosine-bell function evaluated at x/L.

wind_forcing_from_file()

wind_forcing_by_data_override()

buoyancy_forcing_from_files()

Specifies zero surface buoyancy fluxes from input files.

buoyancy_forcing_from_data_override()

Specifies zero surface buoyancy fluxes from data over-ride.

buoyancy_forcing_zero()

This subroutine specifies zero surface buoyancy fluxes.

buoyancy_forcing_const()

Sets up spatially and temporally constant surface heat fluxes.

buoyancy_forcing_linear()

Sets surface fluxes of heat and salinity by restoring to temperature and salinity profiles that vary linearly with latitude.

forcing_save_restart()

Save a restart file for the forcing fields.

surface_forcing_init()

Initialize the surface forcing module.

surface_forcing_end()

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 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-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)] :: 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

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 structure returned by a previous surface_forcing_init call

Call to

mom_error_handler::calltree_enter mom_error_handler::calltree_leave

Called from

set_forcing

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

Called from

set_forcing

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

Called from

set_forcing

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

Called from

set_forcing

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

Called from

set_forcing

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

scurve

Called from

set_forcing

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

scurve_wind_forcing

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

set_forcing

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

set_forcing

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 [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

set_forcing

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 [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

set_forcing

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 [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

set_forcing

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 structure returned by a previous surface_forcing_init call

Call to

mom_error_handler::calltree_enter mom_error_handler::calltree_leave

Called from

set_forcing

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 structure returned by a previous surface_forcing_init call

Call to

mom_error_handler::calltree_enter mom_error_handler::calltree_leave

Called from

set_forcing

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

mom_restart::save_restart

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 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

mom_main

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