mom_forcing_type module reference

This module implements boundary forcing for MOM6.

More…

Data Types

forcing

Structure that contains pointers to the boundary forcing used to drive the liquid ocean simulated by MOM.

mech_forcing

Structure that contains pointers to the mechanical forcing at the surface used to drive the liquid ocean simulated by MOM.

forcing_diags

Structure that defines the id handles for the forcing type.

Functions/Subroutines

extractfluxes1d()

This subroutine extracts fluxes from the surface fluxes type.

extractfluxes2d()

2d wrapper for 1d extract fluxes from surface fluxes type. This subroutine extracts fluxes from the surface fluxes type. It multiplies the fluxes by dt, so that the result is an accumulation of the fluxes over a time step.

calculatebuoyancyflux1d()

This routine calculates surface buoyancy flux by adding up the heat, FW & salt fluxes.

calculatebuoyancyflux2d()

Calculates surface buoyancy flux by adding up the heat, FW and salt fluxes, for 2d arrays.

mom_forcing_chksum()

Write out chksums for thermodynamic fluxes.

mom_mech_forcing_chksum()

Write out chksums for the driving mechanical forces.

mech_forcing_singlepointprint()

Write out values of the mechanical forcing arrays at the i,j location.

forcing_singlepointprint()

Write out values of the fluxes arrays at the i,j location.

register_forcing_type_diags()

Register members of the forcing type for diagnostics.

forcing_accumulate()

Accumulate the forcing over time steps, taking input from a mechanical forcing type and a temporary forcing-flux type.

fluxes_accumulate()

Accumulate the thermodynamic fluxes over time steps.

copy_common_forcing_fields()

This subroutine copies the computational domains of common forcing fields from a mech_forcing() type to a (thermodynamic) forcing type.

set_derived_forcing_fields()

This subroutine calculates certain derived forcing fields based on information from a mech_forcing() type and stores them in a (thermodynamic) forcing type.

set_net_mass_forcing()

This subroutine determines the net mass source to the ocean from a (thermodynamic) forcing type and stores it in a mech_forcing() type.

get_net_mass_forcing()

This subroutine calculates determines the net mass source to the ocean from a (thermodynamic) forcing type and stores it in a provided array.

copy_back_forcing_fields()

This subroutine copies the computational domains of common forcing fields from a mech_forcing() type to a (thermodynamic) forcing type.

mech_forcing_diags()

Offer mechanical forcing fields for diagnostics for those fields registered as part of register_forcing_type_diags.

forcing_diagnostics()

Offer buoyancy forcing fields for diagnostics for those fields registered as part of register_forcing_type_diags.

allocate_forcing_by_group()

Conditionally allocate fields within the forcing type.

allocate_forcing_by_ref()

allocate_mech_forcing_by_group()

Conditionally allocate fields within the mechanical forcing type using control flags.

allocate_mech_forcing_from_ref()

Conditionally allocate fields within the mechanical forcing type based on a reference forcing.

get_forcing_groups()

Return flags indicating which groups of forcings are allocated.

get_mech_forcing_groups()

Return flags indicating which groups of mechanical forcings are allocated.

myalloc()

Allocates and zeroes-out array.

deallocate_forcing_type()

Deallocate the forcing type.

deallocate_mech_forcing()

Deallocate the mechanical forcing type.

rotate_forcing()

rotate_mech_forcing()

homogenize_mech_forcing()

homogenize_forcing()

homogenize_field_t()

homogenize_field_v()

homogenize_field_u()

Detailed Description

Boundary fluxes

The ocean is a forced-dissipative system. Forcing occurs at the boundaries, and this module mediates the various forcing terms from momentum, heat, salt, and mass. Boundary fluxes from other tracers are treated by coupling to biogeochemical models. We here present elements of how MOM6 assumes boundary fluxes are passed into the ocean.

Note that all fluxes are positive into the ocean. For surface boundary fluxes, that means fluxes are positive downward. For example, a positive shortwave flux warms the ocean.

Surface boundary momentum fluxes

The ocean surface exchanges momentum with the overlying atmosphere, sea ice, and land ice. The momentum is exchanged as a horizontal stress (Newtons per squared meter: N/m2) imposed on the upper ocean grid cell.

Surface boundary mass fluxes

The ocean gains or loses mass through evaporation, precipitation, sea ice melt/form, and river runoff. Positive mass fluxes add mass to the liquid ocean. The boundary mass flux units are (kilogram per square meter per sec: kg/(m2/sec)).

  • Evaporation field can in fact represent a mass loss (evaporation) or mass gain (condensation in foggy areas).

  • sea ice formation leads to mass moving from the liquid ocean to the ice model, and melt adds liquid to the ocean.

  • Precipitation can be liquid or frozen (snow). Furthermore, in some versions of the GFDL coupler, precipitation can be negative. The reason is that the ice model combines precipitation with ice melt and ice formation. This limitation of the ice model diagnostics should be overcome future versions.

  • River runoff can be liquid or frozen. Frozen runoff is often associated with calving land-ice and/or ice bergs.

Surface boundary salt fluxes

Over most of the ocean, there is no exchange of salt with the atmosphere. However, the liquid ocean exchanges salt with sea ice. When ice forms, it extracts salt from ice pockets and discharges the salt into the liquid ocean. The salt concentration of sea ice is therefore much lower (around 5ppt) than liquid seawater (around 30-35ppt in high latitudes).

For ocean-ice models run with a prescribed atmosphere, such as in the CORE/OMMIP simulations, it is necessary to employ a surface restoring term to the k=1 salinity equation, thus imposing a salt flux onto the ocean even outside of sea ice regimes. This salt flux is non-physical, and represents a limitation of the ocean-ice models run without an interactive atmosphere. Sometimes this salt flux is converted to an implied fresh water flux. However, doing so generally leads to changes in the sea level, unless a global normalization is provided to zero-out the net water flux. As a complement, for models with a restoring salt flux, one may choose to zero-out the net salt entering the ocean. There are pros/cons of each approach.

Surface boundary heat fluxes

There are many terms that contribute to boundary-related heating of the k=1 surface model grid cell. We here outline details of this heat, with each term having units W/m2.

The net flux of heat crossing ocean surface is stored in the diagnostic array “hfds”. This array is computed as

\[\mbox{hfds = shortwave + longwave + latent + sensible + mass transfer + frazil + restore + flux adjustments}\]
  • shortwave (SW) = shortwave radiation (always warms ocean)

  • longwave (LW) = longwave radiation (generally cools ocean)

  • latent (LAT) = turbulent latent heat loss due to evaporation (liquid to vapor) or melt (snow to liquid); generally cools the ocean

  • sensible (SENS) = turbulent heat transfer due to differences in air-sea or ice-sea temperature

  • mass transfer (MASS) = heat transfer due to heat content of mass (e.g., E-P+R) transferred across ocean surface; computed relative to 0 Celsius

  • frazil (FRAZ) = heat transferred to form frazil sea ice (positive heating of liquid ocean)

  • restore (RES) = heat from surface damping sometimes imposed in non-coupled model simulations .

  • restore (flux adjustments) = heat from surface flux adjustment.

Treatment of shortwave

The shortwave field itself is split into two pieces:

  • shortwave = penetrative SW + non-penetrative SW

  • non-penetrative = non-downwelling shortwave; portion of SW totally absorbed in the k=1 cell. The non-penetrative SW is combined with LW+LAT+SENS+seaice_melt_heat in net_heat inside routine extractFluxes1d. Notably, for many cases, non-penetrative SW = 0.

  • penetrative = that portion of shortwave penetrating below a tiny surface layer. This is the downwelling shortwave. Penetrative SW participates in the penetrative SW heating of k=1,nz cells, with the amount of penetration dependent on optical properties.

Convergence of heat into the k=1 cell

The convergence of boundary-related heat into surface grid cell is given by the difference in the net heat entering the top of the k=1 cell and the penetrative SW leaving the bottom of the cell.

\[\begin{split}\begin{eqnarray*} Q(k=1) &=& \mbox{hfds} - \mbox{pen}\_\mbox{SW(leaving bottom of k=1)} \\ &=& \mbox{nonpen}\_\mbox{SW} + (\mbox{pen}\_\mbox{SW(enter k=1)}-\mbox{pen}\_\mbox{SW(leave k=1)}) + \mbox{LW+LAT+SENS+MASS+FRAZ+RES} \\ &=& \mbox{nonpen}\_\mbox{SW}+ \mbox{LW+LAT+SENS+MASS+FRAZ+RES} + [\mbox{pen}\_\mbox{SW(enter k=1)} - \mbox{pen}\_\mbox{SW(leave k=1)}] \end{eqnarray*}\end{split}\]

The convergence of the penetrative shortwave flux is given by \(\mbox{pen}\_\mbox{SW (enter k)}-\mbox{pen}\_\mbox{SW (leave k)}\). This term appears for all cells k=1,nz. It is diagnosed as “rsdoabsorb” inside module MOM6/src/parameterizations/vertical/MOM_diabatic_aux.F90

Type Documentation

type mom_forcing_type/forcing

Structure that contains pointers to the boundary forcing used to drive the liquid ocean simulated by MOM.

Type fields:
  • % ustar [real(:,:),pointer] :: surface friction velocity scale [Z T-1 ~> m s-1].

  • % tau_mag [real(:,:),pointer] :: Magnitude of the wind stress averaged over tracer cells,.

  • % ustar_gustless [real(:,:),pointer] :: surface friction velocity scale without any

  • % buoy [real(:,:),pointer] :: buoyancy flux [L2 T-3 ~> m2 s-3]

  • % sw [real(:,:),pointer] :: shortwave [Q R Z T-1 ~> W m-2]

  • % sw_vis_dir [real(:,:),pointer] :: visible, direct shortwave [Q R Z T-1 ~> W m-2]

  • % sw_vis_dif [real(:,:),pointer] :: visible, diffuse shortwave [Q R Z T-1 ~> W m-2]

  • % sw_nir_dir [real(:,:),pointer] :: near-IR, direct shortwave [Q R Z T-1 ~> W m-2]

  • % sw_nir_dif [real(:,:),pointer] :: near-IR, diffuse shortwave [Q R Z T-1 ~> W m-2]

  • % lw [real(:,:),pointer] :: longwave [Q R Z T-1 ~> W m-2] (typically negative)

  • % latent [real(:,:),pointer] :: latent [Q R Z T-1 ~> W m-2] (typically < 0)

  • % sens [real(:,:),pointer] :: sensible [Q R Z T-1 ~> W m-2] (typically negative)

  • % seaice_melt_heat [real(:,:),pointer] :: sea ice and snow melt or formation [Q R Z T-1 ~> W m-2] (typically negative)

  • % heat_added [real(:,:),pointer] :: additional heat flux from SST restoring or flux adjustments [Q R Z T-1 ~> W m-2]

  • % latent_evap_diag [real(:,:),pointer] :: latent [Q R Z T-1 ~> W m-2] from evaporating liquid water (typically < 0)

  • % latent_fprec_diag [real(:,:),pointer] :: latent [Q R Z T-1 ~> W m-2] from melting fprec (typically < 0)

  • % latent_frunoff_diag [real(:,:),pointer] :: latent [Q R Z T-1 ~> W m-2] from melting frunoff (calving) (typically < 0)

  • % evap [real(:,:),pointer] :: (-1)*fresh water flux evaporated out of the ocean [R Z T-1 ~> kg m-2 s-1]

  • % lprec [real(:,:),pointer] :: precipitating liquid water into the ocean [R Z T-1 ~> kg m-2 s-1]

  • % fprec [real(:,:),pointer] :: precipitating frozen water into the ocean [R Z T-1 ~> kg m-2 s-1]

  • % vprec [real(:,:),pointer] :: virtual liquid precip associated w/ SSS restoring [R Z T-1 ~> kg m-2 s-1]

  • % lrunoff [real(:,:),pointer] :: liquid river runoff entering ocean [R Z T-1 ~> kg m-2 s-1]

  • % frunoff [real(:,:),pointer] :: frozen river runoff (calving) entering ocean [R Z T-1 ~> kg m-2 s-1]

  • % seaice_melt [real(:,:),pointer] :: snow/seaice melt (positive) or formation (negative) [R Z T-1 ~> kg m-2 s-1]

  • % netmassin [real(:,:),pointer] :: Sum of water mass fluxes into the ocean integrated over a.

  • % netmassout [real(:,:),pointer] :: Net water mass flux out of the ocean integrated over a forcing timestep,.

  • % kpp_salt_flux [real(:,:),pointer] :: KPP effective salt flux [ppt m s-1].

  • % heat_content_cond [real(:,:),pointer] :: heat content associated with condensating water [Q R Z T-1 ~> W m-2]

  • % heat_content_evap [real(:,:),pointer] :: heat content associated with evaporating water [Q R Z T-1 ~> W m-2]

  • % heat_content_lprec [real(:,:),pointer] :: heat content associated with liquid >0 precip [Q R Z T-1 ~> W m-2]

  • % heat_content_fprec [real(:,:),pointer] :: heat content associated with frozen precip [Q R Z T-1 ~> W m-2]

  • % heat_content_vprec [real(:,:),pointer] :: heat content associated with virtual >0 precip [Q R Z T-1 ~> W m-2]

  • % heat_content_lrunoff [real(:,:),pointer] :: heat content associated with liquid runoff [Q R Z T-1 ~> W m-2]

  • % heat_content_frunoff [real(:,:),pointer] :: heat content associated with frozen runoff [Q R Z T-1 ~> W m-2]

  • % heat_content_massout [real(:,:),pointer] :: heat content associated with mass leaving ocean [Q R Z T-1 ~> W m-2]

  • % heat_content_massin [real(:,:),pointer] :: heat content associated with mass entering ocean [Q R Z T-1 ~> W m-2]

  • % salt_flux [real(:,:),pointer] :: net salt flux into the ocean [R Z T-1 ~> kgSalt m-2 s-1]

  • % salt_flux_in [real(:,:),pointer] :: salt flux provided to the ocean from coupler [R Z T-1 ~> kgSalt m-2 s-1]

  • % salt_flux_added [real(:,:),pointer] :: additional salt flux from restoring or flux adjustment before adjustment

  • % p_surf_full [real(:,:),pointer] :: Pressure at the top ocean interface [R L2 T-2 ~> Pa]. if there is sea-ice, then p_surf_flux is at ice-ocean interface.

  • % p_surf [real(:,:),pointer] :: Pressure at the top ocean interface [R L2 T-2 ~> Pa] as used to drive the ocean model. If p_surf is limited, p_surf may be smaller than p_surf_full, otherwise they are the same.

  • % p_surf_ssh [real(:,:),pointer] :: Pressure at the top ocean interface [R L2 T-2 ~> Pa] that is used in corrections to the sea surface height field that is passed back to the calling routines. p_surf_SSH may point to p_surf or to p_surf_full.

  • % accumulate_p_surf [logical] :: If true, the surface pressure due to the atmosphere and various types of ice needs to be accumulated, and the surface pressure explicitly reset to zero at the driver level when appropriate.

  • % tke_tidal [real(:,:),pointer] :: tidal energy source driving mixing in bottom boundary layer [R Z3 T-3 ~> W m-2]

  • % ustar_tidal [real(:,:),pointer] :: tidal contribution to bottom ustar [Z T-1 ~> m s-1]

  • % ustar_berg [real(:,:),pointer] :: iceberg contribution to top ustar [Z T-1 ~> m s-1].

  • % area_berg [real(:,:),pointer] :: fractional area of ocean surface covered by icebergs [nondim]

  • % mass_berg [real(:,:),pointer] :: mass of icebergs [R Z ~> kg m-2]

  • % ustar_shelf [real(:,:),pointer] :: Friction velocity under ice-shelves [Z T-1 ~> m s-1]. as computed by the ocean at the previous time step.

  • % frac_shelf_h [real(:,:),pointer] :: Fractional ice shelf coverage of h-cells, from 0 to 1 [nondim]. This is only associated if ice shelves are enabled, and are exactly 0 away from shelves or on land.

  • % iceshelf_melt [real(:,:),pointer] :: Ice shelf melt rate (positive) or freezing (negative) [R Z T-1 ~> kg m-2 s-1].

  • % shelf_sfc_mass_flux [real(:,:),pointer] :: Ice shelf surface mass flux deposition from the atmosphere. [R Z T-1 ~> kg m-2 s-1].

  • % vprecglobaladj [real] :: adjustment to restoring vprec to zero out global net [kg m-2 s-1]

  • % saltfluxglobaladj [real] :: adjustment to restoring salt flux to zero out global net [kgSalt m-2 s-1]

  • % netfwglobaladj [real] :: adjustment to net fresh water to zero out global net [kg m-2 s-1]

  • % vprecglobalscl [real] :: scaling of restoring vprec to zero out global net ( -1..1 ) [nondim]

  • % saltfluxglobalscl [real] :: scaling of restoring salt flux to zero out global net ( -1..1 ) [nondim]

  • % netfwglobalscl [real] :: scaling of net fresh water to zero out global net ( -1..1 ) [nondim]

  • % fluxes_used [logical] :: If true, all of the heat, salt, and mass fluxes have been applied to the ocean.

  • % dt_buoy_accum [real] :: The amount of time over which the buoyancy fluxes should be applied [T ~> s]. If negative, this forcing type variable has not yet been initialized.

  • % gustless_accum_bug [logical] :: If true, use an incorrect expression in the time average of the gustless wind stress.

  • % c_p [real] :: heat capacity of seawater [Q C-1 ~> J kg-1 degC-1]. C_p is is the same value as in thermovar_ptrs_type.

  • % ice_fraction [real(:,:),pointer] :: fraction of sea ice coverage at h-cells, from 0 to 1 [nondim].

  • % u10_sqr [real(:,:),pointer] :: wind magnitude at 10 m squared [L2 T-2 ~> m2 s-2]

  • % lamult [real(:,:),pointer] :: Langmuir enhancement factor [nondim].

  • % tr_fluxes [type(coupler_2d_bc_type)] :: This structure contains arrays of of named fields used for passive tracer fluxes. All arrays in tr_fluxes use the coupler indexing, which has no halos. This is not a convenient convention, but imposed on MOM6 by the coupler.

  • % num_msg [integer] :: Number of messages issued about excessive SW penetration.

  • % max_msg [integer] :: Maximum number of messages to issue about excessive SW penetration.

type mom_forcing_type/mech_forcing

Structure that contains pointers to the mechanical forcing at the surface used to drive the liquid ocean simulated by MOM. Data in this type is allocated in the module MOM_surface_forcing.F90, of which there are three versions: solo, coupled, and ice-shelf.

Type fields:
  • % taux [real(:,:),pointer] :: zonal wind stress [R L Z T-2 ~> Pa]

  • % tauy [real(:,:),pointer] :: meridional wind stress [R L Z T-2 ~> Pa]

  • % tau_mag [real(:,:),pointer] :: Magnitude of the wind stress averaged over tracer cells, including any.

  • % ustar [real(:,:),pointer] :: surface friction velocity scale [Z T-1 ~> m s-1].

  • % net_mass_src [real(:,:),pointer] :: The net mass source to the ocean [R Z T-1 ~> kg m-2 s-1].

  • % p_surf_full [real(:,:),pointer] :: Pressure at the top ocean interface [R L2 T-2 ~> Pa]. if there is sea-ice, then p_surf_flux is at ice-ocean interface.

  • % p_surf [real(:,:),pointer] :: Pressure at the top ocean interface [R L2 T-2 ~> Pa] as used to drive the ocean model. If p_surf is limited, p_surf may be smaller than p_surf_full, otherwise they are the same.

  • % p_surf_ssh [real(:,:),pointer] :: Pressure at the top ocean interface [R L2 T-2 ~> Pa] that is used in corrections to the sea surface height field that is passed back to the calling routines. p_surf_SSH may point to p_surf or to p_surf_full.

  • % area_berg [real(:,:),pointer] :: fractional area of ocean surface covered by icebergs [nondim]

  • % mass_berg [real(:,:),pointer] :: mass of icebergs per unit ocean area [R Z ~> kg m-2]

  • % frac_shelf_u [real(:,:),pointer] :: Fractional ice shelf coverage of u-cells, nondimensional from 0 to 1 [nondim]. This is only associated if ice shelves are enabled, and is exactly 0 away from shelves or on land.

  • % frac_shelf_v [real(:,:),pointer] :: Fractional ice shelf coverage of v-cells, nondimensional from 0 to 1 [nondim]. This is only associated if ice shelves are enabled, and is exactly 0 away from shelves or on land.

  • % rigidity_ice_u [real(:,:),pointer] :: Depth-integrated lateral viscosity of ice shelves or sea ice at.

  • % rigidity_ice_v [real(:,:),pointer] :: Depth-integrated lateral viscosity of ice shelves or sea ice at.

  • % dt_force_accum [real] :: The amount of time over which the mechanical forcing fluxes have been averaged [T ~> s].

  • % net_mass_src_set [logical] :: If true, an estimate of net_mass_src has been provided.

  • % accumulate_p_surf [logical] :: If true, the surface pressure due to the atmosphere and various types of ice needs to be accumulated, and the surface pressure explicitly reset to zero at the driver level when appropriate.

  • % accumulate_rigidity [logical] :: If true, the rigidity due to various types of ice needs to be accumulated, and the rigidity explicitly reset to zero at the driver level when appropriate.

  • % stk_wavenumbers [real(:),pointer] :: The central wave number of Stokes bands [rad Z-1 ~> rad m-1].

  • % ustkb [real(:,:,:),pointer] :: Stokes Drift spectrum, zonal [L T-1 ~> m s-1].

  • % vstkb [real(:,:,:),pointer] :: Stokes Drift spectrum, meridional [L T-1 ~> m s-1].

  • % initialized [logical] :: This indicates whether the appropriate arrays have been initialized.

type mom_forcing_type/forcing_diags

Structure that defines the id handles for the forcing type.

Type fields:
  • % id_prcme [integer] :: Forcing diagnostic handles.

  • % id_evap [integer] :: Forcing diagnostic handles.

  • % id_precip [integer] :: Forcing diagnostic handles.

  • % id_vprec [integer] :: Forcing diagnostic handles.

  • % id_lprec [integer] :: Forcing diagnostic handles.

  • % id_fprec [integer] :: Forcing diagnostic handles.

  • % id_lrunoff [integer] :: Forcing diagnostic handles.

  • % id_frunoff [integer] :: Forcing diagnostic handles.

  • % id_net_massout [integer] :: Forcing diagnostic handles.

  • % id_net_massin [integer] :: Forcing diagnostic handles.

  • % id_massout_flux [integer] :: Forcing diagnostic handles.

  • % id_massin_flux [integer] :: Forcing diagnostic handles.

  • % id_seaice_melt [integer] :: Forcing diagnostic handles.

  • % id_total_prcme [integer] :: Forcing diagnostic handles.

  • % id_total_evap [integer] :: Forcing diagnostic handles.

  • % id_total_precip [integer] :: Forcing diagnostic handles.

  • % id_total_vprec [integer] :: Forcing diagnostic handles.

  • % id_total_lprec [integer] :: Forcing diagnostic handles.

  • % id_total_fprec [integer] :: Forcing diagnostic handles.

  • % id_total_lrunoff [integer] :: Forcing diagnostic handles.

  • % id_total_frunoff [integer] :: Forcing diagnostic handles.

  • % id_total_net_massout [integer] :: Forcing diagnostic handles.

  • % id_total_net_massin [integer] :: Forcing diagnostic handles.

  • % id_total_seaice_melt [integer] :: Forcing diagnostic handles.

  • % id_prcme_ga [integer] :: Forcing diagnostic handles.

  • % id_evap_ga [integer] :: Forcing diagnostic handles.

  • % id_lprec_ga [integer] :: Forcing diagnostic handles.

  • % id_fprec_ga [integer] :: Forcing diagnostic handles.

  • % id_precip_ga [integer] :: Forcing diagnostic handles.

  • % id_vprec_ga [integer] :: Forcing diagnostic handles.

  • % id_net_heat_coupler [integer] :: Forcing diagnostic handles.

  • % id_net_heat_surface [integer] :: Forcing diagnostic handles.

  • % id_sens [integer] :: Forcing diagnostic handles.

  • % id_lwlatsens [integer] :: Forcing diagnostic handles.

  • % id_sw [integer] :: Forcing diagnostic handles.

  • % id_lw [integer] :: Forcing diagnostic handles.

  • % id_sw_vis [integer] :: Forcing diagnostic handles.

  • % id_sw_nir [integer] :: Forcing diagnostic handles.

  • % id_lat_evap [integer] :: Forcing diagnostic handles.

  • % id_lat_frunoff [integer] :: Forcing diagnostic handles.

  • % id_lat [integer] :: Forcing diagnostic handles.

  • % id_lat_fprec [integer] :: Forcing diagnostic handles.

  • % id_heat_content_lrunoff [integer] :: Forcing diagnostic handles.

  • % id_heat_content_frunoff [integer] :: Forcing diagnostic handles.

  • % id_heat_content_lprec [integer] :: Forcing diagnostic handles.

  • % id_heat_content_fprec [integer] :: Forcing diagnostic handles.

  • % id_heat_content_cond [integer] :: Forcing diagnostic handles.

  • % id_heat_content_surfwater [integer] :: Forcing diagnostic handles.

  • % id_heat_content_evap [integer] :: Forcing diagnostic handles.

  • % id_heat_content_vprec [integer] :: Forcing diagnostic handles.

  • % id_heat_content_massout [integer] :: Forcing diagnostic handles.

  • % id_heat_added [integer] :: Forcing diagnostic handles.

  • % id_heat_content_massin [integer] :: Forcing diagnostic handles.

  • % id_hfrainds [integer] :: Forcing diagnostic handles.

  • % id_hfrunoffds [integer] :: Forcing diagnostic handles.

  • % id_seaice_melt_heat [integer] :: Forcing diagnostic handles.

  • % id_total_net_heat_coupler [integer] :: Forcing diagnostic handles.

  • % id_total_net_heat_surface [integer] :: Forcing diagnostic handles.

  • % id_total_sens [integer] :: Forcing diagnostic handles.

  • % id_total_lwlatsens [integer] :: Forcing diagnostic handles.

  • % id_total_sw [integer] :: Forcing diagnostic handles.

  • % id_total_lw [integer] :: Forcing diagnostic handles.

  • % id_total_lat_evap [integer] :: Forcing diagnostic handles.

  • % id_total_lat_frunoff [integer] :: Forcing diagnostic handles.

  • % id_total_lat [integer] :: Forcing diagnostic handles.

  • % id_total_lat_fprec [integer] :: Forcing diagnostic handles.

  • % id_total_heat_content_lrunoff [integer] :: Forcing diagnostic handles.

  • % id_total_heat_content_frunoff [integer] :: Forcing diagnostic handles.

  • % id_total_heat_content_lprec [integer] :: Forcing diagnostic handles.

  • % id_total_heat_content_fprec [integer] :: Forcing diagnostic handles.

  • % id_total_heat_content_cond [integer] :: Forcing diagnostic handles.

  • % id_total_heat_content_surfwater [integer] :: Forcing diagnostic handles.

  • % id_total_heat_content_evap [integer] :: Forcing diagnostic handles.

  • % id_total_heat_content_vprec [integer] :: Forcing diagnostic handles.

  • % id_total_heat_content_massout [integer] :: Forcing diagnostic handles.

  • % id_total_heat_added [integer] :: Forcing diagnostic handles.

  • % id_total_heat_content_massin [integer] :: Forcing diagnostic handles.

  • % id_total_seaice_melt_heat [integer] :: Forcing diagnostic handles.

  • % id_net_heat_coupler_ga [integer] :: Forcing diagnostic handles.

  • % id_net_heat_surface_ga [integer] :: Forcing diagnostic handles.

  • % id_sens_ga [integer] :: Forcing diagnostic handles.

  • % id_lwlatsens_ga [integer] :: Forcing diagnostic handles.

  • % id_sw_ga [integer] :: Forcing diagnostic handles.

  • % id_lw_ga [integer] :: Forcing diagnostic handles.

  • % id_lat_ga [integer] :: Forcing diagnostic handles.

  • % id_saltflux [integer] :: Forcing diagnostic handles.

  • % id_saltfluxin [integer] :: Forcing diagnostic handles.

  • % id_saltfluxadded [integer] :: Forcing diagnostic handles.

  • % id_total_saltflux [integer] :: Forcing diagnostic handles.

  • % id_total_saltfluxin [integer] :: Forcing diagnostic handles.

  • % id_total_saltfluxadded [integer] :: Forcing diagnostic handles.

  • % id_vprecglobaladj [integer] :: Forcing diagnostic handles.

  • % id_vprecglobalscl [integer] :: Forcing diagnostic handles.

  • % id_saltfluxglobaladj [integer] :: Forcing diagnostic handles.

  • % id_saltfluxglobalscl [integer] :: Forcing diagnostic handles.

  • % id_netfwglobaladj [integer] :: Forcing diagnostic handles.

  • % id_netfwglobalscl [integer] :: Forcing diagnostic handles.

  • % id_taux [integer] :: Forcing diagnostic handles.

  • % id_tauy [integer] :: Forcing diagnostic handles.

  • % id_ustar [integer] :: Forcing diagnostic handles.

  • % id_tau_mag [integer] :: Forcing diagnostic handles.

  • % id_psurf [integer] :: Forcing diagnostic handles.

  • % id_tke_tidal [integer] :: Forcing diagnostic handles.

  • % id_buoy [integer] :: Forcing diagnostic handles.

  • % id_ice_fraction [integer] :: Forcing diagnostic handles.

  • % id_u10_sqr [integer] :: Forcing diagnostic handles.

  • % id_ustar_berg [integer] :: Forcing diagnostic handles.

  • % id_area_berg [integer] :: Forcing diagnostic handles.

  • % id_mass_berg [integer] :: Forcing diagnostic handles.

  • % id_ustar_ice_cover [integer] :: Forcing diagnostic handles.

  • % id_frac_ice_cover [integer] :: Forcing diagnostic handles.

  • % id_lamult [integer] :: Forcing diagnostic handles.

  • % id_clock_forcing [integer] :: CPU clock id.

Function/Subroutine Documentation

subroutine mom_forcing_type/extractfluxes1d(G, GV, US, fluxes, optics, nsw, j, dt, FluxRescaleDepth, useRiverHeatContent, useCalvingHeatContent, h, T, netMassInOut, netMassOut, net_heat, net_salt, pen_SW_bnd, tv, aggregate_FW, nonpenSW, netmassInOut_rate, net_Heat_Rate, net_salt_rate, pen_sw_bnd_Rate)

This subroutine extracts fluxes from the surface fluxes type. It works on a j-row for optimization purposes. The 2d (i,j) wrapper is the next subroutine below. This routine multiplies fluxes by dt, so that the result is an accumulation of fluxes over a time step.

Parameters:
  • g :: [in] ocean grid structure

  • gv :: [in] ocean vertical grid structure

  • us :: [in] A dimensional unit scaling type

  • fluxes :: [inout] structure containing pointers to possible forcing fields. NULL unused fields.

  • optics :: pointer to optics

  • nsw :: [in] number of bands of penetrating SW

  • j :: [in] j-index to work on

  • dt :: [in] The time step for these fluxes [T ~> s]

  • fluxrescaledepth :: [in] min ocean depth before fluxes are scaled away [H ~> m or kg m-2]

  • useriverheatcontent :: [in] logical for river heat content

  • usecalvingheatcontent :: [in] logical for calving heat content

  • h :: [in] layer thickness [H ~> m or kg m-2]

  • t :: [in] layer temperatures [C ~> degC]

  • netmassinout :: [out] net mass flux (non-Bouss) or volume flux (if Bouss) of water in/out of ocean over a time step [H ~> m or kg m-2]

  • netmassout :: [out] net mass flux (non-Bouss) or volume flux (if Bouss) of water leaving ocean surface over a time step [H ~> m or kg m-2]. netMassOut < 0 means mass leaves ocean.

  • net_heat :: [out] net heat at the surface accumulated over a time step for coupler + restoring. Exclude two terms from net_heat: (1) downwelling (penetrative) SW, (2) evaporation heat content, (since do not yet know evap temperature). [C H ~> degC m or degC kg m-2].

  • net_salt :: [out] surface salt flux into the ocean accumulated over a time step [S H ~> ppt m or ppt kg m-2].

  • pen_sw_bnd :: [out] penetrating SW flux, split into bands. [C H ~> degC m or degC kg m-2] and array size nsw x G isd: G ied, where nsw=number of SW bands in pen_SW_bnd. This heat flux is not part of net_heat.

  • tv :: [inout] structure containing pointers to available thermodynamic fields. Used to keep track of the heat flux associated with net mass fluxes into the ocean.

  • aggregate_fw :: [in] For determining how to aggregate forcing.

  • nonpensw :: [out] Non-penetrating SW used in net_heat

  • net_heat_rate :: [out] Rate of net surface heating

  • net_salt_rate :: [out] Surface salt flux into the ocean

  • netmassinout_rate :: [out] Rate of net mass flux into the ocean

  • pen_sw_bnd_rate :: [out] Rate of penetrative shortwave heating

Call to:

mom_opacity::extract_optics_slice mom_error_handler::mom_error mom_opacity::optics_nbands

Called from:

mom_diabatic_aux::applyboundaryfluxesinout mom_bulk_mixed_layer::bulkmixedlayer calculatebuoyancyflux1d extractfluxes2d

subroutine mom_forcing_type/extractfluxes2d(G, GV, US, fluxes, optics, nsw, dt, FluxRescaleDepth, useRiverHeatContent, useCalvingHeatContent, h, T, netMassInOut, netMassOut, net_heat, Net_salt, Pen_SW_bnd, tv, aggregate_FW)

2d wrapper for 1d extract fluxes from surface fluxes type. This subroutine extracts fluxes from the surface fluxes type. It multiplies the fluxes by dt, so that the result is an accumulation of the fluxes over a time step.

Parameters:
  • g :: [in] ocean grid structure

  • gv :: [in] ocean vertical grid structure

  • us :: [in] A dimensional unit scaling type

  • fluxes :: [inout] structure containing pointers to forcing.

  • optics :: pointer to optics

  • nsw :: [in] number of bands of penetrating SW

  • dt :: [in] The time step for these fluxes [T ~> s]

  • fluxrescaledepth :: [in] min ocean depth before fluxes are scaled away [H ~> m or kg m-2]

  • useriverheatcontent :: [in] logical for river heat content

  • usecalvingheatcontent :: [in] logical for calving heat content

  • h :: [in] layer thickness [H ~> m or kg m-2]

  • t :: [in] layer temperatures [C ~> degC]

  • netmassinout :: [out] net mass flux (non-Bouss) or volume flux (if Bouss) of water in/out of ocean over a time step [H ~> m or kg m-2]

  • netmassout :: [out] net mass flux (non-Bouss) or volume flux (if Bouss) of water leaving ocean surface over a time step [H ~> m or kg m-2].

  • net_heat :: [out] net heat at the surface accumulated over a time step associated with coupler + restore. Exclude two terms from net_heat: (1) downwelling (penetrative) SW, (2) evaporation heat content, (since do not yet know temperature of evap). [C H ~> degC m or degC kg m-2]

  • net_salt :: [out] surface salt flux into the ocean accumulated over a time step [S H ~> ppt m or ppt kg m-2]

  • pen_sw_bnd :: [out] penetrating SW flux, by frequency band [C H ~> degC m or degC kg m-2] with array size nsw x G isd: G ied, where nsw=number of SW bands in pen_SW_bnd. This heat flux is not in net_heat.

  • tv :: [inout] structure containing pointers to available thermodynamic fields. Here it is used to keep track of the heat flux associated with net mass fluxes into the ocean.

  • aggregate_fw :: [in] For determining how to aggregate the forcing.

Call to:

extractfluxes1d

subroutine mom_forcing_type/calculatebuoyancyflux1d(G, GV, US, fluxes, optics, nsw, h, Temp, Salt, tv, j, buoyancyFlux, netHeatMinusSW, netSalt)

This routine calculates surface buoyancy flux by adding up the heat, FW & salt fluxes. These are actual fluxes, with units of stuff per time. Setting dt=1 in the call to extractFluxes routine allows us to get “stuf per time” rather than the time integrated fluxes needed in other routines that call extractFluxes.

Parameters:
  • g :: [in] ocean grid

  • gv :: [in] ocean vertical grid structure

  • us :: [in] A dimensional unit scaling type

  • fluxes :: [inout] surface fluxes

  • optics :: penetrating SW optics

  • nsw :: [in] The number of frequency bands of penetrating shortwave radiation

  • h :: [in] layer thickness [H ~> m or kg m-2]

  • temp :: [in] prognostic temp [C ~> degC]

  • salt :: [in] salinity [S ~> ppt]

  • tv :: [inout] thermodynamics type

  • j :: [in] j-row to work on

  • buoyancyflux :: [out] buoyancy fluxes [L2 T-3 ~> m2 s-3]

  • netheatminussw :: [out] Surface heat flux excluding shortwave [C H T-1 ~> degC m s-1 or degC kg m-2 s-1]

  • netsalt :: [out] surface salt flux [S H T-1 ~> ppt m s-1 or ppt kg m-2 s-1]

Call to:

mom_eos::eos_domain extractfluxes1d mom_opacity::optics_nbands mom_opacity::sumswoverbands

Called from:

calculatebuoyancyflux2d

subroutine mom_forcing_type/calculatebuoyancyflux2d(G, GV, US, fluxes, optics, h, Temp, Salt, tv, buoyancyFlux, netHeatMinusSW, netSalt)

Calculates surface buoyancy flux by adding up the heat, FW and salt fluxes, for 2d arrays. This is a wrapper for calculateBuoyancyFlux1d.

Parameters:
  • g :: [in] ocean grid

  • gv :: [in] ocean vertical grid structure

  • us :: [in] A dimensional unit scaling type

  • fluxes :: [inout] surface fluxes

  • optics :: SW ocean optics

  • h :: [in] layer thickness [H ~> m or kg m-2]

  • temp :: [in] temperature [C ~> degC]

  • salt :: [in] salinity [S ~> ppt]

  • tv :: [inout] thermodynamics type

  • buoyancyflux :: [inout] buoyancy fluxes [L2 T-3 ~> m2 s-3]

  • netheatminussw :: [inout] surface heat flux excluding shortwave [C H T-1 ~> degC m s-1 or degC kg m-2 s-1]

  • netsalt :: [inout] Net surface salt flux [S H T-1 ~> ppt m s-1 or ppt kg m-2 s-1]

Call to:

calculatebuoyancyflux1d mom_opacity::optics_nbands

Called from:

mom_diabatic_driver::diabatic_ale mom_diabatic_driver::diabatic_ale_legacy mom_diabatic_driver::layered_diabatic

subroutine mom_forcing_type/mom_forcing_chksum(mesg, fluxes, G, US, haloshift)

Write out chksums for thermodynamic fluxes.

Parameters:
  • mesg :: [in] message

  • fluxes :: [in] A structure containing thermodynamic forcing fields

  • g :: [in] grid type

  • us :: [in] A dimensional unit scaling type

  • haloshift :: [in] shift in halo

Called from:

mom6

subroutine mom_forcing_type/mom_mech_forcing_chksum(mesg, forces, G, US, haloshift)

Write out chksums for the driving mechanical forces.

Parameters:
  • mesg :: [in] message

  • forces :: [in] A structure with the driving mechanical forces

  • g :: [in] grid type

  • us :: [in] A dimensional unit scaling type

  • haloshift :: [in] shift in halo

Called from:

mom6

subroutine mom_forcing_type/mech_forcing_singlepointprint(forces, G, i, j, mesg)

Write out values of the mechanical forcing arrays at the i,j location. This is a debugging tool.

Parameters:
  • forces :: [in] A structure with the driving mechanical forces

  • g :: [in] Grid type

  • mesg :: [in] Message

  • i :: [in] i-index

  • j :: [in] j-index

Call to:

locmsg

subroutine mom_forcing_type/forcing_singlepointprint(fluxes, G, i, j, mesg)

Write out values of the fluxes arrays at the i,j location. This is a debugging tool.

Parameters:
  • fluxes :: [in] A structure containing thermodynamic forcing fields

  • g :: [in] Grid type

  • mesg :: [in] Message

  • i :: [in] i-index

  • j :: [in] j-index

Call to:

locmsg

Called from:

mom_diabatic_aux::applyboundaryfluxesinout

subroutine mom_forcing_type/register_forcing_type_diags(Time, diag, US, use_temperature, handles, use_berg_fluxes, use_waves, use_cfcs)

Register members of the forcing type for diagnostics.

Parameters:
  • time :: [in] time type

  • diag :: [inout] diagnostic control type

  • us :: [in] A dimensional unit scaling type

  • use_temperature :: [in] True if T/S are in use

  • handles :: [inout] handles for diagnostics

  • use_berg_fluxes :: [in] If true, allow iceberg flux diagnostics

  • use_waves :: [in] If true, allow wave forcing diagnostics

  • use_cfcs :: [in] If true, allow cfc related diagnostics

subroutine mom_forcing_type/forcing_accumulate(flux_tmp, forces, fluxes, G, wt2)

Accumulate the forcing over time steps, taking input from a mechanical forcing type and a temporary forcing-flux type.

Parameters:
  • flux_tmp :: [in] A temporary structure with current thermodynamic forcing fields

  • forces :: [in] A structure with the driving mechanical forces

  • fluxes :: [inout] A structure containing time-averaged thermodynamic forcing fields

  • g :: [inout] The ocean’s grid structure

  • wt2 :: [out] The relative weight of the new fluxes

Call to:

fluxes_accumulate

subroutine mom_forcing_type/fluxes_accumulate(flux_tmp, fluxes, G, wt2, forces)

Accumulate the thermodynamic fluxes over time steps.

Parameters:
  • flux_tmp :: [in] A temporary structure with current thermodynamic forcing fields

  • fluxes :: [inout] A structure containing time-averaged thermodynamic forcing fields

  • g :: [inout] The ocean’s grid structure

  • wt2 :: [out] The relative weight of the new fluxes

  • forces :: [in] A structure with the driving mechanical forces

Call to:

mom_error_handler::mom_error

Called from:

forcing_accumulate

subroutine mom_forcing_type/copy_common_forcing_fields(forces, fluxes, G, skip_pres)

This subroutine copies the computational domains of common forcing fields from a mech_forcing() type to a (thermodynamic) forcing type. type to a (thermodynamic) forcing type.

Parameters:
  • forces :: [in] A structure with the driving mechanical forces

  • fluxes :: [inout] A structure containing thermodynamic forcing fields

  • g :: [in] grid type

  • skip_pres :: [in] If present and true, do not copy pressure fields.

subroutine mom_forcing_type/set_derived_forcing_fields(forces, fluxes, G, US, Rho0)

This subroutine calculates certain derived forcing fields based on information from a mech_forcing() type and stores them in a (thermodynamic) forcing type. type and stores them in a (thermodynamic) forcing type.

Parameters:
  • forces :: [in] A structure with the driving mechanical forces

  • fluxes :: [inout] A structure containing thermodynamic forcing fields

  • g :: [in] grid type

  • us :: [in] A dimensional unit scaling type

  • rho0 :: [in] A reference density of seawater [R ~> kg m-3], as used to calculate ustar.

subroutine mom_forcing_type/set_net_mass_forcing(fluxes, forces, G, US)

This subroutine determines the net mass source to the ocean from a (thermodynamic) forcing type and stores it in a mech_forcing() type. type.

Parameters:
  • fluxes :: [in] A structure containing thermodynamic forcing fields

  • forces :: [inout] A structure with the driving mechanical forces

  • us :: [in] A dimensional unit scaling type

  • g :: [in] The ocean grid type

Call to:

get_net_mass_forcing

subroutine mom_forcing_type/get_net_mass_forcing(fluxes, G, US, net_mass_src)

This subroutine calculates determines the net mass source to the ocean from a (thermodynamic) forcing type and stores it in a provided array.

Parameters:
  • fluxes :: [in] A structure containing thermodynamic forcing fields

  • g :: [in] The ocean grid type

  • us :: [in] A dimensional unit scaling type

  • net_mass_src :: [out] The net mass flux of water into the ocean [R Z T-1 ~> kg m-2 s-1].

Called from:

set_net_mass_forcing

subroutine mom_forcing_type/copy_back_forcing_fields(fluxes, forces, G)

This subroutine copies the computational domains of common forcing fields from a mech_forcing() type to a (thermodynamic) forcing type. type to a (thermodynamic) forcing type.

Parameters:
  • fluxes :: [in] A structure containing thermodynamic forcing fields

  • forces :: [inout] A structure with the driving mechanical forces

  • g :: [in] grid type

subroutine mom_forcing_type/mech_forcing_diags(forces_in, dt, G, time_end, diag, handles)

Offer mechanical forcing fields for diagnostics for those fields registered as part of register_forcing_type_diags.

Parameters:
  • forces_in :: [in] mechanical forcing input fields

  • dt :: [in] time step for the forcing [T ~> s]

  • g :: [in] grid type

  • time_end :: [in] The end time of the diagnostic interval.

  • diag :: [inout] diagnostic type

  • handles :: [inout] diagnostic id for diag_manager

Call to:

deallocate_mech_forcing mom_diag_mediator::disable_averaging mom_diag_mediator::enable_averages rotate_mech_forcing

Called from:

mom6 ocean_model_mod::update_ocean_model

subroutine mom_forcing_type/forcing_diagnostics(fluxes_in, sfc_state, G_in, US, time_end, diag, handles, enthalpy)

Offer buoyancy forcing fields for diagnostics for those fields registered as part of register_forcing_type_diags.

Parameters:
  • fluxes_in :: [in] A structure containing thermodynamic forcing fields

  • sfc_state :: [in] A structure containing fields that describe the surface state of the ocean.

  • g_in :: [in] Input grid type

  • us :: [in] A dimensional unit scaling type

  • time_end :: [in] The end time of the diagnostic interval.

  • diag :: [inout] diagnostic regulator

  • handles :: [inout] diagnostic ids

  • enthalpy :: [in] If present and true, the heat content associated with mass entering/leaving the ocean is provided by the coupler. Diagnostics net_heat_surface and heat_content_surfwater are computed using heat_content_evap instead of heat_content_massout.

Call to:

deallocate_forcing_type mom_diag_mediator::disable_averaging mom_diag_mediator::enable_averages rotate_forcing

Called from:

mom6 ocean_model_mod::update_ocean_model

subroutine mom_forcing_type/allocate_forcing_by_group(G, fluxes, water, heat, ustar, press, shelf, iceberg, salt, fix_accum_bug, cfc, waves, shelf_sfc_accumulation, lamult, hevap)

Conditionally allocate fields within the forcing type.

Parameters:
  • g :: [in] Ocean grid structure

  • fluxes :: [inout] A structure containing thermodynamic forcing fields

  • water :: [in] If present and true, allocate water fluxes

  • heat :: [in] If present and true, allocate heat fluxes

  • ustar :: [in] If present and true, allocate ustar and related fields

  • press :: [in] If present and true, allocate p_surf and related fields

  • shelf :: [in] If present and true, allocate fluxes for ice-shelf

  • iceberg :: [in] If present and true, allocate fluxes for icebergs

  • salt :: [in] If present and true, allocate salt fluxes

  • fix_accum_bug :: [in] If present and true, avoid using a bug in accumulation of ustar_gustless

  • cfc :: [in] If present and true, allocate fields needed for cfc surface fluxes

  • waves :: [in] If present and true, allocate wave fields

  • shelf_sfc_accumulation :: [in] If present and true, and shelf is true, then allocate surface flux deposition from the atmosphere over ice shelves and ice sheets.

  • lamult :: [in] If present and true, allocate langmuir enhancement factor

  • hevap :: [in] If present and true, allocate heat content evap. This field must be allocated when enthalpy is provided via coupler.

subroutine mom_forcing_type/allocate_forcing_by_ref(fluxes_ref, G, fluxes)
Parameters:
  • fluxes_ref :: [in] Reference fluxes

  • g :: [in] Grid metric of target fluxes

  • fluxes :: [out] Target fluxes

subroutine mom_forcing_type/allocate_mech_forcing_by_group(G, forces, stress, ustar, shelf, press, iceberg, waves, num_stk_bands)

Conditionally allocate fields within the mechanical forcing type using control flags.

Parameters:
  • g :: [in] Ocean grid structure

  • forces :: [inout] Forcing fields structure

  • stress :: [in] If present and true, allocate taux, tauy

  • ustar :: [in] If present and true, allocate ustar and related fields

  • shelf :: [in] If present and true, allocate forces for ice-shelf

  • press :: [in] If present and true, allocate p_surf and related fields

  • iceberg :: [in] If present and true, allocate forces for icebergs

  • waves :: [in] If present and true, allocate wave fields

  • num_stk_bands :: [in] Number of Stokes bands to allocate

subroutine mom_forcing_type/allocate_mech_forcing_from_ref(forces_ref, G, forces)

Conditionally allocate fields within the mechanical forcing type based on a reference forcing.

Parameters:
  • forces_ref :: [in] Reference forcing fields

  • g :: [in] Grid metric of target forcing

  • forces :: [out] Mechanical forcing fields

subroutine mom_forcing_type/get_forcing_groups(fluxes, water, heat, ustar, press, shelf, iceberg, salt, heat_added, buoy)

Return flags indicating which groups of forcings are allocated.

Parameters:
  • fluxes :: [in] Reference flux fields

  • water :: [out] True if fluxes contains water-based fluxes

  • heat :: [out] True if fluxes contains heat-based fluxes

  • ustar :: [out] True if fluxes contains ustar fluxes

  • press :: [out] True if fluxes contains surface pressure

  • shelf :: [out] True if fluxes contains ice shelf fields

  • iceberg :: [out] True if fluxes contains iceberg fluxes

  • salt :: [out] True if fluxes contains salt flux

  • heat_added :: [out] True if fluxes contains explicit heat

  • buoy :: [out] True if fluxes contains buoyancy fluxes

Called from:

mom_forcing_type::allocate_forcing_type::allocate_forcing_by_ref homogenize_forcing rotate_forcing

subroutine mom_forcing_type/get_mech_forcing_groups(forces, stress, ustar, shelf, press, iceberg)

Return flags indicating which groups of mechanical forcings are allocated.

Parameters:
  • forces :: [in] Reference forcing fields

  • stress :: [out] True if forces contains wind stress fields

  • ustar :: [out] True if forces contains ustar field

  • shelf :: [out] True if forces contains ice shelf fields

  • press :: [out] True if forces contains pressure fields

  • iceberg :: [out] True if forces contains iceberg fields

Called from:

mom_forcing_type::allocate_mech_forcing::allocate_mech_forcing_from_ref homogenize_mech_forcing rotate_mech_forcing

subroutine mom_forcing_type/myalloc(array, is, ie, js, je, flag)

Allocates and zeroes-out array.

Parameters:
  • array :: Array to be allocated

  • is :: [in] Start i-index

  • ie :: [in] End i-index

  • js :: [in] Start j-index

  • je :: [in] End j-index

  • flag :: [in] Flag to indicate to allocate

Called from:

mom_forcing_type::allocate_forcing_type::allocate_forcing_by_group mom_forcing_type::allocate_forcing_type::allocate_forcing_by_ref mom_forcing_type::allocate_mech_forcing::allocate_mech_forcing_by_group

subroutine mom_forcing_type/deallocate_forcing_type(fluxes)

Deallocate the forcing type.

Parameters:

fluxes :: [inout] Forcing fields structure

Called from:

forcing_diagnostics

subroutine mom_forcing_type/deallocate_mech_forcing(forces)

Deallocate the mechanical forcing type.

Parameters:

forces :: [inout] Forcing fields structure

Called from:

mech_forcing_diags

subroutine mom_forcing_type/rotate_forcing(fluxes_in, fluxes, turns)
Parameters:
  • fluxes_in :: [in] Input forcing structure

  • fluxes :: [inout] Rotated forcing structure

  • turns :: [in] Number of quarter turns

Call to:

get_forcing_groups mom_error_handler::mom_error

Called from:

forcing_diagnostics mom_ice_shelf::initialize_ice_shelf_fluxes mom_ice_shelf::shelf_calc_flux

subroutine mom_forcing_type/rotate_mech_forcing(forces_in, turns, forces)
Parameters:
  • forces_in :: [in] Forcing on the input domain

  • turns :: [in] Number of quarter-turns

  • forces :: [inout] Forcing on the rotated domain

Call to:

get_mech_forcing_groups

Called from:

mom_ice_shelf::initialize_ice_shelf_forces mech_forcing_diags

subroutine mom_forcing_type/homogenize_mech_forcing(forces, G, US, Rho0, UpdateUstar)
Parameters:
  • forces :: [inout] Forcing on the input domain

  • g :: [in] Grid metric of target forcing

  • us :: [in] A dimensional unit scaling type

  • rho0 :: [in] A reference density of seawater [R ~> kg m-3], as used to calculate ustar.

  • updateustar :: [in] A logical to determine if Ustar should be directly averaged or updated from mean tau.

Call to:

get_mech_forcing_groups mom_spatial_means::global_area_mean_u mom_spatial_means::global_area_mean_v homogenize_field_t homogenize_field_u homogenize_field_v

Called from:

mom::step_mom

subroutine mom_forcing_type/homogenize_forcing(fluxes, G, GV, US)
Parameters:
  • fluxes :: [inout] Input forcing struct

  • g :: [in] Grid metric of target forcing

  • gv :: [in] ocean vertical grid structure

  • us :: [in] A dimensional unit scaling type

Call to:

get_forcing_groups homogenize_field_t

Called from:

mom::step_mom

subroutine mom_forcing_type/homogenize_field_t(var, G, tmp_scale)
Parameters:
  • g :: [in] The ocean’s grid structure

  • var :: [inout] The variable to homogenize

  • tmp_scale :: [in] A temporary rescaling factor for the variable that is reversed in the return value

Called from:

homogenize_forcing homogenize_mech_forcing

subroutine mom_forcing_type/homogenize_field_v(var, G, tmp_scale)
Parameters:
  • g :: [in] The ocean’s grid structure

  • var :: [inout] The variable to homogenize

  • tmp_scale :: [in] A temporary rescaling factor for the variable that is reversed in the return value

Call to:

mom_spatial_means::global_area_mean_v

Called from:

homogenize_mech_forcing

subroutine mom_forcing_type/homogenize_field_u(var, G, tmp_scale)
Parameters:
  • g :: [in] The ocean’s grid structure

  • var :: [inout] The variable to homogenize

  • tmp_scale :: [in] A temporary rescaling factor for the variable that is reversed in the return value

Call to:

mom_spatial_means::global_area_mean_u

Called from:

homogenize_mech_forcing