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.
Restoring Tracers Towards a Prior State¶
Some GCMs restore certain tracers towards observations in particular regions.
For example, POP restores PO4
, NO3
, SiO3
, ALK
, and ALK_ALT_CO2
in marginal seas.
MARBL treats tracer restoring terms as an interior forcing, which can be seen by running
./requested_forcings.py -s ../../input_files/settings/marbl_with_restore.settings
:
--------------------------------
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)
7. SiO3 Restoring Field (units: mmol/m^3)
8. SiO3 Restoring Inverse Timescale (units: 1/s)
9. NO3 Restoring Field (units: mmol/m^3)
10. NO3 Restoring Inverse Timescale (units: 1/s)
11. PO4 Restoring Field (units: mmol/m^3)
12. PO4 Restoring Inverse Timescale (units: 1/s)
13. ALK Restoring Field (units: meq/m^3)
14. ALK Restoring Inverse Timescale (units: 1/s)
15. ALK_ALT_CO2 Restoring Field (units: meq/m^3)
16. ALK_ALT_CO2 Restoring Inverse Timescale (units: 1/s)
MARBL is not aware of the horizontal grid, and will request these forcings for all columns.
Set a tracer’s Restoring Inverse Timescale
to 0 in columns where restoring is not desired.
Note that the surface forcing fields are the same, but there are 10 additional interior forcing fields to pass to MARBL.
Example: Accessing Forcing Field Metadata in POP¶
Details are on the implementation page