What Forcing Fields has MARBL Requested?¶
This question is similar to “What Tracer Tendencies will MARBL Compute?”, and so it should not be a surprise that the answer is also very similar.
MARBL provides a stand-alone test in $MARBL/tests/regression_tests/requested_forcing
as an example of how the MARBL library passes information to the GCM.
$ ./requested_forcings.py
Provides a list of the forcing fields requested with the default MARBL configuration.
--------------------------------
Requested surface forcing fields
--------------------------------
1. u10_sqr (units: cm^2/s^2)
2. sss (units: psu)
3. sst (units: degC)
4. Ice Fraction (units: unitless)
5. Dust Flux (units: g/cm^2/s)
6. Iron Flux (units: nmol/cm^2/s)
7. NOx Flux (units: nmol/cm^2/s)
8. NHy Flux (units: nmol/cm^2/s)
9. Atmospheric Pressure (units: atmospheres)
10. xco2 (units: ppmv)
11. xco2_alt_co2 (units: ppmv)
---------------------------------
Requested interior forcing fields
---------------------------------
1. Dust Flux (units: g/cm^2/s)
2. Surface Shortwave (units: W/m^2)
3. Potential Temperature (units: degC)
4. Salinity (units: psu)
5. Pressure (units: bars)
6. Iron Sediment Flux (units: nmol/cm^2/s)
Forcing Field Metadata Available from the MARBL Interface¶
The details are found in $MARBL/tests/driver_src/marbl.F90
:
! Log requested surface forcing fields
call driver_status_log%log_header('Requested surface forcing fields', subname)
do n=1,size(marbl_instance%surface_flux_forcings)
write(log_message, "(I0, 5A)") n, '. ', &
trim(marbl_instance%surface_flux_forcings(n)%metadata%varname), &
' (units: ', trim(marbl_instance%surface_flux_forcings(n)%metadata%field_units),')'
call driver_status_log%log_noerror(log_message, subname)
end do
! Log requested interior forcing fields
call driver_status_log%log_header('Requested interior forcing fields', subname)
do n=1,size(marbl_instance%interior_tendency_forcings)
write(log_message, "(I0, 5A)") n, '. ', &
trim(marbl_instance%interior_tendency_forcings(n)%metadata%varname), &
' (units: ', trim(marbl_instance%interior_tendency_forcings(n)%metadata%field_units),')'
call driver_status_log%log_noerror(log_message, subname)
end do
The marbl_interface_class
contains two objects (surface_flux_forcings
and interior_tendency_forcings
) that are arrays with dimension equal to the number of surface and interior forcing fields, respectively.
Both are of type marbl_forcing_fields_type
, which contains a metadata
object.
The marbl_forcing_fields_metadata_type
contains metadata for each tracer:
type :: marbl_forcing_fields_metadata_type
! Contains variable names and units for required forcing fields as well as
! dimensional information; actual forcing data is in array of
! marbl_forcing_fields_type
character(len=char_len) :: varname
character(len=char_len) :: field_units
integer :: rank ! 0d or 1d
integer, allocatable :: extent(:) ! length = rank
end type marbl_forcing_fields_metadata_type
The varnames
member of this data type is the only unique identifier provided.
Example: Accessing Forcing Field Metadata in POP¶
Details are on the implementation page