POP Interacting with MARBL Tracers¶
POP will read the initial state for each tracers and store the data in a global array (dimensions nx
by ny
by nz
by n_tracers
).
To know what tracer to read into each n_tracers
index, POP copies the information from marbl_instace%tracer_metadata
to a local type during initialization.
The data type is defined as
type :: tracer_field
character(char_len) :: short_name
character(char_len) :: long_name
character(char_len) :: units
character(char_len) :: tend_units
character(char_len) :: flux_units
real(r8) :: scale_factor
logical :: lfull_depth_tavg
end type
An array of the above type is then populated; note that MARBL expects the GCM to apply any necessary scale factor so the POP datatype is set to 1.
! Initialize tracer_d_module input argument (needed before reading
! tracers from restart file)
do n = 1, ecosys_tracer_cnt
tracer_d_module(n)%short_name = marbl_instances(1)%tracer_metadata(n)%short_name
tracer_d_module(n)%long_name = marbl_instances(1)%tracer_metadata(n)%long_name
tracer_d_module(n)%units = marbl_instances(1)%tracer_metadata(n)%units
tracer_d_module(n)%tend_units = marbl_instances(1)%tracer_metadata(n)%tend_units
tracer_d_module(n)%flux_units = marbl_instances(1)%tracer_metadata(n)%flux_units
tracer_d_module(n)%lfull_depth_tavg = marbl_instances(1)%tracer_metadata(n)%lfull_depth_tavg
tracer_d_module(n)%scale_factor = c1
end do
POP combines the tracer_d_module
object with information regarding what files contain tracer initial conditions (and what the netCDF variable name corresponds to each tracer) to properly initialize each tracer.
Reading Tracer Initial Conditions¶
All tracer initial conditions are read from a file. If the run is a continuation run, the initial tracer values are found in a restart file. Otherwise they are read from an initial condition.
POP has a specific data type to manage the metadata of a tracer it is reading from a file.
!-----------------------------------------------------------------------
! derived type for reading tracers from a file
!-----------------------------------------------------------------------
type, public :: tracer_read
character(char_len) :: mod_varname, filename, file_varname, file_fmt
real(r8) :: scale_factor, default_val
end type
Metadata such as the tracer name and the name of the tracer as it appears in the file is copied from tracer_d_module
into tracer_inputs
(an array of type tracer_read
).
The rest of tracer_inputs
(file name, file format, etc) is also set and then each tracer state is read into the correct index of the tracer array by looping over tracer_inputs
.