namespace boundary_impulse_tracer

Overview

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

namespace boundary_impulse_tracer {

// global functions

logical function, public register_boundary_impulse_tracer(
    HI HI,
    GV GV,
    param_file param_file,
    CS CS,
    tr_Reg tr_Reg,
    restart_CS restart_CS
    );

subroutine, public initialize_boundary_impulse_tracer(
    restart restart,
    day day,
    G G,
    GV GV,
    h h,
    diag diag,
    OBC OBC,
    CS CS,
    sponge_CSp sponge_CSp,
    tv tv
    );

subroutine, public boundary_impulse_tracer_column_physics(
    h_old h_old,
    h_new h_new,
    ea ea,
    eb eb,
    fluxes fluxes,
    dt dt,
    G G,
    GV GV,
    CS CS,
    tv tv,
    debug debug,
    evap_CFL_limit evap_CFL_limit,
    minimum_forcing_depth minimum_forcing_depth
    );

integer function, public boundary_impulse_stock(
    h h,
    stocks stocks,
    G G,
    GV GV,
    CS CS,
    names names,
    units units,
    stock_index stock_index
    );

subroutine, public boundary_impulse_tracer_surface_state(state state, h h, G G, CS CS);
subroutine, public boundary_impulse_tracer_end(CS CS);

} // namespace boundary_impulse_tracer

Detailed Documentation

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

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

Global Functions

logical function, public register_boundary_impulse_tracer(
    HI HI,
    GV GV,
    param_file param_file,
    CS CS,
    tr_Reg tr_Reg,
    restart_CS restart_CS
    )

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

Parameters:

hi

A horizontal index type structure

gv

The ocean’s vertical grid structure

param_file

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

A pointer to the restart control structure

subroutine, public initialize_boundary_impulse_tracer(
    restart restart,
    day day,
    G G,
    GV GV,
    h h,
    diag diag,
    OBC OBC,
    CS CS,
    sponge_CSp sponge_CSp,
    tv tv
    )

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

Parameters:

restart

.true. if the fields have already been read from a restart file.

day

Time of the start of the run.

g

The ocean’s grid structure

gv

The ocean’s vertical grid structure

h

Layer thicknesses [H ~> m or kg m-2]

diag

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

A structure pointing to various thermodynamic variables

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

Apply source or sink at boundary and do vertical diffusion.

Parameters:

g

The ocean’s grid structure

gv

The ocean’s vertical grid structure

h_old

Layer thickness before entrainment [H ~> m or kg m-2].

h_new

Layer thickness after entrainment [H ~> m or kg m-2].

ea

an array to which the amount of fluid entrained

eb

an array to which the amount of fluid entrained

fluxes

A structure containing pointers to thermodynamic and tracer forcing fields. Unused fields have NULL ptrs.

dt

The amount of time covered by this call [s]

cs

The control structure returned by a previous call to register_boundary_impulse_tracer.

tv

A structure pointing to various thermodynamic variables

debug

If true calculate checksums

evap_cfl_limit

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

minimum_forcing_depth

The smallest depth over which fluxes can be applied [m]

integer function, public boundary_impulse_stock(
    h h,
    stocks stocks,
    G G,
    GV GV,
    CS CS,
    names names,
    units units,
    stock_index stock_index
    )

Calculate total inventory of tracer.

Parameters:

g

The ocean’s grid structure

gv

The ocean’s vertical grid structure

h

Layer thicknesses [H ~> m or kg m-2]

stocks

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

The names of the stocks calculated.

units

The units of the stocks calculated.

stock_index

The coded index of a specific stock being sought.

Returns:

Return value: the number of stocks calculated here.

subroutine, public boundary_impulse_tracer_surface_state(
    state state,
    h h,
    G G,
    CS 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

The ocean’s grid structure.

state

A structure containing fields that describe the surface state of the ocean.

h

Layer thickness [H ~> m or kg m-2].

cs

The control structure returned by a previous call to register_boundary_impulse_tracer.

subroutine, public boundary_impulse_tracer_end(CS CS)

Performs finalization of boundary impulse tracer.

Parameters:

cs

The control structure returned by a previous call to register_boundary_impulse_tracer.