namespace ideal_age_example

Overview

A tracer package of ideal age tracers. More…

namespace ideal_age_example {

// global functions

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

subroutine, public initialize_ideal_age_tracer(
    restart restart,
    day day,
    G G,
    GV GV,
    US US,
    h h,
    diag diag,
    OBC OBC,
    CS CS,
    sponge_CSp sponge_CSp
    );

subroutine, public ideal_age_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,
    evap_CFL_limit evap_CFL_limit,
    minimum_forcing_depth minimum_forcing_depth
    );

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

subroutine, public ideal_age_tracer_surface_state(state state, h h, G G, CS CS);
subroutine, public ideal_age_example_end(CS CS);

} // namespace ideal_age_example

Detailed Documentation

A tracer package of ideal age tracers.

Originally by Robert Hallberg, 2002

This file contains an example of the code that is needed to set up and use a set (in this case two) of dynamically passive tracers for diagnostic purposes. The tracers here are an ideal age tracer that ages at a rate of 1/year once it is isolated from the surface, and a vintage tracer, whose surface concentration grows exponen- with time with a 30-year timescale (similar to CFCs).

Global Functions

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

Register the ideal age tracer fields to be used with MOM.

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_ideal_age_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_ideal_age_tracer(
    restart restart,
    day day,
    G G,
    GV GV,
    US US,
    h h,
    diag diag,
    OBC OBC,
    CS CS,
    sponge_CSp sponge_CSp
    )

Sets the ideal age traces to their initial values and sets up the tracer output.

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

us

A dimensional unit scaling type

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

sponge_csp

Pointer to the control structure for the sponges.

subroutine, public ideal_age_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,
    evap_CFL_limit evap_CFL_limit,
    minimum_forcing_depth minimum_forcing_depth
    )

Applies diapycnal diffusion, aging and regeneration at the surface to the ideal age tracers.

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

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 ideal_age_stock(
    h h,
    stocks stocks,
    G G,
    GV GV,
    CS CS,
    names names,
    units units,
    stock_index stock_index
    )

Calculates the mass-weighted integral of all tracer stocks, returning the number of stocks it has calculated. If stock_index is present, only the stock corresponding to that coded index is found.

Parameters:

g

The ocean’s 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].

gv

The ocean’s vertical grid structure

cs

The control structure returned by a previous call to register_ideal_age_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:

The number of stocks calculated here.

subroutine, public ideal_age_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_ideal_age_tracer.

subroutine, public ideal_age_example_end(CS CS)

Deallocate any memory associated with this tracer package.

Parameters:

cs

The control structure returned by a previous call to register_ideal_age_tracer.