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 |
The control structure for the boundary impulse tracer package. More... | |
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, 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, US, CS, tv, debug, evap_CFL_limit, minimum_forcing_depth) |
Apply source or sink at boundary and do vertical diffusion. More... | |
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) |
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. More... | |
subroutine, public | boundary_impulse_tracer_end (CS) |
Performs finalization of boundary impulse tracer. More... | |
Variables | |
integer, parameter | ntr_max = 1 |
NTR_MAX is the maximum number of tracers in this module. More... | |
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), 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 [H ~> m or kg m-2] |
[out] | 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. | |
[out] | names | The names of the stocks calculated. |
[out] | units | The units of the stocks calculated. |
[in] | stock_index | The coded index of a specific stock being sought. |
Definition at line 287 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(unit_scale_type), intent(in) | US, | ||
type(boundary_impulse_tracer_cs), 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 | ||
) |
Apply source or sink at boundary and do vertical diffusion.
[in] | g | The ocean's grid structure |
[in] | gv | The ocean's vertical grid structure |
[in] | h_old | Layer thickness before entrainment [H ~> m or kg m-2]. |
[in] | h_new | Layer thickness after entrainment [H ~> m or kg m-2]. |
[in] | ea | an array to which the amount of fluid entrained |
[in] | eb | an array to which the amount of fluid entrained |
[in] | fluxes | A structure containing pointers to thermodynamic and tracer forcing fields. Unused fields have NULL ptrs. |
[in] | dt | The amount of time covered by this call [T ~> s] |
[in] | us | A dimensional unit scaling type |
cs | The control structure returned by a previous call to register_boundary_impulse_tracer. | |
[in] | tv | A structure pointing to various thermodynamic variables |
[in] | debug | If true calculate checksums |
[in] | evap_cfl_limit | Limit on the fraction of the water that can be fluxed out of the top layer in a timestep [nondim] |
[in] | minimum_forcing_depth | The smallest depth over which fluxes can be applied [H ~> m or kg m-2] |
Definition at line 209 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 | ) |
Performs finalization of boundary impulse tracer.
cs | The control structure returned by a previous call to register_boundary_impulse_tracer. |
Definition at line 369 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), pointer | 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.
[in] | g | The ocean's grid structure. |
[in,out] | state | A structure containing fields that describe the surface state of the ocean. |
[in] | h | Layer thickness [H ~> m or kg m-2]. |
cs | The control structure returned by a previous call to register_boundary_impulse_tracer. |
Definition at line 338 of file boundary_impulse_tracer.F90.
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), pointer | OBC, | ||
type(boundary_impulse_tracer_cs), pointer | CS, | ||
type(sponge_cs), pointer | sponge_CSp, | ||
type(thermo_var_ptrs), intent(in) | tv | ||
) |
Initialize tracer from restart or set to 1 at surface to initialize.
[in] | restart | .true. if the fields have already been read from a restart file. |
[in] | day | Time of the start of the run. |
[in] | g | The ocean's grid structure |
[in] | gv | The ocean's vertical grid structure |
[in] | h | Layer thicknesses [H ~> m or kg m-2] |
[in] | 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. | |
[in] | tv | A structure pointing to various thermodynamic variables |
Definition at line 153 of file boundary_impulse_tracer.F90.
References mom_io::query_vardesc().
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), pointer | CS, | ||
type(tracer_registry_type), pointer | tr_Reg, | ||
type(mom_restart_cs), pointer | restart_CS | ||
) |
Read in runtime options and add boundary impulse tracer to tracer registry.
[in] | hi | A horizontal index type structure |
[in] | gv | The ocean's vertical grid structure |
[in] | 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 |
Definition at line 67 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(), mom_tracer_registry::register_tracer(), and mom_io::var_desc().
|
private |
NTR_MAX is the maximum number of tracers in this module.
Definition at line 37 of file boundary_impulse_tracer.F90.
Referenced by register_boundary_impulse_tracer().