boundary_impulse_tracer module reference

Implements a boundary impulse response tracer to calculate Green’s functions.

More…

Data Types

boundary_impulse_tracer_cs

The control structure for the boundary impulse tracer package.

Functions/Subroutines

register_boundary_impulse_tracer()

Read in runtime options and add boundary impulse tracer to tracer registry.

initialize_boundary_impulse_tracer()

Initialize tracer from restart or set to 1 at surface to initialize.

boundary_impulse_tracer_column_physics()

Apply source or sink at boundary and do vertical diffusion.

boundary_impulse_stock()

Calculate total inventory of tracer This function calculates the mass-weighted integral of the boundary impulse, tracer stocks returning the number of stocks it has calculated.

boundary_impulse_tracer_surface_state()

This subroutine extracts the surface fields from this tracer package that are to be shared with the atmosphere in coupled configurations.

boundary_impulse_tracer_end()

Performs finalization of boundary impulse tracer.

Detailed Description

Boundary Impulse Response Tracer and Transit Time Distributions

Transit time distributions (TTD) are the Green’s function solution of the passive tracer equation between the oceanic surface and interior. The name derives from the idea that the ‘age’ (e.g. time since last contact with the atmosphere) of a water parcel is best characterized as a distribution of ages because water parcels leaving the surface arrive at a particular interior point at different times. The more commonly used ideal age tracer is the first moment of the TTD, equivalently referred to as the mean age.

A boundary impulse response (BIR) is a passive tracer whose surface boundary condition is a rectangle function with width \(\Delta t\). In the case of unsteady flow, multiple BIRs, initiated at different times in the model can be used to infer the transit time distribution or Green’s function between the oceanic surface and interior. In the case of steady or cyclostationary flow, a single BIR is sufficient.

In the References section, both the theoretical discussion of TTDs and BIRs are listed along with modeling studies which have this used framework in scientific investigations

Run-time parameters

-DO_BOUNDARY_IMPULSE_TRACER: Enables the boundary impulse tracer model -IMPULSE_SOURCE_TIME: Length of time that the surface layer acts as a source of the BIR tracer

References

and BIR Theory

-Holzer, M., and T.M. Hall, 2000: Transit-time and tracer-age distributions in geophysical flows. J. Atmos. Sci., 57, 3539-3558, doi:10.1175/1520-0469(2000)057<3539:TTATAD>2.0.CO;2. -T.W.N. Haine, H. Zhang, D.W. Waugh, M. Holzer, On transit-time distributions in unsteady circulation models, Ocean Modelling, Volume 21, Issues 1–2, 2008, Pages 35-45, ISSN 1463-5003 http://dx.doi.org/10.1016/j.ocemod.2007.11.004 .

Modelling applications

-Peacock, S., and M. Maltrud (2006), Transit-time distributions in a global ocean model, J. Phys. Oceanogr., 36(3), 474–495, doi:10.1175/JPO2860.1. -Maltrud, M., Bryan, F. & Peacock, Boundary impulse response functions in a century-long eddying global ocean simulation, S. Environ Fluid Mech (2010) 10: 275. doi:10.1007/s10652-009-9154-3

Type Documentation

type boundary_impulse_tracer/boundary_impulse_tracer_cs

The control structure for the boundary impulse tracer package.

Type fields:
  • % ntr [integer] :: The number of tracers that are actually used.

  • % coupled_tracers [logical] :: These tracers are not offered to the coupler.

  • % time [type(time_type),pointer] :: A pointer to the ocean model’s clock.

  • % tr_reg [type(tracer_registry_type),pointer] :: A pointer to the tracer registry.

  • % tr [real(:,:,:,:),pointer] :: The array of tracers used in this subroutine, in [CU ~> conc] (g m-3)?

  • % tracers_may_reinit [logical] :: If true, boundary_impulse can be initialized if not found in restart file.

  • % ind_tr [integer( ntr_max )] :: Indices returned by atmos_ocn_coupler_flux if it is used and the surface tracer concentrations are to be provided to the coupler.

  • % nkml [integer] :: Number of layers in mixed layer.

  • % land_val [real( ntr_max )] :: A value to use to fill in tracers over land [CU ~> conc].

  • % remaining_source_time [real] :: How much longer (same units as the timestep) to inject the tracer at the surface [T ~> s].

  • % diag [type( diag_ctrl ),pointer] :: A structure that is used to regulate the timing of diagnostic output.

  • % restart_csp [type( mom_restart_cs ),pointer] :: A pointer to the retart control structure.

  • % tr_desc [type( vardesc )( ntr_max )] :: Descriptions and metadata for the tracers.

Function/Subroutine Documentation

function boundary_impulse_tracer/register_boundary_impulse_tracer(HI, GV, US, param_file, CS, tr_Reg, restart_CS) [logical]

Read in runtime options and add boundary impulse tracer to tracer registry.

Parameters:
  • hi :: [in] A horizontal index type structure

  • gv :: [in] The ocean’s vertical grid structure

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

  • param_file :: [in] A structure to parse for run-time parameters

  • cs :: The control structure returned by a previous call to register_boundary_impulse_tracer.

  • tr_reg :: A pointer that is set to point to the control structure for the tracer advection and diffusion module

  • restart_cs :: [inout] MOM restart control struct

Call to:

mom_error_handler::mom_error ntr_max mom_io::query_vardesc mom_tracer_registry::register_tracer mom_io::var_desc

subroutine boundary_impulse_tracer/initialize_boundary_impulse_tracer(restart, day, G, GV, US, h, diag, OBC, CS, sponge_CSp, tv)

Initialize tracer from restart or set to 1 at surface to initialize.

Parameters:
  • restart :: [in] .true. if the fields have already been read from a restart file.

  • day :: [in] Time of the start of the run.

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

  • gv :: [in] The ocean’s vertical grid structure

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

  • h :: [in] Layer thicknesses [H ~> m or kg m-2]

  • diag :: [in] A structure that is used to regulate diagnostic output.

  • obc :: This open boundary condition type specifies whether, where, and what open boundary conditions are used.

  • cs :: The control structure returned by a previous call to register_boundary_impulse_tracer.

  • sponge_csp :: Pointer to the control structure for the sponges.

  • tv :: [in] A structure pointing to various thermodynamic variables

Call to:

mom_io::query_vardesc

subroutine boundary_impulse_tracer/boundary_impulse_tracer_column_physics(h_old, h_new, ea, eb, fluxes, dt, G, GV, US, CS, tv, debug, evap_CFL_limit, minimum_forcing_depth)

Apply source or sink at boundary and do vertical diffusion.

Parameters:
  • g :: [in] The ocean’s grid structure

  • gv :: [in] The ocean’s vertical grid structure

  • h_old :: [in] Layer thickness before entrainment [H ~> m or kg m-2].

  • h_new :: [in] Layer thickness after entrainment [H ~> m or kg m-2].

  • ea :: [in] an array to which the amount of fluid entrained

  • eb :: [in] an array to which the amount of fluid entrained

  • fluxes :: [in] A structure containing pointers to thermodynamic and tracer forcing fields. Unused fields have NULL ptrs.

  • dt :: [in] The amount of time covered by this call [T ~> s]

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

  • cs :: The control structure returned by a previous call to register_boundary_impulse_tracer.

  • tv :: [in] A structure pointing to various thermodynamic variables

  • debug :: [in] If true calculate checksums

  • evap_cfl_limit :: [in] Limit on the fraction of the water that can be fluxed out of the top layer in a timestep [nondim]

  • minimum_forcing_depth :: [in] The smallest depth over which fluxes can be applied [H ~> m or kg m-2]

Call to:

mom_tracer_diabatic::applytracerboundaryfluxesinout mom_tracer_diabatic::tracer_vertdiff

function boundary_impulse_tracer/boundary_impulse_stock(h, stocks, G, GV, CS, names, units, stock_index) [integer]

Calculate total inventory of tracer This function calculates the mass-weighted integral of the boundary impulse, tracer stocks returning the number of stocks it has calculated. If the stock_index is present, only the stock corresponding to that coded index is returned.

Parameters:
  • g :: [in] The ocean’s grid structure

  • gv :: [in] The ocean’s vertical grid structure

  • h :: [in] Layer thicknesses [H ~> m or kg m-2]

  • stocks :: [out] The mass-weighted integrated amount of each tracer, in kg times concentration units [kg conc]

  • cs :: The control structure returned by a previous call to register_boundary_impulse_tracer.

  • names :: [out] The names of the stocks calculated.

  • units :: [out] The units of the stocks calculated.

  • stock_index :: [in] The coded index of a specific stock being sought.

Return:

undefined :: Return value: the number of stocks calculated here.

Call to:

mom_spatial_means::global_mass_int_efp mom_io::query_vardesc

subroutine boundary_impulse_tracer/boundary_impulse_tracer_surface_state(sfc_state, h, G, GV, CS)

This subroutine extracts the surface fields from this tracer package that are to be shared with the atmosphere in coupled configurations. This particular tracer package does not report anything back to the coupler.

Parameters:
  • g :: [in] The ocean’s grid structure.

  • gv :: [in] The ocean’s vertical grid structure

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

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

  • cs :: The control structure returned by a previous call to register_boundary_impulse_tracer.

Call to:

mom_coupler_types::set_coupler_type_data

subroutine boundary_impulse_tracer/boundary_impulse_tracer_end(CS)

Performs finalization of boundary impulse tracer.

Parameters:

cs :: The control structure returned by a previous call to register_boundary_impulse_tracer.