MOM6
|
Implements a boundary impulse response tracer to calculate Green's functions.
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
-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
-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.
-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
Data Types | |
type | boundary_impulse_tracer_cs |
type | p3d |
Functions/Subroutines | |
logical function, public | register_boundary_impulse_tracer (HI, GV, param_file, CS, tr_Reg, restart_CS) |
Read in runtime options and add boundary impulse tracer to tracer registry. More... | |
subroutine, public | initialize_boundary_impulse_tracer (restart, day, G, GV, h, diag, OBC, CS, sponge_CSp, diag_to_Z_CSp, tv) |
Initialize tracer from restart or set to 1 at surface to initialize. More... | |
subroutine, public | boundary_impulse_tracer_column_physics (h_old, h_new, ea, eb, fluxes, dt, G, GV, CS, tv, debug, evap_CFL_limit, minimum_forcing_depth) |
integer function, public | boundary_impulse_stock (h, stocks, G, GV, CS, names, units, stock_index) |
Calculate total inventory of tracer. More... | |
subroutine, public | boundary_impulse_tracer_surface_state (state, h, G, CS) |
Called if returned if coupler needs to know about tracer, currently unused. More... | |
subroutine, public | boundary_impulse_tracer_end (CS) |
Variables | |
integer, parameter | ntr_max = 1 |
integer function, public boundary_impulse_tracer::boundary_impulse_stock | ( | real, dimension(szi_(g),szj_(g),szk_(g)), intent(in) | h, |
real, dimension(:), intent(out) | stocks, | ||
type(ocean_grid_type), intent(in) | G, | ||
type(verticalgrid_type), intent(in) | GV, | ||
type(boundary_impulse_tracer_cs), intent(in), pointer | CS, | ||
character(len=*), dimension(:), intent(out) | names, | ||
character(len=*), dimension(:), intent(out) | units, | ||
integer, intent(in), optional | stock_index | ||
) |
Calculate total inventory of tracer.
[in] | g | The ocean's grid structure |
[in] | gv | The ocean's vertical grid structure |
[in] | h | Layer thicknesses, in H (usually m or kg m-2) |
Definition at line 395 of file boundary_impulse_tracer.F90.
References mom_io::query_vardesc().
subroutine, public boundary_impulse_tracer::boundary_impulse_tracer_column_physics | ( | real, dimension(szi_(g),szj_(g),szk_(g)), intent(in) | h_old, |
real, dimension(szi_(g),szj_(g),szk_(g)), intent(in) | h_new, | ||
real, dimension(szi_(g),szj_(g),szk_(g)), intent(in) | ea, | ||
real, dimension(szi_(g),szj_(g),szk_(g)), intent(in) | eb, | ||
type(forcing), intent(in) | fluxes, | ||
real, intent(in) | dt, | ||
type(ocean_grid_type), intent(in) | G, | ||
type(verticalgrid_type), intent(in) | GV, | ||
type(boundary_impulse_tracer_cs), intent(inout), pointer | CS, | ||
type(thermo_var_ptrs), intent(in) | tv, | ||
logical, intent(in) | debug, | ||
real, intent(in), optional | evap_CFL_limit, | ||
real, intent(in), optional | minimum_forcing_depth | ||
) |
[in] | g | The ocean's grid structure |
[in] | gv | The ocean's vertical grid structure |
[in] | dt | The amount of time covered by this call, in s |
[in] | tv | A structure pointing to various thermodynamic variables |
Definition at line 283 of file boundary_impulse_tracer.F90.
References mom_tracer_diabatic::applytracerboundaryfluxesinout(), and mom_tracer_diabatic::tracer_vertdiff().
subroutine, public boundary_impulse_tracer::boundary_impulse_tracer_end | ( | type(boundary_impulse_tracer_cs), pointer | CS | ) |
Definition at line 480 of file boundary_impulse_tracer.F90.
subroutine, public boundary_impulse_tracer::boundary_impulse_tracer_surface_state | ( | type(surface), intent(inout) | state, |
real, dimension(szi_(g),szj_(g),szk_(g)), intent(in) | h, | ||
type(ocean_grid_type), intent(in) | G, | ||
type(boundary_impulse_tracer_cs), intent(in), pointer | CS | ||
) |
Called if returned if coupler needs to know about tracer, currently unused.
[in] | g | The ocean's grid structure |
[in] | h | Layer thicknesses, in H (usually m or kg m-2) |
Definition at line 450 of file boundary_impulse_tracer.F90.
References coupler_util::set_coupler_values().
subroutine, public boundary_impulse_tracer::initialize_boundary_impulse_tracer | ( | logical, intent(in) | restart, |
type(time_type), intent(in), target | day, | ||
type(ocean_grid_type), intent(in) | G, | ||
type(verticalgrid_type), intent(in) | GV, | ||
real, dimension(szi_(g),szj_(g),szk_(g)), intent(in) | h, | ||
type(diag_ctrl), intent(in), target | diag, | ||
type(ocean_obc_type), intent(inout), pointer | OBC, | ||
type(boundary_impulse_tracer_cs), intent(inout), pointer | CS, | ||
type(sponge_cs), intent(inout), pointer | sponge_CSp, | ||
type(diag_to_z_cs), intent(inout), pointer | diag_to_Z_CSp, | ||
type(thermo_var_ptrs), intent(in) | tv | ||
) |
Initialize tracer from restart or set to 1 at surface to initialize.
[in] | g | The ocean's grid structure |
[in] | gv | The ocean's vertical grid structure |
[in] | h | Layer thicknesses, in H (usually m or kg m-2) |
[in] | tv | A structure pointing to various thermodynamic variables |
Definition at line 175 of file boundary_impulse_tracer.F90.
References mom_tracer_registry::add_tracer_diagnostics(), mom_io::query_vardesc(), and mom_diag_to_z::register_z_tracer().
logical function, public boundary_impulse_tracer::register_boundary_impulse_tracer | ( | type(hor_index_type), intent(in) | HI, |
type(verticalgrid_type), intent(in) | GV, | ||
type(param_file_type), intent(in) | param_file, | ||
type(boundary_impulse_tracer_cs), intent(inout), pointer | CS, | ||
type(tracer_registry_type), intent(inout), pointer | tr_Reg, | ||
type(mom_restart_cs), intent(inout), pointer | restart_CS | ||
) |
Read in runtime options and add boundary impulse tracer to tracer registry.
[in] | gv | The ocean's vertical grid structure |
[in] | param_file | A structure to parse for run-time parameters |
Definition at line 84 of file boundary_impulse_tracer.F90.
References atmos_ocean_fluxes_mod::aof_set_coupler_flux(), mom_error_handler::mom_error(), ntr_max, mom_io::query_vardesc(), and mom_io::var_desc().
|
private |
Definition at line 37 of file boundary_impulse_tracer.F90.
Referenced by register_boundary_impulse_tracer().