Init

The init stage is where MARBL is configured, parameters are set, and memory is allocated. If the GCM wants to specify non-default parameter values, that needs to be done with put_setting() statements before calling init(). There are three different interfaces that can be used; all are equivalent, but different GCMs may find it easiest to call different interfaces.

  1. Two arguments: a string containing the variable name, and then the variable value (in proper datatype)

    call marbl_instance%put_setting('ciso_on', .true.)
    
  2. One argument: a string containing a line from a MARBL input file (TODO: input file link!) of the format varname = value

    call marbl_instance%put_setting('ciso_on = .true.')
    
  3. Three arguments: strings containing the variable name, the datatype, and the value

    call marbl_instance%put_setting('ciso_on', 'logical', '.true.')
    

put_setting() calls that do not correspond to defined MARBL parameters will result in an error during init(). There is no check in the put_setting() call itself because allowable parameters may depend on other parameter values. For example, autotrophs(3)%sname is defined if autotroph_cnt >= 3 but not if autotroph_cnt < 3.

The init() interface

subroutine init(this,                   &
     gcm_num_levels,                    &
     gcm_num_PAR_subcols,               &
     gcm_num_elements_surface_forcing,  &
     gcm_delta_z,                       &
     gcm_zw,                            &
     gcm_zt,                            &
     lgcm_has_global_ops)

  class(marbl_interface_class), intent(inout) :: this
  integer(int_kind),            intent(in)    :: gcm_num_levels
  integer(int_kind),            intent(in)    :: gcm_num_PAR_subcols
  integer(int_kind),            intent(in)    :: gcm_num_elements_surface_forcing
  real(r8),                     intent(in)    :: gcm_delta_z(gcm_num_levels) ! thickness of layer k
  real(r8),                     intent(in)    :: gcm_zw(gcm_num_levels) ! thickness of layer k
  real(r8),                     intent(in)    :: gcm_zt(gcm_num_levels) ! thickness of layer k
  logical,           optional,  intent(in)    :: lgcm_has_global_ops

Note the optional argument: lgcm_has_global_ops is a way for the GCM to inform MARBL that it can perform global operations such as finding global averages of values. There are some MARBL configurations that require this, and MARBL will abort unless the GCM verifies it can provide these values.

MARBL does not have an explicit interface to tell a GCM how many tracers are being computed. Instead, use size(marbl_instance%tracer_metadata) (called after marbl_instance%init()).

MARBL can compute surface fluxes across multiple columns simultaneously, with the number of columns supported set by gcm_num_elements_surface_forcing. There is not a corresponding gcm_num_elements_interior_forcing yet, because currently MARBL computes tracer tendencies one column at a time.

Example from Stand-Alone MARBL

The stand-alone MARBL driver / test suite use input files (*.input in the test directory) that are processed in the following manner:

ioerr = 0
do while(ioerr .eq. 0)
  input_line = ''
  ! (i) master task reads next line in inputfile
  if (my_task .eq. 0) read(*,"(A)", iostat=ioerr) input_line
  ! (ii) broadcast inputfile line to all tasks (along with iostat)
  call marbl_mpi_bcast(ioerr, 0)
  call marbl_mpi_bcast(input_line, 0)
  ! (iii) call put_setting(); abort if error
  call marbl_instance%put_setting(input_line)
  if (marbl_instance%StatusLog%labort_marbl) then
    call marbl_instance%StatusLog%log_error("Error reading input file!", subname)
    call print_marbl_log(marbl_instance%StatusLog)
  end if
end do

if (.not.is_iostat_end(ioerr)) then
  write(*,"(A,I0)") "ioerr = ", ioerr
  write(*,"(A)") "ERROR encountered when reading MARBL input file from stdin"
  call marbl_mpi_abort()
end if

init() is then called from the individual test, storing the tracer count in the local variable nt:

! Call marbl%init
call marbl_instance%init(gcm_num_levels = km,                  &
                         gcm_num_PAR_subcols = 1,              &
                         gcm_num_elements_surface_forcing = 1, &
                         gcm_delta_z = delta_z,                &
                         gcm_zw = zw,                          &
                         gcm_zt = zt,                          &
                         marbl_tracer_cnt = nt)
if (marbl_instance%StatusLog%labort_marbl) then
  call marbl_instance%StatusLog%log_error_trace('marbl%init', subname)
  return
end if

Default Parameter Values

Below are the default parameter values (real variables provided to double precision). This specific page was been generated by running the gen_input_file regression test with no input file. The test writes this output to marbl.input. Note that the order the variables are listed in comes from the order the variables are defined in MARBL, but the order of put_setting() calls does not matter.

PFT_defaults = 'CESM2'
ciso_on = F
lsource_sink = T
lecovars_full_depth_tavg = F
ciso_lsource_sink = T
ciso_lecovars_full_depth_tavg = F
lflux_gas_o2 = T
lflux_gas_co2 = T
lcompute_nhx_surface_emis = T
lvariable_PtoC = T
ladjust_bury_coeff = F
init_bury_coeff_opt = 'settings_file'
particulate_flux_ref_depth = 100
Jint_Ctot_thres_molpm2pyr =   0.10000000000000001E-08
parm_Fe_bioavail =   0.10000000000000000E+01
parm_o2_min =   0.50000000000000000E+01
parm_o2_min_delta =   0.50000000000000000E+01
parm_kappa_nitrif_per_day =   0.59999999999999998E-01
parm_nitrif_par_lim =   0.10000000000000000E+01
parm_labile_ratio =   0.93999999999999995E+00
parm_init_POC_bury_coeff =   0.11000000000000001E+01
parm_init_POP_bury_coeff =   0.11000000000000001E+01
parm_init_bSi_bury_coeff =   0.10000000000000000E+01
parm_Fe_scavenge_rate0 =   0.18000000000000000E+02
parm_Lig_scavenge_rate0 =   0.14999999999999999E-01
parm_FeLig_scavenge_rate0 =   0.13999999999999999E+01
parm_Lig_degrade_rate0 =   0.93999999999999994E-04
parm_Fe_desorption_rate0 =   0.99999999999999995E-06
parm_f_prod_sp_CaCO3 =   0.70000000000000007E-01
parm_POC_diss =   0.10000000000000000E+05
parm_SiO2_diss =   0.77000000000000000E+05
parm_CaCO3_diss =   0.50000000000000000E+05
parm_sed_denitrif_coeff =   0.10000000000000000E+01
bury_coeff_rmean_timescale_years =   0.10000000000000000E+02
parm_scalelen_z(1) =   0.10000000000000000E+05
parm_scalelen_z(2) =   0.25000000000000000E+05
parm_scalelen_z(3) =   0.50000000000000000E+05
parm_scalelen_z(4) =   0.10000000000000000E+06
parm_scalelen_vals(1) =   0.10000000000000000E+01
parm_scalelen_vals(2) =   0.30000000000000000E+01
parm_scalelen_vals(3) =   0.45000000000000000E+01
parm_scalelen_vals(4) =   0.55000000000000000E+01
caco3_bury_thres_opt = 'omega_calc'
caco3_bury_thres_depth =   0.30000000000000000E+06
caco3_bury_thres_omega_calc =   0.10000000000000000E+01
PON_bury_coeff =   0.50000000000000000E+00
ciso_fract_factors = 'Laws'
autotroph_cnt = 3
zooplankton_cnt = 1
max_grazer_prey_cnt = 3
autotrophs(1)%sname = 'sp'
autotrophs(1)%lname = 'Small Phyto'
autotrophs(1)%Nfixer = F
autotrophs(1)%imp_calcifier = T
autotrophs(1)%exp_calcifier = F
autotrophs(1)%silicifier = F
autotrophs(1)%kFe =   0.30000000000000001E-04
autotrophs(1)%kPO4 =   0.10000000000000000E-01
autotrophs(1)%kDOP =   0.29999999999999999E+00
autotrophs(1)%kNO3 =   0.25000000000000000E+00
autotrophs(1)%kNH4 =   0.10000000000000000E-01
autotrophs(1)%kSiO3 =   0.00000000000000000E+00
autotrophs(1)%Qp_fixed =   0.85470085470085479E-02
autotrophs(1)%gQfe_0 =   0.34999999999999997E-04
autotrophs(1)%gQfe_min =   0.27000000000000000E-05
autotrophs(1)%alphaPi_per_day =   0.39000000000000001E+00
autotrophs(1)%PCref_per_day =   0.50000000000000000E+01
autotrophs(1)%thetaN_max =   0.25000000000000000E+01
autotrophs(1)%loss_thres =   0.10000000000000000E-01
autotrophs(1)%loss_thres2 =   0.00000000000000000E+00
autotrophs(1)%temp_thres =  -0.10000000000000000E+02
autotrophs(1)%mort_per_day =   0.10000000000000001E+00
autotrophs(1)%mort2_per_day =   0.10000000000000000E-01
autotrophs(1)%agg_rate_max =   0.50000000000000000E+00
autotrophs(1)%agg_rate_min =   0.10000000000000000E-01
autotrophs(1)%loss_poc =   0.00000000000000000E+00
autotrophs(2)%sname = 'diat'
autotrophs(2)%lname = 'Diatom'
autotrophs(2)%Nfixer = F
autotrophs(2)%imp_calcifier = F
autotrophs(2)%exp_calcifier = F
autotrophs(2)%silicifier = T
autotrophs(2)%kFe =   0.60000000000000002E-04
autotrophs(2)%kPO4 =   0.50000000000000003E-01
autotrophs(2)%kDOP =   0.50000000000000000E+00
autotrophs(2)%kNO3 =   0.50000000000000000E+00
autotrophs(2)%kNH4 =   0.50000000000000003E-01
autotrophs(2)%kSiO3 =   0.69999999999999996E+00
autotrophs(2)%Qp_fixed =   0.85470085470085479E-02
autotrophs(2)%gQfe_0 =   0.34999999999999997E-04
autotrophs(2)%gQfe_min =   0.27000000000000000E-05
autotrophs(2)%alphaPi_per_day =   0.28999999999999998E+00
autotrophs(2)%PCref_per_day =   0.50000000000000000E+01
autotrophs(2)%thetaN_max =   0.40000000000000000E+01
autotrophs(2)%loss_thres =   0.20000000000000000E-01
autotrophs(2)%loss_thres2 =   0.00000000000000000E+00
autotrophs(2)%temp_thres =  -0.10000000000000000E+02
autotrophs(2)%mort_per_day =   0.10000000000000001E+00
autotrophs(2)%mort2_per_day =   0.10000000000000000E-01
autotrophs(2)%agg_rate_max =   0.50000000000000000E+00
autotrophs(2)%agg_rate_min =   0.20000000000000000E-01
autotrophs(2)%loss_poc =   0.00000000000000000E+00
autotrophs(3)%sname = 'diaz'
autotrophs(3)%lname = 'Diazotroph'
autotrophs(3)%Nfixer = T
autotrophs(3)%imp_calcifier = F
autotrophs(3)%exp_calcifier = F
autotrophs(3)%silicifier = F
autotrophs(3)%kFe =   0.45000000000000003E-04
autotrophs(3)%kPO4 =   0.14999999999999999E-01
autotrophs(3)%kDOP =   0.74999999999999997E-01
autotrophs(3)%kNO3 =   0.20000000000000000E+01
autotrophs(3)%kNH4 =   0.20000000000000001E+00
autotrophs(3)%kSiO3 =   0.00000000000000000E+00
autotrophs(3)%Qp_fixed =   0.27350427350427355E-02
autotrophs(3)%gQfe_0 =   0.69999999999999994E-04
autotrophs(3)%gQfe_min =   0.54000000000000000E-05
autotrophs(3)%alphaPi_per_day =   0.39000000000000001E+00
autotrophs(3)%PCref_per_day =   0.25000000000000000E+01
autotrophs(3)%thetaN_max =   0.25000000000000000E+01
autotrophs(3)%loss_thres =   0.20000000000000000E-01
autotrophs(3)%loss_thres2 =   0.10000000000000000E-02
autotrophs(3)%temp_thres =   0.15000000000000000E+02
autotrophs(3)%mort_per_day =   0.10000000000000001E+00
autotrophs(3)%mort2_per_day =   0.10000000000000000E-01
autotrophs(3)%agg_rate_max =   0.50000000000000000E+00
autotrophs(3)%agg_rate_min =   0.10000000000000000E-01
autotrophs(3)%loss_poc =   0.00000000000000000E+00
zooplankton(1)%sname = 'zoo'
zooplankton(1)%lname = 'Zooplankton'
zooplankton(1)%z_mort_0_per_day =   0.10000000000000001E+00
zooplankton(1)%loss_thres =   0.74999999999999997E-01
zooplankton(1)%z_mort2_0_per_day =   0.40000000000000002E+00
grazing(1,1)%sname = 'grz_sp_zoo'
grazing(1,1)%lname = 'Grazing of sp by zoo'
grazing(1,1)%auto_ind_cnt = 1
grazing(1,1)%zoo_ind_cnt = 0
grazing(1,1)%grazing_function = 1
grazing(1,1)%z_umax_0_per_day =   0.32999999999999998E+01
grazing(1,1)%z_grz =   0.12000000000000000E+01
grazing(1,1)%graze_zoo =   0.29999999999999999E+00
grazing(1,1)%graze_poc =   0.00000000000000000E+00
grazing(1,1)%graze_doc =   0.59999999999999998E-01
grazing(1,1)%f_zoo_detr =   0.12000000000000000E+00
grazing(1,1)%auto_ind(1) = 1
grazing(2,1)%sname = 'grz_diat_zoo'
grazing(2,1)%lname = 'Grazing of diat by zoo'
grazing(2,1)%auto_ind_cnt = 1
grazing(2,1)%zoo_ind_cnt = 0
grazing(2,1)%grazing_function = 1
grazing(2,1)%z_umax_0_per_day =   0.31000000000000001E+01
grazing(2,1)%z_grz =   0.12000000000000000E+01
grazing(2,1)%graze_zoo =   0.25000000000000000E+00
grazing(2,1)%graze_poc =   0.38000000000000000E+00
grazing(2,1)%graze_doc =   0.59999999999999998E-01
grazing(2,1)%f_zoo_detr =   0.23999999999999999E+00
grazing(2,1)%auto_ind(1) = 2
grazing(3,1)%sname = 'grz_diaz_zoo'
grazing(3,1)%lname = 'Grazing of diaz by zoo'
grazing(3,1)%auto_ind_cnt = 1
grazing(3,1)%zoo_ind_cnt = 0
grazing(3,1)%grazing_function = 1
grazing(3,1)%z_umax_0_per_day =   0.32500000000000000E+01
grazing(3,1)%z_grz =   0.12000000000000000E+01
grazing(3,1)%graze_zoo =   0.29999999999999999E+00
grazing(3,1)%graze_poc =   0.10000000000000001E+00
grazing(3,1)%graze_doc =   0.59999999999999998E-01
grazing(3,1)%f_zoo_detr =   0.12000000000000000E+00
grazing(3,1)%auto_ind(1) = 3
tracer_restore_vars(1) = ''
tracer_restore_vars(2) = ''
tracer_restore_vars(3) = ''
tracer_restore_vars(4) = ''
tracer_restore_vars(5) = ''
tracer_restore_vars(6) = ''
tracer_restore_vars(7) = ''
tracer_restore_vars(8) = ''
tracer_restore_vars(9) = ''
tracer_restore_vars(10) = ''
tracer_restore_vars(11) = ''
tracer_restore_vars(12) = ''
tracer_restore_vars(13) = ''
tracer_restore_vars(14) = ''
tracer_restore_vars(15) = ''
tracer_restore_vars(16) = ''
tracer_restore_vars(17) = ''
tracer_restore_vars(18) = ''
tracer_restore_vars(19) = ''
tracer_restore_vars(20) = ''
tracer_restore_vars(21) = ''
tracer_restore_vars(22) = ''
tracer_restore_vars(23) = ''
tracer_restore_vars(24) = ''
tracer_restore_vars(25) = ''
tracer_restore_vars(26) = ''
tracer_restore_vars(27) = ''
tracer_restore_vars(28) = ''
tracer_restore_vars(29) = ''
tracer_restore_vars(30) = ''
tracer_restore_vars(31) = ''
tracer_restore_vars(32) = ''

A python tool to generate input settings files is also provided: MARBL_tools/MARBL_generate_settings_file.py. This script creates marbl.input, and organizes the output better than the Fortran test:

! config PFTs
PFT_defaults = "CESM2"
autotroph_cnt = 3
max_grazer_prey_cnt = 3
zooplankton_cnt = 1

! config flags
ciso_lecovars_full_depth_tavg = .false.
ciso_lsource_sink = .true.
ciso_on = .false.
ladjust_bury_coeff = .false.
lcompute_nhx_surface_emis = .true.
lecovars_full_depth_tavg = .false.
lflux_gas_co2 = .true.
lflux_gas_o2 = .true.
lsource_sink = .true.
lvariable_PtoC = .true.

! config strings
init_bury_coeff_opt = "settings_file"

! general parameters
Jint_Ctot_thres_molpm2pyr = 1e-09
bury_coeff_rmean_timescale_years = 10
caco3_bury_thres_depth =   3.0000000000000000e+05
caco3_bury_thres_omega_calc = 1.0
caco3_bury_thres_opt = "omega_calc"
ciso_fract_factors = "Laws"
parm_Fe_bioavail = 1.0
parm_Fe_desorption_rate0 =   9.9999999999999995e-07
parm_Lig_degrade_rate0 = 9.4e-05
parm_f_prod_sp_CaCO3 = 0.07
parm_labile_ratio = 0.94
parm_o2_min = 5.0
parm_o2_min_delta = 5.0
parm_sed_denitrif_coeff = 1
particulate_flux_ref_depth = 100

! general parameters (bury coeffs)
PON_bury_coeff = 0.5
parm_init_POC_bury_coeff = 1.1
parm_init_POP_bury_coeff = 1.1
parm_init_bSi_bury_coeff = 1.0

! general parameters (dissipation)
parm_CaCO3_diss =   5.0000000000000000e+04
parm_POC_diss =   1.0000000000000000e+04
parm_SiO2_diss =   7.7000000000000000e+04

! general parameters (nitrification)
parm_kappa_nitrif_per_day = 0.06
parm_nitrif_par_lim = 1.0

! general parameters (scavenging)
parm_FeLig_scavenge_rate0 = 1.4
parm_Fe_scavenge_rate0 = 18.0
parm_Lig_scavenge_rate0 = 0.015

! Scale lengths
parm_scalelen_vals(1) = 1
parm_scalelen_vals(2) = 3.0
parm_scalelen_vals(3) = 4.5
parm_scalelen_vals(4) = 5.5
parm_scalelen_z(1) =   1.0000000000000000e+04
parm_scalelen_z(2) =   2.5000000000000000e+04
parm_scalelen_z(3) =   5.0000000000000000e+04
parm_scalelen_z(4) =   1.0000000000000000e+05

! autotrophs
autotrophs(1)%Nfixer = .false.
autotrophs(1)%PCref_per_day = 5
autotrophs(1)%Qp_fixed =   8.5470085470085479e-03
autotrophs(1)%agg_rate_max = 0.5
autotrophs(1)%agg_rate_min = 0.01
autotrophs(1)%alphaPI_per_day = 0.39
autotrophs(1)%exp_calcifier = .false.
autotrophs(1)%gQfe_0 =   3.4999999999999997e-05
autotrophs(1)%gQfe_min = 2.7e-06
autotrophs(1)%imp_calcifier = .true.
autotrophs(1)%kDOP = 0.3
autotrophs(1)%kFe = 3e-05
autotrophs(1)%kNH4 = 0.01
autotrophs(1)%kNO3 = 0.25
autotrophs(1)%kPO4 = 0.01
autotrophs(1)%kSiO3 = 0
autotrophs(1)%lname = "Small Phyto"
autotrophs(1)%loss_poc = 0
autotrophs(1)%loss_thres = 0.01
autotrophs(1)%loss_thres2 = 0
autotrophs(1)%mort2_per_day = 0.01
autotrophs(1)%mort_per_day = 0.1
autotrophs(1)%silicifier = .false.
autotrophs(1)%sname = "sp"
autotrophs(1)%temp_thres = -10
autotrophs(1)%thetaN_max = 2.5
autotrophs(2)%Nfixer = .false.
autotrophs(2)%PCref_per_day = 5
autotrophs(2)%Qp_fixed =   8.5470085470085479e-03
autotrophs(2)%agg_rate_max = 0.5
autotrophs(2)%agg_rate_min = 0.02
autotrophs(2)%alphaPI_per_day = 0.29
autotrophs(2)%exp_calcifier = .false.
autotrophs(2)%gQfe_0 =   3.4999999999999997e-05
autotrophs(2)%gQfe_min = 2.7e-06
autotrophs(2)%imp_calcifier = .false.
autotrophs(2)%kDOP = 0.5
autotrophs(2)%kFe = 6e-05
autotrophs(2)%kNH4 = 0.05
autotrophs(2)%kNO3 = 0.5
autotrophs(2)%kPO4 = 0.05
autotrophs(2)%kSiO3 = 0.7
autotrophs(2)%lname = "Diatom"
autotrophs(2)%loss_poc = 0
autotrophs(2)%loss_thres = 0.02
autotrophs(2)%loss_thres2 = 0
autotrophs(2)%mort2_per_day = 0.01
autotrophs(2)%mort_per_day = 0.1
autotrophs(2)%silicifier = .true.
autotrophs(2)%sname = "diat"
autotrophs(2)%temp_thres = -10
autotrophs(2)%thetaN_max = 4
autotrophs(3)%Nfixer = .true.
autotrophs(3)%PCref_per_day = 2.5
autotrophs(3)%Qp_fixed =   2.7350427350427355e-03
autotrophs(3)%agg_rate_max = 0.5
autotrophs(3)%agg_rate_min = 0.01
autotrophs(3)%alphaPI_per_day = 0.39
autotrophs(3)%exp_calcifier = .false.
autotrophs(3)%gQfe_0 =   6.9999999999999994e-05
autotrophs(3)%gQfe_min = 5.4e-06
autotrophs(3)%imp_calcifier = .false.
autotrophs(3)%kDOP = 0.075
autotrophs(3)%kFe = 4.5e-05
autotrophs(3)%kNH4 = 0.2
autotrophs(3)%kNO3 = 2
autotrophs(3)%kPO4 = 0.015
autotrophs(3)%kSiO3 = 0
autotrophs(3)%lname = "Diazotroph"
autotrophs(3)%loss_poc = 0
autotrophs(3)%loss_thres = 0.02
autotrophs(3)%loss_thres2 = 0.001
autotrophs(3)%mort2_per_day = 0.01
autotrophs(3)%mort_per_day = 0.1
autotrophs(3)%silicifier = .false.
autotrophs(3)%sname = "diaz"
autotrophs(3)%temp_thres = 15
autotrophs(3)%thetaN_max = 2.5

! zooplankton
zooplankton(1)%lname = "Zooplankton"
zooplankton(1)%loss_thres = 0.075
zooplankton(1)%sname = "zoo"
zooplankton(1)%z_mort2_0_per_day = 0.4
zooplankton(1)%z_mort_0_per_day = 0.1

! grazing
grazing(1,1)%auto_ind(1) = 1
grazing(1,1)%auto_ind_cnt = 1
grazing(1,1)%f_zoo_detr = 0.12
grazing(1,1)%graze_doc = 0.06
grazing(1,1)%graze_poc = 0
grazing(1,1)%graze_zoo = 0.3
grazing(1,1)%grazing_function = 1
grazing(1,1)%lname = "Grazing of sp by zoo"
grazing(1,1)%sname = "grz_sp_zoo"
grazing(1,1)%z_grz = 1.2
grazing(1,1)%z_umax_0_per_day = 3.3
grazing(1,1)%zoo_ind_cnt = 0
grazing(2,1)%auto_ind(1) = 2
grazing(2,1)%auto_ind_cnt = 1
grazing(2,1)%f_zoo_detr = 0.24
grazing(2,1)%graze_doc = 0.06
grazing(2,1)%graze_poc = 0.38
grazing(2,1)%graze_zoo = 0.25
grazing(2,1)%grazing_function = 1
grazing(2,1)%lname = "Grazing of diat by zoo"
grazing(2,1)%sname = "grz_diat_zoo"
grazing(2,1)%z_grz = 1.2
grazing(2,1)%z_umax_0_per_day = 3.1
grazing(2,1)%zoo_ind_cnt = 0
grazing(3,1)%auto_ind(1) = 3
grazing(3,1)%auto_ind_cnt = 1
grazing(3,1)%f_zoo_detr = 0.12
grazing(3,1)%graze_doc = 0.06
grazing(3,1)%graze_poc = 0.1
grazing(3,1)%graze_zoo = 0.3
grazing(3,1)%grazing_function = 1
grazing(3,1)%lname = "Grazing of diaz by zoo"
grazing(3,1)%sname = "grz_diaz_zoo"
grazing(3,1)%z_grz = 1.2
grazing(3,1)%z_umax_0_per_day = 3.25
grazing(3,1)%zoo_ind_cnt = 0

! tracer restoring
tracer_restore_vars(1) = ""
tracer_restore_vars(2) = ""
tracer_restore_vars(3) = ""
tracer_restore_vars(4) = ""
tracer_restore_vars(5) = ""
tracer_restore_vars(6) = ""
tracer_restore_vars(7) = ""
tracer_restore_vars(8) = ""
tracer_restore_vars(9) = ""
tracer_restore_vars(10) = ""
tracer_restore_vars(11) = ""
tracer_restore_vars(12) = ""
tracer_restore_vars(13) = ""
tracer_restore_vars(14) = ""
tracer_restore_vars(15) = ""
tracer_restore_vars(16) = ""
tracer_restore_vars(17) = ""
tracer_restore_vars(18) = ""
tracer_restore_vars(19) = ""
tracer_restore_vars(20) = ""
tracer_restore_vars(21) = ""
tracer_restore_vars(22) = ""
tracer_restore_vars(23) = ""
tracer_restore_vars(24) = ""
tracer_restore_vars(25) = ""
tracer_restore_vars(26) = ""
tracer_restore_vars(27) = ""
tracer_restore_vars(28) = ""
tracer_restore_vars(29) = ""
tracer_restore_vars(30) = ""
tracer_restore_vars(31) = ""
tracer_restore_vars(32) = ""