From 804028701db9b245b2f9468017ae403c93813766 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Thu, 6 Jul 2017 14:49:39 -0600 Subject: [PATCH 01/75] Added cocco PFT --- src/Makefile | 2 +- src/marbl_config_mod.F90 | 9 ++++++++- src/marbl_mod.F90 | 11 +++++++++++ src/marbl_parms.F90 | 33 ++++++++++++++++++++++++++++++++- src/marbl_sizes.F90 | 2 +- tests/driver_src/Makefile | 2 +- 6 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/Makefile b/src/Makefile index e9fa8bb4..e143e5fc 100644 --- a/src/Makefile +++ b/src/Makefile @@ -76,7 +76,7 @@ MODS = $(addprefix $(OBJ_DIR)/,${MODS_TMP:.F90=.mod}) \ $(INCS) OBJS = $(addprefix $(OBJ_DIR)/,${MODULES:.F90=.o}) -CPPDEFS=-DECOSYS_BASE_NT=32 -DZOOPLANKTON_CNT=1 -DAUTOTROPH_CNT=3 -DGRAZER_PREY_CNT=3 +CPPDEFS=-DECOSYS_BASE_NT=36 -DZOOPLANKTON_CNT=1 -DAUTOTROPH_CNT=4 -DGRAZER_PREY_CNT=4 ifeq ($(USEMPI),TRUE) CPPDEFS+= -DMARBL_TIMING_OPT=MPI diff --git a/src/marbl_config_mod.F90 b/src/marbl_config_mod.F90 index 4650860e..c0978b26 100644 --- a/src/marbl_config_mod.F90 +++ b/src/marbl_config_mod.F90 @@ -146,7 +146,7 @@ subroutine marbl_config_set_defaults() autotrophs_config(n)%sname = 'sp' autotrophs_config(n)%lname = 'Small Phyto' autotrophs_config(n)%Nfixer = .false. - autotrophs_config(n)%imp_calcifier = .true. + autotrophs_config(n)%imp_calcifier = .false. autotrophs_config(n)%exp_calcifier = .false. autotrophs_config(n)%silicifier = .false. case (2) @@ -163,6 +163,13 @@ subroutine marbl_config_set_defaults() autotrophs_config(n)%imp_calcifier = .false. autotrophs_config(n)%exp_calcifier = .false. autotrophs_config(n)%silicifier = .false. + case (4) + autotrophs_config(n)%sname = 'cocco' + autotrophs_config(n)%lname = 'Coccolithophores' + autotrophs_config(n)%Nfixer = .false. + autotrophs_config(n)%imp_calcifier = .false. + autotrophs_config(n)%exp_calcifier = .true. + autotrophs_config(n)%silicifier = .false. case DEFAULT write(autotrophs_config(n)%sname,"(A,I0)") 'auto', n write(autotrophs_config(n)%lname,"(A,I0)") 'Autotroph number ', n diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 index 10efdc48..4ca467e3 100644 --- a/src/marbl_mod.F90 +++ b/src/marbl_mod.F90 @@ -3808,6 +3808,7 @@ subroutine marbl_compute_autotroph_calcification (auto_cnt, auto_config, & !----------------------------------------------------------------------- use marbl_parms , only : parm_f_prod_sp_CaCO3 + use marbl_parms , only : QCaCO3_max use marbl_parms , only : CaCO3_sp_thres use marbl_parms , only : CaCO3_temp_thres1 use marbl_parms , only : CaCO3_temp_thres2 @@ -3846,8 +3847,18 @@ subroutine marbl_compute_autotroph_calcification (auto_cnt, auto_config, & (f_photosp_CaCO3 * photoC(auto_ind))) end if end if + + if (auto_config(auto_ind)%exp_calcifier) then + CaCO3_form(auto_ind) = QCaCO3_max * photoC(auto_ind) !just a one to one ratio for now + end if + + + end do + + + end associate end subroutine marbl_compute_autotroph_calcification diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 0643bdb4..b6597349 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -162,7 +162,7 @@ module marbl_parms gQsi_0 = 0.137_r8, & !initial Si/C ratio for growth gQsi_max = 0.685_r8, & !max Si/C ratio for growth gQsi_min = 0.0457_r8, & !min Si/C ratio for growth - QCaCO3_max = 0.4_r8, & !max QCaCO3 + QCaCO3_max = 1.0_r8, & !max QCaCO3 ! parameters in GalbraithMartiny Pquota Model^M PquotaSlope = 7.0_r8, & PquotaIntercept = 5.571_r8, & @@ -352,6 +352,28 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%agg_rate_min = 0.01_r8 autotrophs(n)%loss_poc = 0.0_r8 + case ('cocco') + autotrophs(n)%kFe = 0.03e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kPO4 = 0.006_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. + autotrophs(n)%gQfe_0 = 10.0e-6_r8 + autotrophs(n)%gQfe_min = 3.0e-6_r8 + autotrophs(n)%alphaPI_per_day = 0.35_r8 + autotrophs(n)%PCref_per_day = 5.0_r8 + autotrophs(n)%thetaN_max = 3.2_r8 + autotrophs(n)%loss_thres = 0.01_r8 + autotrophs(n)%loss_thres2 = 0.0_r8 + autotrophs(n)%temp_thres = -10.0_r8 + autotrophs(n)%mort_per_day = 0.1_r8 + autotrophs(n)%mort2_per_day = 0.01_r8 + autotrophs(n)%agg_rate_max = 0.5_r8 + autotrophs(n)%agg_rate_min = 0.01_r8 + autotrophs(n)%loss_poc = 0.0_r8 + case DEFAULT autotrophs(n)%kFe = c0 autotrophs(n)%kPO4 = c0 @@ -428,6 +450,15 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%f_zoo_detr = 0.12_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above + elseif ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & + (trim(autotrophs_config(m)%sname).eq.'cocco')) then + grazing(m,n)%z_umax_0_per_day = 3.2_r8 ! in marbl_parms framework, see NOTE above + grazing(m,n)%z_grz = 1.2_r8 ! in marbl_parms framework, see NOTE above + grazing(m,n)%graze_zoo = 0.25_r8 ! in marbl_parms framework, see NOTE above + grazing(m,n)%graze_poc = 0.3_r8 ! in marbl_parms framework, see NOTE above + grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above + grazing(m,n)%f_zoo_detr = 0.18_r8 ! in marbl_parms framework, see NOTE above + grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above else grazing(m,n)%z_umax_0_per_day = c0 grazing(m,n)%z_grz = c0 diff --git a/src/marbl_sizes.F90 b/src/marbl_sizes.F90 index d015ec3a..19bc7c8c 100644 --- a/src/marbl_sizes.F90 +++ b/src/marbl_sizes.F90 @@ -11,7 +11,7 @@ module marbl_sizes !----------------------------------------------------------------------------- integer(int_kind), parameter :: ecosys_base_tracer_cnt = ECOSYS_BASE_NT - integer(int_kind), parameter :: ciso_tracer_cnt = 14 + integer(int_kind), parameter :: ciso_tracer_cnt = 16 integer(int_kind) :: marbl_total_tracer_cnt = 0 integer(int_kind) :: tracer_restore_cnt = 0 diff --git a/tests/driver_src/Makefile b/tests/driver_src/Makefile index 664ee281..c74ad099 100644 --- a/tests/driver_src/Makefile +++ b/tests/driver_src/Makefile @@ -88,7 +88,7 @@ else LFLAG = -lmarbl-$(COMP_NAME) endif -LIBCPPDEFS=-DECOSYS_BASE_NT=32 -DZOOPLANKTON_CNT=1 -DAUTOTROPH_CNT=3 -DGRAZER_PREY_CNT=3 +LIBCPPDEFS=-DECOSYS_BASE_NT=36 -DZOOPLANKTON_CNT=1 -DAUTOTROPH_CNT=4 -DGRAZER_PREY_CNT=4 EXECPPDEFS= INCLUDES=-I$(INC_LOC) LINKS=-L$(LIB_DIR) $(LFLAG) From 6a0fcc4be9c5f9b0063fc701cd38f7f68375c855 Mon Sep 17 00:00:00 2001 From: Kristen Krumhardt Date: Tue, 18 Jul 2017 08:45:12 -0600 Subject: [PATCH 02/75] Added explicit calcifier cocco, else-if statements --- src/marbl_mod.F90 | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 index 4ca467e3..d5f5c550 100644 --- a/src/marbl_mod.F90 +++ b/src/marbl_mod.F90 @@ -3846,12 +3846,12 @@ subroutine marbl_compute_autotroph_calcification (auto_cnt, auto_config, & CaCO3_form(auto_ind) = min((CaCO3_form(auto_ind) * autotroph_loc(auto_ind)%C / CaCO3_sp_thres), & (f_photosp_CaCO3 * photoC(auto_ind))) end if - end if - if (auto_config(auto_ind)%exp_calcifier) then - CaCO3_form(auto_ind) = QCaCO3_max * photoC(auto_ind) !just a one to one ratio for now - end if + else if(auto_config(auto_ind)%exp_calcifier) then + CaCO3_form(auto_ind) = QCaCO3_max * photoC(auto_ind) !just a one to one ratio for now + + end if end do @@ -3957,6 +3957,8 @@ subroutine marbl_compute_autotroph_loss (auto_cnt, auto_config, auto_meta, & if (auto_config(auto_ind)%imp_calcifier) then auto_loss_poc(auto_ind) = QCaCO3(auto_ind) * auto_loss(auto_ind) + else if (auto_config(auto_ind)%exp_calcifier) then + auto_loss_poc(auto_ind) = QCaCO3(auto_ind) * auto_loss(auto_ind) else auto_loss_poc(auto_ind) = auto_meta(auto_ind)%loss_poc * auto_loss(auto_ind) endif @@ -4111,6 +4113,11 @@ subroutine marbl_compute_grazing (auto_cnt, zoo_cnt, grazer_prey_cnt, & + work2 * max((caco3_poc_min * QCaCO3(auto_ind)), & min(spc_poc_fac * (Pprime(auto_ind)+0.6_r8)**1.6_r8, & f_graze_sp_poc_lim)) + else if (auto_config(auto_ind)%exp_calcifier) then + auto_graze_poc(auto_ind) = auto_graze_poc(auto_ind) & + + work2 * max((caco3_poc_min * QCaCO3(auto_ind)), & + min(spc_poc_fac * (Pprime(auto_ind)+0.6_r8)**1.6_r8, & + f_graze_sp_poc_lim)) else auto_graze_poc(auto_ind) = auto_graze_poc(auto_ind) + grazing(prey_ind, pred_ind)%graze_poc * work2 endif From a16a1e8cc749a59ef0fb7fcca9f1a1334495781b Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Wed, 19 Jul 2017 08:08:13 -0600 Subject: [PATCH 03/75] Added QCaCO3_max_exp parameter, modified cocco/sp growth parms --- src/marbl_mod.F90 | 4 ++-- src/marbl_parms.F90 | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 index d5f5c550..837455ee 100644 --- a/src/marbl_mod.F90 +++ b/src/marbl_mod.F90 @@ -3808,7 +3808,7 @@ subroutine marbl_compute_autotroph_calcification (auto_cnt, auto_config, & !----------------------------------------------------------------------- use marbl_parms , only : parm_f_prod_sp_CaCO3 - use marbl_parms , only : QCaCO3_max + use marbl_parms , only : QCaCO3_max_exp use marbl_parms , only : CaCO3_sp_thres use marbl_parms , only : CaCO3_temp_thres1 use marbl_parms , only : CaCO3_temp_thres2 @@ -3849,7 +3849,7 @@ subroutine marbl_compute_autotroph_calcification (auto_cnt, auto_config, & else if(auto_config(auto_ind)%exp_calcifier) then - CaCO3_form(auto_ind) = QCaCO3_max * photoC(auto_ind) !just a one to one ratio for now + CaCO3_form(auto_ind) = QCaCO3_max_exp * photoC(auto_ind) !just a one to one ratio for now end if diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index b6597349..7a33b502 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -162,7 +162,8 @@ module marbl_parms gQsi_0 = 0.137_r8, & !initial Si/C ratio for growth gQsi_max = 0.685_r8, & !max Si/C ratio for growth gQsi_min = 0.0457_r8, & !min Si/C ratio for growth - QCaCO3_max = 1.0_r8, & !max QCaCO3 + QCaCO3_max = 0.4_r8, & !max QCaCO3 for implicit calcifiers + QCaCO3_max_exp = 1.0_r8, & !max QCaCO3 for explicit calcifiers ! parameters in GalbraithMartiny Pquota Model^M PquotaSlope = 7.0_r8, & PquotaIntercept = 5.571_r8, & @@ -290,7 +291,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kFe = 0.03e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.25_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.22_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.01_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. @@ -356,13 +357,13 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kFe = 0.03e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.006_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.35_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. - autotrophs(n)%gQfe_0 = 10.0e-6_r8 + autotrophs(n)%gQfe_0 = 25.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.35_r8 + autotrophs(n)%alphaPI_per_day = 0.38_r8 autotrophs(n)%PCref_per_day = 5.0_r8 autotrophs(n)%thetaN_max = 3.2_r8 autotrophs(n)%loss_thres = 0.01_r8 From bdf7c6382f537be8da0e7107f03c08f7ed9b2fdd Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Wed, 19 Jul 2017 13:51:22 -0600 Subject: [PATCH 04/75] Modified parameters, need sp to be more competitive. --- src/marbl_parms.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 7a33b502..50eaa304 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -363,9 +363,9 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 25.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.38_r8 + autotrophs(n)%alphaPI_per_day = 0.32_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 3.2_r8 + autotrophs(n)%thetaN_max = 3.0_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = -10.0_r8 From d457281a5d0bc4e3e11b6c40750407bf4f9df65b Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Thu, 20 Jul 2017 11:59:37 -0600 Subject: [PATCH 05/75] Change parms back to the way they were with v2, except kNO3 for sp --- src/marbl_parms.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 50eaa304..3de07e0f 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -357,15 +357,15 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kFe = 0.03e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.006_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.35_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. - autotrophs(n)%gQfe_0 = 25.0e-6_r8 + autotrophs(n)%gQfe_0 = 10.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.32_r8 + autotrophs(n)%alphaPI_per_day = 0.35_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 3.0_r8 + autotrophs(n)%thetaN_max = 3.2_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = -10.0_r8 From 72c5d37c02e2b8d950b615e1e8db613878a712ec Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Thu, 20 Jul 2017 13:47:49 -0600 Subject: [PATCH 06/75] Changed QCaCO3_max to 1.0 --- src/marbl_parms.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 3de07e0f..3727df1e 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -162,7 +162,7 @@ module marbl_parms gQsi_0 = 0.137_r8, & !initial Si/C ratio for growth gQsi_max = 0.685_r8, & !max Si/C ratio for growth gQsi_min = 0.0457_r8, & !min Si/C ratio for growth - QCaCO3_max = 0.4_r8, & !max QCaCO3 for implicit calcifiers + QCaCO3_max = 1.0_r8, & !max QCaCO3 for implicit calcifiers QCaCO3_max_exp = 1.0_r8, & !max QCaCO3 for explicit calcifiers ! parameters in GalbraithMartiny Pquota Model^M PquotaSlope = 7.0_r8, & From 01374e431db5e039dacf042cd8bfc48c0d35cf69 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Fri, 21 Jul 2017 09:01:00 -0600 Subject: [PATCH 07/75] Parms changed: increased cocco kNO3, decreased cocco thetaNmax, increased cocco gQfe_0 --- src/marbl_mod.F90 | 1 + src/marbl_parms.F90 | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 index 837455ee..e6349e65 100644 --- a/src/marbl_mod.F90 +++ b/src/marbl_mod.F90 @@ -149,6 +149,7 @@ module marbl_mod use marbl_parms, only : parm_red_d_c_o2_diaz use marbl_parms, only : parm_Remin_D_C_O2 use marbl_parms, only : QCaCO3_max + use marbl_parms, only : QCaCO3_max_exp use marbl_parms, only : Qfe_zoo use marbl_parms, only : r_Nfix_photo use marbl_parms, only : spc_poc_fac diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 3727df1e..dddd28a0 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -357,15 +357,15 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kFe = 0.03e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.006_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.35_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. - autotrophs(n)%gQfe_0 = 10.0e-6_r8 + autotrophs(n)%gQfe_0 = 25.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.35_r8 + autotrophs(n)%alphaPI_per_day = 0.32_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 3.2_r8 + autotrophs(n)%thetaN_max = 3.0_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = -10.0_r8 From f2e7b0fb8ea5b9a1ea1bf022bec0e6fc57620a76 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Mon, 24 Jul 2017 08:26:23 -0600 Subject: [PATCH 08/75] Increased thetaNmax for coccos --- src/marbl_parms.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index dddd28a0..7139218c 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -365,7 +365,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%gQfe_min = 3.0e-6_r8 autotrophs(n)%alphaPI_per_day = 0.32_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 3.0_r8 + autotrophs(n)%thetaN_max = 3.3_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = -10.0_r8 From 094ec1e7a8363d9e899bd53ccb9935cca32fe93f Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Mon, 24 Jul 2017 10:52:22 -0600 Subject: [PATCH 09/75] Lower alphaPI and thetaNmax for coccos, lower KFe for diat, higher PCref for diat --- src/marbl_parms.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 7139218c..b9aba8b4 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -310,7 +310,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('diat') - autotrophs(n)%kFe = 0.06e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.04e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.05_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.5_r8 ! in marbl_parms framework, see NOTE above @@ -320,7 +320,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%gQfe_0 = 35.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 autotrophs(n)%alphaPI_per_day = 0.29_r8 - autotrophs(n)%PCref_per_day = 5.0_r8 + autotrophs(n)%PCref_per_day = 5.5_r8 autotrophs(n)%thetaN_max = 4.0_r8 autotrophs(n)%loss_thres = 0.02_r8 autotrophs(n)%loss_thres2 = 0.0_r8 @@ -363,9 +363,9 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 25.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.32_r8 + autotrophs(n)%alphaPI_per_day = 0.28_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 3.3_r8 + autotrophs(n)%thetaN_max = 3.1_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = -10.0_r8 From 505c8b8d45acac8e74aa433ff8dd446d0aba8db3 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Tue, 25 Jul 2017 09:26:15 -0600 Subject: [PATCH 10/75] diat PCref is now 5.2, diat kFe is 0.5 --- src/marbl_parms.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index b9aba8b4..6646672b 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -310,7 +310,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('diat') - autotrophs(n)%kFe = 0.04e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.05e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.05_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.5_r8 ! in marbl_parms framework, see NOTE above @@ -320,7 +320,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%gQfe_0 = 35.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 autotrophs(n)%alphaPI_per_day = 0.29_r8 - autotrophs(n)%PCref_per_day = 5.5_r8 + autotrophs(n)%PCref_per_day = 5.2_r8 autotrophs(n)%thetaN_max = 4.0_r8 autotrophs(n)%loss_thres = 0.02_r8 autotrophs(n)%loss_thres2 = 0.0_r8 From cd5b2c4f7c7c9b5d0738432b800718fd2db3a0fa Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Tue, 25 Jul 2017 13:19:33 -0600 Subject: [PATCH 11/75] Lower cocco gQfe_0 to 15., cocco alphaPI increased to 0.30 --- src/marbl_parms.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 6646672b..d93eae21 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -361,9 +361,9 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. - autotrophs(n)%gQfe_0 = 25.0e-6_r8 + autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.28_r8 + autotrophs(n)%alphaPI_per_day = 0.30_r8 autotrophs(n)%PCref_per_day = 5.0_r8 autotrophs(n)%thetaN_max = 3.1_r8 autotrophs(n)%loss_thres = 0.01_r8 From fdbb366efa3dbdf056029592924cfe9ec4fb90a9 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Tue, 25 Jul 2017 13:28:07 -0600 Subject: [PATCH 12/75] made temp_thres for coccos 0. --- src/marbl_parms.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index d93eae21..635ab917 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -368,7 +368,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%thetaN_max = 3.1_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 - autotrophs(n)%temp_thres = -10.0_r8 + autotrophs(n)%temp_thres = 0.0_r8 autotrophs(n)%mort_per_day = 0.1_r8 autotrophs(n)%mort2_per_day = 0.01_r8 autotrophs(n)%agg_rate_max = 0.5_r8 From 317ba2a893ca164c4b49e525a71e99edda5b9bc0 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Wed, 2 Aug 2017 11:25:56 -0600 Subject: [PATCH 13/75] Added modulation of calcification by Plim,CO2,temp and growth rate by C lim --- src/marbl_internal_types.F90 | 3 +- src/marbl_mod.F90 | 67 +++++++++++++++++++++++++++++------- src/marbl_parms.F90 | 7 +++- 3 files changed, 63 insertions(+), 14 deletions(-) diff --git a/src/marbl_internal_types.F90 b/src/marbl_internal_types.F90 index f8ee25b0..e10bd6c2 100644 --- a/src/marbl_internal_types.F90 +++ b/src/marbl_internal_types.F90 @@ -49,7 +49,7 @@ module marbl_internal_types end type autotroph_config_type type, public :: autotroph_parms_type - real (KIND=r8) :: kFe, kPO4, kDOP, kNO3, kNH4, kSiO3 ! nutrient uptake half-sat constants + real (KIND=r8) :: kFe, kPO4, kDOP, kNO3, kNH4, kSiO3, kCO2 ! nutrient uptake half-sat constants real (KIND=r8) :: Qp_fixed ! P/C ratio for fixed P/C ratios real (KIND=r8) :: gQfe_0, gQfe_min ! initial and minimum Fe/C ratio for growth real (KIND=r8) :: alphaPI_per_day ! init slope of P_I curve (GD98) (mmol C m^2/(mg Chl W day)) @@ -268,6 +268,7 @@ module marbl_internal_types real (r8) :: gQsi ! diatom Si/C ratio for growth (new biomass) real (r8) :: VNO3 ! NH4 uptake rate (non-dim) real (r8) :: VNH4 ! NO3 uptake rate (non-dim) + real (r8) :: VCO2 ! CO2 uptake rate (non-dim) real (r8) :: VNtot ! total N uptake rate (non-dim) real (r8) :: NO3_V ! nitrate uptake (mmol NO3/m^3/sec) real (r8) :: NH4_V ! ammonium uptake (mmol NH4/m^3/sec) diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 index e6349e65..3c347ef8 100644 --- a/src/marbl_mod.F90 +++ b/src/marbl_mod.F90 @@ -1109,7 +1109,7 @@ subroutine marbl_set_interior_forcing( & call marbl_compute_autotroph_uptake(autotroph_cnt, autotrophs_config, & autotrophs, tracer_local(:, k), marbl_tracer_indices, & - autotroph_secondary_species(:, k)) + autotroph_secondary_species(:, k),carbonate(k)) call marbl_compute_autotroph_photosynthesis(autotroph_cnt, & num_PAR_subcols, autotrophs, autotroph_local(:, k), & @@ -1122,7 +1122,7 @@ subroutine marbl_set_interior_forcing( & call marbl_compute_autotroph_calcification(autotroph_cnt, & autotrophs_config, autotroph_local(:, k), temperature(k), & - autotroph_secondary_species(:, k)) + autotroph_secondary_species(:, k), carbonate(k)) call marbl_compute_autotroph_nfixation(autotroph_cnt, autotrophs_config, & autotroph_secondary_species(:, k)) @@ -3158,9 +3158,15 @@ subroutine marbl_compute_autotroph_elemental_ratios(auto_cnt, autotroph_parms, & !----------------------------------------------------------------------- if (marbl_tracer_indices%auto_inds(auto_ind)%CaCO3_ind > 0) then + !set a local variable to the correct QCaCO3 max based on whether implicit or explicit + ! if (implicit) then + ! QCaCO3_loc = QCaCO3_max + ! else + ! QCaCO3_loc = QCaCO3_max_exp + ! end if QCaCO3(auto_ind) = auto_CaCO3(auto_ind) / (auto_C(auto_ind) + epsC) - if (QCaCO3(auto_ind) > QCaCO3_max) then - QCaCO3(auto_ind) = QCaCO3_max + if (QCaCO3(auto_ind) > QCaCO3_max) then !_loc + QCaCO3(auto_ind) = QCaCO3_max!_loc end if end if end do @@ -3550,7 +3556,7 @@ end subroutine marbl_compute_Zprime !*********************************************************************** subroutine marbl_compute_autotroph_uptake (auto_cnt, auto_config, auto_meta, & - tracer_local, marbl_tracer_indices, autotroph_secondary_species) + tracer_local, marbl_tracer_indices, autotroph_secondary_species,carbonate) integer(int_kind) , intent(in) :: auto_cnt type(autotroph_config_type) , intent(in) :: auto_config(auto_cnt) @@ -3558,6 +3564,7 @@ subroutine marbl_compute_autotroph_uptake (auto_cnt, auto_config, auto_meta, & real(r8) , intent(in) :: tracer_local(ecosys_base_tracer_cnt) type(marbl_tracer_index_type) , intent(in) :: marbl_tracer_indices type(autotroph_secondary_species_type) , intent(out) :: autotroph_secondary_species(auto_cnt) + type(carbonate_type) , intent(in) :: carbonate !----------------------------------------------------------------------- ! local variables @@ -3580,6 +3587,7 @@ subroutine marbl_compute_autotroph_uptake (auto_cnt, auto_config, auto_meta, & PO4_loc => tracer_local(marbl_tracer_indices%po4_ind), & Fe_loc => tracer_local(marbl_tracer_indices%fe_ind), & SiO3_loc => tracer_local(marbl_tracer_indices%sio3_ind), & + CO2_loc => carbonate%H2CO3, & ! input ! OUTPUTS VNO3 => autotroph_secondary_species(auto_ind)%VNO3, & VNH4 => autotroph_secondary_species(auto_ind)%VNH4, & @@ -3590,16 +3598,19 @@ subroutine marbl_compute_autotroph_uptake (auto_cnt, auto_config, auto_meta, & VPO4 => autotroph_secondary_species(auto_ind)%VPO4, & VPtot => autotroph_secondary_species(auto_ind)%VPtot, & VSiO3 => autotroph_secondary_species(auto_ind)%VSiO3, & + VCO2 => autotroph_secondary_species(auto_ind)%VCO2, & ! AUTO_CONFIG Nfixer => auto_config(auto_ind)%Nfixer, & silicifier => auto_config(auto_ind)%silicifier, & + calcifier => auto_config(auto_ind)%imp_calcifier, & ! AUTO_META kNO3 => auto_meta(auto_ind)%kNO3, & kNH4 => auto_meta(auto_ind)%kNH4, & kFe => auto_meta(auto_ind)%kFe, & kPO4 => auto_meta(auto_ind)%kPO4, & kDOP => auto_meta(auto_ind)%kDOP, & - kSiO3 => auto_meta(auto_ind)%kSiO3 & + kSiO3 => auto_meta(auto_ind)%kSiO3, & + kCO2 => auto_meta(auto_ind)%kCO2 & ) VNO3 = (NO3_loc / kNO3) / (c1 + (NO3_loc / kNO3) + (NH4_loc / kNH4)) @@ -3619,12 +3630,24 @@ subroutine marbl_compute_autotroph_uptake (auto_cnt, auto_config, auto_meta, & VSiO3 = SiO3_loc / (SiO3_loc + kSiO3) endif + if (calcifier) then + VCO2 = CO2_loc / (CO2_loc + kCO2) + endif + + f_nut = min(VNtot, VFe) f_nut = min(f_nut, VPtot) + if (silicifier) then f_nut = min(f_nut, VSiO3) endif + if (calcifier) then + f_nut = min(f_nut, VCO2) + end if + + + end associate end do @@ -3799,7 +3822,7 @@ end subroutine marbl_compute_autotroph_phyto_diatoms !*********************************************************************** subroutine marbl_compute_autotroph_calcification (auto_cnt, auto_config, & - autotroph_loc, temperature, autotroph_secondary_species) + autotroph_loc, temperature, autotroph_secondary_species, carbonate) !----------------------------------------------------------------------- ! CaCO3 Production, parameterized as function of small phyto production @@ -3809,7 +3832,6 @@ subroutine marbl_compute_autotroph_calcification (auto_cnt, auto_config, & !----------------------------------------------------------------------- use marbl_parms , only : parm_f_prod_sp_CaCO3 - use marbl_parms , only : QCaCO3_max_exp use marbl_parms , only : CaCO3_sp_thres use marbl_parms , only : CaCO3_temp_thres1 use marbl_parms , only : CaCO3_temp_thres2 @@ -3820,17 +3842,21 @@ subroutine marbl_compute_autotroph_calcification (auto_cnt, auto_config, & type(autotroph_local_type) , intent(in) :: autotroph_loc(auto_cnt) real(r8) , intent(in) :: temperature type(autotroph_secondary_species_type) , intent(inout) :: autotroph_secondary_species(auto_cnt) + type(carbonate_type) , intent(in) :: carbonate !----------------------------------------------------------------------- ! local variables !----------------------------------------------------------------------- integer :: auto_ind + real(r8) :: picpoc !----------------------------------------------------------------------- associate( & - f_nut => autotroph_secondary_species(:)%f_nut, & ! input - photoC => autotroph_secondary_species(:)%photoC, & ! input - CaCO3_form => autotroph_secondary_species(:)%CaCO3_form & ! output + f_nut => autotroph_secondary_species(:)%f_nut, & ! input + photoC => autotroph_secondary_species(:)%photoC, & ! input + CaCO3_form => autotroph_secondary_species(:)%CaCO3_form, & ! output + Plim => autotroph_secondary_species(:)%VPO4, & ! input + CO2 => carbonate%H2CO3 & ! input ) do auto_ind = 1, auto_cnt @@ -3850,7 +3876,24 @@ subroutine marbl_compute_autotroph_calcification (auto_cnt, auto_config, & else if(auto_config(auto_ind)%exp_calcifier) then - CaCO3_form(auto_ind) = QCaCO3_max_exp * photoC(auto_ind) !just a one to one ratio for now + !first calculate PIC/POC in coccolithophore biomass---------- + + !temperature effect + if (temperature < 11.) then + picpoc = 0.104 * temperature - 0.108 + else + picpoc = 1. + end if + + !CO2 effect + picpoc = -0.0136 * CO2 + picpoc + 0.21 + + !nut lim effect + picpoc = -0.48 * Plim(auto_ind) + picpoc + 0.48 + + !multiply cocco growth rate by picpoc to get CaCO3 formation + + CaCO3_form(auto_ind) = picpoc * photoC(auto_ind) end if diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 635ab917..4f4b9a3d 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -163,7 +163,7 @@ module marbl_parms gQsi_max = 0.685_r8, & !max Si/C ratio for growth gQsi_min = 0.0457_r8, & !min Si/C ratio for growth QCaCO3_max = 1.0_r8, & !max QCaCO3 for implicit calcifiers - QCaCO3_max_exp = 1.0_r8, & !max QCaCO3 for explicit calcifiers + QCaCO3_max_exp = 2.0_r8, & !max QCaCO3 for explicit calcifiers ! parameters in GalbraithMartiny Pquota Model^M PquotaSlope = 7.0_r8, & PquotaIntercept = 5.571_r8, & @@ -294,6 +294,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kNO3 = 0.22_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.01_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kCO2 = 0.0_r8 !!!! added autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 35.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 @@ -316,6 +317,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kNO3 = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.05_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.7_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kCO2 = 0.0_r8 !!!! added autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 35.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 @@ -338,6 +340,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kNO3 = 2.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.2_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kCO2 = 0.0_r8 !!!! added autotrophs(n)%Qp_fixed = 0.32_r8 * Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 70.0e-6_r8 autotrophs(n)%gQfe_min = 6.0e-6_r8 @@ -360,6 +363,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kNO3 = 0.35_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kCO2 = 2.12_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 @@ -382,6 +386,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kNO3 = c0 autotrophs(n)%kNH4 = c0 autotrophs(n)%kSiO3 = c0 + autotrophs(n)%kCO2 = c0 autotrophs(n)%Qp_fixed = c0 autotrophs(n)%gQfe_0 = c0 autotrophs(n)%gQfe_min = c0 From 1b7ad530a898cefefde55c223be2b195d63836a2 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Thu, 3 Aug 2017 09:28:23 -0600 Subject: [PATCH 14/75] More modifications to try to get modulated calcification and Clim to work. --- src/marbl_diagnostics_mod.F90 | 18 ++++++++++++++++++ src/marbl_parms.F90 | 17 +++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/marbl_diagnostics_mod.F90 b/src/marbl_diagnostics_mod.F90 index 4aaf5383..7b86cbc5 100644 --- a/src/marbl_diagnostics_mod.F90 +++ b/src/marbl_diagnostics_mod.F90 @@ -185,6 +185,7 @@ module marbl_diagnostics_mod integer(int_kind), dimension(autotroph_cnt) :: P_lim integer(int_kind), dimension(autotroph_cnt) :: Fe_lim integer(int_kind), dimension(autotroph_cnt) :: SiO3_lim + integer(int_kind), dimension(autotroph_cnt) :: C_lim integer(int_kind), dimension(autotroph_cnt) :: light_lim integer(int_kind), dimension(autotroph_cnt) :: photoC integer(int_kind), dimension(autotroph_cnt) :: photoC_NO3 @@ -2073,6 +2074,23 @@ subroutine marbl_diagnostics_init( & ind%SiO3_lim(n) = -1 end if +!!!!!!-added this for cocco_C_lim + if (autotrophs_config(n)%exp_calcifier) then + lname = trim(autotrophs_config(n)%lname) // ' C Limitation' + sname = trim(autotrophs_config(n)%sname) // '_C_lim' + units = 'none' + vgrid = 'layer_avg' + truncate = .true. + call diags%add_diagnostic(lname, sname, units, vgrid, truncate, & + ind%C_lim(n), marbl_status_log) + if (marbl_status_log%labort_marbl) then + call log_add_diagnostics_error(marbl_status_log, sname, subname) + return + end if + else + ind%C_lim(n) = -1 + end if + lname = trim(autotrophs_config(n)%lname) // ' Light Limitation' sname = trim(autotrophs_config(n)%sname) // '_light_lim' units = 'none' diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 4f4b9a3d..8e7c6108 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -975,6 +975,23 @@ subroutine marbl_define_parameters(this, marbl_status_log) return end if + +!!!!added for cocco C lim +write(sname, "(2A)") trim(prefix), 'kCO2' +lname = 'nutrient uptake half-sat constants' +units = 'nmol/cm^3' +datatype = 'real' +group = 'marbl_parms_nml' +rptr => autotrophs(n)%kCO2 +call this%add_var(sname, lname, units, datatype, group, category, & +marbl_status_log, rptr=rptr, comment=comment) +if (marbl_status_log%labort_marbl) then +call log_add_var_error(marbl_status_log, sname, subname) +return +end if + + + write(sname, "(2A)") trim(prefix), 'Qp_fixed' lname = 'P/C ratio when using fixed P/C ratios' units = 'unitless' From 793f3e6170f7fe44c478ff9d69d04ef624b718d3 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Fri, 4 Aug 2017 10:47:09 -0600 Subject: [PATCH 15/75] Fixed some bugs related to calcification and C limitation of coccos --- src/marbl_diagnostics_mod.F90 | 4 ++++ src/marbl_mod.F90 | 36 ++++++++++++++++++++--------------- src/marbl_parms.F90 | 2 +- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/marbl_diagnostics_mod.F90 b/src/marbl_diagnostics_mod.F90 index 7b86cbc5..d4d6180d 100644 --- a/src/marbl_diagnostics_mod.F90 +++ b/src/marbl_diagnostics_mod.F90 @@ -3654,6 +3654,10 @@ subroutine store_diagnostics_autotrophs(marbl_domain, & if (ind%SiO3_lim(n).ne.-1) then diags(ind%SiO3_lim(n))%field_3d(:, 1) = autotroph_secondary_species(n,:)%VSiO3 end if +!!!!!!!add for coccos + if (ind%C_lim(n).ne.-1) then + diags(ind%C_lim(n))%field_3d(:, 1) = autotroph_secondary_species(n,:)%VCO2 + end if diags(ind%light_lim(n))%field_3d(:, 1) = autotroph_secondary_species(n,:)%light_lim diags(ind%photoNO3(n))%field_3d(:, 1) = autotroph_secondary_species(n,:)%NO3_V diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 index 3c347ef8..a9844cb7 100644 --- a/src/marbl_mod.F90 +++ b/src/marbl_mod.F90 @@ -1099,7 +1099,7 @@ subroutine marbl_set_interior_forcing( & do k = 1, km call marbl_compute_autotroph_elemental_ratios( autotroph_cnt, & - autotrophs, autotroph_local(:, k), tracer_local(:, k), & + autotrophs, autotrophs_config, autotroph_local(:, k), tracer_local(:, k), & marbl_tracer_indices, autotroph_secondary_species(:, k)) call marbl_compute_function_scaling(temperature(k), Tfunc(k)) @@ -3038,7 +3038,7 @@ end subroutine marbl_consistency_check_autotrophs !*********************************************************************** subroutine marbl_compute_autotroph_elemental_ratios(auto_cnt, autotroph_parms, & - autotroph_local, tracer_local, marbl_tracer_indices, & + auto_config, autotroph_local, tracer_local, marbl_tracer_indices, & autotroph_secondary_species) use marbl_constants_mod, only : epsC @@ -3053,6 +3053,7 @@ subroutine marbl_compute_autotroph_elemental_ratios(auto_cnt, autotroph_parms, & integer (int_kind) , intent(in) :: auto_cnt type(autotroph_parms_type) , intent(in) :: autotroph_parms(auto_cnt) ! autotrophs type(autotroph_local_type) , intent(in) :: autotroph_local(auto_cnt) + type(autotroph_config_type), intent(in) :: auto_config(auto_cnt) real (r8) , intent(in) :: tracer_local(ecosys_base_tracer_cnt) ! local copies of model tracer concentrations type(marbl_tracer_index_type), intent(in) :: marbl_tracer_indices type(autotroph_secondary_species_type), intent(inout) :: autotroph_secondary_species(auto_cnt) @@ -3063,6 +3064,7 @@ subroutine marbl_compute_autotroph_elemental_ratios(auto_cnt, autotroph_parms, & real :: cks ! constant used in quota modification real :: cksi ! constant used in Si quota modification integer(int_kind) :: auto_ind + real :: QCaCO3_max_loc ! !----------------------------------------------------------------------- associate( & @@ -3159,15 +3161,18 @@ subroutine marbl_compute_autotroph_elemental_ratios(auto_cnt, autotroph_parms, & if (marbl_tracer_indices%auto_inds(auto_ind)%CaCO3_ind > 0) then !set a local variable to the correct QCaCO3 max based on whether implicit or explicit - ! if (implicit) then - ! QCaCO3_loc = QCaCO3_max - ! else - ! QCaCO3_loc = QCaCO3_max_exp - ! end if + if (auto_config(auto_ind)%imp_calcifier) then + QCaCO3_max_loc = QCaCO3_max + else + QCaCO3_max_loc = QCaCO3_max_exp + end if + QCaCO3(auto_ind) = auto_CaCO3(auto_ind) / (auto_C(auto_ind) + epsC) - if (QCaCO3(auto_ind) > QCaCO3_max) then !_loc - QCaCO3(auto_ind) = QCaCO3_max!_loc + + if (QCaCO3(auto_ind) > QCaCO3_max_loc) then + QCaCO3(auto_ind) = QCaCO3_max_loc end if + end if end do end associate @@ -3602,7 +3607,8 @@ subroutine marbl_compute_autotroph_uptake (auto_cnt, auto_config, auto_meta, & ! AUTO_CONFIG Nfixer => auto_config(auto_ind)%Nfixer, & silicifier => auto_config(auto_ind)%silicifier, & - calcifier => auto_config(auto_ind)%imp_calcifier, & + imp_calcifier => auto_config(auto_ind)%imp_calcifier, & + exp_calcifier => auto_config(auto_ind)%exp_calcifier, & ! AUTO_META kNO3 => auto_meta(auto_ind)%kNO3, & kNH4 => auto_meta(auto_ind)%kNH4, & @@ -3630,7 +3636,7 @@ subroutine marbl_compute_autotroph_uptake (auto_cnt, auto_config, auto_meta, & VSiO3 = SiO3_loc / (SiO3_loc + kSiO3) endif - if (calcifier) then + if (exp_calcifier) then VCO2 = CO2_loc / (CO2_loc + kCO2) endif @@ -3642,7 +3648,7 @@ subroutine marbl_compute_autotroph_uptake (auto_cnt, auto_config, auto_meta, & f_nut = min(f_nut, VSiO3) endif - if (calcifier) then + if (exp_calcifier) then f_nut = min(f_nut, VCO2) end if @@ -3889,11 +3895,11 @@ subroutine marbl_compute_autotroph_calcification (auto_cnt, auto_config, & picpoc = -0.0136 * CO2 + picpoc + 0.21 !nut lim effect - picpoc = -0.48 * Plim(auto_ind) + picpoc + 0.48 + !picpoc = -0.48 * Plim(auto_ind) + picpoc + 0.48 - !multiply cocco growth rate by picpoc to get CaCO3 formation + !multiply cocco growth rate by picpoc to get CaCO3 formation - CaCO3_form(auto_ind) = picpoc * photoC(auto_ind) + CaCO3_form(auto_ind) = picpoc * photoC(auto_ind) end if diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 8e7c6108..a67b5296 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -162,7 +162,7 @@ module marbl_parms gQsi_0 = 0.137_r8, & !initial Si/C ratio for growth gQsi_max = 0.685_r8, & !max Si/C ratio for growth gQsi_min = 0.0457_r8, & !min Si/C ratio for growth - QCaCO3_max = 1.0_r8, & !max QCaCO3 for implicit calcifiers + QCaCO3_max = 0.4_r8, & !max QCaCO3 for implicit calcifiers QCaCO3_max_exp = 2.0_r8, & !max QCaCO3 for explicit calcifiers ! parameters in GalbraithMartiny Pquota Model^M PquotaSlope = 7.0_r8, & From 8472fa9a577466eb055e85d6fde848ecd88e3575 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Mon, 7 Aug 2017 11:48:38 -0600 Subject: [PATCH 16/75] reinstated increased pic/poc with Plim, modified parms to make coccos slightly more competitive --- src/marbl_mod.F90 | 4 ++-- src/marbl_parms.F90 | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 index a9844cb7..e686fab7 100644 --- a/src/marbl_mod.F90 +++ b/src/marbl_mod.F90 @@ -3894,8 +3894,8 @@ subroutine marbl_compute_autotroph_calcification (auto_cnt, auto_config, & !CO2 effect picpoc = -0.0136 * CO2 + picpoc + 0.21 - !nut lim effect - !picpoc = -0.48 * Plim(auto_ind) + picpoc + 0.48 + !nut lim effect (maybe just making this for P-limited areas? if (Plim(auto_ind) == f_nut(auto_ind) then..) + picpoc = -0.48 * Plim(auto_ind) + picpoc + 0.48 !multiply cocco growth rate by picpoc to get CaCO3 formation diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index a67b5296..cc6f6207 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -288,7 +288,7 @@ subroutine marbl_parms_set_defaults(km) do n=1,autotroph_cnt select case (trim(autotrophs_config(n)%sname)) case ('sp') - autotrophs(n)%kFe = 0.03e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.027e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.22_r8 ! in marbl_parms framework, see NOTE above @@ -316,13 +316,13 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kDOP = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.05_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kSiO3 = 0.7_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kSiO3 = 0.72_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.0_r8 !!!! added autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 35.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 autotrophs(n)%alphaPI_per_day = 0.29_r8 - autotrophs(n)%PCref_per_day = 5.2_r8 + autotrophs(n)%PCref_per_day = 5.1_r8 autotrophs(n)%thetaN_max = 4.0_r8 autotrophs(n)%loss_thres = 0.02_r8 autotrophs(n)%loss_thres2 = 0.0_r8 @@ -357,10 +357,10 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.03e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.027e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.006_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.35_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.32_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 2.12_r8 !!!! added Km for CO2 for coccos From be0c37af277101ea14fda8e2beb50b8517e2e4c0 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Tue, 8 Aug 2017 10:14:55 -0600 Subject: [PATCH 17/75] further decreased KFe for coccos and increased thetaNmax to 3.2 for coccos --- src/marbl_parms.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index cc6f6207..b1a34670 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -357,7 +357,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.027e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.023e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.006_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.32_r8 ! in marbl_parms framework, see NOTE above @@ -369,7 +369,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%gQfe_min = 3.0e-6_r8 autotrophs(n)%alphaPI_per_day = 0.30_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 3.1_r8 + autotrophs(n)%thetaN_max = 3.2_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = 0.0_r8 From 77f4e3c8892feb83790a66a32c12c631794725ad Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Wed, 9 Aug 2017 10:06:17 -0600 Subject: [PATCH 18/75] decreased kCO2 for cocco, decreased Kno3 for cocco, increased alphaPI for cocco --- src/marbl_parms.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index b1a34670..1011b927 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -322,7 +322,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%gQfe_0 = 35.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 autotrophs(n)%alphaPI_per_day = 0.29_r8 - autotrophs(n)%PCref_per_day = 5.1_r8 + autotrophs(n)%PCref_per_day = 5.0_r8 autotrophs(n)%thetaN_max = 4.0_r8 autotrophs(n)%loss_thres = 0.02_r8 autotrophs(n)%loss_thres2 = 0.0_r8 @@ -360,14 +360,14 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kFe = 0.023e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.006_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.32_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.25_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kCO2 = 2.12_r8 !!!! added Km for CO2 for coccos + autotrophs(n)%kCO2 = 1.5_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.30_r8 + autotrophs(n)%alphaPI_per_day = 0.33_r8 autotrophs(n)%PCref_per_day = 5.0_r8 autotrophs(n)%thetaN_max = 3.2_r8 autotrophs(n)%loss_thres = 0.01_r8 From f30c99e1fbe2e5b9e005d31d72cb103f0226d775 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Wed, 9 Aug 2017 12:13:54 -0600 Subject: [PATCH 19/75] Made a special Tfunc for coccos --- src/marbl_mod.F90 | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 index e686fab7..c0f43a23 100644 --- a/src/marbl_mod.F90 +++ b/src/marbl_mod.F90 @@ -971,6 +971,7 @@ subroutine marbl_set_interior_forcing( & real (r8) :: sed_denitrif(domain%km) ! sedimentary denitrification (nmol N/cm^3/sec) real (r8) :: other_remin(domain%km) ! organic C remin not due oxic or denitrif (nmolC/cm^3/sec) real (r8) :: Tfunc(domain%km) + real (r8) :: Tfunc_cocco(domain%km) ! temperature function specific to coccolithophores real (r8) :: Fe_scavenge_rate(domain%km) ! annual scavenging rate of iron as % of ambient real (r8) :: Fe_scavenge(domain%km) ! loss of dissolved iron, scavenging (mmol Fe/m^3/sec) real (r8) :: Lig_scavenge(domain%km) ! loss of Fe-binding Ligand from scavenging (mmol Fe/m^3/sec) @@ -1102,7 +1103,7 @@ subroutine marbl_set_interior_forcing( & autotrophs, autotrophs_config, autotroph_local(:, k), tracer_local(:, k), & marbl_tracer_indices, autotroph_secondary_species(:, k)) - call marbl_compute_function_scaling(temperature(k), Tfunc(k)) + call marbl_compute_function_scaling(temperature(k), Tfunc(k), Tfunc_cocco(k)) call marbl_compute_Pprime(k, domain, autotroph_cnt, autotrophs, & autotroph_local(:, k), temperature(k), autotroph_secondary_species(:, k)) @@ -1113,7 +1114,7 @@ subroutine marbl_set_interior_forcing( & call marbl_compute_autotroph_photosynthesis(autotroph_cnt, & num_PAR_subcols, autotrophs, autotroph_local(:, k), & - temperature(k), Tfunc(k), PAR%col_frac(:), & + temperature(k), autotrophs_config, Tfunc(k), Tfunc_cocco(k), PAR%col_frac(:), & PAR%avg(k,:), autotroph_secondary_species(:, k)) call marbl_compute_autotroph_phyto_diatoms (autotroph_cnt, & @@ -3432,7 +3433,7 @@ end subroutine marbl_compute_carbonate_chemistry !*********************************************************************** - subroutine marbl_compute_function_scaling(column_temperature, Tfunc ) + subroutine marbl_compute_function_scaling(column_temperature, Tfunc, Tfunc_cocco ) !----------------------------------------------------------------------- ! Tref = 30.0 reference temperature (deg. C) @@ -3446,9 +3447,13 @@ subroutine marbl_compute_function_scaling(column_temperature, Tfunc ) real(r8), intent(in) :: column_temperature real(r8), intent(out) :: Tfunc + real(r8), intent(out) :: Tfunc_cocco Tfunc = Q_10**(((column_temperature + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) + + Tfunc_cocco = 0.085 * (column_temperature + T0_Kelvin)**(0.53) + end subroutine marbl_compute_function_scaling !*********************************************************************** @@ -3663,7 +3668,7 @@ end subroutine marbl_compute_autotroph_uptake !*********************************************************************** subroutine marbl_compute_autotroph_photosynthesis (auto_cnt, PAR_nsubcols, & - auto_meta, autotroph_loc, temperature, Tfunc, PAR_col_frac, PAR_avg, & + auto_meta, autotroph_loc, temperature, auto_config, Tfunc, Tfunc_cocco, PAR_col_frac, PAR_avg, & autotroph_secondary_species) !----------------------------------------------------------------------- @@ -3677,7 +3682,9 @@ subroutine marbl_compute_autotroph_photosynthesis (auto_cnt, PAR_nsubcols, & type(autotroph_parms_type) , intent(in) :: auto_meta(auto_cnt) type(autotroph_local_type) , intent(in) :: autotroph_loc(auto_cnt) real(r8) , intent(in) :: temperature + type(autotroph_config_type) , intent(in) :: auto_config(auto_cnt) real(r8) , intent(in) :: Tfunc + real(r8) , intent(in) :: Tfunc_cocco real(r8) , intent(in) :: PAR_col_frac(PAR_nsubcols) real(r8) , intent(in) :: PAR_avg(PAR_nsubcols) type(autotroph_secondary_species_type) , intent(inout) :: autotroph_secondary_species(auto_cnt) @@ -3709,7 +3716,14 @@ subroutine marbl_compute_autotroph_photosynthesis (auto_cnt, PAR_nsubcols, & alphaPI => auto_meta(auto_ind)%alphaPI & ) - PCmax = PCref * f_nut * Tfunc + + if (auto_config(auto_ind)%exp_calcifier) then + PCmax = PCref * f_nut * Tfunc_cocco + else + PCmax = PCref * f_nut * Tfunc + end if + + if (temperature < autotrophs(auto_ind)%temp_thres) then PCmax = c0 end if From 2692ef279ae4691628e8d9037376db94fa8d6ee6 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Wed, 9 Aug 2017 14:00:31 -0600 Subject: [PATCH 20/75] test with no C lim --- src/marbl_parms.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 1011b927..45b6925d 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -363,7 +363,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kNO3 = 0.25_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kCO2 = 1.5_r8 !!!! added Km for CO2 for coccos + autotrophs(n)%kCO2 = 0.0_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 From 897d80d07003e557b1d19a93ad2eb09c796edfe6 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Thu, 10 Aug 2017 12:17:32 -0600 Subject: [PATCH 21/75] decreased competitive ability of coccos, given new Tfunc --- src/marbl_parms.F90 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 45b6925d..008cab8b 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -288,7 +288,7 @@ subroutine marbl_parms_set_defaults(km) do n=1,autotroph_cnt select case (trim(autotrophs_config(n)%sname)) case ('sp') - autotrophs(n)%kFe = 0.027e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.03e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.22_r8 ! in marbl_parms framework, see NOTE above @@ -357,19 +357,19 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.023e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.029e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.006_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.25_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kCO2 = 0.0_r8 !!!! added Km for CO2 for coccos + autotrophs(n)%kCO2 = 2.12_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.33_r8 + autotrophs(n)%alphaPI_per_day = 0.3_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 3.2_r8 + autotrophs(n)%thetaN_max = 2.8_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = 0.0_r8 From 7b0d23f543bf6392d52bcce50ba6e0d74746c04f Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Thu, 10 Aug 2017 12:42:26 -0600 Subject: [PATCH 22/75] made the Tfunc for coccos to version 2 (not so advantageous) --- src/marbl_mod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 index c0f43a23..d218d318 100644 --- a/src/marbl_mod.F90 +++ b/src/marbl_mod.F90 @@ -3452,7 +3452,7 @@ subroutine marbl_compute_function_scaling(column_temperature, Tfunc, Tfunc_cocco Tfunc = Q_10**(((column_temperature + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) - Tfunc_cocco = 0.085 * (column_temperature + T0_Kelvin)**(0.53) + Tfunc_cocco = 0.065 * (column_temperature + T0_Kelvin)**(0.6) end subroutine marbl_compute_function_scaling From 1ae38eb65b7ae53b0d71e598302506535d8ec14c Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Thu, 10 Aug 2017 12:47:15 -0600 Subject: [PATCH 23/75] oops --- src/marbl_mod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 index d218d318..c0f43a23 100644 --- a/src/marbl_mod.F90 +++ b/src/marbl_mod.F90 @@ -3452,7 +3452,7 @@ subroutine marbl_compute_function_scaling(column_temperature, Tfunc, Tfunc_cocco Tfunc = Q_10**(((column_temperature + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) - Tfunc_cocco = 0.065 * (column_temperature + T0_Kelvin)**(0.6) + Tfunc_cocco = 0.085 * (column_temperature + T0_Kelvin)**(0.53) end subroutine marbl_compute_function_scaling From 132139df9a728e2492a338aba18972e65f1b9b91 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Thu, 10 Aug 2017 13:02:09 -0600 Subject: [PATCH 24/75] change to Tfunc to version 2 --- src/marbl_mod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 index c0f43a23..d218d318 100644 --- a/src/marbl_mod.F90 +++ b/src/marbl_mod.F90 @@ -3452,7 +3452,7 @@ subroutine marbl_compute_function_scaling(column_temperature, Tfunc, Tfunc_cocco Tfunc = Q_10**(((column_temperature + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) - Tfunc_cocco = 0.085 * (column_temperature + T0_Kelvin)**(0.53) + Tfunc_cocco = 0.065 * (column_temperature + T0_Kelvin)**(0.6) end subroutine marbl_compute_function_scaling From 52c0fbbdff01cf1b8da888574e52ecce09e223fd Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Fri, 11 Aug 2017 09:25:58 -0600 Subject: [PATCH 25/75] lowered max growth rate for coccos --- src/marbl_parms.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 008cab8b..f93ad38f 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -357,8 +357,8 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.029e-3_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kPO4 = 0.006_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.032e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kPO4 = 0.007_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above @@ -368,8 +368,8 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 autotrophs(n)%alphaPI_per_day = 0.3_r8 - autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 2.8_r8 + autotrophs(n)%PCref_per_day = 4.0_r8 + autotrophs(n)%thetaN_max = 2.6_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = 0.0_r8 From c2d4d59f714c1adbb496dc7397281f7da7a41999 Mon Sep 17 00:00:00 2001 From: Kristen Krumhardt Date: Tue, 15 Aug 2017 08:54:49 -0600 Subject: [PATCH 26/75] temp function changes --- src/marbl_mod.F90 | 6 +++++- src/marbl_parms.F90 | 16 ++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 index d218d318..a10198a7 100644 --- a/src/marbl_mod.F90 +++ b/src/marbl_mod.F90 @@ -3452,7 +3452,11 @@ subroutine marbl_compute_function_scaling(column_temperature, Tfunc, Tfunc_cocco Tfunc = Q_10**(((column_temperature + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) - Tfunc_cocco = 0.065 * (column_temperature + T0_Kelvin)**(0.6) + +Tfunc_cocco = Q_10**(((column_temperature + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) +! Tfunc_cocco = 0.08 * ((column_temperature)**(0.6)) + +!Tfunc_cocco = 1.8**(((column_temperature + T0_Kelvin) - (33.0 + T0_Kelvin)) / c10) end subroutine marbl_compute_function_scaling diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index f93ad38f..5f21a4da 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -288,7 +288,7 @@ subroutine marbl_parms_set_defaults(km) do n=1,autotroph_cnt select case (trim(autotrophs_config(n)%sname)) case ('sp') - autotrophs(n)%kFe = 0.03e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.027e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.22_r8 ! in marbl_parms framework, see NOTE above @@ -357,19 +357,19 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.032e-3_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kPO4 = 0.007_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.026e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.25_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kCO2 = 2.12_r8 !!!! added Km for CO2 for coccos + autotrophs(n)%kCO2 = 0.0_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.3_r8 - autotrophs(n)%PCref_per_day = 4.0_r8 - autotrophs(n)%thetaN_max = 2.6_r8 + autotrophs(n)%alphaPI_per_day = 0.33_r8 + autotrophs(n)%PCref_per_day = 5.0_r8 + autotrophs(n)%thetaN_max = 3.2_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = 0.0_r8 From 82badc482fc09be392e9736af23857e17343f170 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Tue, 15 Aug 2017 09:55:32 -0600 Subject: [PATCH 27/75] made light lim cocco same as for diat and really efficient Kfe for coccos --- src/marbl_parms.F90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 5f21a4da..acac44ef 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -357,7 +357,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.026e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.015e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.25_r8 ! in marbl_parms framework, see NOTE above @@ -367,9 +367,9 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.33_r8 + autotrophs(n)%alphaPI_per_day = 0.39_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 3.2_r8 + autotrophs(n)%thetaN_max = 4.0_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = 0.0_r8 From f7a88e58f5741736f7fd357c5b47a5383fe3e001 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Tue, 15 Aug 2017 10:04:33 -0600 Subject: [PATCH 28/75] coccos have the same light parms as diatoms, but with super efficent Kfe and with the blue Tfunc for coccos --- src/marbl_mod.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 index a10198a7..fd4cace4 100644 --- a/src/marbl_mod.F90 +++ b/src/marbl_mod.F90 @@ -3453,8 +3453,8 @@ subroutine marbl_compute_function_scaling(column_temperature, Tfunc, Tfunc_cocco -Tfunc_cocco = Q_10**(((column_temperature + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) -! Tfunc_cocco = 0.08 * ((column_temperature)**(0.6)) +!Tfunc_cocco = Q_10**(((column_temperature + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) +Tfunc_cocco = 0.085 * ((column_temperature)**(0.53)) !Tfunc_cocco = 1.8**(((column_temperature + T0_Kelvin) - (33.0 + T0_Kelvin)) / c10) From e13413dc85a426a53b4b8a01197be7c35b8920bc Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Wed, 16 Aug 2017 08:17:13 -0600 Subject: [PATCH 29/75] increase kco2 --- src/marbl_parms.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index acac44ef..767f8d78 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -363,7 +363,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kNO3 = 0.25_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kCO2 = 0.0_r8 !!!! added Km for CO2 for coccos + autotrophs(n)%kCO2 = 0.5_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 From 4f7e403255fee8e9b7e79478cd963b3891867536 Mon Sep 17 00:00:00 2001 From: Kristen Krumhardt Date: Tue, 29 Aug 2017 10:00:52 -0600 Subject: [PATCH 30/75] adjusting parms --- src/marbl_parms.F90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 767f8d78..83529eca 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -357,17 +357,17 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.015e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.020e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.25_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kCO2 = 0.5_r8 !!!! added Km for CO2 for coccos + autotrophs(n)%kCO2 = 1.5_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.39_r8 + autotrophs(n)%alphaPI_per_day = 0.27_r8 autotrophs(n)%PCref_per_day = 5.0_r8 autotrophs(n)%thetaN_max = 4.0_r8 autotrophs(n)%loss_thres = 0.01_r8 From 6c89c00343951a0d5f0f8007d1692badf1ec75b1 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Tue, 29 Aug 2017 11:22:18 -0600 Subject: [PATCH 31/75] adjusted parms --- src/marbl_parms.F90 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 83529eca..c4c38e57 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -316,7 +316,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kDOP = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.05_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kSiO3 = 0.72_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kSiO3 = 0.75_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.0_r8 !!!! added autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 35.0e-6_r8 @@ -357,19 +357,19 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.020e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.018e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.25_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.22_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kCO2 = 1.5_r8 !!!! added Km for CO2 for coccos + autotrophs(n)%kCO2 = 1.0_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.27_r8 + autotrophs(n)%alphaPI_per_day = 0.29_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 4.0_r8 + autotrophs(n)%thetaN_max = 3.9_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = 0.0_r8 From c2659711770e2d0bd9e620621ac21ec0eb8de594 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Wed, 30 Aug 2017 14:26:06 -0600 Subject: [PATCH 32/75] adjusting light parms --- src/marbl_parms.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index c4c38e57..1ea172cf 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -367,9 +367,9 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.29_r8 + autotrophs(n)%alphaPI_per_day = 0.35_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 3.9_r8 + autotrophs(n)%thetaN_max = 3.2_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = 0.0_r8 From e893558f11724a53bda934971350a4791de3918b Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Thu, 31 Aug 2017 10:20:40 -0600 Subject: [PATCH 33/75] more parm adjustements --- src/marbl_parms.F90 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 1ea172cf..16a29bf6 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -311,12 +311,12 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('diat') - autotrophs(n)%kFe = 0.05e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.07e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.05_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.5_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.5_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.7_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.05_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kSiO3 = 0.75_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kSiO3 = 0.9_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.0_r8 !!!! added autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 35.0e-6_r8 @@ -367,9 +367,9 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.35_r8 + autotrophs(n)%alphaPI_per_day = 0.38_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 3.2_r8 + autotrophs(n)%thetaN_max = 2.8_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = 0.0_r8 From f8c56000b976a3942ea880e713418f9a91ac4190 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Fri, 1 Sep 2017 09:58:50 -0600 Subject: [PATCH 34/75] adjusting light parms --- src/marbl_parms.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 16a29bf6..509deda9 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -367,7 +367,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.38_r8 + autotrophs(n)%alphaPI_per_day = 0.4_r8 autotrophs(n)%PCref_per_day = 5.0_r8 autotrophs(n)%thetaN_max = 2.8_r8 autotrophs(n)%loss_thres = 0.01_r8 From 4dbd222aeebe5fda6bebda2092ca6a86ac5bd434 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Fri, 1 Sep 2017 11:29:21 -0600 Subject: [PATCH 35/75] going back to version 20 parms --- src/marbl_parms.F90 | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 509deda9..6a736dee 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -311,10 +311,10 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('diat') - autotrophs(n)%kFe = 0.07e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.05e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.05_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.5_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.7_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.05_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.9_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.0_r8 !!!! added @@ -357,19 +357,19 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.018e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.023e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.22_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.25_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kCO2 = 1.0_r8 !!!! added Km for CO2 for coccos + autotrophs(n)%kCO2 = 0.5_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.4_r8 + autotrophs(n)%alphaPI_per_day = 0.39_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 2.8_r8 + autotrophs(n)%thetaN_max = 4.0_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = 0.0_r8 From 946eea4d653adc14f4f357d1b0647a2d86e47998 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Fri, 1 Sep 2017 14:22:47 -0600 Subject: [PATCH 36/75] adjust parms --- src/marbl_parms.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 6a736dee..36645d74 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -311,7 +311,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('diat') - autotrophs(n)%kFe = 0.05e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.09e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.05_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.5_r8 ! in marbl_parms framework, see NOTE above @@ -359,15 +359,15 @@ subroutine marbl_parms_set_defaults(km) case ('cocco') autotrophs(n)%kFe = 0.023e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.25_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kDOP = 0.1_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.22_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.5_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.39_r8 + autotrophs(n)%alphaPI_per_day = 0.25_r8 autotrophs(n)%PCref_per_day = 5.0_r8 autotrophs(n)%thetaN_max = 4.0_r8 autotrophs(n)%loss_thres = 0.01_r8 From 84071654a81958690a3c3a9cd951000aa45e19bc Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Sat, 2 Sep 2017 09:46:15 -0600 Subject: [PATCH 37/75] parm adjustments --- src/marbl_parms.F90 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 36645d74..29a54a4d 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -316,7 +316,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kDOP = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.05_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kSiO3 = 0.9_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kSiO3 = 1.2_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.0_r8 !!!! added autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 35.0e-6_r8 @@ -357,19 +357,19 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.023e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.018e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.1_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.22_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.20_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.5_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.25_r8 + autotrophs(n)%alphaPI_per_day = 0.32_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 4.0_r8 + autotrophs(n)%thetaN_max = 3.8_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = 0.0_r8 From 2481ee92e5a8d527eb6afdc6d70f0ec627529998 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Sat, 2 Sep 2017 10:10:54 -0600 Subject: [PATCH 38/75] test --- src/marbl_parms.F90 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 29a54a4d..36645d74 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -316,7 +316,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kDOP = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.05_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kSiO3 = 1.2_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kSiO3 = 0.9_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.0_r8 !!!! added autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 35.0e-6_r8 @@ -357,19 +357,19 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.018e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.023e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.1_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.20_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.22_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.5_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.32_r8 + autotrophs(n)%alphaPI_per_day = 0.25_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 3.8_r8 + autotrophs(n)%thetaN_max = 4.0_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = 0.0_r8 From 68a46f8061d3b2fce39ba2f05225c381fd674455 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Sun, 3 Sep 2017 13:04:55 -0600 Subject: [PATCH 39/75] put my light parms like Cara's --- src/marbl_parms.F90 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 36645d74..3e619a48 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -316,12 +316,12 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kDOP = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.05_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kSiO3 = 0.9_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kSiO3 = 1.2_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.0_r8 !!!! added autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 35.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.29_r8 + autotrophs(n)%alphaPI_per_day = 0.39_r8 autotrophs(n)%PCref_per_day = 5.0_r8 autotrophs(n)%thetaN_max = 4.0_r8 autotrophs(n)%loss_thres = 0.02_r8 @@ -357,19 +357,19 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.023e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.018e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.1_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.22_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.20_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.5_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.25_r8 + autotrophs(n)%alphaPI_per_day = 0.36_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 4.0_r8 + autotrophs(n)%thetaN_max = 3.0_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = 0.0_r8 From 92b8c79210e987ee6b8846877e8cbb39f509ce39 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Mon, 4 Sep 2017 20:12:11 -0600 Subject: [PATCH 40/75] lowered cocco KNO3 --- src/marbl_parms.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 3e619a48..837c9ab7 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -360,7 +360,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kFe = 0.018e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.1_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.20_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.18_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.5_r8 !!!! added Km for CO2 for coccos From 0a4977f1a803a6e99343711fab7c87ad14a83718 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Tue, 5 Sep 2017 09:17:54 -0600 Subject: [PATCH 41/75] thetaNmax for cocco same as sp, lowered KNO3 for cocco, increased KSiO3 for diat --- src/marbl_parms.F90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 837c9ab7..cd5e6eaf 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -316,7 +316,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kDOP = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.05_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kSiO3 = 1.2_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kSiO3 = 1.4_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.0_r8 !!!! added autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 35.0e-6_r8 @@ -360,7 +360,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kFe = 0.018e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.1_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.18_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.12_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.5_r8 !!!! added Km for CO2 for coccos @@ -369,7 +369,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%gQfe_min = 3.0e-6_r8 autotrophs(n)%alphaPI_per_day = 0.36_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 3.0_r8 + autotrophs(n)%thetaN_max = 2.5_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = 0.0_r8 From 104930e57b846af984eb75154f69e633ec048cb6 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Tue, 5 Sep 2017 14:34:07 -0600 Subject: [PATCH 42/75] adjusting a bunch of parms to make coccos more competitive --- src/marbl_parms.F90 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index cd5e6eaf..ade55675 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -298,7 +298,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 35.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.39_r8 + autotrophs(n)%alphaPI_per_day = 0.34_r8 autotrophs(n)%PCref_per_day = 5.0_r8 autotrophs(n)%thetaN_max = 2.5_r8 autotrophs(n)%loss_thres = 0.01_r8 @@ -311,12 +311,12 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('diat') - autotrophs(n)%kFe = 0.09e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.12e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.05_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.05_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kSiO3 = 1.4_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kSiO3 = 1.6_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.0_r8 !!!! added autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 35.0e-6_r8 @@ -357,19 +357,19 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.018e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.015e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.1_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.12_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kCO2 = 0.5_r8 !!!! added Km for CO2 for coccos + autotrophs(n)%kCO2 = 0.0_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 autotrophs(n)%alphaPI_per_day = 0.36_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 2.5_r8 + autotrophs(n)%thetaN_max = 2.7_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = 0.0_r8 From 4557faddcb97d1dc00c4b23b8d3202c8b6ac6f7f Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Wed, 6 Sep 2017 08:50:03 -0600 Subject: [PATCH 43/75] adjusted light parms and some nutrient kms to make coccos more competitive --- src/marbl_parms.F90 | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index ade55675..07c1d0f5 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -288,17 +288,17 @@ subroutine marbl_parms_set_defaults(km) do n=1,autotroph_cnt select case (trim(autotrophs_config(n)%sname)) case ('sp') - autotrophs(n)%kFe = 0.027e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.029e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.22_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.24_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.01_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.0_r8 !!!! added autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 35.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.34_r8 + autotrophs(n)%alphaPI_per_day = 0.44_r8 autotrophs(n)%PCref_per_day = 5.0_r8 autotrophs(n)%thetaN_max = 2.5_r8 autotrophs(n)%loss_thres = 0.01_r8 @@ -321,7 +321,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 35.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.39_r8 + autotrophs(n)%alphaPI_per_day = 0.44_r8 autotrophs(n)%PCref_per_day = 5.0_r8 autotrophs(n)%thetaN_max = 4.0_r8 autotrophs(n)%loss_thres = 0.02_r8 @@ -359,15 +359,15 @@ subroutine marbl_parms_set_defaults(km) case ('cocco') autotrophs(n)%kFe = 0.015e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kDOP = 0.1_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kDOP = 0.05_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.12_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNH4 = 0.01_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.0_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.36_r8 + autotrophs(n)%alphaPI_per_day = 0.4_r8 autotrophs(n)%PCref_per_day = 5.0_r8 autotrophs(n)%thetaN_max = 2.7_r8 autotrophs(n)%loss_thres = 0.01_r8 @@ -458,7 +458,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above elseif ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & (trim(autotrophs_config(m)%sname).eq.'cocco')) then - grazing(m,n)%z_umax_0_per_day = 3.2_r8 ! in marbl_parms framework, see NOTE above + grazing(m,n)%z_umax_0_per_day = 3.05_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%z_grz = 1.2_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_zoo = 0.25_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_poc = 0.3_r8 ! in marbl_parms framework, see NOTE above From 63d6d39ebc76aebbb4a325eaf6e46c888d9704e5 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Thu, 7 Sep 2017 09:12:00 -0600 Subject: [PATCH 44/75] change cocco grazing function to sigmoidal --- src/marbl_parms.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 07c1d0f5..35a11219 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -464,7 +464,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%graze_poc = 0.3_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%f_zoo_detr = 0.18_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above + grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above else grazing(m,n)%z_umax_0_per_day = c0 grazing(m,n)%z_grz = c0 From 088574f2efac5cf602c006082b878cada4444309 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Thu, 7 Sep 2017 13:57:20 -0600 Subject: [PATCH 45/75] after adding grazing, need to make Km for nuts bigger for coccos/less for sp --- src/marbl_parms.F90 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 35a11219..9860a58c 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -288,7 +288,7 @@ subroutine marbl_parms_set_defaults(km) do n=1,autotroph_cnt select case (trim(autotrophs_config(n)%sname)) case ('sp') - autotrophs(n)%kFe = 0.029e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.03e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.24_r8 ! in marbl_parms framework, see NOTE above @@ -357,11 +357,11 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.015e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.028e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kDOP = 0.05_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.12_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNH4 = 0.01_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.28_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.0_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. From a7891c9aed287d8155a609f7de94d74491dea643 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Thu, 7 Sep 2017 16:32:16 -0600 Subject: [PATCH 46/75] made sp more competitive nutrient-wise --- src/marbl_parms.F90 | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 9860a58c..3eebc9af 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -291,7 +291,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kFe = 0.03e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.24_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.20_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.01_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.0_r8 !!!! added @@ -357,19 +357,19 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.028e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.032e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.28_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kDOP = 0.4_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kCO2 = 0.0_r8 !!!! added Km for CO2 for coccos + autotrophs(n)%kCO2 = 1.5_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 15.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.4_r8 + autotrophs(n)%alphaPI_per_day = 0.37_r8 autotrophs(n)%PCref_per_day = 5.0_r8 - autotrophs(n)%thetaN_max = 2.7_r8 + autotrophs(n)%thetaN_max = 2.5_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 autotrophs(n)%temp_thres = 0.0_r8 From 86c9497c5556af6e3e0f1c5c9f30c8ac352966e0 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Fri, 8 Sep 2017 10:15:27 -0600 Subject: [PATCH 47/75] try making sp with sigmoidal grazing too --- src/marbl_parms.F90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 3eebc9af..ee962483 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -357,10 +357,10 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.032e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.024e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.4_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.25_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 1.5_r8 !!!! added Km for CO2 for coccos @@ -437,7 +437,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%graze_poc = 0.0_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%f_zoo_detr = 0.12_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above + grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above elseif ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & (trim(autotrophs_config(m)%sname).eq.'diat')) then grazing(m,n)%z_umax_0_per_day = 3.05_r8 From 3d94febea922c7193ad77591008789ff654bfd75 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Fri, 8 Sep 2017 14:22:48 -0600 Subject: [PATCH 48/75] changed everyone to sigmoidal grazing --- src/marbl_parms.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index ee962483..b6920d45 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -446,7 +446,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%graze_poc = 0.38_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%f_zoo_detr = 0.24_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above + grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above elseif ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & (trim(autotrophs_config(m)%sname).eq.'diaz')) then grazing(m,n)%z_umax_0_per_day = 3.1_r8 ! in marbl_parms framework, see NOTE above @@ -455,7 +455,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%graze_poc = 0.1_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%f_zoo_detr = 0.12_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above + grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above elseif ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & (trim(autotrophs_config(m)%sname).eq.'cocco')) then grazing(m,n)%z_umax_0_per_day = 3.05_r8 ! in marbl_parms framework, see NOTE above From 33289496050203ef11ae15dab7fe6a61d0f1b25d Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Sat, 9 Sep 2017 14:42:15 -0600 Subject: [PATCH 49/75] made max growth rate for coccos 4.5 d-1, a few other adjustments in parms (too much cocco) --- src/marbl_parms.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index b6920d45..3692a3a3 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -357,7 +357,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.024e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.03e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.4_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.25_r8 ! in marbl_parms framework, see NOTE above @@ -365,10 +365,10 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 1.5_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. - autotrophs(n)%gQfe_0 = 15.0e-6_r8 + autotrophs(n)%gQfe_0 = 25.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 autotrophs(n)%alphaPI_per_day = 0.37_r8 - autotrophs(n)%PCref_per_day = 5.0_r8 + autotrophs(n)%PCref_per_day = 4.5_r8 autotrophs(n)%thetaN_max = 2.5_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 @@ -458,7 +458,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above elseif ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & (trim(autotrophs_config(m)%sname).eq.'cocco')) then - grazing(m,n)%z_umax_0_per_day = 3.05_r8 ! in marbl_parms framework, see NOTE above + grazing(m,n)%z_umax_0_per_day = 3.1_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%z_grz = 1.2_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_zoo = 0.25_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_poc = 0.3_r8 ! in marbl_parms framework, see NOTE above From 5955a8b62085aa0e22b189cee5c61d014c9418e1 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Sun, 10 Sep 2017 10:17:35 -0600 Subject: [PATCH 50/75] lower alphaPI for coccos, higher Kms for coccos, lower KNO3 for sp --- src/marbl_parms.F90 | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 3692a3a3..f80be6cd 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -291,7 +291,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kFe = 0.03e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.20_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.18_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.01_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.0_r8 !!!! added @@ -357,17 +357,17 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.03e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.035e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.4_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.25_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNH4 = 0.012_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.28_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNH4 = 0.014_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kCO2 = 1.5_r8 !!!! added Km for CO2 for coccos + autotrophs(n)%kCO2 = 2.0_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 25.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.37_r8 + autotrophs(n)%alphaPI_per_day = 0.34_r8 autotrophs(n)%PCref_per_day = 4.5_r8 autotrophs(n)%thetaN_max = 2.5_r8 autotrophs(n)%loss_thres = 0.01_r8 @@ -458,7 +458,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above elseif ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & (trim(autotrophs_config(m)%sname).eq.'cocco')) then - grazing(m,n)%z_umax_0_per_day = 3.1_r8 ! in marbl_parms framework, see NOTE above + grazing(m,n)%z_umax_0_per_day = 3.2_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%z_grz = 1.2_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_zoo = 0.25_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_poc = 0.3_r8 ! in marbl_parms framework, see NOTE above From c52ca969753c5fb23433013e77a99e9e73beeabb Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Mon, 11 Sep 2017 08:48:31 -0600 Subject: [PATCH 51/75] coccos were still too much, adjusted alphaPI, PCref, grazing --- src/marbl_parms.F90 | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index f80be6cd..171ca7f6 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -316,7 +316,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%kDOP = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.05_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kSiO3 = 1.6_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kSiO3 = 1.8_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kCO2 = 0.0_r8 !!!! added autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 35.0e-6_r8 @@ -359,16 +359,16 @@ subroutine marbl_parms_set_defaults(km) case ('cocco') autotrophs(n)%kFe = 0.035e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kDOP = 0.4_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kDOP = 0.2_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.28_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.014_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kCO2 = 2.0_r8 !!!! added Km for CO2 for coccos + autotrophs(n)%kCO2 = 2.5_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. autotrophs(n)%gQfe_0 = 25.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.34_r8 - autotrophs(n)%PCref_per_day = 4.5_r8 + autotrophs(n)%alphaPI_per_day = 0.30_r8 + autotrophs(n)%PCref_per_day = 4.4_r8 autotrophs(n)%thetaN_max = 2.5_r8 autotrophs(n)%loss_thres = 0.01_r8 autotrophs(n)%loss_thres2 = 0.0_r8 @@ -431,7 +431,7 @@ subroutine marbl_parms_set_defaults(km) ! Properties that depend on m & n if ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & (trim(autotrophs_config(m)%sname).eq.'sp')) then - grazing(m,n)%z_umax_0_per_day = 3.3_r8 ! in marbl_parms framework, see NOTE above + grazing(m,n)%z_umax_0_per_day = 3.2_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%z_grz = 1.2_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_zoo = 0.3_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_poc = 0.0_r8 ! in marbl_parms framework, see NOTE above @@ -449,7 +449,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above elseif ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & (trim(autotrophs_config(m)%sname).eq.'diaz')) then - grazing(m,n)%z_umax_0_per_day = 3.1_r8 ! in marbl_parms framework, see NOTE above + grazing(m,n)%z_umax_0_per_day = 3.2_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%z_grz = 1.2_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_zoo = 0.3_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_poc = 0.1_r8 ! in marbl_parms framework, see NOTE above From 6a2bfe392b53406ffe5e256e4c7b7776573764db Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Mon, 11 Sep 2017 12:10:11 -0600 Subject: [PATCH 52/75] adjusting parms --- src/marbl_parms.F90 | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 171ca7f6..3f199b4e 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -288,7 +288,7 @@ subroutine marbl_parms_set_defaults(km) do n=1,autotroph_cnt select case (trim(autotrophs_config(n)%sname)) case ('sp') - autotrophs(n)%kFe = 0.03e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.028e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.18_r8 ! in marbl_parms framework, see NOTE above @@ -311,7 +311,7 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('diat') - autotrophs(n)%kFe = 0.12e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.14e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.05_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kDOP = 0.5_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNO3 = 0.5_r8 ! in marbl_parms framework, see NOTE above @@ -357,17 +357,17 @@ subroutine marbl_parms_set_defaults(km) autotrophs(n)%loss_poc = 0.0_r8 case ('cocco') - autotrophs(n)%kFe = 0.035e-3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kFe = 0.032e-3_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kPO4 = 0.005_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kDOP = 0.2_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kNO3 = 0.28_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kDOP = 0.3_r8 ! in marbl_parms framework, see NOTE above + autotrophs(n)%kNO3 = 0.45_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kNH4 = 0.014_r8 ! in marbl_parms framework, see NOTE above autotrophs(n)%kSiO3 = 0.0_r8 ! in marbl_parms framework, see NOTE above - autotrophs(n)%kCO2 = 2.5_r8 !!!! added Km for CO2 for coccos + autotrophs(n)%kCO2 = 2.1_r8 !!!! added Km for CO2 for coccos autotrophs(n)%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. - autotrophs(n)%gQfe_0 = 25.0e-6_r8 + autotrophs(n)%gQfe_0 = 35.0e-6_r8 autotrophs(n)%gQfe_min = 3.0e-6_r8 - autotrophs(n)%alphaPI_per_day = 0.30_r8 + autotrophs(n)%alphaPI_per_day = 0.34_r8 autotrophs(n)%PCref_per_day = 4.4_r8 autotrophs(n)%thetaN_max = 2.5_r8 autotrophs(n)%loss_thres = 0.01_r8 @@ -463,7 +463,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%graze_zoo = 0.25_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_poc = 0.3_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%f_zoo_detr = 0.18_r8 ! in marbl_parms framework, see NOTE above + grazing(m,n)%f_zoo_detr = 0.12_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above else grazing(m,n)%z_umax_0_per_day = c0 From 9ff5a6c9dd20e83d31894f4674a66b3883f29a62 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Tue, 12 Sep 2017 13:59:27 -0600 Subject: [PATCH 53/75] switch back to mm grazing --- src/marbl_parms.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 3f199b4e..79780b2c 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -437,7 +437,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%graze_poc = 0.0_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%f_zoo_detr = 0.12_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above + grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above elseif ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & (trim(autotrophs_config(m)%sname).eq.'diat')) then grazing(m,n)%z_umax_0_per_day = 3.05_r8 @@ -446,7 +446,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%graze_poc = 0.38_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%f_zoo_detr = 0.24_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above + grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above elseif ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & (trim(autotrophs_config(m)%sname).eq.'diaz')) then grazing(m,n)%z_umax_0_per_day = 3.2_r8 ! in marbl_parms framework, see NOTE above @@ -455,7 +455,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%graze_poc = 0.1_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%f_zoo_detr = 0.12_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above + grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above elseif ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & (trim(autotrophs_config(m)%sname).eq.'cocco')) then grazing(m,n)%z_umax_0_per_day = 3.2_r8 ! in marbl_parms framework, see NOTE above @@ -464,7 +464,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%graze_poc = 0.3_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%f_zoo_detr = 0.12_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above + grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above else grazing(m,n)%z_umax_0_per_day = c0 grazing(m,n)%z_grz = c0 From d7685f95024bc96abc6c761b2e696e1a5fea44d2 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Wed, 13 Sep 2017 10:46:10 -0600 Subject: [PATCH 54/75] grazing parms identical between sp and cocco, changing back to sigmoidal grazing --- src/marbl_parms.F90 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 79780b2c..00388877 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -437,7 +437,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%graze_poc = 0.0_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%f_zoo_detr = 0.12_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above + grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above elseif ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & (trim(autotrophs_config(m)%sname).eq.'diat')) then grazing(m,n)%z_umax_0_per_day = 3.05_r8 @@ -446,7 +446,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%graze_poc = 0.38_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%f_zoo_detr = 0.24_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above + grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above elseif ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & (trim(autotrophs_config(m)%sname).eq.'diaz')) then grazing(m,n)%z_umax_0_per_day = 3.2_r8 ! in marbl_parms framework, see NOTE above @@ -455,16 +455,16 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%graze_poc = 0.1_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%f_zoo_detr = 0.12_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above + grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above elseif ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & (trim(autotrophs_config(m)%sname).eq.'cocco')) then grazing(m,n)%z_umax_0_per_day = 3.2_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%z_grz = 1.2_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%graze_zoo = 0.25_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%graze_poc = 0.3_r8 ! in marbl_parms framework, see NOTE above + grazing(m,n)%graze_zoo = 0.3_r8 ! in marbl_parms framework, see NOTE above + grazing(m,n)%graze_poc = 0.0_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%f_zoo_detr = 0.12_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above + grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above else grazing(m,n)%z_umax_0_per_day = c0 grazing(m,n)%z_grz = c0 From a3efd24fbbd6bb12c6d4ea12b90f01adad4dbc22 Mon Sep 17 00:00:00 2001 From: kristenkrumhardt Date: Wed, 13 Sep 2017 14:23:41 -0600 Subject: [PATCH 55/75] identical sp and cocco grazing parms, michaelis-menten grazing --- src/marbl_parms.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/marbl_parms.F90 b/src/marbl_parms.F90 index 00388877..1b2f0316 100644 --- a/src/marbl_parms.F90 +++ b/src/marbl_parms.F90 @@ -437,7 +437,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%graze_poc = 0.0_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%f_zoo_detr = 0.12_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above + grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above elseif ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & (trim(autotrophs_config(m)%sname).eq.'diat')) then grazing(m,n)%z_umax_0_per_day = 3.05_r8 @@ -446,7 +446,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%graze_poc = 0.38_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%f_zoo_detr = 0.24_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above + grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above elseif ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & (trim(autotrophs_config(m)%sname).eq.'diaz')) then grazing(m,n)%z_umax_0_per_day = 3.2_r8 ! in marbl_parms framework, see NOTE above @@ -455,7 +455,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%graze_poc = 0.1_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%f_zoo_detr = 0.12_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above + grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above elseif ((trim(zooplankton_config(n)%sname).eq.'zoo').and. & (trim(autotrophs_config(m)%sname).eq.'cocco')) then grazing(m,n)%z_umax_0_per_day = 3.2_r8 ! in marbl_parms framework, see NOTE above @@ -464,7 +464,7 @@ subroutine marbl_parms_set_defaults(km) grazing(m,n)%graze_poc = 0.0_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%graze_doc = 0.06_r8 ! in marbl_parms framework, see NOTE above grazing(m,n)%f_zoo_detr = 0.12_r8 ! in marbl_parms framework, see NOTE above - grazing(m,n)%grazing_function = grz_fnc_sigmoidal ! in marbl_parms framework, see NOTE above + grazing(m,n)%grazing_function = grz_fnc_michaelis_menten ! in marbl_parms framework, see NOTE above else grazing(m,n)%z_umax_0_per_day = c0 grazing(m,n)%z_grz = c0 From 77156416215c3b242ffdc5f812f7c867bab14b46 Mon Sep 17 00:00:00 2001 From: Kristen Krumhardt Date: Wed, 20 Sep 2017 10:18:21 -0600 Subject: [PATCH 56/75] making changes in the marbl master for coccos --- src/marbl_mod.F90 | 2 +- src/marbl_settings_mod.F90 | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 index 0c121c9a..51cde821 100644 --- a/src/marbl_mod.F90 +++ b/src/marbl_mod.F90 @@ -2762,7 +2762,7 @@ subroutine marbl_compute_function_scaling(column_temperature, Tfunc, Tfunc_cocco ! growth, mort and grazing rates scaled by Tfunc where they are computed !----------------------------------------------------------------------- - use marbl_parms, only : Q_10 + use marbl_settings_mod, only : Q_10 use marbl_constants_mod, only : Tref use marbl_constants_mod, only : c10 diff --git a/src/marbl_settings_mod.F90 b/src/marbl_settings_mod.F90 index f02695d5..a6f9a28e 100644 --- a/src/marbl_settings_mod.F90 +++ b/src/marbl_settings_mod.F90 @@ -149,7 +149,8 @@ module marbl_settings_mod gQsi_0 = 0.137_r8, & !initial Si/C ratio for growth gQsi_max = 0.685_r8, & !max Si/C ratio for growth gQsi_min = 0.0457_r8, & !min Si/C ratio for growth - QCaCO3_max = 0.4_r8, & !max QCaCO3 + QCaCO3_max = 0.4_r8, & !max QCaCO3 for implicit calcifiers + QCaCO3_max_exp = 2.0_r8, & !max QCaCO3 for explicit calcifiers ! parameters in GalbraithMartiny Pquota Model^M PquotaSlope = 7.0_r8, & PquotaIntercept = 5.571_r8, & From f25c9e788926b51a051e2a42d072b7368770bac5 Mon Sep 17 00:00:00 2001 From: Kristen Krumhardt Date: Fri, 16 Mar 2018 12:13:28 -0600 Subject: [PATCH 57/75] Fixed picpoc calculations so they cannot go negative --- src/marbl_mod.F90 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 index 51cde821..4ed64fdc 100644 --- a/src/marbl_mod.F90 +++ b/src/marbl_mod.F90 @@ -2775,8 +2775,8 @@ subroutine marbl_compute_function_scaling(column_temperature, Tfunc, Tfunc_cocco !Tfunc_cocco = Q_10**(((column_temperature + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) -Tfunc_cocco = 0.085 * ((column_temperature)**(0.53)) - +!Tfunc_cocco = 0.085 * ((column_temperature)**(0.53)) +Tfunc_cocco = 0.12 * ((column_temperature)**(0.4)) !Tfunc_cocco = 1.8**(((column_temperature + T0_Kelvin) - (33.0 + T0_Kelvin)) / c10) end subroutine marbl_compute_function_scaling @@ -3215,16 +3215,16 @@ subroutine marbl_compute_autotroph_calcification (auto_cnt, autotrophs, & !temperature effect if (temperature < 11.) then - picpoc = 0.104 * temperature - 0.108 + picpoc = max(0.,0.104 * temperature - 0.108) else picpoc = 1. end if !CO2 effect - picpoc = -0.0136 * CO2 + picpoc + 0.21 + picpoc = max(0.,-0.0136 * CO2 + picpoc + 0.21) !nut lim effect (maybe just making this for P-limited areas? if (Plim(auto_ind) == f_nut(auto_ind) then..) - picpoc = -0.48 * Plim(auto_ind) + picpoc + 0.48 + picpoc = max(0.,-0.48 * Plim(auto_ind) + picpoc + 0.48) !multiply cocco growth rate by picpoc to get CaCO3 formation From 551d159bb444cefb4a5f7de29b46c211d5afa163 Mon Sep 17 00:00:00 2001 From: Kristen Krumhardt Date: Tue, 24 Apr 2018 11:04:02 -0600 Subject: [PATCH 58/75] Slightly modified Tfunc_cocco, Tfunc_cocco modifies cocco mortality, CaCO2 dissolution in zooplankton guts increased to 0.7 --- src/marbl_mod.F90 | 33 +++++++++++++++++++++++---------- src/marbl_settings_mod.F90 | 2 +- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 index 4ed64fdc..5dd6f7c8 100644 --- a/src/marbl_mod.F90 +++ b/src/marbl_mod.F90 @@ -675,14 +675,14 @@ subroutine marbl_set_interior_forcing( & autotroph_secondary_species(:, k)) call marbl_compute_autotroph_loss(autotroph_cnt, autotrophs, & - Tfunc(k), autotroph_secondary_species(:, k)) + Tfunc(k), Tfunc_cocco(k), autotroph_secondary_species(:, k)) call marbl_compute_Zprime(k, domain, & zooplankton_cnt, zooplankton, zooplankton_local(:, k)%C, & Tfunc(k), zooplankton_secondary_species(:, k)) call marbl_compute_grazing (autotroph_cnt, zooplankton_cnt, & - max_grazer_prey_cnt, autotrophs, Tfunc(k), zooplankton_local(:, k), & + max_grazer_prey_cnt, autotrophs, Tfunc(k), Tfunc_cocco(k), zooplankton_local(:, k), & zooplankton_secondary_species(:, k), & autotroph_secondary_species(:, k)) @@ -2297,7 +2297,7 @@ subroutine marbl_setup_local_tracers(column_kmt, marbl_tracer_indices, autotroph ! autotroph consistency check call marbl_consistency_check_autotrophs(autotroph_cnt, column_kmt, & - marbl_tracer_indices, autotroph_local(:,1:column_kmt)) + marbl_tracer_indices, autotrophs, autotroph_local(:,1:column_kmt)) ! set totalChl_local totalChl_local = sum(autotroph_local(:,:)%Chl, dim=1) @@ -2307,7 +2307,7 @@ end subroutine marbl_setup_local_tracers !*********************************************************************** subroutine marbl_consistency_check_autotrophs(auto_cnt, column_kmt, & - marbl_tracer_indices, autotroph_local) + marbl_tracer_indices, autotrophs, autotroph_local) !----------------------------------------------------------------------- ! If any phyto box are zero, set others to zeros. @@ -2318,6 +2318,7 @@ subroutine marbl_consistency_check_autotrophs(auto_cnt, column_kmt, & integer(int_kind) , intent(in) :: auto_cnt ! autotroph_cnt integer(int_kind) , intent(in) :: column_kmt ! number of active model layers type(marbl_tracer_index_type) , intent(in) :: marbl_tracer_indices + type(autotroph_type) , intent(in) :: autotrophs(:) type(autotroph_local_type) , intent(inout) :: autotroph_local(autotroph_cnt, column_kmt) !----------------------------------------------------------------------- @@ -2774,9 +2775,10 @@ subroutine marbl_compute_function_scaling(column_temperature, Tfunc, Tfunc_cocco -!Tfunc_cocco = Q_10**(((column_temperature + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) +!Tfunc_cocco = Tfunc !Q_10**(((column_temperature + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) !Tfunc_cocco = 0.085 * ((column_temperature)**(0.53)) -Tfunc_cocco = 0.12 * ((column_temperature)**(0.4)) +!Tfunc_cocco = max(0.158, 0.12 * ((column_temperature)**(0.4))) +Tfunc_cocco = 0.12_r8 * (max(0.0_r8, min(column_temperature,27.0_r8))**(0.4_r8)) !Tfunc_cocco = 1.8**(((column_temperature + T0_Kelvin) - (33.0 + T0_Kelvin)) / c10) end subroutine marbl_compute_function_scaling @@ -3281,7 +3283,7 @@ end subroutine marbl_compute_autotroph_nfixation !*********************************************************************** subroutine marbl_compute_autotroph_loss (auto_cnt, autotrophs, Tfunc, & - autotroph_secondary_species) + Tfunc_cocco, autotroph_secondary_species) !----------------------------------------------------------------------- ! Compute autotroph-loss, autotroph aggregation loss and routine of @@ -3291,6 +3293,7 @@ subroutine marbl_compute_autotroph_loss (auto_cnt, autotrophs, Tfunc, & integer(int_kind) , intent(in) :: auto_cnt type(autotroph_type) , intent(in) :: autotrophs(auto_cnt) real(r8) , intent(in) :: Tfunc + real(r8) , intent(in) :: Tfunc_cocco type(autotroph_secondary_species_type) , intent(inout) :: autotroph_secondary_species(auto_cnt) !----------------------------------------------------------------------- @@ -3315,7 +3318,11 @@ subroutine marbl_compute_autotroph_loss (auto_cnt, autotrophs, Tfunc, & ! autotroph agg loss !----------------------------------------------------------------------- - auto_loss(auto_ind) = autotrophs(auto_ind)%mort * Pprime(auto_ind) * Tfunc + if (autotrophs(auto_ind)%exp_calcifier) then + auto_loss(auto_ind) = autotrophs(auto_ind)%mort * Pprime(auto_ind) * Tfunc_cocco + else + auto_loss(auto_ind) = autotrophs(auto_ind)%mort * Pprime(auto_ind) * Tfunc + end if auto_agg(auto_ind) = min((autotrophs(auto_ind)%agg_rate_max * dps) * Pprime(auto_ind), & autotrophs(auto_ind)%mort2 * Pprime(auto_ind)**1.75_r8) @@ -3342,7 +3349,7 @@ end subroutine marbl_compute_autotroph_loss !*********************************************************************** subroutine marbl_compute_grazing (auto_cnt, zoo_cnt, max_grazer_prey_cnt, & - autotrophs, Tfunc, zooplankton_loc, & + autotrophs, Tfunc, Tfunc_cocco, zooplankton_loc, & zooplankton_secondary_species, autotroph_secondary_species) !----------------------------------------------------------------------- @@ -3367,6 +3374,7 @@ subroutine marbl_compute_grazing (auto_cnt, zoo_cnt, max_grazer_prey_cnt, & integer(int_kind) , intent(in) :: max_grazer_prey_cnt type(autotroph_type) , intent(in) :: autotrophs(auto_cnt) real(r8) , intent(in) :: Tfunc + real(r8) , intent(in) :: Tfunc_cocco type(zooplankton_local_type) , intent(in) :: zooplankton_loc(zoo_cnt) type(zooplankton_secondary_species_type) , intent(inout) :: zooplankton_secondary_species(zoo_cnt) type(autotroph_secondary_species_type) , intent(inout) :: autotroph_secondary_species(auto_cnt) @@ -3441,8 +3449,13 @@ subroutine marbl_compute_grazing (auto_cnt, zoo_cnt, max_grazer_prey_cnt, & case (grz_fnc_michaelis_menten) if (work1 > c0) then - graze_rate = grazing(prey_ind, pred_ind)%z_umax_0 * Tfunc * zooplankton_loc(pred_ind)%C & + if (autotrophs(auto_ind)%exp_calcifier) then + graze_rate = grazing(prey_ind, pred_ind)%z_umax_0 * Tfunc * zooplankton_loc(pred_ind)%C & + * ( work1 / (work1 + grazing(prey_ind, pred_ind)%z_grz) ) + else + graze_rate = grazing(prey_ind, pred_ind)%z_umax_0 * Tfunc * zooplankton_loc(pred_ind)%C & * ( work1 / (work1 + grazing(prey_ind, pred_ind)%z_grz) ) + end if else graze_rate = c0 end if diff --git a/src/marbl_settings_mod.F90 b/src/marbl_settings_mod.F90 index a6f9a28e..0f214240 100644 --- a/src/marbl_settings_mod.F90 +++ b/src/marbl_settings_mod.F90 @@ -134,7 +134,7 @@ module marbl_settings_mod f_graze_sp_poc_lim = 0.36_r8, & f_photosp_CaCO3 = 0.40_r8, & ! proportionality between small phyto ! production and CaCO3 production - f_graze_CaCO3_remin = 0.33_r8, & ! fraction of spCaCO3 grazing which is remin + f_graze_CaCO3_remin = 0.7_r8, & ! fraction of spCaCO3 grazing which is remin f_graze_si_remin = 0.50_r8, & ! fraction of diatom Si grazing which is remin f_toDON = 0.70_r8, & ! fraction DON relative to DOC f_toDOP = 0.15_r8 ! fraction of remaining_P to DOP From 9744532748807b334fe75430ac9e4ca3476d93a8 Mon Sep 17 00:00:00 2001 From: Kristen Krumhardt Date: Tue, 24 Apr 2018 14:06:28 -0600 Subject: [PATCH 59/75] fixed a few bugs concerning C limitation in marbl_diagnostics; fixed bug concerning temperature in marbl_mod; changed default settings.yaml to accomodate coccos --- autogenerated_src/default_settings.json | 12 ++++++++++++ src/default_settings.yaml | 10 ++++++++++ src/marbl_diagnostics_mod.F90 | 8 ++------ src/marbl_mod.F90 | 2 +- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/autogenerated_src/default_settings.json b/autogenerated_src/default_settings.json index c7e2b398..49593e45 100644 --- a/autogenerated_src/default_settings.json +++ b/autogenerated_src/default_settings.json @@ -152,6 +152,18 @@ "subcategory": "10. autotrophs", "units": "non-numeric" }, + "kCO2": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0, + "((autotroph_sname)) == \"diaz\"": 0, + "((autotroph_sname)) == \"sp\"": 0, + "default": "1e34" + }, + "longname": "CO2 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, "kDOP": { "datatype": "real", "default_value": { diff --git a/src/default_settings.yaml b/src/default_settings.yaml index 31aebb5e..b2257734 100644 --- a/src/default_settings.yaml +++ b/src/default_settings.yaml @@ -599,6 +599,16 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : 0.03e-3 ((autotroph_sname)) == "diat" : 0.06e-3 ((autotroph_sname)) == "diaz" : 0.045e-3 + kCO2 : + longname : CO2 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0 + ((autotroph_sname)) == "diat" : 0 + ((autotroph_sname)) == "diaz" : 0 kPO4 : longname : PO4 uptake half-sat constant subcategory : 10. autotrophs diff --git a/src/marbl_diagnostics_mod.F90 b/src/marbl_diagnostics_mod.F90 index 8fdec844..dea5ecbf 100644 --- a/src/marbl_diagnostics_mod.F90 +++ b/src/marbl_diagnostics_mod.F90 @@ -4566,8 +4566,8 @@ subroutine store_diagnostics_autotrophs(marbl_domain, & near_surface_integral=diags(ind%SiO3_lim_Cweight_avg_100m(n))%field_2d(1)) endif - diags(ind%C_lim_surf(n))%field_2d(1) = autotroph_secondary_species(n,1)%VCtot - limterm = autotroph_secondary_species(n,:)%VCtot * autotrophC_weight(:) + diags(ind%C_lim_surf(n))%field_2d(1) = autotroph_secondary_species(n,1)%VCO2 + limterm = autotroph_secondary_species(n,:)%VCO2 * autotrophC_weight(:) call compute_vertical_integrals(limterm, delta_z, kmt, & near_surface_integral=diags(ind%C_lim_Cweight_avg_100m(n))%field_2d(1)) @@ -4579,10 +4579,6 @@ subroutine store_diagnostics_autotrophs(marbl_domain, & if (ind%Qp(n).ne.-1) then diags(ind%Qp(n))%field_3d(:, 1) = autotroph_secondary_species(n,:)%Qp end if -!!!!!!!add for coccos - if (ind%C_lim(n).ne.-1) then - diags(ind%C_lim(n))%field_3d(:, 1) = autotroph_secondary_species(n,:)%VCO2 - end if diags(ind%photoNO3(n))%field_3d(:, 1) = autotroph_secondary_species(n,:)%NO3_V diags(ind%photoNH4(n))%field_3d(:, 1) = autotroph_secondary_species(n,:)%NH4_V diff --git a/src/marbl_mod.F90 b/src/marbl_mod.F90 index bad6ceb3..a400f81e 100644 --- a/src/marbl_mod.F90 +++ b/src/marbl_mod.F90 @@ -2770,7 +2770,7 @@ subroutine marbl_compute_function_scaling(temperature, Tfunc, Tfunc_cocco ) !Tfunc_cocco = Tfunc !Q_10**(((column_temperature + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) !Tfunc_cocco = 0.085 * ((column_temperature)**(0.53)) !Tfunc_cocco = max(0.158, 0.12 * ((column_temperature)**(0.4))) -Tfunc_cocco = 0.12_r8 * (max(0.0_r8, min(column_temperature,27.0_r8))**(0.4_r8)) +Tfunc_cocco = 0.12_r8 * (max(0.0_r8, min(temperature,27.0_r8))**(0.4_r8)) !Tfunc_cocco = 1.8**(((column_temperature + T0_Kelvin) - (33.0 + T0_Kelvin)) / c10) end subroutine marbl_compute_function_scaling From 06a95b1f3b0e35c7672803fde83d2c85597c5ff3 Mon Sep 17 00:00:00 2001 From: Kristen Krumhardt Date: Mon, 23 Jul 2018 13:30:22 -0600 Subject: [PATCH 60/75] add CaCO3_prod to output, add cocco_C_lim to output --- autogenerated_src/default_diagnostics.json | 22 +++++++++++++++++++++- src/default_diagnostics.yaml | 18 +++++++++++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/autogenerated_src/default_diagnostics.json b/autogenerated_src/default_diagnostics.json index c835b183..184d85dc 100644 --- a/autogenerated_src/default_diagnostics.json +++ b/autogenerated_src/default_diagnostics.json @@ -1,4 +1,24 @@ { + "((autotroph_sname))_C_lim_Cweight_avg_100m": { + "dependencies": { + "((autotroph_calcifier))": true + }, + "frequency": "medium", + "longname": "((autotroph_lname)) C Limitation, carbon biomass weighted average over 0-100m", + "operator": "average", + "units": 1, + "vertical_grid": "none" + }, + "((autotroph_sname))_C_lim_surf": { + "dependencies": { + "((autotroph_calcifier))": true + }, + "frequency": "medium", + "longname": "((autotroph_lname)) C Limitation, Surface", + "operator": "average", + "units": 1, + "vertical_grid": "none" + }, "((autotroph_sname))_CaCO3_form": { "dependencies": { "((autotroph_calcifier))": true @@ -1004,7 +1024,7 @@ "vertical_grid": "layer_avg" }, "CaCO3_PROD": { - "frequency": "low", + "frequency": "medium", "longname": "CaCO3 Production", "operator": "average", "units": "mmol/m^3/s", diff --git a/src/default_diagnostics.yaml b/src/default_diagnostics.yaml index 5c7c589f..0d9300fe 100644 --- a/src/default_diagnostics.yaml +++ b/src/default_diagnostics.yaml @@ -912,7 +912,7 @@ CaCO3_PROD : longname : CaCO3 Production units : mmol/m^3/s vertical_grid : layer_avg - frequency : low + frequency : medium operator : average CaCO3_REMIN : longname : CaCO3 Remineralization @@ -1302,6 +1302,22 @@ CISO_eps_dic_g : # Per-autotroph Diagnostics # ############################# +((autotroph_sname))_C_lim_surf : + dependencies : + ((autotroph_calcifier)) : true + longname : ((autotroph_lname)) C Limitation, Surface + units : 1 + vertical_grid : none + frequency : medium + operator : average +((autotroph_sname))_C_lim_Cweight_avg_100m : + dependencies : + ((autotroph_calcifier)) : true + longname : ((autotroph_lname)) C Limitation, carbon biomass weighted average over 0-100m + units : 1 + vertical_grid : none + frequency : medium + operator : average ((autotroph_sname))_N_lim_surf : longname : ((autotroph_lname)) N Limitation, Surface units : 1 From 8b326ea34b9120007ec8d3b32fa092331948d736 Mon Sep 17 00:00:00 2001 From: Kristen Krumhardt Date: Wed, 20 Feb 2019 14:14:06 -0700 Subject: [PATCH 61/75] add kco2 to autotroph settings --- defaults/json/settings_latest.json | 12 ++++++++++++ defaults/settings_latest.yaml | 10 ++++++++++ 2 files changed, 22 insertions(+) diff --git a/defaults/json/settings_latest.json b/defaults/json/settings_latest.json index dddcc333..9671a194 100644 --- a/defaults/json/settings_latest.json +++ b/defaults/json/settings_latest.json @@ -152,6 +152,18 @@ "subcategory": "10. autotrophs", "units": "non-numeric" }, + "kCO2": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0, + "((autotroph_sname)) == \"diaz\"": 0, + "((autotroph_sname)) == \"sp\"": 0, + "default": "1e34" + }, + "longname": "CO2 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, "kDOP": { "datatype": "real", "default_value": { diff --git a/defaults/settings_latest.yaml b/defaults/settings_latest.yaml index c333c0ab..f76a0b29 100644 --- a/defaults/settings_latest.yaml +++ b/defaults/settings_latest.yaml @@ -709,6 +709,16 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : 0.03e-3 ((autotroph_sname)) == "diat" : 0.07e-3 ((autotroph_sname)) == "diaz" : 0.045e-3 + kCO2 : + longname : CO2 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0 + ((autotroph_sname)) == "diat" : 0 + ((autotroph_sname)) == "diaz" : 0 kPO4 : longname : PO4 uptake half-sat constant subcategory : 10. autotrophs From 4727ca0f3a98f1a4068b46e77d6256f1c37f9744 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Thu, 30 May 2019 16:48:37 -0600 Subject: [PATCH 62/75] Add is_carbon_limited to autotroph_settings_type Also, only include C_lim diagnostics for carbon limited diagnostics. --- MARBL_tools/MARBL_share.py | 2 + defaults/diagnostics_latest.yaml | 4 +- defaults/json/diagnostics_latest.json | 4 +- defaults/json/settings_cesm2.0.json | 7 ++++ defaults/json/settings_latest.json | 7 ++++ defaults/settings_cesm2.0.yaml | 6 +++ defaults/settings_latest.yaml | 6 +++ src/marbl_diagnostics_mod.F90 | 54 ++++++++++++++------------- src/marbl_interior_tendency_mod.F90 | 5 +-- src/marbl_pft_mod.F90 | 5 +++ src/marbl_settings_mod.F90 | 10 +++++ 11 files changed, 78 insertions(+), 32 deletions(-) diff --git a/MARBL_tools/MARBL_share.py b/MARBL_tools/MARBL_share.py index cfc26fd7..184e7d47 100644 --- a/MARBL_tools/MARBL_share.py +++ b/MARBL_tools/MARBL_share.py @@ -96,11 +96,13 @@ def expand_template_value(key_name, MARBL_settings, unprocessed_dict, check_freq imp_calcifier = (MARBL_settings.settings_dict[auto_prefix + "imp_calcifier"].strip('"')) exp_calcifier = (MARBL_settings.settings_dict[auto_prefix + "exp_calcifier"].strip('"')) silicifier = (MARBL_settings.settings_dict[auto_prefix + "silicifier"].strip('"')) + is_carbon_limited = (MARBL_settings.settings_dict[auto_prefix + "is_carbon_limited"].strip('"')) Nfixer = (MARBL_settings.settings_dict[auto_prefix + "Nfixer"].strip('"')) # Add values to template_fill_dict template_fill_dict['((autotroph_lname))'] = MARBL_settings.settings_dict[auto_prefix + "lname"].strip('"') template_fill_dict['((autotroph_calcifier))'] = ".true." in [imp_calcifier, exp_calcifier] template_fill_dict['((autotroph_silicifier))'] = (silicifier == ".true.") + template_fill_dict['((autotroph_is_carbon_limited))'] = (is_carbon_limited== ".true.") template_fill_dict['((autotroph_Nfixer))'] = (Nfixer == ".true.") elif fill_source == 'zooplankton': zoo_prefix = "zooplankton_settings(%d)%%" % item diff --git a/defaults/diagnostics_latest.yaml b/defaults/diagnostics_latest.yaml index 0985e022..1542057f 100644 --- a/defaults/diagnostics_latest.yaml +++ b/defaults/diagnostics_latest.yaml @@ -1350,7 +1350,7 @@ CISO_eps_dic_g : ((autotroph_sname))_C_lim_surf : dependencies : - ((autotroph_calcifier)) : true + ((autotroph_is_carbon_limited)) : true longname : ((autotroph_lname)) C Limitation, Surface units : 1 vertical_grid : none @@ -1358,7 +1358,7 @@ CISO_eps_dic_g : operator : average ((autotroph_sname))_C_lim_Cweight_avg_100m : dependencies : - ((autotroph_calcifier)) : true + ((autotroph_is_carbon_limited)) : true longname : ((autotroph_lname)) C Limitation, carbon biomass weighted average over 0-100m units : 1 vertical_grid : none diff --git a/defaults/json/diagnostics_latest.json b/defaults/json/diagnostics_latest.json index 370748bf..9d30dc1b 100644 --- a/defaults/json/diagnostics_latest.json +++ b/defaults/json/diagnostics_latest.json @@ -1,7 +1,7 @@ { "((autotroph_sname))_C_lim_Cweight_avg_100m": { "dependencies": { - "((autotroph_calcifier))": true + "((autotroph_is_carbon_limited))": true }, "frequency": "medium", "longname": "((autotroph_lname)) C Limitation, carbon biomass weighted average over 0-100m", @@ -11,7 +11,7 @@ }, "((autotroph_sname))_C_lim_surf": { "dependencies": { - "((autotroph_calcifier))": true + "((autotroph_is_carbon_limited))": true }, "frequency": "medium", "longname": "((autotroph_lname)) C Limitation, Surface", diff --git a/defaults/json/settings_cesm2.0.json b/defaults/json/settings_cesm2.0.json index b0983c3d..e97afabd 100644 --- a/defaults/json/settings_cesm2.0.json +++ b/defaults/json/settings_cesm2.0.json @@ -164,6 +164,13 @@ "subcategory": "10. autotrophs", "units": "non-numeric" }, + "is_carbon_limited": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Flag set to true if autotroph is carbon limited", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, "kCO2": { "datatype": "real", "default_value": { diff --git a/defaults/json/settings_latest.json b/defaults/json/settings_latest.json index d0c7d96d..b1318a3d 100644 --- a/defaults/json/settings_latest.json +++ b/defaults/json/settings_latest.json @@ -164,6 +164,13 @@ "subcategory": "10. autotrophs", "units": "non-numeric" }, + "is_carbon_limited": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Flag set to true if autotroph is carbon limited", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, "kCO2": { "datatype": "real", "default_value": { diff --git a/defaults/settings_cesm2.0.yaml b/defaults/settings_cesm2.0.yaml index e77c417a..3da74d99 100644 --- a/defaults/settings_cesm2.0.yaml +++ b/defaults/settings_cesm2.0.yaml @@ -746,6 +746,12 @@ PFT_derived_types : default_value : default : .false. ((autotroph_sname)) == "diat" : .true. + is_carbon_limited : + longname : Flag set to true if autotroph is carbon limited + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : .false. kFe : longname : Fe uptake half-sat constant subcategory : 10. autotrophs diff --git a/defaults/settings_latest.yaml b/defaults/settings_latest.yaml index d2a5c01a..faecf9dd 100644 --- a/defaults/settings_latest.yaml +++ b/defaults/settings_latest.yaml @@ -747,6 +747,12 @@ PFT_derived_types : default_value : default : .false. ((autotroph_sname)) == "diat" : .true. + is_carbon_limited : + longname : Flag set to true if autotroph is carbon limited + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : .false. kFe : longname : Fe uptake half-sat constant subcategory : 10. autotrophs diff --git a/src/marbl_diagnostics_mod.F90 b/src/marbl_diagnostics_mod.F90 index 28548825..3cab87da 100644 --- a/src/marbl_diagnostics_mod.F90 +++ b/src/marbl_diagnostics_mod.F90 @@ -963,28 +963,30 @@ subroutine marbl_diagnostics_init( & ind%SiO3_lim_Cweight_avg_100m(n) = -1 end if - lname = trim(autotroph_settings(n)%lname) // ' C Limitation, Surface' - sname = trim(autotroph_settings(n)%sname) // '_C_lim_surf' - units = '1' - vgrid = 'none' - truncate = .false. - call diags%add_diagnostic(lname, sname, units, vgrid, truncate, & - ind%C_lim_surf(n), marbl_status_log) - if (marbl_status_log%labort_marbl) then - call marbl_logging_add_diagnostics_error(marbl_status_log, sname, subname) - return - end if + if (autotroph_settings(n)%is_carbon_limited) then + lname = trim(autotroph_settings(n)%lname) // ' C Limitation, Surface' + sname = trim(autotroph_settings(n)%sname) // '_C_lim_surf' + units = '1' + vgrid = 'none' + truncate = .false. + call diags%add_diagnostic(lname, sname, units, vgrid, truncate, & + ind%C_lim_surf(n), marbl_status_log) + if (marbl_status_log%labort_marbl) then + call marbl_logging_add_diagnostics_error(marbl_status_log, sname, subname) + return + end if - lname = trim(autotroph_settings(n)%lname) // ' C Limitation, carbon biomass weighted average over 0-100m' - sname = trim(autotroph_settings(n)%sname) // '_C_lim_Cweight_avg_100m' - units = '1' - vgrid = 'none' - truncate = .false. - call diags%add_diagnostic(lname, sname, units, vgrid, truncate, & - ind%C_lim_Cweight_avg_100m(n), marbl_status_log) - if (marbl_status_log%labort_marbl) then - call marbl_logging_add_diagnostics_error(marbl_status_log, sname, subname) - return + lname = trim(autotroph_settings(n)%lname) // ' C Limitation, carbon biomass weighted average over 0-100m' + sname = trim(autotroph_settings(n)%sname) // '_C_lim_Cweight_avg_100m' + units = '1' + vgrid = 'none' + truncate = .false. + call diags%add_diagnostic(lname, sname, units, vgrid, truncate, & + ind%C_lim_Cweight_avg_100m(n), marbl_status_log) + if (marbl_status_log%labort_marbl) then + call marbl_logging_add_diagnostics_error(marbl_status_log, sname, subname) + return + end if end if lname = trim(autotroph_settings(n)%lname) // ' Light Limitation, Surface' @@ -3533,10 +3535,12 @@ subroutine store_diagnostics_autotrophs(marbl_domain, & near_surface_integral=diags(ind%SiO3_lim_Cweight_avg_100m(n))%field_2d(1)) endif - diags(ind%C_lim_surf(n))%field_2d(1) = autotroph_derived_terms%VCO2(n,1) - limterm = autotroph_derived_terms%VCO2(n,:) * autotrophC_weight(:) - call marbl_diagnostics_share_compute_vertical_integrals(limterm, delta_z, kmt, & - near_surface_integral=diags(ind%C_lim_Cweight_avg_100m(n))%field_2d(1)) + if (autotroph_settings(n)%is_carbon_limited) then + diags(ind%C_lim_surf(n))%field_2d(1) = autotroph_derived_terms%VCO2(n,1) + limterm = autotroph_derived_terms%VCO2(n,:) * autotrophC_weight(:) + call marbl_diagnostics_share_compute_vertical_integrals(limterm, delta_z, kmt, & + near_surface_integral=diags(ind%C_lim_Cweight_avg_100m(n))%field_2d(1)) + end if diags(ind%light_lim_surf(n))%field_2d(1) = autotroph_derived_terms%light_lim(n,1) limterm = autotroph_derived_terms%light_lim(n,:) * autotrophC_weight(:) diff --git a/src/marbl_interior_tendency_mod.F90 b/src/marbl_interior_tendency_mod.F90 index 746e29be..b2db13d4 100644 --- a/src/marbl_interior_tendency_mod.F90 +++ b/src/marbl_interior_tendency_mod.F90 @@ -1511,8 +1511,7 @@ subroutine compute_autotroph_uptake(km, marbl_tracer_indices, tracer_local, carb ! AUTOTROPHS Nfixer => autotroph_settings(:)%Nfixer, & silicifier => autotroph_settings(:)%silicifier, & - imp_calcifier => autotroph_settings(:)%imp_calcifier, & - exp_calcifier => autotroph_settings(:)%exp_calcifier, & + is_carbon_limited => autotroph_settings(:)%is_carbon_limited, & kNO3 => autotroph_settings(:)%kNO3, & kNH4 => autotroph_settings(:)%kNH4, & kFe => autotroph_settings(:)%kFe, & @@ -1560,7 +1559,7 @@ subroutine compute_autotroph_uptake(km, marbl_tracer_indices, tracer_local, carb f_nut(auto_ind, :) = min(f_nut(auto_ind, :), VSiO3(auto_ind, :)) endif - if (exp_calcifier(auto_ind)) then + if (is_carbon_limited(auto_ind)) then VCO2(auto_ind,:) = CO2_loc / (CO2_loc + kCO2(auto_ind)) f_nut(auto_ind, :) = min(f_nut(auto_ind, :), VCO2(auto_ind, :)) end if diff --git a/src/marbl_pft_mod.F90 b/src/marbl_pft_mod.F90 index 72c63f31..f5a8a837 100644 --- a/src/marbl_pft_mod.F90 +++ b/src/marbl_pft_mod.F90 @@ -23,6 +23,7 @@ module marbl_pft_mod logical(log_kind) :: imp_calcifier ! flag set to true if this autotroph implicitly handles calcification logical(log_kind) :: exp_calcifier ! flag set to true if this autotroph explicitly handles calcification logical(log_kind) :: silicifier ! flag set to true if this autotroph is a silicifier + logical(log_kind) :: is_carbon_limited ! flag set to true if this autotroph is carbon limited real(r8) :: kFe, kPO4, kDOP, kNO3, kNH4, kSiO3, kCO2 ! nutrient uptake half-sat constants real(r8) :: Qp_fixed ! P/C ratio for fixed P/C ratios @@ -112,6 +113,7 @@ subroutine autotroph_set_to_default(self, autotroph_id, marbl_status_log) self%imp_calcifier = .true. self%exp_calcifier = .false. self%silicifier = .false. + self%is_carbon_limited = .false. self%kFe = 0.03e-3_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kPO4 = 0.01_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kDOP = 0.3_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod @@ -141,6 +143,7 @@ subroutine autotroph_set_to_default(self, autotroph_id, marbl_status_log) self%imp_calcifier = .false. self%exp_calcifier = .false. self%silicifier = .true. + self%is_carbon_limited = .false. self%kFe = 0.07e-3_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kPO4 = 0.05_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kDOP = 0.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod @@ -170,6 +173,7 @@ subroutine autotroph_set_to_default(self, autotroph_id, marbl_status_log) self%imp_calcifier = .false. self%exp_calcifier = .false. self%silicifier = .false. + self%is_carbon_limited = .false. self%kFe = 0.045e-3_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kPO4 = 0.015_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kDOP = 0.075_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod @@ -199,6 +203,7 @@ subroutine autotroph_set_to_default(self, autotroph_id, marbl_status_log) self%imp_calcifier = .false. self%exp_calcifier = .false. self%silicifier = .false. + self%is_carbon_limited = .false. self%kFe = UnsetValue self%kPO4 = UnsetValue self%kDOP = UnsetValue diff --git a/src/marbl_settings_mod.F90 b/src/marbl_settings_mod.F90 index f6cec207..a67b6e20 100644 --- a/src/marbl_settings_mod.F90 +++ b/src/marbl_settings_mod.F90 @@ -1335,6 +1335,16 @@ subroutine marbl_settings_define_PFT_derived_types(this, marbl_status_log) nondefault_required=(PFT_defaults .eq. 'user-specified')) call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'is_carbon_limited' + lname = 'Flag is true if this autotroph is carbon limited' + units = 'unitless' + datatype = 'logical' + lptr => autotroph_settings(n)%is_carbon_limited + call this%add_var(sname, lname, units, datatype, category, & + marbl_status_log, lptr=lptr, & + nondefault_required=(PFT_defaults .eq. 'user-specified')) + call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'kFe' lname = 'nutrient uptake half-sat constants' units = 'nmol/cm^3' From 6c1e0b6d89ae8245982a97d9b71692d74fbfae9d Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Fri, 31 May 2019 15:42:03 -0600 Subject: [PATCH 63/75] Make temp_func_form_opt and Tref per-PFT settings Also, introduce the temp_func_form_opt = 'power' option (which will be used by coccolithophores). Note that this commit changes the default Tref behavior -- rather than depending on temp_func_form_opt (Tref = 30 for q_10 and Tref = 25 for arrhenius), the default is currently based on the PFT shortname and set to 30 for all current PFTs. I have some ideas on how to change the way we apply dependencies to allow Tref to depend on the per-autotroph temp_func_form_opt but haven't implemented that yet. --- defaults/json/settings_cesm2.0.json | 76 ++++++++++++----- defaults/json/settings_latest.json | 76 ++++++++++++----- defaults/settings_cesm2.0.yaml | 64 +++++++++----- defaults/settings_latest.yaml | 62 ++++++++++---- src/marbl_interior_tendency_mod.F90 | 63 ++++++-------- src/marbl_pft_mod.F90 | 37 ++++++-- src/marbl_settings_mod.F90 | 127 +++++++++++++++++++--------- 7 files changed, 341 insertions(+), 164 deletions(-) diff --git a/defaults/json/settings_cesm2.0.json b/defaults/json/settings_cesm2.0.json index e97afabd..6b1407b2 100644 --- a/defaults/json/settings_cesm2.0.json +++ b/defaults/json/settings_cesm2.0.json @@ -84,6 +84,18 @@ "subcategory": "10. autotrophs", "units": "unitless" }, + "Tref": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 30.0, + "((autotroph_sname)) == \"diaz\"": 30.0, + "((autotroph_sname)) == \"sp\"": 30.0, + "default": "1e34" + }, + "longname": "reference temperature (C) used for the temperature scaling functional form", + "subcategory": "10. autotrophs", + "units": "degC" + }, "_type_name": "autotroph_settings_type", "agg_rate_max": { "datatype": "real", @@ -349,6 +361,23 @@ "subcategory": "10. autotrophs", "units": "non-numeric" }, + "temp_func_form_opt": { + "datatype": "string", + "default_value": { + "((autotroph_sname)) == \"diat\"": "q_10", + "((autotroph_sname)) == \"diaz\"": "q_10", + "((autotroph_sname)) == \"sp\"": "q_10", + "default": "UNSET" + }, + "longname": "Option for the temperature scaling functional form", + "subcategory": "10. autotrophs", + "units": "non-numeric", + "valid_values": [ + "q_10", + "arrhenius", + "power" + ] + }, "temp_thres": { "datatype": "real", "default_value": { @@ -546,6 +575,16 @@ "subcategory": "11. zooplankton", "units": "eV" }, + "Tref": { + "datatype": "real", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": 30.0, + "default": "1e34" + }, + "longname": "reference temperature (C) used for the temperature scaling functional form", + "subcategory": "11. zooplankton", + "units": "degC" + }, "_type_name": "zooplankton_type", "lname": { "datatype": "string", @@ -577,6 +616,21 @@ "subcategory": "11. zooplankton", "units": "non-numeric" }, + "temp_func_form_opt": { + "datatype": "string", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": "q_10", + "default": "UNSET" + }, + "longname": "Option for the temperature scaling functional form", + "subcategory": "11. zooplankton", + "units": "non-numeric", + "valid_values": [ + "q_10", + "arrhenius", + "power" + ] + }, "z_mort2_0_per_day": { "datatype": "real", "default_value": { @@ -1274,18 +1328,6 @@ "subcategory": "4. general parameters", "units": "m" }, - "temp_func_form_opt": { - "_append_to_config_keywords": true, - "datatype": "string", - "default_value": "q_10", - "longname": "Option for the temperature scaling functional form", - "subcategory": "4. general parameters", - "units": "non-numeric", - "valid_values": [ - "q_10", - "arrhenius" - ] - }, "zoo_mort2_exp": { "datatype": "real", "default_value": 1.5, @@ -1295,16 +1337,6 @@ } }, "general_parms2": { - "Tref": { - "datatype": "real", - "default_value": { - "default": 30.0, - "temp_func_form_opt == \"arrhenius\"": 25.0 - }, - "longname": "reference temperature (C) used for the temperature scaling functional form", - "subcategory": "4. general parameters", - "units": "degC" - }, "init_bury_coeff_opt": { "datatype": "string", "default_value": { diff --git a/defaults/json/settings_latest.json b/defaults/json/settings_latest.json index b1318a3d..0c49fa51 100644 --- a/defaults/json/settings_latest.json +++ b/defaults/json/settings_latest.json @@ -84,6 +84,18 @@ "subcategory": "10. autotrophs", "units": "unitless" }, + "Tref": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 30.0, + "((autotroph_sname)) == \"diaz\"": 30.0, + "((autotroph_sname)) == \"sp\"": 30.0, + "default": "1e34" + }, + "longname": "reference temperature (C) used for the temperature scaling functional form", + "subcategory": "10. autotrophs", + "units": "degC" + }, "_type_name": "autotroph_settings_type", "agg_rate_max": { "datatype": "real", @@ -349,6 +361,23 @@ "subcategory": "10. autotrophs", "units": "non-numeric" }, + "temp_func_form_opt": { + "datatype": "string", + "default_value": { + "((autotroph_sname)) == \"diat\"": "q_10", + "((autotroph_sname)) == \"diaz\"": "q_10", + "((autotroph_sname)) == \"sp\"": "q_10", + "default": "UNSET" + }, + "longname": "Option for the temperature scaling functional form", + "subcategory": "10. autotrophs", + "units": "non-numeric", + "valid_values": [ + "q_10", + "arrhenius", + "power" + ] + }, "temp_thres": { "datatype": "real", "default_value": { @@ -546,6 +575,16 @@ "subcategory": "11. zooplankton", "units": "eV" }, + "Tref": { + "datatype": "real", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": 30.0, + "default": "1e34" + }, + "longname": "reference temperature (C) used for the temperature scaling functional form", + "subcategory": "11. zooplankton", + "units": "degC" + }, "_type_name": "zooplankton_settings_type", "lname": { "datatype": "string", @@ -577,6 +616,21 @@ "subcategory": "11. zooplankton", "units": "non-numeric" }, + "temp_func_form_opt": { + "datatype": "string", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": "q_10", + "default": "UNSET" + }, + "longname": "Option for the temperature scaling functional form", + "subcategory": "11. zooplankton", + "units": "non-numeric", + "valid_values": [ + "q_10", + "arrhenius", + "power" + ] + }, "z_mort2_0_per_day": { "datatype": "real", "default_value": { @@ -1277,18 +1331,6 @@ "subcategory": "4. general parameters", "units": "m" }, - "temp_func_form_opt": { - "_append_to_config_keywords": true, - "datatype": "string", - "default_value": "q_10", - "longname": "Option for the temperature scaling functional form", - "subcategory": "4. general parameters", - "units": "non-numeric", - "valid_values": [ - "q_10", - "arrhenius" - ] - }, "zoo_mort2_exp": { "datatype": "real", "default_value": 1.5, @@ -1298,16 +1340,6 @@ } }, "general_parms2": { - "Tref": { - "datatype": "real", - "default_value": { - "default": 30.0, - "temp_func_form_opt == \"arrhenius\"": 25.0 - }, - "longname": "reference temperature (C) used for the temperature scaling functional form", - "subcategory": "4. general parameters", - "units": "degC" - }, "init_bury_coeff_opt": { "datatype": "string", "default_value": { diff --git a/defaults/settings_cesm2.0.yaml b/defaults/settings_cesm2.0.yaml index 3da74d99..2c8f90b5 100644 --- a/defaults/settings_cesm2.0.yaml +++ b/defaults/settings_cesm2.0.yaml @@ -329,16 +329,6 @@ general_parms : units : unitless datatype : real default_value : 1.0 - temp_func_form_opt: - longname : Option for the temperature scaling functional form - subcategory : 4. general parameters - units : non-numeric - datatype : string - default_value : q_10 - valid_values : - - q_10 - - arrhenius - _append_to_config_keywords : true particulate_flux_ref_depth : longname : reference depth for particulate flux diagnostics subcategory : 4. general parameters @@ -642,14 +632,6 @@ general_parms2 : default : settings_file not ladjust_bury_coeff : settings_file SAVED_STATE_VARS_SOURCE == "GCM" : GCM - Tref: - longname : reference temperature (C) used for the temperature scaling functional form - subcategory : 4. general parameters - units : degC - datatype : real - default_value : - default : 30.0 - temp_func_form_opt == "arrhenius" : 25.0 ################################################################################ # Category 2: PFT_counts # @@ -715,6 +697,20 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : Small Phyto ((autotroph_sname)) == "diat" : Diatom ((autotroph_sname)) == "diaz" : Diazotroph + temp_func_form_opt: + longname : Option for the temperature scaling functional form + subcategory : 10. autotrophs + units : non-numeric + datatype : string + valid_values : + - q_10 + - arrhenius + - power + default_value : + default : UNSET + ((autotroph_sname)) == "sp" : q_10 + ((autotroph_sname)) == "diat" : q_10 + ((autotroph_sname)) == "diaz" : q_10 Nfixer : longname : Flag set to true if autotroph fixes nitrogen subcategory : 10. autotrophs @@ -752,6 +748,16 @@ PFT_derived_types : units : non-numeric datatype : logical default_value : .false. + Tref: + longname : reference temperature (C) used for the temperature scaling functional form + subcategory : 10. autotrophs + units : degC + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 30.0 + ((autotroph_sname)) == "diat" : 30.0 + ((autotroph_sname)) == "diaz" : 30.0 kFe : longname : Fe uptake half-sat constant subcategory : 10. autotrophs @@ -771,7 +777,7 @@ PFT_derived_types : default : 1e34 ((autotroph_sname)) == "sp" : 0 ((autotroph_sname)) == "diat" : 0 - ((autotroph_sname)) == "diaz" : 0 + ((autotroph_sname)) == "diaz" : 0 kPO4 : longname : PO4 uptake half-sat constant subcategory : 10. autotrophs @@ -995,6 +1001,18 @@ PFT_derived_types : default_value : default : UNSET ((zooplankton_sname)) == "zoo" : Zooplankton + temp_func_form_opt: + longname : Option for the temperature scaling functional form + subcategory : 11. zooplankton + units : non-numeric + datatype : string + valid_values : + - q_10 + - arrhenius + - power + default_value : + default : UNSET + ((zooplankton_sname)) == "zoo" : q_10 z_mort_0_per_day : longname : Linear mortality rate subcategory : 11. zooplankton @@ -1019,6 +1037,14 @@ PFT_derived_types : default_value : default : 1e34 ((zooplankton_sname)) == "zoo" : 0.075 + Tref: + longname : reference temperature (C) used for the temperature scaling functional form + subcategory : 11. zooplankton + units : degC + datatype : real + default_value : + default : 1e34 + ((zooplankton_sname)) == "zoo" : 30.0 Ea : longname : Activation energy for Arrhenius equation subcategory : 11. zooplankton diff --git a/defaults/settings_latest.yaml b/defaults/settings_latest.yaml index faecf9dd..e1e87a90 100644 --- a/defaults/settings_latest.yaml +++ b/defaults/settings_latest.yaml @@ -331,16 +331,6 @@ general_parms : units : unitless datatype : real default_value : 1.0 - temp_func_form_opt: - longname : Option for the temperature scaling functional form - subcategory : 4. general parameters - units : non-numeric - datatype : string - default_value : q_10 - valid_values : - - q_10 - - arrhenius - _append_to_config_keywords : true particulate_flux_ref_depth : longname : reference depth for particulate flux diagnostics subcategory : 4. general parameters @@ -643,14 +633,6 @@ general_parms2 : default : settings_file not ladjust_bury_coeff : settings_file SAVED_STATE_VARS_SOURCE == "GCM" : GCM - Tref: - longname : reference temperature (C) used for the temperature scaling functional form - subcategory : 4. general parameters - units : degC - datatype : real - default_value : - default : 30.0 - temp_func_form_opt == "arrhenius" : 25.0 ################################################################################ # Category 2: PFT_counts # @@ -716,6 +698,20 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : Small Phyto ((autotroph_sname)) == "diat" : Diatom ((autotroph_sname)) == "diaz" : Diazotroph + temp_func_form_opt: + longname : Option for the temperature scaling functional form + subcategory : 10. autotrophs + units : non-numeric + datatype : string + valid_values : + - q_10 + - arrhenius + - power + default_value : + default : UNSET + ((autotroph_sname)) == "sp" : q_10 + ((autotroph_sname)) == "diat" : q_10 + ((autotroph_sname)) == "diaz" : q_10 Nfixer : longname : Flag set to true if autotroph fixes nitrogen subcategory : 10. autotrophs @@ -753,6 +749,16 @@ PFT_derived_types : units : non-numeric datatype : logical default_value : .false. + Tref: + longname : reference temperature (C) used for the temperature scaling functional form + subcategory : 10. autotrophs + units : degC + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 30.0 + ((autotroph_sname)) == "diat" : 30.0 + ((autotroph_sname)) == "diaz" : 30.0 kFe : longname : Fe uptake half-sat constant subcategory : 10. autotrophs @@ -996,6 +1002,18 @@ PFT_derived_types : default_value : default : UNSET ((zooplankton_sname)) == "zoo" : Zooplankton + temp_func_form_opt: + longname : Option for the temperature scaling functional form + subcategory : 11. zooplankton + units : non-numeric + datatype : string + valid_values : + - q_10 + - arrhenius + - power + default_value : + default : UNSET + ((zooplankton_sname)) == "zoo" : q_10 z_mort_0_per_day : longname : Linear mortality rate subcategory : 11. zooplankton @@ -1020,6 +1038,14 @@ PFT_derived_types : default_value : default : 1e34 ((zooplankton_sname)) == "zoo" : 0.075 + Tref: + longname : reference temperature (C) used for the temperature scaling functional form + subcategory : 11. zooplankton + units : degC + datatype : real + default_value : + default : 1e34 + ((zooplankton_sname)) == "zoo" : 30.0 Ea : longname : Activation energy for Arrhenius equation subcategory : 11. zooplankton diff --git a/src/marbl_interior_tendency_mod.F90 b/src/marbl_interior_tendency_mod.F90 index b2db13d4..76aa3bdb 100644 --- a/src/marbl_interior_tendency_mod.F90 +++ b/src/marbl_interior_tendency_mod.F90 @@ -237,7 +237,7 @@ subroutine marbl_interior_tendency_compute( & sio3_ind => marbl_tracer_indices%sio3_ind, & nh4_ind => marbl_tracer_indices%nh4_ind, & fe_ind => marbl_tracer_indices%fe_ind, & - lig_ind => marbl_tracer_indices%lig_ind, & + lig_ind => marbl_tracer_indices%lig_ind, & o2_ind => marbl_tracer_indices%o2_ind, & dic_ind => marbl_tracer_indices%dic_ind, & dic_alt_co2_ind => marbl_tracer_indices%dic_alt_co2_ind, & @@ -247,8 +247,13 @@ subroutine marbl_interior_tendency_compute( & dopr_ind => marbl_tracer_indices%dopr_ind, & donr_ind => marbl_tracer_indices%donr_ind, & docr_ind => marbl_tracer_indices%docr_ind, & - Ea_auto => autotroph_settings(:)%Ea, & - Ea_zoo => zooplankton_settings(:)%Ea & + + Tref_auto => autotroph_settings(:)%Tref, & + Tref_zoo => zooplankton_settings(:)%Tref, & + Ea_auto => autotroph_settings(:)%Ea, & + Ea_zoo => zooplankton_settings(:)%Ea, & + temp_func_opt_auto => autotroph_settings(:)%temp_func_form_iopt, & + temp_func_opt_zoo => zooplankton_settings(:)%temp_func_form_iopt & ) !----------------------------------------------------------------------- @@ -319,10 +324,9 @@ subroutine marbl_interior_tendency_compute( & call compute_autotroph_elemental_ratios(km, autotroph_local, marbl_tracer_indices, tracer_local, & autotroph_derived_terms) - call compute_temperature_functional_form(temperature(:), Tfunc_auto(:,:), Ea_auto(:), & - lexplicit_calcifier_in=autotroph_settings(:)%exp_calcifier) + call compute_temperature_functional_form(temperature(:), Tref_auto(:), temp_func_opt_auto(:), Tfunc_auto(:,:), Ea_auto(:)) - call compute_temperature_functional_form(temperature(:), Tfunc_zoo(:,:), Ea_zoo(:)) + call compute_temperature_functional_form(temperature(:), Tref_zoo(:), temp_func_opt_zoo(:), Tfunc_zoo(:,:), Ea_zoo(:)) call compute_Pprime(km, domain%zt, autotroph_local, temperature, autotroph_derived_terms%Pprime) @@ -1219,7 +1223,7 @@ end subroutine compute_autotroph_elemental_ratios !*********************************************************************** - subroutine compute_temperature_functional_form(temperature, Tfunc, Ea, lexplicit_calcifier_in) + subroutine compute_temperature_functional_form(temperature, Tref, temp_func_form_iopt, Tfunc, Ea) !----------------------------------------------------------------------- ! Scaling of physiological rates by temperature @@ -1234,44 +1238,33 @@ subroutine compute_temperature_functional_form(temperature, Tfunc, Ea, lexplicit ! Tfunc scales the growth, mort and grazing rates where they are computed !----------------------------------------------------------------------- - use marbl_settings_mod, only : temp_func_form_iopt use marbl_settings_mod, only : temp_func_form_iopt_q10 use marbl_settings_mod, only : temp_func_form_iopt_arrhenius + use marbl_settings_mod, only : temp_func_form_iopt_power use marbl_settings_mod, only : Q_10 - use marbl_settings_mod, only : Tref use marbl_constants_mod, only : c10 use marbl_constants_mod, only : K_Boltz - real(r8), intent(in) :: temperature(:) - real(r8), intent(out) :: Tfunc(:,:) - real(r8), intent(in) :: Ea(size(Tfunc, dim=1)) - logical, optional, intent(in) :: lexplicit_calcifier_in(size(Tfunc, dim=1)) + real(r8), intent(in) :: temperature(:) + real(r8), intent(in) :: Tref(:) + integer, intent(in) :: temp_func_form_iopt(:) + real(r8), intent(out) :: Tfunc(:,:) + real(r8), intent(in) :: Ea(size(Tfunc, dim=1)) integer :: Tfunc_ind - logical :: lexplicit_calcifier(size(Tfunc, dim=1)) - if (present(lexplicit_calcifier_in)) then - lexplicit_calcifier = lexplicit_calcifier_in - else - lexplicit_calcifier = .false. - end if - - select case (temp_func_form_iopt) - case (temp_func_form_iopt_q10) - do Tfunc_ind = 1, size(Tfunc, dim=1) - if (lexplicit_calcifier(Tfunc_ind)) then - Tfunc(Tfunc_ind,:) = 0.12_r8 * (max(c0, min(temperature(:), 27.0_r8))**0.4_r8) - else - Tfunc(Tfunc_ind,:) = Q_10**(((temperature(:) + T0_Kelvin) - (Tref + T0_Kelvin)) / c10) - end if - end do - case (temp_func_form_iopt_arrhenius) - do Tfunc_ind = 1, size(Tfunc, dim=1) - Tfunc(Tfunc_ind,:) = exp(-Ea(Tfunc_ind) * (Tref - temperature(:)) & - / (K_Boltz * (temperature(:) + T0_Kelvin) * (Tref + T0_Kelvin))) - end do - end select + do Tfunc_ind = 1, size(Tfunc, dim=1) + select case (temp_func_form_iopt(Tfunc_ind)) + case (temp_func_form_iopt_q10) + Tfunc(Tfunc_ind,:) = Q_10**(((temperature(:) + T0_Kelvin) - (Tref(Tfunc_ind) + T0_Kelvin)) / c10) + case (temp_func_form_iopt_arrhenius) + Tfunc(Tfunc_ind,:) = exp(-Ea(Tfunc_ind) * (Tref(Tfunc_ind) - temperature(:)) & + / (K_Boltz * (temperature(:) + T0_Kelvin) * (Tref(Tfunc_ind) + T0_Kelvin))) + case (temp_func_form_iopt_power) + Tfunc(Tfunc_ind,:) = 0.12_r8 * (max(c0, min(temperature(:), 27.0_r8))**0.4_r8) + end select + end do end subroutine compute_temperature_functional_form diff --git a/src/marbl_pft_mod.F90 b/src/marbl_pft_mod.F90 index f5a8a837..40d56637 100644 --- a/src/marbl_pft_mod.F90 +++ b/src/marbl_pft_mod.F90 @@ -19,6 +19,8 @@ module marbl_pft_mod type, public :: autotroph_settings_type character(len=char_len) :: sname character(len=char_len) :: lname + character(len=char_len) :: temp_func_form_opt ! temperature functional form option ['q_10', 'arrhenius', 'power'] + integer :: temp_func_form_iopt ! Integer derived from temp_func_form_opt for easier comparison logical(log_kind) :: Nfixer ! flag set to true if this autotroph fixes N2 logical(log_kind) :: imp_calcifier ! flag set to true if this autotroph implicitly handles calcification logical(log_kind) :: exp_calcifier ! flag set to true if this autotroph explicitly handles calcification @@ -30,7 +32,7 @@ module marbl_pft_mod real(r8) :: gQfe_0, gQfe_min ! initial and minimum Fe/C ratio for growth real(r8) :: alphaPI_per_day ! init slope of P_I curve (GD98) (mmol C m^2/(mg Chl W day)) real(r8) :: alphaPI ! init slope of P_I curve (GD98) (mmol C m^2/(mg Chl W sec)) - ! (derived from alphaPI_per_day) + ! (derived from alphaPI_per_day) real(r8) :: PCref_per_day ! max C-spec. grth rate at tref (1/day) real(r8) :: PCref ! max C-spec. grth rate at tref (1/sec) (derived from PCref_per_day) real(r8) :: thetaN_max ! max thetaN (Chl/N) (mg Chl/mmol N) @@ -38,9 +40,10 @@ module marbl_pft_mod real(r8) :: temp_thres ! Temp. where concentration threshold and photosynth. rate drops real(r8) :: mort_per_day, mort2_per_day ! linear and quadratic mortality rates (1/day), (1/day/((mmol C/m3)) real(r8) :: mort, mort2 ! linear and quadratic mortality rates (1/sec), (1/sec/((mmol C/m3)) - ! (derived from mort_per_day and mort2_per_day) + ! (derived from mort_per_day and mort2_per_day) real(r8) :: agg_rate_max, agg_rate_min ! max and min agg. rate (1/d) real(r8) :: loss_poc ! routing of loss term + real(r8) :: Tref ! reference temperature (C) used for the temperature scaling functional form real(r8) :: Ea ! activation energy for Arrhenius temperature function (eV) contains procedure, public :: set_to_default => autotroph_set_to_default @@ -51,12 +54,15 @@ module marbl_pft_mod type, public :: zooplankton_settings_type character(len=char_len) :: sname character(len=char_len) :: lname - real(r8) :: z_mort_0_per_day ! zoo linear mort rate (1/day) - real(r8) :: z_mort_0 ! zoo linear mort rate (1/sec) (derived from z_mort_0_per_day) - real(r8) :: z_mort2_0_per_day ! zoo quad mort rate (1/day/((mmol C/m3)) - real(r8) :: z_mort2_0 ! zoo quad mort rate (1/sec/((mmol C/m3)) (derived from z_mort2_0_per_day) - real(r8) :: loss_thres ! zoo conc. where losses go to zero - real(r8) :: Ea ! activation energy for Arrhenius temperature function (eV) + character(len=char_len) :: temp_func_form_opt ! temperature functional form option ['q_10', 'arrhenius', 'power'] + integer :: temp_func_form_iopt ! Integer derived from temp_func_form_opt for easier comparison + real(r8) :: z_mort_0_per_day ! zoo linear mort rate (1/day) + real(r8) :: z_mort_0 ! zoo linear mort rate (1/sec) (derived from z_mort_0_per_day) + real(r8) :: z_mort2_0_per_day ! zoo quad mort rate (1/day/((mmol C/m3)) + real(r8) :: z_mort2_0 ! zoo quad mort rate (1/sec/((mmol C/m3)) (derived from z_mort2_0_per_day) + real(r8) :: loss_thres ! zoo conc. where losses go to zero + real(r8) :: Tref ! reference temperature (C) used for the temperature scaling functional form + real(r8) :: Ea ! activation energy for Arrhenius temperature function (eV) contains procedure, public :: set_to_default => zooplankton_set_to_default end type zooplankton_settings_type @@ -109,6 +115,7 @@ subroutine autotroph_set_to_default(self, autotroph_id, marbl_status_log) case ('sp') self%sname = 'sp' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%lname = 'Small Phyto' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above self%Nfixer = .false. self%imp_calcifier = .true. self%exp_calcifier = .false. @@ -135,10 +142,13 @@ subroutine autotroph_set_to_default(self, autotroph_id, marbl_status_log) self%agg_rate_max = 0.5_r8 self%agg_rate_min = 0.01_r8 self%loss_poc = 0.0_r8 + self%Tref = 30.0_r8 self%Ea = 0.32_r8 + case ('diat') self%sname = 'diat' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%lname = 'Diatom' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above self%Nfixer = .false. self%imp_calcifier = .false. self%exp_calcifier = .false. @@ -165,10 +175,12 @@ subroutine autotroph_set_to_default(self, autotroph_id, marbl_status_log) self%agg_rate_max = 0.5_r8 self%agg_rate_min = 0.02_r8 self%loss_poc = 0.0_r8 + self%Tref = 30.0_r8 self%Ea = 0.32_r8 case ('diaz') self%sname = 'diaz' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%lname = 'Diazotroph' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above self%Nfixer = .true. self%imp_calcifier = .false. self%exp_calcifier = .false. @@ -195,10 +207,12 @@ subroutine autotroph_set_to_default(self, autotroph_id, marbl_status_log) self%agg_rate_max = 0.5_r8 self%agg_rate_min = 0.01_r8 self%loss_poc = 0.0_r8 + self%Tref = 30.0_r8 self%Ea = 0.32_r8 case ('unset') self%sname = 'unknown' self%lname = 'unknown' + self%temp_func_form_opt = 'unknown' self%Nfixer = .false. self%imp_calcifier = .false. self%exp_calcifier = .false. @@ -225,6 +239,7 @@ subroutine autotroph_set_to_default(self, autotroph_id, marbl_status_log) self%agg_rate_max = UnsetValue self%agg_rate_min = UnsetValue self%loss_poc = UnsetValue + self%Tref = UnsetValue self%Ea = UnsetValue case DEFAULT write(log_message, "(3A)") "'", autotroph_id, "' is not a valid autotroph ID" @@ -249,16 +264,20 @@ subroutine zooplankton_set_to_default(self, zooplankton_id, marbl_status_log) case ('zoo') self%sname = 'zoo' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%lname = 'Zooplankton' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above self%z_mort_0_per_day = 0.1_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%z_mort2_0_per_day = 0.4_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%loss_thres = 0.075_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod - self%Ea = 0.65_r8 + self%Tref = 30.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%Ea = 0.65_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod case ('unset') self%sname = 'unknown' self%lname = 'unknown' + self%temp_func_form_opt = 'unknown' self%z_mort_0_per_day = UnsetValue self%z_mort2_0_per_day = UnsetValue self%loss_thres = UnsetValue + self%Tref = UnsetValue self%Ea = UnsetValue case DEFAULT write(log_message, "(3A)") "'", zooplankton_id, "' is not a valid zooplankton ID" diff --git a/src/marbl_settings_mod.F90 b/src/marbl_settings_mod.F90 index a67b6e20..801203a3 100644 --- a/src/marbl_settings_mod.F90 +++ b/src/marbl_settings_mod.F90 @@ -318,11 +318,6 @@ module marbl_settings_mod type(zooplankton_settings_type), allocatable, target :: zooplankton_settings(:) type(grazing_relationship_settings_type), allocatable, target :: grazing_relationship_settings(:,:) - ! temperature functional form option - ! ------------------------------------------------------------ - character(len=char_len), target :: temp_func_form_opt ! temperature functional form option ['q_10', 'arrhenius'] - real(r8), target :: Tref ! reference temperature (C) used for the temperature scaling functional form - ! marbl_settings_define_tracer_dependent ! parameters that can not be set until MARBL knows what tracers ! have been enabled. @@ -341,9 +336,9 @@ module marbl_settings_mod integer (int_kind) :: caco3_bury_thres_iopt integer (int_kind), parameter :: caco3_bury_thres_iopt_fixed_depth = 1 integer (int_kind), parameter :: caco3_bury_thres_iopt_omega_calc = 2 - integer (int_kind) :: temp_func_form_iopt integer (int_kind), parameter :: temp_func_form_iopt_q10 = 1 integer (int_kind), parameter :: temp_func_form_iopt_arrhenius = 2 + integer (int_kind), parameter :: temp_func_form_iopt_power = 3 !***************************************************************************** @@ -433,8 +428,6 @@ subroutine marbl_settings_set_defaults_general_parms() POM_bury_frac_max = 0.8_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above bSi_bury_frac_max = 1.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above ciso_fract_factors = 'Laws' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above - temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above - Tref = 30.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above auto_mort2_exp = 1.75_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above zoo_mort2_exp = 1.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above QCaCO3_max = 0.40_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above @@ -706,24 +699,6 @@ subroutine marbl_settings_define_general_parms(this, marbl_status_log) category = 'general parmeters' ! ----------------------------- - sname = 'temp_func_form_opt' - lname = 'Option for the temperature scaling functional form' - units = 'unitless' - datatype = 'string' - sptr => temp_func_form_opt - call this%add_var(sname, lname, units, datatype, category, & - marbl_status_log, sptr=sptr) - call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) - - sname = 'Tref' - lname = 'Reference temperature for the temperature scaling function' - units = 'degC' - datatype = 'real' - rptr => Tref - call this%add_var(sname, lname, units, datatype, category, & - marbl_status_log, rptr=rptr) - call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) - sname = 'particulate_flux_ref_depth' lname = 'reference depth for particulate flux diagnostics' units = 'm' @@ -1295,6 +1270,16 @@ subroutine marbl_settings_define_PFT_derived_types(this, marbl_status_log) nondefault_required=(PFT_defaults .eq. 'user-specified')) call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'temp_func_form_opt' + lname = 'Temperature functional form option for this autotroph' + units = 'unitless' + datatype = 'string' + sptr => autotroph_settings(n)%temp_func_form_opt + call this%add_var(sname, lname, units, datatype, category, & + marbl_status_log, sptr=sptr, & + nondefault_required=(PFT_defaults .eq. 'user-specified')) + call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'Nfixer' lname = 'Flag is true if this autotroph fixes N2' units = 'unitless' @@ -1555,6 +1540,16 @@ subroutine marbl_settings_define_PFT_derived_types(this, marbl_status_log) nondefault_required=(PFT_defaults .eq. 'user-specified')) call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'Tref' + lname = 'Reference temperature for the temperature scaling function' + units = 'degC' + datatype = 'real' + rptr => autotroph_settings(n)%Tref + call this%add_var(sname, lname, units, datatype, category, & + marbl_status_log, rptr=rptr, & + nondefault_required=(PFT_defaults .eq. 'user-specified')) + call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'Ea' lname = 'activation energy for Arrhenius equation' units = 'eV' @@ -1591,6 +1586,16 @@ subroutine marbl_settings_define_PFT_derived_types(this, marbl_status_log) nondefault_required=(PFT_defaults .eq. 'user-specified')) call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'temp_func_form_opt' + lname = 'Temperature functional form option for this zooplankton' + units = 'unitless' + datatype = 'string' + sptr => zooplankton_settings(n)%temp_func_form_opt + call this%add_var(sname, lname, units, datatype, category, & + marbl_status_log, sptr=sptr, & + nondefault_required=(PFT_defaults .eq. 'user-specified')) + call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'z_mort_0_per_day' lname = 'Linear mortality rate' units = '1/day' @@ -1621,6 +1626,16 @@ subroutine marbl_settings_define_PFT_derived_types(this, marbl_status_log) nondefault_required=(PFT_defaults .eq. 'user-specified')) call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'Tref' + lname = 'Reference temperature for the temperature scaling function' + units = 'degC' + datatype = 'real' + rptr => zooplankton_settings(n)%Tref + call this%add_var(sname, lname, units, datatype, category, & + marbl_status_log, rptr=rptr, & + nondefault_required=(PFT_defaults .eq. 'user-specified')) + call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) + write(sname, "(2A)") trim(prefix), 'Ea' lname = 'Activation energy for Arrhenius equation' units = 'eV' @@ -1828,19 +1843,6 @@ subroutine marbl_settings_set_all_derived(marbl_status_log) call marbl_status_log%log_header('Setting derived parms', subname) - select case (temp_func_form_opt) - case ('q_10') - temp_func_form_iopt = temp_func_form_iopt_q10 - case ('arrhenius') - temp_func_form_iopt = temp_func_form_iopt_arrhenius - case default - write(log_message, "(2A)") "unknown temp_func_form_opt: ", trim(temp_func_form_opt) - call marbl_status_log%log_error(log_message, subname) - return - end select - call print_single_derived_parm('temp_func_form_opt', 'temp_func_form_iopt', & - temp_func_form_iopt, subname, marbl_status_log) - select case (caco3_bury_thres_opt) case ('fixed_depth') caco3_bury_thres_iopt = caco3_bury_thres_iopt_fixed_depth @@ -1889,6 +1891,17 @@ subroutine marbl_settings_set_all_derived(marbl_status_log) call marbl_status_log%log_noerror('', subname) do n = 1, autotroph_cnt + call set_temp_func_form_iopt(autotroph_settings(n)%temp_func_form_opt, & + autotroph_settings(n)%temp_func_form_iopt, marbl_status_log) + write(sname_in, "(A,I0,A)") 'autotroph_settings(', n, ')%temp_func_form_opt' + write(sname_out, "(A,I0,A)") 'autotroph_settings(', n, ')%temp_func_form_iopt' + if (marbl_status_log%labort_MARBL) then + write(log_message, "(3A)") "set_temp_func_form_iopt(", trim(sname_in), ")" + call marbl_status_log%log_error_trace(log_message, subname) + end if + call print_single_derived_parm(sname_in, sname_out, & + autotroph_settings(n)%temp_func_form_iopt, subname, marbl_status_log) + autotroph_settings(n)%alphaPI = dps * autotroph_settings(n)%alphaPI_per_day write(sname_in, "(A,I0,A)") 'autotroph_settings(', n, ')%alphaPI_per_day' write(sname_out, "(A,I0,A)") 'autotroph_settings(', n, ')%alphaPI' @@ -1917,6 +1930,17 @@ subroutine marbl_settings_set_all_derived(marbl_status_log) call marbl_status_log%log_noerror('', subname) do n = 1, zooplankton_cnt + call set_temp_func_form_iopt(zooplankton_settings(n)%temp_func_form_opt, & + zooplankton_settings(n)%temp_func_form_iopt, marbl_status_log) + write(sname_in, "(A,I0,A)") 'zooplankton_settings(', n, ')%temp_func_form_opt' + write(sname_out, "(A,I0,A)") 'zooplankton_settings(', n, ')%temp_func_form_iopt' + if (marbl_status_log%labort_MARBL) then + write(log_message, "(3A)") "set_temp_func_form_iopt(", trim(sname_in), ")" + call marbl_status_log%log_error_trace(log_message, subname) + end if + call print_single_derived_parm(sname_in, sname_out, & + zooplankton_settings(n)%temp_func_form_iopt, subname, marbl_status_log) + zooplankton_settings(n)%z_mort_0 = dps * zooplankton_settings(n)%z_mort_0_per_day write(sname_in, "(A,I0,A)") 'zooplankton_settings(', n, ')%z_mort_0_per_day' write(sname_out, "(A,I0,A)") 'zooplankton_settings(', n, ')%z_mort_0' @@ -2886,4 +2910,29 @@ end subroutine print_single_derived_parm_int !***************************************************************************** + subroutine set_temp_func_form_iopt(temp_func_form_opt, temp_func_form_iopt, marbl_status_log) + + character(len=*), intent(in) :: temp_func_form_opt + integer, intent(out) :: temp_func_form_iopt + type(marbl_log_type), intent(inout) :: marbl_status_log + + character(len=*), parameter :: subname = "marbl_settings_mod:set_temp_func_form_iopt" + character(len=char_len) :: log_message + select case (temp_func_form_opt) + case ('q_10') + temp_func_form_iopt = temp_func_form_iopt_q10 + case ('arrhenius') + temp_func_form_iopt = temp_func_form_iopt_arrhenius + case ('power') + temp_func_form_iopt = temp_func_form_iopt_power + case default + write(log_message, "(2A)") "unknown temp_func_form_opt: ", trim(temp_func_form_opt) + call marbl_status_log%log_error(log_message, subname) + return + end select + + end subroutine set_temp_func_form_iopt + + !***************************************************************************** + end module marbl_settings_mod From eea4b1ef9becd8e8540ff0503b5288971e196472 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Tue, 11 Jun 2019 12:35:37 -0600 Subject: [PATCH 64/75] Tref is no longer available from input file Tref is still in the PFT settings_type data structures, but values are derived based on temp_func_form_opt (30 for q_10, 25 for arrhenius, and 0 for power -- note that the power function doesn't use the Tref parameter) --- src/marbl_pft_mod.F90 | 8 ++----- src/marbl_settings_mod.F90 | 48 +++++++++++++++----------------------- 2 files changed, 21 insertions(+), 35 deletions(-) diff --git a/src/marbl_pft_mod.F90 b/src/marbl_pft_mod.F90 index 40d56637..8a68eaf5 100644 --- a/src/marbl_pft_mod.F90 +++ b/src/marbl_pft_mod.F90 @@ -44,6 +44,7 @@ module marbl_pft_mod real(r8) :: agg_rate_max, agg_rate_min ! max and min agg. rate (1/d) real(r8) :: loss_poc ! routing of loss term real(r8) :: Tref ! reference temperature (C) used for the temperature scaling functional form + ! (derived from temp_func_form_opt) real(r8) :: Ea ! activation energy for Arrhenius temperature function (eV) contains procedure, public :: set_to_default => autotroph_set_to_default @@ -62,6 +63,7 @@ module marbl_pft_mod real(r8) :: z_mort2_0 ! zoo quad mort rate (1/sec/((mmol C/m3)) (derived from z_mort2_0_per_day) real(r8) :: loss_thres ! zoo conc. where losses go to zero real(r8) :: Tref ! reference temperature (C) used for the temperature scaling functional form + ! (derived from temp_func_form_opt) real(r8) :: Ea ! activation energy for Arrhenius temperature function (eV) contains procedure, public :: set_to_default => zooplankton_set_to_default @@ -142,7 +144,6 @@ subroutine autotroph_set_to_default(self, autotroph_id, marbl_status_log) self%agg_rate_max = 0.5_r8 self%agg_rate_min = 0.01_r8 self%loss_poc = 0.0_r8 - self%Tref = 30.0_r8 self%Ea = 0.32_r8 case ('diat') @@ -175,7 +176,6 @@ subroutine autotroph_set_to_default(self, autotroph_id, marbl_status_log) self%agg_rate_max = 0.5_r8 self%agg_rate_min = 0.02_r8 self%loss_poc = 0.0_r8 - self%Tref = 30.0_r8 self%Ea = 0.32_r8 case ('diaz') self%sname = 'diaz' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod @@ -207,7 +207,6 @@ subroutine autotroph_set_to_default(self, autotroph_id, marbl_status_log) self%agg_rate_max = 0.5_r8 self%agg_rate_min = 0.01_r8 self%loss_poc = 0.0_r8 - self%Tref = 30.0_r8 self%Ea = 0.32_r8 case ('unset') self%sname = 'unknown' @@ -239,7 +238,6 @@ subroutine autotroph_set_to_default(self, autotroph_id, marbl_status_log) self%agg_rate_max = UnsetValue self%agg_rate_min = UnsetValue self%loss_poc = UnsetValue - self%Tref = UnsetValue self%Ea = UnsetValue case DEFAULT write(log_message, "(3A)") "'", autotroph_id, "' is not a valid autotroph ID" @@ -268,7 +266,6 @@ subroutine zooplankton_set_to_default(self, zooplankton_id, marbl_status_log) self%z_mort_0_per_day = 0.1_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%z_mort2_0_per_day = 0.4_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%loss_thres = 0.075_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod - self%Tref = 30.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%Ea = 0.65_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod case ('unset') self%sname = 'unknown' @@ -277,7 +274,6 @@ subroutine zooplankton_set_to_default(self, zooplankton_id, marbl_status_log) self%z_mort_0_per_day = UnsetValue self%z_mort2_0_per_day = UnsetValue self%loss_thres = UnsetValue - self%Tref = UnsetValue self%Ea = UnsetValue case DEFAULT write(log_message, "(3A)") "'", zooplankton_id, "' is not a valid zooplankton ID" diff --git a/src/marbl_settings_mod.F90 b/src/marbl_settings_mod.F90 index 801203a3..e04dc846 100644 --- a/src/marbl_settings_mod.F90 +++ b/src/marbl_settings_mod.F90 @@ -1540,16 +1540,6 @@ subroutine marbl_settings_define_PFT_derived_types(this, marbl_status_log) nondefault_required=(PFT_defaults .eq. 'user-specified')) call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) - write(sname, "(2A)") trim(prefix), 'Tref' - lname = 'Reference temperature for the temperature scaling function' - units = 'degC' - datatype = 'real' - rptr => autotroph_settings(n)%Tref - call this%add_var(sname, lname, units, datatype, category, & - marbl_status_log, rptr=rptr, & - nondefault_required=(PFT_defaults .eq. 'user-specified')) - call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) - write(sname, "(2A)") trim(prefix), 'Ea' lname = 'activation energy for Arrhenius equation' units = 'eV' @@ -1626,16 +1616,6 @@ subroutine marbl_settings_define_PFT_derived_types(this, marbl_status_log) nondefault_required=(PFT_defaults .eq. 'user-specified')) call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) - write(sname, "(2A)") trim(prefix), 'Tref' - lname = 'Reference temperature for the temperature scaling function' - units = 'degC' - datatype = 'real' - rptr => zooplankton_settings(n)%Tref - call this%add_var(sname, lname, units, datatype, category, & - marbl_status_log, rptr=rptr, & - nondefault_required=(PFT_defaults .eq. 'user-specified')) - call check_and_log_add_var_error(marbl_status_log, sname, subname, labort_marbl_loc) - write(sname, "(2A)") trim(prefix), 'Ea' lname = 'Activation energy for Arrhenius equation' units = 'eV' @@ -1891,16 +1871,19 @@ subroutine marbl_settings_set_all_derived(marbl_status_log) call marbl_status_log%log_noerror('', subname) do n = 1, autotroph_cnt - call set_temp_func_form_iopt(autotroph_settings(n)%temp_func_form_opt, & - autotroph_settings(n)%temp_func_form_iopt, marbl_status_log) + call set_derived_from_temp_func_form(autotroph_settings(n)%temp_func_form_opt, & + autotroph_settings(n)%temp_func_form_iopt, autotroph_settings(n)%Tref, marbl_status_log) write(sname_in, "(A,I0,A)") 'autotroph_settings(', n, ')%temp_func_form_opt' write(sname_out, "(A,I0,A)") 'autotroph_settings(', n, ')%temp_func_form_iopt' if (marbl_status_log%labort_MARBL) then - write(log_message, "(3A)") "set_temp_func_form_iopt(", trim(sname_in), ")" + write(log_message, "(3A)") "set_derived_from_temp_func_form(", trim(sname_in), ")" call marbl_status_log%log_error_trace(log_message, subname) end if call print_single_derived_parm(sname_in, sname_out, & autotroph_settings(n)%temp_func_form_iopt, subname, marbl_status_log) + write(sname_out, "(A,I0,A)") 'autotroph_settings(', n, ')%Tref' + call print_single_derived_parm(sname_in, sname_out, & + autotroph_settings(n)%Tref, subname, marbl_status_log) autotroph_settings(n)%alphaPI = dps * autotroph_settings(n)%alphaPI_per_day write(sname_in, "(A,I0,A)") 'autotroph_settings(', n, ')%alphaPI_per_day' @@ -1930,16 +1913,19 @@ subroutine marbl_settings_set_all_derived(marbl_status_log) call marbl_status_log%log_noerror('', subname) do n = 1, zooplankton_cnt - call set_temp_func_form_iopt(zooplankton_settings(n)%temp_func_form_opt, & - zooplankton_settings(n)%temp_func_form_iopt, marbl_status_log) + call set_derived_from_temp_func_form(zooplankton_settings(n)%temp_func_form_opt, & + zooplankton_settings(n)%temp_func_form_iopt, zooplankton_settings(n)%Tref, marbl_status_log) write(sname_in, "(A,I0,A)") 'zooplankton_settings(', n, ')%temp_func_form_opt' write(sname_out, "(A,I0,A)") 'zooplankton_settings(', n, ')%temp_func_form_iopt' if (marbl_status_log%labort_MARBL) then - write(log_message, "(3A)") "set_temp_func_form_iopt(", trim(sname_in), ")" + write(log_message, "(3A)") "set_derived_from_temp_func_form(", trim(sname_in), ")" call marbl_status_log%log_error_trace(log_message, subname) end if call print_single_derived_parm(sname_in, sname_out, & zooplankton_settings(n)%temp_func_form_iopt, subname, marbl_status_log) + write(sname_out, "(A,I0,A)") 'zooplankton_settings(', n, ')%Tref' + call print_single_derived_parm(sname_in, sname_out, & + zooplankton_settings(n)%Tref, subname, marbl_status_log) zooplankton_settings(n)%z_mort_0 = dps * zooplankton_settings(n)%z_mort_0_per_day write(sname_in, "(A,I0,A)") 'zooplankton_settings(', n, ')%z_mort_0_per_day' @@ -2910,28 +2896,32 @@ end subroutine print_single_derived_parm_int !***************************************************************************** - subroutine set_temp_func_form_iopt(temp_func_form_opt, temp_func_form_iopt, marbl_status_log) + subroutine set_derived_from_temp_func_form(temp_func_form_opt, temp_func_form_iopt, Tref, marbl_status_log) character(len=*), intent(in) :: temp_func_form_opt integer, intent(out) :: temp_func_form_iopt + real(r8), intent(out) :: Tref type(marbl_log_type), intent(inout) :: marbl_status_log - character(len=*), parameter :: subname = "marbl_settings_mod:set_temp_func_form_iopt" + character(len=*), parameter :: subname = "marbl_settings_mod:set_derived_from_temp_func_form" character(len=char_len) :: log_message select case (temp_func_form_opt) case ('q_10') temp_func_form_iopt = temp_func_form_iopt_q10 + Tref = 30.0_r8 case ('arrhenius') temp_func_form_iopt = temp_func_form_iopt_arrhenius + Tref = 25.0_r8 case ('power') temp_func_form_iopt = temp_func_form_iopt_power + Tref = 0.0_r8 case default write(log_message, "(2A)") "unknown temp_func_form_opt: ", trim(temp_func_form_opt) call marbl_status_log%log_error(log_message, subname) return end select - end subroutine set_temp_func_form_iopt + end subroutine set_derived_from_temp_func_form !***************************************************************************** From c653a126bc045243953edac99b14f316bbbc1dcb Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Tue, 11 Jun 2019 14:31:34 -0600 Subject: [PATCH 65/75] Remove Tref from default files MARBL_generate_settings_file was still putting Tref in the input files because it was in the settings file. --- defaults/json/settings_cesm2.0.json | 22 ---------------------- defaults/json/settings_latest.json | 22 ---------------------- defaults/settings_cesm2.0.yaml | 18 ------------------ defaults/settings_latest.yaml | 18 ------------------ 4 files changed, 80 deletions(-) diff --git a/defaults/json/settings_cesm2.0.json b/defaults/json/settings_cesm2.0.json index 6b1407b2..5b02c004 100644 --- a/defaults/json/settings_cesm2.0.json +++ b/defaults/json/settings_cesm2.0.json @@ -84,18 +84,6 @@ "subcategory": "10. autotrophs", "units": "unitless" }, - "Tref": { - "datatype": "real", - "default_value": { - "((autotroph_sname)) == \"diat\"": 30.0, - "((autotroph_sname)) == \"diaz\"": 30.0, - "((autotroph_sname)) == \"sp\"": 30.0, - "default": "1e34" - }, - "longname": "reference temperature (C) used for the temperature scaling functional form", - "subcategory": "10. autotrophs", - "units": "degC" - }, "_type_name": "autotroph_settings_type", "agg_rate_max": { "datatype": "real", @@ -575,16 +563,6 @@ "subcategory": "11. zooplankton", "units": "eV" }, - "Tref": { - "datatype": "real", - "default_value": { - "((zooplankton_sname)) == \"zoo\"": 30.0, - "default": "1e34" - }, - "longname": "reference temperature (C) used for the temperature scaling functional form", - "subcategory": "11. zooplankton", - "units": "degC" - }, "_type_name": "zooplankton_type", "lname": { "datatype": "string", diff --git a/defaults/json/settings_latest.json b/defaults/json/settings_latest.json index 0c49fa51..884dda00 100644 --- a/defaults/json/settings_latest.json +++ b/defaults/json/settings_latest.json @@ -84,18 +84,6 @@ "subcategory": "10. autotrophs", "units": "unitless" }, - "Tref": { - "datatype": "real", - "default_value": { - "((autotroph_sname)) == \"diat\"": 30.0, - "((autotroph_sname)) == \"diaz\"": 30.0, - "((autotroph_sname)) == \"sp\"": 30.0, - "default": "1e34" - }, - "longname": "reference temperature (C) used for the temperature scaling functional form", - "subcategory": "10. autotrophs", - "units": "degC" - }, "_type_name": "autotroph_settings_type", "agg_rate_max": { "datatype": "real", @@ -575,16 +563,6 @@ "subcategory": "11. zooplankton", "units": "eV" }, - "Tref": { - "datatype": "real", - "default_value": { - "((zooplankton_sname)) == \"zoo\"": 30.0, - "default": "1e34" - }, - "longname": "reference temperature (C) used for the temperature scaling functional form", - "subcategory": "11. zooplankton", - "units": "degC" - }, "_type_name": "zooplankton_settings_type", "lname": { "datatype": "string", diff --git a/defaults/settings_cesm2.0.yaml b/defaults/settings_cesm2.0.yaml index 2c8f90b5..c7e296a8 100644 --- a/defaults/settings_cesm2.0.yaml +++ b/defaults/settings_cesm2.0.yaml @@ -748,16 +748,6 @@ PFT_derived_types : units : non-numeric datatype : logical default_value : .false. - Tref: - longname : reference temperature (C) used for the temperature scaling functional form - subcategory : 10. autotrophs - units : degC - datatype : real - default_value : - default : 1e34 - ((autotroph_sname)) == "sp" : 30.0 - ((autotroph_sname)) == "diat" : 30.0 - ((autotroph_sname)) == "diaz" : 30.0 kFe : longname : Fe uptake half-sat constant subcategory : 10. autotrophs @@ -1037,14 +1027,6 @@ PFT_derived_types : default_value : default : 1e34 ((zooplankton_sname)) == "zoo" : 0.075 - Tref: - longname : reference temperature (C) used for the temperature scaling functional form - subcategory : 11. zooplankton - units : degC - datatype : real - default_value : - default : 1e34 - ((zooplankton_sname)) == "zoo" : 30.0 Ea : longname : Activation energy for Arrhenius equation subcategory : 11. zooplankton diff --git a/defaults/settings_latest.yaml b/defaults/settings_latest.yaml index e1e87a90..e2d01331 100644 --- a/defaults/settings_latest.yaml +++ b/defaults/settings_latest.yaml @@ -749,16 +749,6 @@ PFT_derived_types : units : non-numeric datatype : logical default_value : .false. - Tref: - longname : reference temperature (C) used for the temperature scaling functional form - subcategory : 10. autotrophs - units : degC - datatype : real - default_value : - default : 1e34 - ((autotroph_sname)) == "sp" : 30.0 - ((autotroph_sname)) == "diat" : 30.0 - ((autotroph_sname)) == "diaz" : 30.0 kFe : longname : Fe uptake half-sat constant subcategory : 10. autotrophs @@ -1038,14 +1028,6 @@ PFT_derived_types : default_value : default : 1e34 ((zooplankton_sname)) == "zoo" : 0.075 - Tref: - longname : reference temperature (C) used for the temperature scaling functional form - subcategory : 11. zooplankton - units : degC - datatype : real - default_value : - default : 1e34 - ((zooplankton_sname)) == "zoo" : 30.0 Ea : longname : Activation energy for Arrhenius equation subcategory : 11. zooplankton From 5937fcfb08db64e064bf3f2297ca18557472f2f9 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Thu, 13 Jun 2019 10:44:16 -0600 Subject: [PATCH 66/75] Create two new settings files cesm2.1 will match the final configuration of MARBL in the CESM 2.1 release (while future tuning changings will go into settings_latest). The cesm2.1+cocco file will contain settings for Kristen's coccolithophore runs, but in this commit is identical to the latest settings. --- defaults/json/settings_cesm2.1+cocco.json | 1367 +++++++++++++++++++++ defaults/json/settings_cesm2.1.json | 1367 +++++++++++++++++++++ defaults/settings_cesm2.1+cocco.yaml | 1191 ++++++++++++++++++ defaults/settings_cesm2.1.yaml | 1191 ++++++++++++++++++ 4 files changed, 5116 insertions(+) create mode 100644 defaults/json/settings_cesm2.1+cocco.json create mode 100644 defaults/json/settings_cesm2.1.json create mode 100644 defaults/settings_cesm2.1+cocco.yaml create mode 100644 defaults/settings_cesm2.1.yaml diff --git a/defaults/json/settings_cesm2.1+cocco.json b/defaults/json/settings_cesm2.1+cocco.json new file mode 100644 index 00000000..884dda00 --- /dev/null +++ b/defaults/json/settings_cesm2.1+cocco.json @@ -0,0 +1,1367 @@ +{ + "PFT_counts": { + "autotroph_cnt": { + "cannot change": "PFT_defaults == 'CESM2'", + "datatype": "integer", + "default_value": { + "PFT_defaults == \"CESM2\"": 3, + "default": 1 + }, + "longname": "Number of autotroph classes", + "must set": "PFT_defaults == 'user-specified'", + "subcategory": "1. config PFTs", + "units": "unitless" + }, + "max_grazer_prey_cnt": { + "datatype": "integer", + "default_value": { + "PFT_defaults == \"CESM2\"": 3, + "default": 1 + }, + "longname": "Number of grazer prey classes", + "subcategory": "1. config PFTs", + "units": "unitless" + }, + "zooplankton_cnt": { + "datatype": "integer", + "default_value": { + "PFT_defaults == \"CESM2\"": 1, + "default": 1 + }, + "longname": "Number of zooplankton classes", + "subcategory": "1. config PFTs", + "units": "unitless" + } + }, + "PFT_derived_types": { + "autotroph_settings": { + "_array_shape": "autotroph_cnt", + "_is_allocatable": true, + "datatype": { + "Ea": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.32, + "((autotroph_sname)) == \"diaz\"": 0.32, + "((autotroph_sname)) == \"sp\"": 0.32, + "default": "1e34" + }, + "longname": "Activation energy for Arrhenius equation", + "subcategory": "10. autotrophs", + "units": "eV" + }, + "Nfixer": { + "datatype": "logical", + "default_value": { + "((autotroph_sname)) == \"diaz\"": ".true.", + "default": ".false." + }, + "longname": "Flag set to true if autotroph fixes nitrogen", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "PCref_per_day": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 5, + "((autotroph_sname)) == \"diaz\"": 2.5, + "((autotroph_sname)) == \"sp\"": 5, + "default": "1e34" + }, + "longname": "Maximum C-spec growth rate at Tref", + "subcategory": "10. autotrophs", + "units": "1/day" + }, + "Qp_fixed": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": "1.0/117", + "((autotroph_sname)) == \"diaz\"": "0.32*(1.0/117)", + "((autotroph_sname)) == \"sp\"": "1.0/117", + "default": "1e34" + }, + "longname": "P/C ratio when using fixed P/C ratios", + "subcategory": "10. autotrophs", + "units": "unitless" + }, + "_type_name": "autotroph_settings_type", + "agg_rate_max": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.5, + "((autotroph_sname)) == \"diaz\"": 0.5, + "((autotroph_sname)) == \"sp\"": 0.5, + "default": "1e34" + }, + "longname": "Maximum agg rate", + "subcategory": "10. autotrophs", + "units": "1/day" + }, + "agg_rate_min": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.02, + "((autotroph_sname)) == \"diaz\"": 0.01, + "((autotroph_sname)) == \"sp\"": 0.01, + "default": "1e34" + }, + "longname": "Minimum agg rate", + "subcategory": "10. autotrophs", + "units": "1/day" + }, + "alphaPI_per_day": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.28, + "((autotroph_sname)) == \"diaz\"": 0.39, + "((autotroph_sname)) == \"sp\"": 0.39, + "default": "1e34" + }, + "longname": "Initial slope of P_I curve (GD98)", + "subcategory": "10. autotrophs", + "units": "mmol m^2/(mg Chl W day)" + }, + "exp_calcifier": { + "datatype": "logical", + "default_value": { + "default": ".false." + }, + "longname": "Flag set to true if autotroph explicitly handles calcification", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "gQfe_0": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": "30e-6", + "((autotroph_sname)) == \"diaz\"": "60e-6", + "((autotroph_sname)) == \"sp\"": "30e-6", + "default": "1e34" + }, + "longname": "Initial Fe/C ratio for growth", + "subcategory": "10. autotrophs", + "units": "unitless" + }, + "gQfe_min": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 2.5e-06, + "((autotroph_sname)) == \"diaz\"": 2.5e-06, + "((autotroph_sname)) == \"sp\"": 2.5e-06, + "default": "1e34" + }, + "longname": "Minimum Fe/C ratio for growth", + "subcategory": "10. autotrophs", + "units": "unitless" + }, + "imp_calcifier": { + "datatype": "logical", + "default_value": { + "((autotroph_sname)) == \"sp\"": ".true.", + "default": ".false." + }, + "longname": "Flag set to true if autotroph implicitly handles calcification", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "is_carbon_limited": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Flag set to true if autotroph is carbon limited", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "kCO2": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0, + "((autotroph_sname)) == \"diaz\"": 0, + "((autotroph_sname)) == \"sp\"": 0, + "default": "1e34" + }, + "longname": "CO2 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kDOP": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.5, + "((autotroph_sname)) == \"diaz\"": 0.075, + "((autotroph_sname)) == \"sp\"": 0.3, + "default": "1e34" + }, + "longname": "DOP uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kFe": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 7e-05, + "((autotroph_sname)) == \"diaz\"": 4.5e-05, + "((autotroph_sname)) == \"sp\"": 3e-05, + "default": "1e34" + }, + "longname": "Fe uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kNH4": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.05, + "((autotroph_sname)) == \"diaz\"": 0.2, + "((autotroph_sname)) == \"sp\"": 0.01, + "default": "1e34" + }, + "longname": "NH4 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kNO3": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.5, + "((autotroph_sname)) == \"diaz\"": 2, + "((autotroph_sname)) == \"sp\"": 0.25, + "default": "1e34" + }, + "longname": "NO3 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kPO4": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.05, + "((autotroph_sname)) == \"diaz\"": 0.015, + "((autotroph_sname)) == \"sp\"": 0.01, + "default": "1e34" + }, + "longname": "PO4 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kSiO3": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.7, + "((autotroph_sname)) == \"diaz\"": 0, + "((autotroph_sname)) == \"sp\"": 0, + "default": "1e34" + }, + "longname": "SiO3 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "lname": { + "datatype": "string", + "default_value": { + "((autotroph_sname)) == \"diat\"": "Diatom", + "((autotroph_sname)) == \"diaz\"": "Diazotroph", + "((autotroph_sname)) == \"sp\"": "Small Phyto", + "default": "UNSET" + }, + "longname": "Long name of the autotroph", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "loss_poc": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0, + "((autotroph_sname)) == \"diaz\"": 0, + "((autotroph_sname)) == \"sp\"": 0, + "default": "1e34" + }, + "longname": "Routing of loss term", + "subcategory": "10. autotrophs", + "units": "unitless" + }, + "loss_thres": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.02, + "((autotroph_sname)) == \"diaz\"": 0.02, + "((autotroph_sname)) == \"sp\"": 0.01, + "default": "1e34" + }, + "longname": "concentration where losses go to zero", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "loss_thres2": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0, + "((autotroph_sname)) == \"diaz\"": 0.001, + "((autotroph_sname)) == \"sp\"": 0, + "default": "1e34" + }, + "longname": "concentration where losses go to zero", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "mort2_per_day": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.01, + "((autotroph_sname)) == \"diaz\"": 0.01, + "((autotroph_sname)) == \"sp\"": 0.01, + "default": "1e34" + }, + "longname": "Quadratic mortality rate", + "subcategory": "10. autotrophs", + "units": "(1/day)/(mmol/m^3)" + }, + "mort_per_day": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.1, + "((autotroph_sname)) == \"diaz\"": 0.1, + "((autotroph_sname)) == \"sp\"": 0.1, + "default": "1e34" + }, + "longname": "Linear mortality rate", + "subcategory": "10. autotrophs", + "units": "1/day" + }, + "silicifier": { + "datatype": "logical", + "default_value": { + "((autotroph_sname)) == \"diat\"": ".true.", + "default": ".false." + }, + "longname": "Flag set to true if autotroph is a silicifier", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "sname": { + "datatype": "string", + "default_value": { + "((autotroph_sname)) == \"diat\"": "diat", + "((autotroph_sname)) == \"diaz\"": "diaz", + "((autotroph_sname)) == \"sp\"": "sp", + "default": "UNSET" + }, + "longname": "Short name of the autotroph", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "temp_func_form_opt": { + "datatype": "string", + "default_value": { + "((autotroph_sname)) == \"diat\"": "q_10", + "((autotroph_sname)) == \"diaz\"": "q_10", + "((autotroph_sname)) == \"sp\"": "q_10", + "default": "UNSET" + }, + "longname": "Option for the temperature scaling functional form", + "subcategory": "10. autotrophs", + "units": "non-numeric", + "valid_values": [ + "q_10", + "arrhenius", + "power" + ] + }, + "temp_thres": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": -10, + "((autotroph_sname)) == \"diaz\"": 15, + "((autotroph_sname)) == \"sp\"": -10, + "default": "1e34" + }, + "longname": "Temperature where concentration threshold and photosynthesis rate drops", + "subcategory": "10. autotrophs", + "units": "degC" + }, + "thetaN_max": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 4, + "((autotroph_sname)) == \"diaz\"": 2.5, + "((autotroph_sname)) == \"sp\"": 2.5, + "default": "1e34" + }, + "longname": "Maximum thetaN (Chl / N)", + "subcategory": "10. autotrophs", + "units": "mg Chl / mmol" + } + } + }, + "grazing_relationship_settings": { + "_array_shape": [ + "max_grazer_prey_cnt", + "zooplankton_cnt" + ], + "_is_allocatable": true, + "datatype": { + "_type_name": "grazing_relationship_settings_type", + "auto_ind": { + "_array_len_to_print": "auto_ind_cnt", + "_array_shape": "autotroph_cnt", + "_is_allocatable": true, + "datatype": "integer", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 2, + "((grazer_sname)) == \"diaz_zoo\"": 3, + "((grazer_sname)) == \"sp_zoo\"": 1, + "default": 0 + }, + "longname": "Indices of autotrophs being grazed", + "subcategory": "12. grazing", + "units": "unitless" + }, + "auto_ind_cnt": { + "datatype": "integer", + "default_value": { + "default": 1 + }, + "longname": "Number of autotrophs being grazed", + "subcategory": "12. grazing", + "units": "unitless" + }, + "f_zoo_detr": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 0.24, + "((grazer_sname)) == \"diaz_zoo\"": 0.12, + "((grazer_sname)) == \"sp_zoo\"": 0.12, + "default": "1e34" + }, + "longname": "Fraction of zoo losses to detrital", + "subcategory": "12. grazing", + "units": "unitless" + }, + "graze_doc": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 0.06, + "((grazer_sname)) == \"diaz_zoo\"": 0.06, + "((grazer_sname)) == \"sp_zoo\"": 0.06, + "default": "1e34" + }, + "longname": "Routing of grazed term, remainder goes to dic", + "subcategory": "12. grazing", + "units": "unitless" + }, + "graze_poc": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 0.39, + "((grazer_sname)) == \"diaz_zoo\"": 0.1, + "((grazer_sname)) == \"sp_zoo\"": 0, + "default": "1e34" + }, + "longname": "Routing of grazed term, remainder goes to dic", + "subcategory": "12. grazing", + "units": "unitless" + }, + "graze_zoo": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 0.25, + "((grazer_sname)) == \"diaz_zoo\"": 0.3, + "((grazer_sname)) == \"sp_zoo\"": 0.3, + "default": "1e34" + }, + "longname": "Routing of grazed term, remainder goes to dic", + "subcategory": "12. grazing", + "units": "unitless" + }, + "grazing_function": { + "_comment": "1 => Michaelis-Menten, 2 => Sigmoidal", + "datatype": "integer", + "default_value": 1, + "longname": "Functional form of grazing parameterization", + "subcategory": "12. grazing", + "units": "unitless" + }, + "lname": { + "datatype": "string", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": "Grazing of diat by zoo", + "((grazer_sname)) == \"diaz_zoo\"": "Grazing of diaz by zoo", + "((grazer_sname)) == \"sp_zoo\"": "Grazing of sp by zoo", + "default": "UNSET" + }, + "longname": "Long name of the grazing relationship", + "subcategory": "12. grazing", + "units": "non-numeric" + }, + "sname": { + "datatype": "string", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": "grz_diat_zoo", + "((grazer_sname)) == \"diaz_zoo\"": "grz_diaz_zoo", + "((grazer_sname)) == \"sp_zoo\"": "grz_sp_zoo", + "default": "UNSET" + }, + "longname": "Short name of the grazing relationship", + "subcategory": "12. grazing", + "units": "non-numeric" + }, + "z_grz": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 1.2, + "((grazer_sname)) == \"diaz_zoo\"": 1.2, + "((grazer_sname)) == \"sp_zoo\"": 1.2, + "default": "1e34" + }, + "longname": "Grazing coefficient", + "subcategory": "12. grazing", + "units": "(mmol/m^3)^2" + }, + "z_umax_0_per_day": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 3.15, + "((grazer_sname)) == \"diaz_zoo\"": 3.3, + "((grazer_sname)) == \"sp_zoo\"": 3.3, + "default": "1e34" + }, + "longname": "Max zoo growth rate at tref", + "subcategory": "12. grazing", + "units": "1/day" + }, + "zoo_ind": { + "_array_len_to_print": "zoo_ind_cnt", + "_array_shape": "zooplankton_cnt", + "_is_allocatable": true, + "datatype": "integer", + "default_value": 0, + "longname": "Indices of zooplankton being grazed", + "subcategory": "12. grazing", + "units": "unitless" + }, + "zoo_ind_cnt": { + "datatype": "integer", + "default_value": { + "default": 0 + }, + "longname": "Number of zooplankton being grazed", + "subcategory": "12. grazing", + "units": "unitless" + } + } + }, + "zooplankton_settings": { + "_array_shape": "zooplankton_cnt", + "_is_allocatable": true, + "datatype": { + "Ea": { + "datatype": "real", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": 0.65, + "default": "1e34" + }, + "longname": "Activation energy for Arrhenius equation", + "subcategory": "11. zooplankton", + "units": "eV" + }, + "_type_name": "zooplankton_settings_type", + "lname": { + "datatype": "string", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": "Zooplankton", + "default": "UNSET" + }, + "longname": "Long name of the zooplankton", + "subcategory": "11. zooplankton", + "units": "non-numeric" + }, + "loss_thres": { + "datatype": "real", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": 0.075, + "default": "1e34" + }, + "longname": "Zoo concentration where losses go to zero", + "subcategory": "11. zooplankton", + "units": "nmol/cm^3" + }, + "sname": { + "datatype": "string", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": "zoo", + "default": "UNSET" + }, + "longname": "Short name of the zooplankton", + "subcategory": "11. zooplankton", + "units": "non-numeric" + }, + "temp_func_form_opt": { + "datatype": "string", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": "q_10", + "default": "UNSET" + }, + "longname": "Option for the temperature scaling functional form", + "subcategory": "11. zooplankton", + "units": "non-numeric", + "valid_values": [ + "q_10", + "arrhenius", + "power" + ] + }, + "z_mort2_0_per_day": { + "datatype": "real", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": 0.4, + "default": "1e34" + }, + "longname": "Quadratic mortality rate", + "subcategory": "11. zooplankton", + "units": "1/day / (mmol/m^3)" + }, + "z_mort_0_per_day": { + "datatype": "real", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": 0.1, + "default": "1e34" + }, + "longname": "Linear mortality rate", + "subcategory": "11. zooplankton", + "units": "1/day" + } + } + } + }, + "_order": [ + "general_parms", + "general_parms2", + "PFT_counts", + "PFT_derived_types", + "tracer_dependent" + ], + "_tracer_list": { + "((autotroph_sname))13C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Carbon-13", + "units": "mmol/m^3" + }, + "((autotroph_sname))14C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Carbon-14", + "units": "mmol/m^3" + }, + "((autotroph_sname))C": { + "long_name": "((autotroph_lname)) Carbon", + "units": "mmol/m^3" + }, + "((autotroph_sname))Ca13CO3": { + "dependencies": { + "((autotroph_calcifier))": true, + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Ca13CO3", + "units": "mmol/m^3" + }, + "((autotroph_sname))Ca14CO3": { + "dependencies": { + "((autotroph_calcifier))": true, + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Ca14CO3", + "units": "mmol/m^3" + }, + "((autotroph_sname))CaCO3": { + "dependencies": { + "((autotroph_calcifier))": true + }, + "long_name": "((autotroph_lname)) CaCO3", + "units": "mmol/m^3" + }, + "((autotroph_sname))Chl": { + "long_name": "((autotroph_lname)) Chlorophyll", + "units": "mmol/m^3" + }, + "((autotroph_sname))Fe": { + "long_name": "((autotroph_lname)) Iron", + "units": "mmol/m^3" + }, + "((autotroph_sname))P": { + "dependencies": { + "lvariable_PtoC": ".true." + }, + "long_name": "((autotroph_lname)) Phosphorus", + "units": "mmol/m^3" + }, + "((autotroph_sname))Si": { + "dependencies": { + "((autotroph_silicifier))": true + }, + "long_name": "((autotroph_lname)) Silicon", + "units": "mmol/m^3" + }, + "((zooplankton_sname))C": { + "long_name": "((zooplankton_lname)) Carbon", + "units": "mmol/m^3" + }, + "ALK": { + "long_name": "Alkalinity", + "units": "meq/m^3" + }, + "ALK_ALT_CO2": { + "long_name": "Alkalinity, Alternative CO2", + "units": "meq/m^3" + }, + "DI13C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Inorganic Carbon-13", + "units": "mmol/m^3" + }, + "DI14C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Inorganic Carbon-14", + "units": "mmol/m^3" + }, + "DIC": { + "long_name": "Dissolved Inorganic Carbon", + "units": "mmol/m^3" + }, + "DIC_ALT_CO2": { + "long_name": "Dissolved Inorganic Carbon, Alternative CO2", + "units": "mmol/m^3" + }, + "DO13Ctot": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Organic Carbon-13 (semi-labile+refractoy)", + "units": "mmol/m^3" + }, + "DO14Ctot": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Organic Carbon-14 (semi-labile+refractoy)", + "units": "mmol/m^3" + }, + "DOC": { + "long_name": "Dissolved Organic Carbon", + "units": "mmol/m^3" + }, + "DOCr": { + "long_name": "Refractory DOC", + "units": "mmol/m^3" + }, + "DON": { + "long_name": "Dissolved Organic Nitrogen", + "units": "mmol/m^3" + }, + "DONr": { + "long_name": "Refractory DON", + "units": "mmol/m^3" + }, + "DOP": { + "long_name": "Dissolved Organic Phosphorus", + "units": "mmol/m^3" + }, + "DOPr": { + "long_name": "Refractory DOP", + "units": "mmol/m^3" + }, + "Fe": { + "long_name": "Dissolved Inorganic Iron", + "units": "mmol/m^3" + }, + "Lig": { + "long_name": "Iron Binding Ligand", + "units": "mmol/m^3" + }, + "NH4": { + "long_name": "Dissolved Ammonia", + "units": "mmol/m^3" + }, + "NO3": { + "long_name": "Dissolved Inorganic Nitrate", + "units": "mmol/m^3" + }, + "O2": { + "long_name": "Dissolved Oxygen", + "units": "mmol/m^3" + }, + "PO4": { + "long_name": "Dissolved Inorganic Phosphate", + "units": "mmol/m^3" + }, + "SiO3": { + "long_name": "Dissolved Inorganic Silicate", + "units": "mmol/m^3" + }, + "zootot13C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Zooplankton Carbon-13 (sum over all zooplankton)", + "units": "mmol/m^3" + }, + "zootot14C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Zooplankton Carbon-14 (sum over all zooplankton)", + "units": "mmol/m^3" + } + }, + "general_parms": { + "Jint_Ctot_thres_molpm2pyr": { + "datatype": "real", + "default_value": 1e-09, + "longname": "MARBL will abort if abs(Jint_Ctot) exceeds this threshold", + "subcategory": "4. general parameters", + "units": "mol m-2 yr-1" + }, + "PFT_defaults": { + "_CESM2_PFT_keys": { + "autotroph_settings": [ + "sp", + "diat", + "diaz" + ], + "grazing_relationship_settings": [ + "sp_zoo", + "diat_zoo", + "diaz_zoo" + ], + "zooplankton_settings": [ + "zoo" + ] + }, + "_append_to_config_keywords": true, + "datatype": "string", + "default_value": "CESM2", + "longname": "Define how PFTs are initialized", + "subcategory": "1. config PFTs", + "units": "unitless", + "valid_values": [ + "CESM2", + "user-specified" + ] + }, + "POM_bury_frac_max": { + "datatype": "real", + "default_value": 0.8, + "longname": "maximum bury fraction for POM", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "PON_bury_coeff": { + "datatype": "real", + "default_value": 0.5, + "longname": "Scale factor for burial of PON", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "QCaCO3_max": { + "datatype": "real", + "default_value": 0.4, + "longname": "Max CaCO3/C ratio for implicit calcifiers", + "subcategory": "4. general parameters", + "units": "mmol CaCO3/mmol C" + }, + "QCaCO3_max_exp": { + "datatype": "real", + "default_value": 2.0, + "longname": "Max CaCO3/C ratio for explicit calcifiers", + "subcategory": "4. general parameters", + "units": "mmol CaCO3/mmol C" + }, + "auto_mort2_exp": { + "datatype": "real", + "default_value": 1.75, + "longname": "Value of power loss exponent for autotrophs", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "bSi_bury_frac_max": { + "datatype": "real", + "default_value": 1.0, + "longname": "maximum bury fraction for bSi", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "bury_coeff_rmean_timescale_years": { + "datatype": "real", + "default_value": 10, + "longname": "Running mean time scale for bury coefficients", + "subcategory": "4. general parameters", + "units": "years" + }, + "caco3_bury_thres_depth": { + "datatype": "real", + "default_value": "3000e2", + "longname": "Threshold depth for CaCO3 burial when opt = 'fixed_depth'", + "subcategory": "4. general parameters", + "units": "cm" + }, + "caco3_bury_thres_omega_calc": { + "datatype": "real", + "default_value": 0.89, + "longname": "omega calcite threshold for CaCO3 burial when opt = 'omega_calc'", + "subcategory": "4. general parameters", + "units": 1 + }, + "caco3_bury_thres_opt": { + "datatype": "string", + "default_value": "omega_calc", + "longname": "Option of threshold of CaCO3 burial", + "subcategory": "4. general parameters", + "units": "non-numeric", + "valid_values": [ + "fixed_depth", + "omega_calc" + ] + }, + "ciso_fract_factors": { + "datatype": "string", + "default_value": "Laws", + "longname": "Option for which biological fractionation calculation to use", + "subcategory": "4. general parameters", + "units": "non-numeric" + }, + "ciso_lecovars_full_depth_tavg": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Control whether carbon isotope variables are written full depth", + "subcategory": "2. config flags", + "units": "unitless" + }, + "ciso_lsource_sink": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control which portions of the carbon isotope code are executed (useful for debugging)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "ciso_on": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Control whether CISO tracer module is active", + "subcategory": "2. config flags", + "units": "unitless" + }, + "f_graze_CaCO3_remin": { + "datatype": "real", + "default_value": 0.33, + "longname": "Fraction of spCaCO3 grazing which is remineralized in zooplankton guts", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "gQ_Fe_kFe_thres": { + "datatype": "real", + "default_value": 10.0, + "longname": "Fe:kFe ratio threshold in uptake ratio computations", + "subcategory": "4. general parameters", + "units": 1 + }, + "gQ_Si_kSi_thres": { + "datatype": "real", + "default_value": 6.0, + "longname": "Si:kSi ratio threshold in uptake ratio computations", + "subcategory": "4. general parameters", + "units": 1 + }, + "gQsi_0": { + "datatype": "real", + "default_value": 0.137, + "longname": "initial Si/C ratio for growth", + "subcategory": "4. general parameters", + "units": 1 + }, + "gQsi_max": { + "datatype": "real", + "default_value": 0.822, + "longname": "max Si/C ratio for growth", + "subcategory": "4. general parameters", + "units": 1 + }, + "gQsi_min": { + "datatype": "real", + "default_value": 0.0457, + "longname": "min Si/C ratio for growth", + "subcategory": "4. general parameters", + "units": 1 + }, + "ladjust_bury_coeff": { + "_append_to_config_keywords": true, + "datatype": "logical", + "default_value": ".false.", + "longname": "Control if bury coefficients are adjusted (rather than constant)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lcompute_nhx_surface_emis": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control if NHx emissions are computed", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lecovars_full_depth_tavg": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Control whether base ecosystem variables are written full depth", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lflux_gas_co2": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control which portions of code are executed (useful for debugging)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lflux_gas_o2": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control which portions of code are executed (useful for debugging)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lo2_consumption_scalef": { + "datatype": "logical", + "default_value": { + "GRID == \"CESM_x1\"": ".true.", + "default": ".false." + }, + "longname": "Apply o2_consumption_scalef to o2 consumption (and request it as a forcing)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lp_remin_scalef": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Apply p_remin_scalef to particulate remin (and request it as a forcing)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lsource_sink": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control which portions of code are executed (useful for debugging)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lvariable_PtoC": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control if PtoC ratios in autotrophs vary", + "subcategory": "2. config flags", + "units": "unitless" + }, + "o2_sf_o2_range_hi": { + "datatype": "real", + "default_value": 45.0, + "longname": "o2_scalefactor is applied to diss length scales for O2 less than this", + "subcategory": "4. general parameters", + "units": "mmol/m^3" + }, + "o2_sf_o2_range_lo": { + "datatype": "real", + "default_value": 5.0, + "longname": "o2_scalefactor is constant for O2 less than this", + "subcategory": "4. general parameters", + "units": "mmol/m^3" + }, + "o2_sf_val_lo_o2": { + "datatype": "real", + "default_value": 2.6, + "longname": "o2_scalefactor constant for O2 less than o2_sf_o2_range_lo", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_CaCO3_diss": { + "datatype": "real", + "default_value": "500e2", + "longname": "Base CaCO3 dissolution length scale", + "subcategory": "4. general parameters (dissolution)", + "units": "cm" + }, + "parm_CaCO3_gamma": { + "datatype": "real", + "default_value": 0.02, + "longname": "CaCO3 gamma (fraction of production -> hard subclass)", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_FeLig_scavenge_rate0": { + "datatype": "real", + "default_value": 1.2, + "longname": "Scavenging base rate for bound iron", + "subcategory": "4. general parameters (scavenging)", + "units": "unitless" + }, + "parm_Fe_bioavail": { + "datatype": "real", + "default_value": 1.0, + "longname": "Fraction of Fe flux that is bioavailable", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "parm_Fe_desorption_rate0": { + "datatype": "real", + "default_value": "1e-6", + "longname": "Desorption rate for scavenged Fe from particles", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "parm_Fe_scavenge_rate0": { + "datatype": "real", + "default_value": 22.0, + "longname": "Scavenging base rate for Fe", + "subcategory": "4. general parameters (scavenging)", + "units": "unitless" + }, + "parm_Lig_degrade_rate0": { + "datatype": "real", + "default_value": 9.4e-05, + "longname": "Fe-binding ligand bacterial degradation base rate coefficient", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "parm_Lig_scavenge_rate0": { + "datatype": "real", + "default_value": 0.015, + "longname": "Scavenging base rate for bound ligand", + "subcategory": "4. general parameters (scavenging)", + "units": "unitless" + }, + "parm_POC_diss": { + "datatype": "real", + "default_value": "100e2", + "longname": "Base POC dissolution length scale", + "subcategory": "4. general parameters (dissolution)", + "units": "cm" + }, + "parm_SiO2_diss": { + "datatype": "real", + "default_value": "650e2", + "longname": "Base SiO2 dissolution length scale", + "subcategory": "4. general parameters (dissolution)", + "units": "cm" + }, + "parm_SiO2_gamma": { + "datatype": "real", + "default_value": 0.0, + "longname": "SiO2 gamma (fraction of production -> hard subclass)", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_f_prod_sp_CaCO3": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 0.075, + "default": 0.07 + }, + "longname": "Fraction of sp production as CaCO3 production", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "parm_hPOC_CaCO3_ratio": { + "datatype": "real", + "default_value": 0.01, + "longname": "hPOC to CaCO3 ratio", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_hPOC_SiO2_ratio": { + "datatype": "real", + "default_value": 0.01, + "longname": "hPOC to SiO2 ratio", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_hPOC_dust_ratio": { + "datatype": "real", + "default_value": 0.01, + "longname": "hPOC to dust ratio", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_init_POC_bury_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 5.0, + "default": 2.54 + }, + "longname": "Initial scale factor for burial of POC, PON", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "parm_init_POP_bury_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 5.0, + "default": 0.36 + }, + "longname": "Initial scale factor for burial of POP", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "parm_init_bSi_bury_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 1.1, + "default": 1.53 + }, + "longname": "Initial scale factor for burial of bSi", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "parm_kappa_nitrif_per_day": { + "datatype": "real", + "default_value": 0.06, + "longname": "Nitrification inverse time constant", + "subcategory": "4. general parameters (nitrification)", + "units": "1/day" + }, + "parm_labile_ratio": { + "datatype": "real", + "default_value": 0.94, + "longname": "Fraction of loss to DOC that routed directly to DIC", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "parm_nitrif_par_lim": { + "datatype": "real", + "default_value": 1.0, + "longname": "PAR limit for nitrification", + "subcategory": "4. general parameters (nitrification)", + "units": "W/m^2" + }, + "parm_o2_min": { + "datatype": "real", + "default_value": 5.0, + "longname": "Minimum O2 needed for production & consumption", + "subcategory": "4. general parameters", + "units": "nmol/cm^3" + }, + "parm_o2_min_delta": { + "datatype": "real", + "default_value": 5.0, + "longname": "Width of min O2 range", + "subcategory": "4. general parameters", + "units": "nmol/cm^3" + }, + "parm_scalelen_vals": { + "_array_shape": 4, + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": [ + 1, + 3.3, + 4.2, + 4.4 + ], + "default": [ + 1, + 3.6, + 4.7, + 4.8 + ] + }, + "longname": "Prescribed scalelen values", + "subcategory": "5. Scale lengths", + "units": "unitless" + }, + "parm_scalelen_z": { + "_array_shape": 4, + "datatype": "real", + "default_value": [ + "100.0e2", + "250.0e2", + "500.0e2", + "1000.0e2" + ], + "longname": "Depths of prescribed scalelen values", + "subcategory": "5. Scale lengths", + "units": "cm" + }, + "parm_sed_denitrif_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 1.4, + "default": 1 + }, + "longname": "Global scaling factor for sed_denitrif", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "particulate_flux_ref_depth": { + "datatype": "integer", + "default_value": 100, + "longname": "reference depth for particulate flux diagnostics", + "subcategory": "4. general parameters", + "units": "m" + }, + "zoo_mort2_exp": { + "datatype": "real", + "default_value": 1.5, + "longname": "Value of power loss exponent for zooplankton", + "subcategory": "4. general parameters", + "units": "unitless" + } + }, + "general_parms2": { + "init_bury_coeff_opt": { + "datatype": "string", + "default_value": { + "SAVED_STATE_VARS_SOURCE == \"GCM\"": "GCM", + "default": "settings_file", + "not ladjust_bury_coeff": "settings_file" + }, + "longname": "Source of initial burial coefficient", + "subcategory": "3. config strings", + "units": "unitless" + } + }, + "tracer_dependent": { + "tracer_restore_vars": { + "_array_shape": "_tracer_list", + "_is_allocatable": true, + "datatype": "string", + "default_value": { + "GCM == \"CESM\"": [ + "PO4", + "NO3", + "SiO3", + "ALK", + "ALK_ALT_CO2" + ], + "GRID == \"CESM_x1\"": [ + "PO4", + "NO3", + "SiO3", + "ALK", + "ALK_ALT_CO2" + ], + "GRID == \"CESM_x3\"": [ + "PO4", + "NO3", + "SiO3", + "ALK", + "ALK_ALT_CO2" + ], + "default": "" + }, + "longname": "Tracer names for tracers that are restored", + "subcategory": "20. tracer restoring", + "units": "non-numeric" + } + } +} \ No newline at end of file diff --git a/defaults/json/settings_cesm2.1.json b/defaults/json/settings_cesm2.1.json new file mode 100644 index 00000000..884dda00 --- /dev/null +++ b/defaults/json/settings_cesm2.1.json @@ -0,0 +1,1367 @@ +{ + "PFT_counts": { + "autotroph_cnt": { + "cannot change": "PFT_defaults == 'CESM2'", + "datatype": "integer", + "default_value": { + "PFT_defaults == \"CESM2\"": 3, + "default": 1 + }, + "longname": "Number of autotroph classes", + "must set": "PFT_defaults == 'user-specified'", + "subcategory": "1. config PFTs", + "units": "unitless" + }, + "max_grazer_prey_cnt": { + "datatype": "integer", + "default_value": { + "PFT_defaults == \"CESM2\"": 3, + "default": 1 + }, + "longname": "Number of grazer prey classes", + "subcategory": "1. config PFTs", + "units": "unitless" + }, + "zooplankton_cnt": { + "datatype": "integer", + "default_value": { + "PFT_defaults == \"CESM2\"": 1, + "default": 1 + }, + "longname": "Number of zooplankton classes", + "subcategory": "1. config PFTs", + "units": "unitless" + } + }, + "PFT_derived_types": { + "autotroph_settings": { + "_array_shape": "autotroph_cnt", + "_is_allocatable": true, + "datatype": { + "Ea": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.32, + "((autotroph_sname)) == \"diaz\"": 0.32, + "((autotroph_sname)) == \"sp\"": 0.32, + "default": "1e34" + }, + "longname": "Activation energy for Arrhenius equation", + "subcategory": "10. autotrophs", + "units": "eV" + }, + "Nfixer": { + "datatype": "logical", + "default_value": { + "((autotroph_sname)) == \"diaz\"": ".true.", + "default": ".false." + }, + "longname": "Flag set to true if autotroph fixes nitrogen", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "PCref_per_day": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 5, + "((autotroph_sname)) == \"diaz\"": 2.5, + "((autotroph_sname)) == \"sp\"": 5, + "default": "1e34" + }, + "longname": "Maximum C-spec growth rate at Tref", + "subcategory": "10. autotrophs", + "units": "1/day" + }, + "Qp_fixed": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": "1.0/117", + "((autotroph_sname)) == \"diaz\"": "0.32*(1.0/117)", + "((autotroph_sname)) == \"sp\"": "1.0/117", + "default": "1e34" + }, + "longname": "P/C ratio when using fixed P/C ratios", + "subcategory": "10. autotrophs", + "units": "unitless" + }, + "_type_name": "autotroph_settings_type", + "agg_rate_max": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.5, + "((autotroph_sname)) == \"diaz\"": 0.5, + "((autotroph_sname)) == \"sp\"": 0.5, + "default": "1e34" + }, + "longname": "Maximum agg rate", + "subcategory": "10. autotrophs", + "units": "1/day" + }, + "agg_rate_min": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.02, + "((autotroph_sname)) == \"diaz\"": 0.01, + "((autotroph_sname)) == \"sp\"": 0.01, + "default": "1e34" + }, + "longname": "Minimum agg rate", + "subcategory": "10. autotrophs", + "units": "1/day" + }, + "alphaPI_per_day": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.28, + "((autotroph_sname)) == \"diaz\"": 0.39, + "((autotroph_sname)) == \"sp\"": 0.39, + "default": "1e34" + }, + "longname": "Initial slope of P_I curve (GD98)", + "subcategory": "10. autotrophs", + "units": "mmol m^2/(mg Chl W day)" + }, + "exp_calcifier": { + "datatype": "logical", + "default_value": { + "default": ".false." + }, + "longname": "Flag set to true if autotroph explicitly handles calcification", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "gQfe_0": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": "30e-6", + "((autotroph_sname)) == \"diaz\"": "60e-6", + "((autotroph_sname)) == \"sp\"": "30e-6", + "default": "1e34" + }, + "longname": "Initial Fe/C ratio for growth", + "subcategory": "10. autotrophs", + "units": "unitless" + }, + "gQfe_min": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 2.5e-06, + "((autotroph_sname)) == \"diaz\"": 2.5e-06, + "((autotroph_sname)) == \"sp\"": 2.5e-06, + "default": "1e34" + }, + "longname": "Minimum Fe/C ratio for growth", + "subcategory": "10. autotrophs", + "units": "unitless" + }, + "imp_calcifier": { + "datatype": "logical", + "default_value": { + "((autotroph_sname)) == \"sp\"": ".true.", + "default": ".false." + }, + "longname": "Flag set to true if autotroph implicitly handles calcification", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "is_carbon_limited": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Flag set to true if autotroph is carbon limited", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "kCO2": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0, + "((autotroph_sname)) == \"diaz\"": 0, + "((autotroph_sname)) == \"sp\"": 0, + "default": "1e34" + }, + "longname": "CO2 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kDOP": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.5, + "((autotroph_sname)) == \"diaz\"": 0.075, + "((autotroph_sname)) == \"sp\"": 0.3, + "default": "1e34" + }, + "longname": "DOP uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kFe": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 7e-05, + "((autotroph_sname)) == \"diaz\"": 4.5e-05, + "((autotroph_sname)) == \"sp\"": 3e-05, + "default": "1e34" + }, + "longname": "Fe uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kNH4": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.05, + "((autotroph_sname)) == \"diaz\"": 0.2, + "((autotroph_sname)) == \"sp\"": 0.01, + "default": "1e34" + }, + "longname": "NH4 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kNO3": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.5, + "((autotroph_sname)) == \"diaz\"": 2, + "((autotroph_sname)) == \"sp\"": 0.25, + "default": "1e34" + }, + "longname": "NO3 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kPO4": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.05, + "((autotroph_sname)) == \"diaz\"": 0.015, + "((autotroph_sname)) == \"sp\"": 0.01, + "default": "1e34" + }, + "longname": "PO4 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "kSiO3": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.7, + "((autotroph_sname)) == \"diaz\"": 0, + "((autotroph_sname)) == \"sp\"": 0, + "default": "1e34" + }, + "longname": "SiO3 uptake half-sat constant", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "lname": { + "datatype": "string", + "default_value": { + "((autotroph_sname)) == \"diat\"": "Diatom", + "((autotroph_sname)) == \"diaz\"": "Diazotroph", + "((autotroph_sname)) == \"sp\"": "Small Phyto", + "default": "UNSET" + }, + "longname": "Long name of the autotroph", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "loss_poc": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0, + "((autotroph_sname)) == \"diaz\"": 0, + "((autotroph_sname)) == \"sp\"": 0, + "default": "1e34" + }, + "longname": "Routing of loss term", + "subcategory": "10. autotrophs", + "units": "unitless" + }, + "loss_thres": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.02, + "((autotroph_sname)) == \"diaz\"": 0.02, + "((autotroph_sname)) == \"sp\"": 0.01, + "default": "1e34" + }, + "longname": "concentration where losses go to zero", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "loss_thres2": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0, + "((autotroph_sname)) == \"diaz\"": 0.001, + "((autotroph_sname)) == \"sp\"": 0, + "default": "1e34" + }, + "longname": "concentration where losses go to zero", + "subcategory": "10. autotrophs", + "units": "nmol/cm^3" + }, + "mort2_per_day": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.01, + "((autotroph_sname)) == \"diaz\"": 0.01, + "((autotroph_sname)) == \"sp\"": 0.01, + "default": "1e34" + }, + "longname": "Quadratic mortality rate", + "subcategory": "10. autotrophs", + "units": "(1/day)/(mmol/m^3)" + }, + "mort_per_day": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 0.1, + "((autotroph_sname)) == \"diaz\"": 0.1, + "((autotroph_sname)) == \"sp\"": 0.1, + "default": "1e34" + }, + "longname": "Linear mortality rate", + "subcategory": "10. autotrophs", + "units": "1/day" + }, + "silicifier": { + "datatype": "logical", + "default_value": { + "((autotroph_sname)) == \"diat\"": ".true.", + "default": ".false." + }, + "longname": "Flag set to true if autotroph is a silicifier", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "sname": { + "datatype": "string", + "default_value": { + "((autotroph_sname)) == \"diat\"": "diat", + "((autotroph_sname)) == \"diaz\"": "diaz", + "((autotroph_sname)) == \"sp\"": "sp", + "default": "UNSET" + }, + "longname": "Short name of the autotroph", + "subcategory": "10. autotrophs", + "units": "non-numeric" + }, + "temp_func_form_opt": { + "datatype": "string", + "default_value": { + "((autotroph_sname)) == \"diat\"": "q_10", + "((autotroph_sname)) == \"diaz\"": "q_10", + "((autotroph_sname)) == \"sp\"": "q_10", + "default": "UNSET" + }, + "longname": "Option for the temperature scaling functional form", + "subcategory": "10. autotrophs", + "units": "non-numeric", + "valid_values": [ + "q_10", + "arrhenius", + "power" + ] + }, + "temp_thres": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": -10, + "((autotroph_sname)) == \"diaz\"": 15, + "((autotroph_sname)) == \"sp\"": -10, + "default": "1e34" + }, + "longname": "Temperature where concentration threshold and photosynthesis rate drops", + "subcategory": "10. autotrophs", + "units": "degC" + }, + "thetaN_max": { + "datatype": "real", + "default_value": { + "((autotroph_sname)) == \"diat\"": 4, + "((autotroph_sname)) == \"diaz\"": 2.5, + "((autotroph_sname)) == \"sp\"": 2.5, + "default": "1e34" + }, + "longname": "Maximum thetaN (Chl / N)", + "subcategory": "10. autotrophs", + "units": "mg Chl / mmol" + } + } + }, + "grazing_relationship_settings": { + "_array_shape": [ + "max_grazer_prey_cnt", + "zooplankton_cnt" + ], + "_is_allocatable": true, + "datatype": { + "_type_name": "grazing_relationship_settings_type", + "auto_ind": { + "_array_len_to_print": "auto_ind_cnt", + "_array_shape": "autotroph_cnt", + "_is_allocatable": true, + "datatype": "integer", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 2, + "((grazer_sname)) == \"diaz_zoo\"": 3, + "((grazer_sname)) == \"sp_zoo\"": 1, + "default": 0 + }, + "longname": "Indices of autotrophs being grazed", + "subcategory": "12. grazing", + "units": "unitless" + }, + "auto_ind_cnt": { + "datatype": "integer", + "default_value": { + "default": 1 + }, + "longname": "Number of autotrophs being grazed", + "subcategory": "12. grazing", + "units": "unitless" + }, + "f_zoo_detr": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 0.24, + "((grazer_sname)) == \"diaz_zoo\"": 0.12, + "((grazer_sname)) == \"sp_zoo\"": 0.12, + "default": "1e34" + }, + "longname": "Fraction of zoo losses to detrital", + "subcategory": "12. grazing", + "units": "unitless" + }, + "graze_doc": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 0.06, + "((grazer_sname)) == \"diaz_zoo\"": 0.06, + "((grazer_sname)) == \"sp_zoo\"": 0.06, + "default": "1e34" + }, + "longname": "Routing of grazed term, remainder goes to dic", + "subcategory": "12. grazing", + "units": "unitless" + }, + "graze_poc": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 0.39, + "((grazer_sname)) == \"diaz_zoo\"": 0.1, + "((grazer_sname)) == \"sp_zoo\"": 0, + "default": "1e34" + }, + "longname": "Routing of grazed term, remainder goes to dic", + "subcategory": "12. grazing", + "units": "unitless" + }, + "graze_zoo": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 0.25, + "((grazer_sname)) == \"diaz_zoo\"": 0.3, + "((grazer_sname)) == \"sp_zoo\"": 0.3, + "default": "1e34" + }, + "longname": "Routing of grazed term, remainder goes to dic", + "subcategory": "12. grazing", + "units": "unitless" + }, + "grazing_function": { + "_comment": "1 => Michaelis-Menten, 2 => Sigmoidal", + "datatype": "integer", + "default_value": 1, + "longname": "Functional form of grazing parameterization", + "subcategory": "12. grazing", + "units": "unitless" + }, + "lname": { + "datatype": "string", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": "Grazing of diat by zoo", + "((grazer_sname)) == \"diaz_zoo\"": "Grazing of diaz by zoo", + "((grazer_sname)) == \"sp_zoo\"": "Grazing of sp by zoo", + "default": "UNSET" + }, + "longname": "Long name of the grazing relationship", + "subcategory": "12. grazing", + "units": "non-numeric" + }, + "sname": { + "datatype": "string", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": "grz_diat_zoo", + "((grazer_sname)) == \"diaz_zoo\"": "grz_diaz_zoo", + "((grazer_sname)) == \"sp_zoo\"": "grz_sp_zoo", + "default": "UNSET" + }, + "longname": "Short name of the grazing relationship", + "subcategory": "12. grazing", + "units": "non-numeric" + }, + "z_grz": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 1.2, + "((grazer_sname)) == \"diaz_zoo\"": 1.2, + "((grazer_sname)) == \"sp_zoo\"": 1.2, + "default": "1e34" + }, + "longname": "Grazing coefficient", + "subcategory": "12. grazing", + "units": "(mmol/m^3)^2" + }, + "z_umax_0_per_day": { + "datatype": "real", + "default_value": { + "((grazer_sname)) == \"diat_zoo\"": 3.15, + "((grazer_sname)) == \"diaz_zoo\"": 3.3, + "((grazer_sname)) == \"sp_zoo\"": 3.3, + "default": "1e34" + }, + "longname": "Max zoo growth rate at tref", + "subcategory": "12. grazing", + "units": "1/day" + }, + "zoo_ind": { + "_array_len_to_print": "zoo_ind_cnt", + "_array_shape": "zooplankton_cnt", + "_is_allocatable": true, + "datatype": "integer", + "default_value": 0, + "longname": "Indices of zooplankton being grazed", + "subcategory": "12. grazing", + "units": "unitless" + }, + "zoo_ind_cnt": { + "datatype": "integer", + "default_value": { + "default": 0 + }, + "longname": "Number of zooplankton being grazed", + "subcategory": "12. grazing", + "units": "unitless" + } + } + }, + "zooplankton_settings": { + "_array_shape": "zooplankton_cnt", + "_is_allocatable": true, + "datatype": { + "Ea": { + "datatype": "real", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": 0.65, + "default": "1e34" + }, + "longname": "Activation energy for Arrhenius equation", + "subcategory": "11. zooplankton", + "units": "eV" + }, + "_type_name": "zooplankton_settings_type", + "lname": { + "datatype": "string", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": "Zooplankton", + "default": "UNSET" + }, + "longname": "Long name of the zooplankton", + "subcategory": "11. zooplankton", + "units": "non-numeric" + }, + "loss_thres": { + "datatype": "real", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": 0.075, + "default": "1e34" + }, + "longname": "Zoo concentration where losses go to zero", + "subcategory": "11. zooplankton", + "units": "nmol/cm^3" + }, + "sname": { + "datatype": "string", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": "zoo", + "default": "UNSET" + }, + "longname": "Short name of the zooplankton", + "subcategory": "11. zooplankton", + "units": "non-numeric" + }, + "temp_func_form_opt": { + "datatype": "string", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": "q_10", + "default": "UNSET" + }, + "longname": "Option for the temperature scaling functional form", + "subcategory": "11. zooplankton", + "units": "non-numeric", + "valid_values": [ + "q_10", + "arrhenius", + "power" + ] + }, + "z_mort2_0_per_day": { + "datatype": "real", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": 0.4, + "default": "1e34" + }, + "longname": "Quadratic mortality rate", + "subcategory": "11. zooplankton", + "units": "1/day / (mmol/m^3)" + }, + "z_mort_0_per_day": { + "datatype": "real", + "default_value": { + "((zooplankton_sname)) == \"zoo\"": 0.1, + "default": "1e34" + }, + "longname": "Linear mortality rate", + "subcategory": "11. zooplankton", + "units": "1/day" + } + } + } + }, + "_order": [ + "general_parms", + "general_parms2", + "PFT_counts", + "PFT_derived_types", + "tracer_dependent" + ], + "_tracer_list": { + "((autotroph_sname))13C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Carbon-13", + "units": "mmol/m^3" + }, + "((autotroph_sname))14C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Carbon-14", + "units": "mmol/m^3" + }, + "((autotroph_sname))C": { + "long_name": "((autotroph_lname)) Carbon", + "units": "mmol/m^3" + }, + "((autotroph_sname))Ca13CO3": { + "dependencies": { + "((autotroph_calcifier))": true, + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Ca13CO3", + "units": "mmol/m^3" + }, + "((autotroph_sname))Ca14CO3": { + "dependencies": { + "((autotroph_calcifier))": true, + "ciso_on": ".true." + }, + "long_name": "((autotroph_lname)) Ca14CO3", + "units": "mmol/m^3" + }, + "((autotroph_sname))CaCO3": { + "dependencies": { + "((autotroph_calcifier))": true + }, + "long_name": "((autotroph_lname)) CaCO3", + "units": "mmol/m^3" + }, + "((autotroph_sname))Chl": { + "long_name": "((autotroph_lname)) Chlorophyll", + "units": "mmol/m^3" + }, + "((autotroph_sname))Fe": { + "long_name": "((autotroph_lname)) Iron", + "units": "mmol/m^3" + }, + "((autotroph_sname))P": { + "dependencies": { + "lvariable_PtoC": ".true." + }, + "long_name": "((autotroph_lname)) Phosphorus", + "units": "mmol/m^3" + }, + "((autotroph_sname))Si": { + "dependencies": { + "((autotroph_silicifier))": true + }, + "long_name": "((autotroph_lname)) Silicon", + "units": "mmol/m^3" + }, + "((zooplankton_sname))C": { + "long_name": "((zooplankton_lname)) Carbon", + "units": "mmol/m^3" + }, + "ALK": { + "long_name": "Alkalinity", + "units": "meq/m^3" + }, + "ALK_ALT_CO2": { + "long_name": "Alkalinity, Alternative CO2", + "units": "meq/m^3" + }, + "DI13C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Inorganic Carbon-13", + "units": "mmol/m^3" + }, + "DI14C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Inorganic Carbon-14", + "units": "mmol/m^3" + }, + "DIC": { + "long_name": "Dissolved Inorganic Carbon", + "units": "mmol/m^3" + }, + "DIC_ALT_CO2": { + "long_name": "Dissolved Inorganic Carbon, Alternative CO2", + "units": "mmol/m^3" + }, + "DO13Ctot": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Organic Carbon-13 (semi-labile+refractoy)", + "units": "mmol/m^3" + }, + "DO14Ctot": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Dissolved Organic Carbon-14 (semi-labile+refractoy)", + "units": "mmol/m^3" + }, + "DOC": { + "long_name": "Dissolved Organic Carbon", + "units": "mmol/m^3" + }, + "DOCr": { + "long_name": "Refractory DOC", + "units": "mmol/m^3" + }, + "DON": { + "long_name": "Dissolved Organic Nitrogen", + "units": "mmol/m^3" + }, + "DONr": { + "long_name": "Refractory DON", + "units": "mmol/m^3" + }, + "DOP": { + "long_name": "Dissolved Organic Phosphorus", + "units": "mmol/m^3" + }, + "DOPr": { + "long_name": "Refractory DOP", + "units": "mmol/m^3" + }, + "Fe": { + "long_name": "Dissolved Inorganic Iron", + "units": "mmol/m^3" + }, + "Lig": { + "long_name": "Iron Binding Ligand", + "units": "mmol/m^3" + }, + "NH4": { + "long_name": "Dissolved Ammonia", + "units": "mmol/m^3" + }, + "NO3": { + "long_name": "Dissolved Inorganic Nitrate", + "units": "mmol/m^3" + }, + "O2": { + "long_name": "Dissolved Oxygen", + "units": "mmol/m^3" + }, + "PO4": { + "long_name": "Dissolved Inorganic Phosphate", + "units": "mmol/m^3" + }, + "SiO3": { + "long_name": "Dissolved Inorganic Silicate", + "units": "mmol/m^3" + }, + "zootot13C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Zooplankton Carbon-13 (sum over all zooplankton)", + "units": "mmol/m^3" + }, + "zootot14C": { + "dependencies": { + "ciso_on": ".true." + }, + "long_name": "Zooplankton Carbon-14 (sum over all zooplankton)", + "units": "mmol/m^3" + } + }, + "general_parms": { + "Jint_Ctot_thres_molpm2pyr": { + "datatype": "real", + "default_value": 1e-09, + "longname": "MARBL will abort if abs(Jint_Ctot) exceeds this threshold", + "subcategory": "4. general parameters", + "units": "mol m-2 yr-1" + }, + "PFT_defaults": { + "_CESM2_PFT_keys": { + "autotroph_settings": [ + "sp", + "diat", + "diaz" + ], + "grazing_relationship_settings": [ + "sp_zoo", + "diat_zoo", + "diaz_zoo" + ], + "zooplankton_settings": [ + "zoo" + ] + }, + "_append_to_config_keywords": true, + "datatype": "string", + "default_value": "CESM2", + "longname": "Define how PFTs are initialized", + "subcategory": "1. config PFTs", + "units": "unitless", + "valid_values": [ + "CESM2", + "user-specified" + ] + }, + "POM_bury_frac_max": { + "datatype": "real", + "default_value": 0.8, + "longname": "maximum bury fraction for POM", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "PON_bury_coeff": { + "datatype": "real", + "default_value": 0.5, + "longname": "Scale factor for burial of PON", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "QCaCO3_max": { + "datatype": "real", + "default_value": 0.4, + "longname": "Max CaCO3/C ratio for implicit calcifiers", + "subcategory": "4. general parameters", + "units": "mmol CaCO3/mmol C" + }, + "QCaCO3_max_exp": { + "datatype": "real", + "default_value": 2.0, + "longname": "Max CaCO3/C ratio for explicit calcifiers", + "subcategory": "4. general parameters", + "units": "mmol CaCO3/mmol C" + }, + "auto_mort2_exp": { + "datatype": "real", + "default_value": 1.75, + "longname": "Value of power loss exponent for autotrophs", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "bSi_bury_frac_max": { + "datatype": "real", + "default_value": 1.0, + "longname": "maximum bury fraction for bSi", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "bury_coeff_rmean_timescale_years": { + "datatype": "real", + "default_value": 10, + "longname": "Running mean time scale for bury coefficients", + "subcategory": "4. general parameters", + "units": "years" + }, + "caco3_bury_thres_depth": { + "datatype": "real", + "default_value": "3000e2", + "longname": "Threshold depth for CaCO3 burial when opt = 'fixed_depth'", + "subcategory": "4. general parameters", + "units": "cm" + }, + "caco3_bury_thres_omega_calc": { + "datatype": "real", + "default_value": 0.89, + "longname": "omega calcite threshold for CaCO3 burial when opt = 'omega_calc'", + "subcategory": "4. general parameters", + "units": 1 + }, + "caco3_bury_thres_opt": { + "datatype": "string", + "default_value": "omega_calc", + "longname": "Option of threshold of CaCO3 burial", + "subcategory": "4. general parameters", + "units": "non-numeric", + "valid_values": [ + "fixed_depth", + "omega_calc" + ] + }, + "ciso_fract_factors": { + "datatype": "string", + "default_value": "Laws", + "longname": "Option for which biological fractionation calculation to use", + "subcategory": "4. general parameters", + "units": "non-numeric" + }, + "ciso_lecovars_full_depth_tavg": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Control whether carbon isotope variables are written full depth", + "subcategory": "2. config flags", + "units": "unitless" + }, + "ciso_lsource_sink": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control which portions of the carbon isotope code are executed (useful for debugging)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "ciso_on": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Control whether CISO tracer module is active", + "subcategory": "2. config flags", + "units": "unitless" + }, + "f_graze_CaCO3_remin": { + "datatype": "real", + "default_value": 0.33, + "longname": "Fraction of spCaCO3 grazing which is remineralized in zooplankton guts", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "gQ_Fe_kFe_thres": { + "datatype": "real", + "default_value": 10.0, + "longname": "Fe:kFe ratio threshold in uptake ratio computations", + "subcategory": "4. general parameters", + "units": 1 + }, + "gQ_Si_kSi_thres": { + "datatype": "real", + "default_value": 6.0, + "longname": "Si:kSi ratio threshold in uptake ratio computations", + "subcategory": "4. general parameters", + "units": 1 + }, + "gQsi_0": { + "datatype": "real", + "default_value": 0.137, + "longname": "initial Si/C ratio for growth", + "subcategory": "4. general parameters", + "units": 1 + }, + "gQsi_max": { + "datatype": "real", + "default_value": 0.822, + "longname": "max Si/C ratio for growth", + "subcategory": "4. general parameters", + "units": 1 + }, + "gQsi_min": { + "datatype": "real", + "default_value": 0.0457, + "longname": "min Si/C ratio for growth", + "subcategory": "4. general parameters", + "units": 1 + }, + "ladjust_bury_coeff": { + "_append_to_config_keywords": true, + "datatype": "logical", + "default_value": ".false.", + "longname": "Control if bury coefficients are adjusted (rather than constant)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lcompute_nhx_surface_emis": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control if NHx emissions are computed", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lecovars_full_depth_tavg": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Control whether base ecosystem variables are written full depth", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lflux_gas_co2": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control which portions of code are executed (useful for debugging)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lflux_gas_o2": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control which portions of code are executed (useful for debugging)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lo2_consumption_scalef": { + "datatype": "logical", + "default_value": { + "GRID == \"CESM_x1\"": ".true.", + "default": ".false." + }, + "longname": "Apply o2_consumption_scalef to o2 consumption (and request it as a forcing)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lp_remin_scalef": { + "datatype": "logical", + "default_value": ".false.", + "longname": "Apply p_remin_scalef to particulate remin (and request it as a forcing)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lsource_sink": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control which portions of code are executed (useful for debugging)", + "subcategory": "2. config flags", + "units": "unitless" + }, + "lvariable_PtoC": { + "datatype": "logical", + "default_value": ".true.", + "longname": "Control if PtoC ratios in autotrophs vary", + "subcategory": "2. config flags", + "units": "unitless" + }, + "o2_sf_o2_range_hi": { + "datatype": "real", + "default_value": 45.0, + "longname": "o2_scalefactor is applied to diss length scales for O2 less than this", + "subcategory": "4. general parameters", + "units": "mmol/m^3" + }, + "o2_sf_o2_range_lo": { + "datatype": "real", + "default_value": 5.0, + "longname": "o2_scalefactor is constant for O2 less than this", + "subcategory": "4. general parameters", + "units": "mmol/m^3" + }, + "o2_sf_val_lo_o2": { + "datatype": "real", + "default_value": 2.6, + "longname": "o2_scalefactor constant for O2 less than o2_sf_o2_range_lo", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_CaCO3_diss": { + "datatype": "real", + "default_value": "500e2", + "longname": "Base CaCO3 dissolution length scale", + "subcategory": "4. general parameters (dissolution)", + "units": "cm" + }, + "parm_CaCO3_gamma": { + "datatype": "real", + "default_value": 0.02, + "longname": "CaCO3 gamma (fraction of production -> hard subclass)", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_FeLig_scavenge_rate0": { + "datatype": "real", + "default_value": 1.2, + "longname": "Scavenging base rate for bound iron", + "subcategory": "4. general parameters (scavenging)", + "units": "unitless" + }, + "parm_Fe_bioavail": { + "datatype": "real", + "default_value": 1.0, + "longname": "Fraction of Fe flux that is bioavailable", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "parm_Fe_desorption_rate0": { + "datatype": "real", + "default_value": "1e-6", + "longname": "Desorption rate for scavenged Fe from particles", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "parm_Fe_scavenge_rate0": { + "datatype": "real", + "default_value": 22.0, + "longname": "Scavenging base rate for Fe", + "subcategory": "4. general parameters (scavenging)", + "units": "unitless" + }, + "parm_Lig_degrade_rate0": { + "datatype": "real", + "default_value": 9.4e-05, + "longname": "Fe-binding ligand bacterial degradation base rate coefficient", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "parm_Lig_scavenge_rate0": { + "datatype": "real", + "default_value": 0.015, + "longname": "Scavenging base rate for bound ligand", + "subcategory": "4. general parameters (scavenging)", + "units": "unitless" + }, + "parm_POC_diss": { + "datatype": "real", + "default_value": "100e2", + "longname": "Base POC dissolution length scale", + "subcategory": "4. general parameters (dissolution)", + "units": "cm" + }, + "parm_SiO2_diss": { + "datatype": "real", + "default_value": "650e2", + "longname": "Base SiO2 dissolution length scale", + "subcategory": "4. general parameters (dissolution)", + "units": "cm" + }, + "parm_SiO2_gamma": { + "datatype": "real", + "default_value": 0.0, + "longname": "SiO2 gamma (fraction of production -> hard subclass)", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_f_prod_sp_CaCO3": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 0.075, + "default": 0.07 + }, + "longname": "Fraction of sp production as CaCO3 production", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "parm_hPOC_CaCO3_ratio": { + "datatype": "real", + "default_value": 0.01, + "longname": "hPOC to CaCO3 ratio", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_hPOC_SiO2_ratio": { + "datatype": "real", + "default_value": 0.01, + "longname": "hPOC to SiO2 ratio", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_hPOC_dust_ratio": { + "datatype": "real", + "default_value": 0.01, + "longname": "hPOC to dust ratio", + "subcategory": "4. general parameters", + "units": 1 + }, + "parm_init_POC_bury_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 5.0, + "default": 2.54 + }, + "longname": "Initial scale factor for burial of POC, PON", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "parm_init_POP_bury_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 5.0, + "default": 0.36 + }, + "longname": "Initial scale factor for burial of POP", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "parm_init_bSi_bury_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 1.1, + "default": 1.53 + }, + "longname": "Initial scale factor for burial of bSi", + "subcategory": "4. general parameters (bury coeffs)", + "units": "unitless" + }, + "parm_kappa_nitrif_per_day": { + "datatype": "real", + "default_value": 0.06, + "longname": "Nitrification inverse time constant", + "subcategory": "4. general parameters (nitrification)", + "units": "1/day" + }, + "parm_labile_ratio": { + "datatype": "real", + "default_value": 0.94, + "longname": "Fraction of loss to DOC that routed directly to DIC", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "parm_nitrif_par_lim": { + "datatype": "real", + "default_value": 1.0, + "longname": "PAR limit for nitrification", + "subcategory": "4. general parameters (nitrification)", + "units": "W/m^2" + }, + "parm_o2_min": { + "datatype": "real", + "default_value": 5.0, + "longname": "Minimum O2 needed for production & consumption", + "subcategory": "4. general parameters", + "units": "nmol/cm^3" + }, + "parm_o2_min_delta": { + "datatype": "real", + "default_value": 5.0, + "longname": "Width of min O2 range", + "subcategory": "4. general parameters", + "units": "nmol/cm^3" + }, + "parm_scalelen_vals": { + "_array_shape": 4, + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": [ + 1, + 3.3, + 4.2, + 4.4 + ], + "default": [ + 1, + 3.6, + 4.7, + 4.8 + ] + }, + "longname": "Prescribed scalelen values", + "subcategory": "5. Scale lengths", + "units": "unitless" + }, + "parm_scalelen_z": { + "_array_shape": 4, + "datatype": "real", + "default_value": [ + "100.0e2", + "250.0e2", + "500.0e2", + "1000.0e2" + ], + "longname": "Depths of prescribed scalelen values", + "subcategory": "5. Scale lengths", + "units": "cm" + }, + "parm_sed_denitrif_coeff": { + "datatype": "real", + "default_value": { + "GRID == \"CESM_x3\"": 1.4, + "default": 1 + }, + "longname": "Global scaling factor for sed_denitrif", + "subcategory": "4. general parameters", + "units": "unitless" + }, + "particulate_flux_ref_depth": { + "datatype": "integer", + "default_value": 100, + "longname": "reference depth for particulate flux diagnostics", + "subcategory": "4. general parameters", + "units": "m" + }, + "zoo_mort2_exp": { + "datatype": "real", + "default_value": 1.5, + "longname": "Value of power loss exponent for zooplankton", + "subcategory": "4. general parameters", + "units": "unitless" + } + }, + "general_parms2": { + "init_bury_coeff_opt": { + "datatype": "string", + "default_value": { + "SAVED_STATE_VARS_SOURCE == \"GCM\"": "GCM", + "default": "settings_file", + "not ladjust_bury_coeff": "settings_file" + }, + "longname": "Source of initial burial coefficient", + "subcategory": "3. config strings", + "units": "unitless" + } + }, + "tracer_dependent": { + "tracer_restore_vars": { + "_array_shape": "_tracer_list", + "_is_allocatable": true, + "datatype": "string", + "default_value": { + "GCM == \"CESM\"": [ + "PO4", + "NO3", + "SiO3", + "ALK", + "ALK_ALT_CO2" + ], + "GRID == \"CESM_x1\"": [ + "PO4", + "NO3", + "SiO3", + "ALK", + "ALK_ALT_CO2" + ], + "GRID == \"CESM_x3\"": [ + "PO4", + "NO3", + "SiO3", + "ALK", + "ALK_ALT_CO2" + ], + "default": "" + }, + "longname": "Tracer names for tracers that are restored", + "subcategory": "20. tracer restoring", + "units": "non-numeric" + } + } +} \ No newline at end of file diff --git a/defaults/settings_cesm2.1+cocco.yaml b/defaults/settings_cesm2.1+cocco.yaml new file mode 100644 index 00000000..e2d01331 --- /dev/null +++ b/defaults/settings_cesm2.1+cocco.yaml @@ -0,0 +1,1191 @@ +# ABOUT THIS FILE +# --------------- +# MARBL users can change settings values for runtime-configurable variables via a settings +# input file. MARBL provides a python script that can generate an input file by reading a +# JSON file containing the configurable variables and default values, but JSON does not allow +# comments in the file format so the workflow is to edit this YAML file and then generate +# the JSON file via $MARBL/MARBL_tools/yaml_to_json.py +# +# Parameters in MARBL are divided into four different stages, based on the order in which they are set +# 1. General Parameters: variables that have no dependencies on other stages +# (note that init_bury_coeff_opt is alone in general_parms2 because it depends on ladjust_bury_coeff) +# 2. PFT Counts: variables that can not be set until after PFT_defaults (in General Parameters) is known +# 3. PFT Derived Types: variables that can not be set until PFT Counts are known +# (autotroph_cnt, zooplankton_cnt, and max_grazer_prey_cnt) +# 4. Post-Tracer: variables that can not be set until the tracer count is known +# (tracer count depends on PFT Derived Types) +# +# All variables need to provide the following metadata: +# 1. longname: a description of the variable +# 2. subcategory: when writing parameters to the log, MARBL will group variables by subcategory +# 3. units: physical units (use "unitless" for pure numbers and "non-numeric" for strings / logicals) +# 4. datatype: integer, real, logical, or string +# 5. default_value: Value to use unless overwritten by the MARBL input file +# NOTE: some parameters provide different default values for different configurations; +# e.g. in CESM, the value of some parameters is resolution-dependent. In these +# cases, default_value should be a dictionary with a "default" key and then keys +# for whatever resolutions differ from the default. +# +# Accepted keys: +# 1. default +# 2. CESM_x3 +# +# There are also some optional metadata options: +# 1. valid_values: only values that MARBL will accept (default_value must be in valid_values!) +# 2. cannot change: +# 3. must set: +# 4. _append_to_config_keywords: if default values of variables processed later depend on the +# value of another variable, then that variable needs to have +# _append_to_config_keywords = True +# + +# Order in which the categories are parsed +_order : + - general_parms + - general_parms2 + - PFT_counts + - PFT_derived_types + - tracer_dependent + +# Tracer count +_tracer_list : + # Non-living tracers + PO4 : + long_name : Dissolved Inorganic Phosphate + units : mmol/m^3 + NO3 : + long_name : Dissolved Inorganic Nitrate + units : mmol/m^3 + SiO3 : + long_name : Dissolved Inorganic Silicate + units : mmol/m^3 + NH4 : + long_name : Dissolved Ammonia + units : mmol/m^3 + Fe : + long_name : Dissolved Inorganic Iron + units : mmol/m^3 + Lig : + long_name : Iron Binding Ligand + units : mmol/m^3 + O2 : + long_name : Dissolved Oxygen + units : mmol/m^3 + DIC : + long_name : Dissolved Inorganic Carbon + units : mmol/m^3 + DIC_ALT_CO2 : + long_name : Dissolved Inorganic Carbon, Alternative CO2 + units : mmol/m^3 + ALK : + long_name : Alkalinity + units : meq/m^3 + ALK_ALT_CO2 : + long_name : Alkalinity, Alternative CO2 + units : meq/m^3 + DOC : + long_name : Dissolved Organic Carbon + units : mmol/m^3 + DON : + long_name : Dissolved Organic Nitrogen + units : mmol/m^3 + DOP : + long_name : Dissolved Organic Phosphorus + units : mmol/m^3 + DOPr : + long_name : Refractory DOP + units : mmol/m^3 + DONr : + long_name : Refractory DON + units : mmol/m^3 + DOCr : + long_name : Refractory DOC + units : mmol/m^3 + # Non-living (ciso only) + DI13C : + dependencies : + ciso_on : .true. + long_name : Dissolved Inorganic Carbon-13 + units : mmol/m^3 + DO13Ctot : + dependencies : + ciso_on : .true. + long_name : Dissolved Organic Carbon-13 (semi-labile+refractoy) + units : mmol/m^3 + DI14C : + dependencies : + ciso_on : .true. + long_name : Dissolved Inorganic Carbon-14 + units : mmol/m^3 + DO14Ctot : + dependencies : + ciso_on : .true. + long_name : Dissolved Organic Carbon-14 (semi-labile+refractoy) + units : mmol/m^3 + + # Per-autotroph tracers + ((autotroph_sname))Chl : + long_name : ((autotroph_lname)) Chlorophyll + units : mmol/m^3 + ((autotroph_sname))C : + long_name : ((autotroph_lname)) Carbon + units : mmol/m^3 + ((autotroph_sname))Fe : + long_name : ((autotroph_lname)) Iron + units : mmol/m^3 + ((autotroph_sname))Si : + dependencies : + ((autotroph_silicifier)) : True + long_name : ((autotroph_lname)) Silicon + units : mmol/m^3 + ((autotroph_sname))CaCO3 : + dependencies : + ((autotroph_calcifier)) : True + long_name : ((autotroph_lname)) CaCO3 + units : mmol/m^3 + ((autotroph_sname))P : + dependencies : + lvariable_PtoC : .true. + long_name : ((autotroph_lname)) Phosphorus + units : mmol/m^3 + # Per-autotroph (ciso only) + ((autotroph_sname))13C : + dependencies : + ciso_on : .true. + long_name : ((autotroph_lname)) Carbon-13 + units : mmol/m^3 + ((autotroph_sname))14C : + dependencies : + ciso_on : .true. + long_name : ((autotroph_lname)) Carbon-14 + units : mmol/m^3 + ((autotroph_sname))Ca13CO3 : + dependencies : + ciso_on : .true. + ((autotroph_calcifier)) : True + long_name : ((autotroph_lname)) Ca13CO3 + units : mmol/m^3 + ((autotroph_sname))Ca14CO3 : + dependencies : + ciso_on : .true. + ((autotroph_calcifier)) : True + long_name : ((autotroph_lname)) Ca14CO3 + units : mmol/m^3 + + # Per-zooplankton tracers + ((zooplankton_sname))C : + long_name : ((zooplankton_lname)) Carbon + units : mmol/m^3 + # Total zooplankton tracers (ciso only) + zootot13C : + dependencies : + ciso_on : .true. + long_name : Zooplankton Carbon-13 (sum over all zooplankton) + units : mmol/m^3 + zootot14C : + dependencies : + ciso_on : .true. + long_name : Zooplankton Carbon-14 (sum over all zooplankton) + units : mmol/m^3 + +################################################################################ +# Category 1: General Parameters # +################################################################################ + +general_parms : + PFT_defaults : + longname : Define how PFTs are initialized + subcategory : 1. config PFTs + units : unitless + datatype : string + default_value : CESM2 + valid_values : + - CESM2 + - user-specified + _CESM2_PFT_keys : + autotroph_settings : + - sp + - diat + - diaz + zooplankton_settings : + - zoo + grazing_relationship_settings : + - sp_zoo + - diat_zoo + - diaz_zoo + _append_to_config_keywords : true + ciso_on : + longname : Control whether CISO tracer module is active + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + lsource_sink : + longname : Control which portions of code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + ciso_lsource_sink : + longname : Control which portions of the carbon isotope code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lecovars_full_depth_tavg : + longname : Control whether base ecosystem variables are written full depth + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + ciso_lecovars_full_depth_tavg : + longname : Control whether carbon isotope variables are written full depth + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + lflux_gas_o2 : + longname : Control which portions of code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lflux_gas_co2 : + longname : Control which portions of code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lcompute_nhx_surface_emis : + longname : Control if NHx emissions are computed + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lvariable_PtoC : + longname : Control if PtoC ratios in autotrophs vary + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + ladjust_bury_coeff : + longname : Control if bury coefficients are adjusted (rather than constant) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + _append_to_config_keywords : true + lo2_consumption_scalef : + longname : Apply o2_consumption_scalef to o2 consumption (and request it as a forcing) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : # default value is resolution dependent! + default : .false. + GRID == "CESM_x1" : .true. + lp_remin_scalef : + longname : Apply p_remin_scalef to particulate remin (and request it as a forcing) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + Jint_Ctot_thres_molpm2pyr : + longname : MARBL will abort if abs(Jint_Ctot) exceeds this threshold + subcategory : 4. general parameters + units : mol m-2 yr-1 + datatype : real + default_value : 1.0e-9 + gQsi_0 : + longname : initial Si/C ratio for growth + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.137 + gQsi_max : + longname : max Si/C ratio for growth + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.822 + gQsi_min : + longname : min Si/C ratio for growth + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.0457 + gQ_Fe_kFe_thres : + longname : Fe:kFe ratio threshold in uptake ratio computations + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 10.0 + gQ_Si_kSi_thres : + longname : Si:kSi ratio threshold in uptake ratio computations + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 6.0 + parm_Fe_bioavail : + longname : Fraction of Fe flux that is bioavailable + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1.0 + particulate_flux_ref_depth : + longname : reference depth for particulate flux diagnostics + subcategory : 4. general parameters + units : m + datatype : integer + default_value : 100 + parm_o2_min : + longname : Minimum O2 needed for production & consumption + subcategory : 4. general parameters + units : nmol/cm^3 + datatype : real + default_value : 5.0 + parm_o2_min_delta : + longname : Width of min O2 range + subcategory : 4. general parameters + units : nmol/cm^3 + datatype : real + default_value : 5.0 + parm_kappa_nitrif_per_day : + longname : Nitrification inverse time constant + subcategory : 4. general parameters (nitrification) + units : 1/day + datatype : real + default_value : 0.06 + parm_nitrif_par_lim : + longname : PAR limit for nitrification + subcategory : 4. general parameters (nitrification) + units : W/m^2 + datatype : real + default_value : 1.0 + parm_labile_ratio : + longname : Fraction of loss to DOC that routed directly to DIC + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 0.94 + parm_init_POC_bury_coeff : + longname : Initial scale factor for burial of POC, PON + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 2.54 + GRID == "CESM_x3" : 5.0 + parm_init_POP_bury_coeff : + longname : Initial scale factor for burial of POP + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 0.36 + GRID == "CESM_x3" : 5.0 + parm_init_bSi_bury_coeff : + longname : Initial scale factor for burial of bSi + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 1.53 + GRID == "CESM_x3" : 1.1 + parm_Fe_scavenge_rate0 : + longname : Scavenging base rate for Fe + subcategory : 4. general parameters (scavenging) + units : unitless + datatype : real + default_value : 22.0 + parm_Lig_scavenge_rate0 : + longname : Scavenging base rate for bound ligand + subcategory : 4. general parameters (scavenging) + units : unitless + datatype : real + default_value : 0.015 + parm_FeLig_scavenge_rate0 : + longname : Scavenging base rate for bound iron + subcategory : 4. general parameters (scavenging) + units : unitless + datatype : real + default_value : 1.2 + parm_Lig_degrade_rate0 : + longname : Fe-binding ligand bacterial degradation base rate coefficient + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 0.000094 + parm_Fe_desorption_rate0 : + longname : Desorption rate for scavenged Fe from particles + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1e-6 + parm_f_prod_sp_CaCO3 : + longname : Fraction of sp production as CaCO3 production + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 0.07 + GRID == "CESM_x3" : 0.075 + parm_POC_diss : + longname : Base POC dissolution length scale + subcategory : 4. general parameters (dissolution) + units : cm + datatype : real + default_value : 100e2 + parm_SiO2_diss : + longname : Base SiO2 dissolution length scale + subcategory : 4. general parameters (dissolution) + units : cm + datatype : real + default_value : 650e2 + parm_SiO2_gamma : + longname : SiO2 gamma (fraction of production -> hard subclass) + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.0 + parm_hPOC_SiO2_ratio : + longname : hPOC to SiO2 ratio + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.01 + parm_CaCO3_diss : + longname : Base CaCO3 dissolution length scale + subcategory : 4. general parameters (dissolution) + units : cm + datatype : real + default_value : 500e2 + parm_CaCO3_gamma : + longname : CaCO3 gamma (fraction of production -> hard subclass) + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.02 + parm_hPOC_CaCO3_ratio : + longname : hPOC to CaCO3 ratio + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.01 + parm_hPOC_dust_ratio : + longname : hPOC to dust ratio + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.01 + o2_sf_o2_range_hi : + longname : o2_scalefactor is applied to diss length scales for O2 less than this + subcategory : 4. general parameters + units : mmol/m^3 + datatype : real + default_value : 45.0 + o2_sf_o2_range_lo : + longname : o2_scalefactor is constant for O2 less than this + subcategory : 4. general parameters + units : mmol/m^3 + datatype : real + default_value : 5.0 + o2_sf_val_lo_o2 : + longname : o2_scalefactor constant for O2 less than o2_sf_o2_range_lo + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 2.6 + parm_sed_denitrif_coeff : + longname : Global scaling factor for sed_denitrif + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : + default : 1 + GRID == "CESM_x3" : 1.4 + bury_coeff_rmean_timescale_years : + longname : Running mean time scale for bury coefficients + subcategory : 4. general parameters + units : years + datatype : real + default_value : 10 + parm_scalelen_z : + longname : Depths of prescribed scalelen values + subcategory : 5. Scale lengths + units : cm + datatype : real + _array_shape : 4 + default_value : + - 100.0e2 + - 250.0e2 + - 500.0e2 + - 1000.0e2 + parm_scalelen_vals : + longname : Prescribed scalelen values + subcategory : 5. Scale lengths + units : unitless + datatype : real + _array_shape : 4 + default_value : + default : + - 1 + - 3.6 + - 4.7 + - 4.8 + GRID == "CESM_x3" : + - 1 + - 3.3 + - 4.2 + - 4.4 + caco3_bury_thres_opt : + longname : Option of threshold of CaCO3 burial + subcategory : 4. general parameters + units : non-numeric + datatype : string + default_value : omega_calc + valid_values : + - fixed_depth + - omega_calc + caco3_bury_thres_depth : + longname : Threshold depth for CaCO3 burial when opt = 'fixed_depth' + subcategory : 4. general parameters + units : cm + datatype : real + default_value : 3000e2 + caco3_bury_thres_omega_calc : + longname : omega calcite threshold for CaCO3 burial when opt = 'omega_calc' + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.89 + PON_bury_coeff : + longname : Scale factor for burial of PON + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : 0.5 + POM_bury_frac_max : + longname : maximum bury fraction for POM + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : 0.8 + bSi_bury_frac_max : + longname : maximum bury fraction for bSi + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : 1.0 + ciso_fract_factors : + longname : Option for which biological fractionation calculation to use + subcategory : 4. general parameters + units : non-numeric + datatype : string + default_value : Laws + auto_mort2_exp : + longname : Value of power loss exponent for autotrophs + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1.75 + zoo_mort2_exp : + longname : Value of power loss exponent for zooplankton + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1.5 + QCaCO3_max : + longname : Max CaCO3/C ratio for implicit calcifiers + subcategory : 4. general parameters + units : mmol CaCO3/mmol C + datatype : real + default_value : 0.40 + QCaCO3_max_exp : + longname : Max CaCO3/C ratio for explicit calcifiers + subcategory : 4. general parameters + units : mmol CaCO3/mmol C + datatype : real + default_value : 2.0 + f_graze_CaCO3_remin : + longname : Fraction of spCaCO3 grazing which is remineralized in zooplankton guts + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 0.33 + +################################################################################ +# Category 1.5: General Parameters (cont) # +################################################################################ + +general_parms2 : + init_bury_coeff_opt : + longname : Source of initial burial coefficient + subcategory : 3. config strings + units : unitless + datatype : string + default_value : + # Note: this relies on SAVED_STATE_VARS_SOURCE appearing in _config_keyword + # before ladjust_bury_coeff because matching the keyword in + # MARBL_settings_file_class::_get_var_value relies on the last entry + # in _config_keyword that matches a key below; for this variable, if + # ladjust_bury_coeff = .false. and SAVED_STATE_VARS_SOURCE = GCM we + # want init_bury_coeff_opt = settings_file + default : settings_file + not ladjust_bury_coeff : settings_file + SAVED_STATE_VARS_SOURCE == "GCM" : GCM + +################################################################################ +# Category 2: PFT_counts # +################################################################################ + +PFT_counts : + autotroph_cnt : + longname : Number of autotroph classes + subcategory : 1. config PFTs + units : unitless + datatype : integer + default_value : + default : 1 + PFT_defaults == "CESM2" : 3 + cannot change : PFT_defaults == 'CESM2' + must set : PFT_defaults == 'user-specified' + zooplankton_cnt : + longname : Number of zooplankton classes + subcategory : 1. config PFTs + units : unitless + datatype : integer + default_value : + default : 1 + PFT_defaults == "CESM2" : 1 + max_grazer_prey_cnt : + longname : Number of grazer prey classes + subcategory : 1. config PFTs + units : unitless + datatype : integer + default_value : + default : 1 + PFT_defaults == "CESM2" : 3 + +################################################################################ +# Category 3: PFT_derived_types # +################################################################################ + +PFT_derived_types : + autotroph_settings : + _array_shape : autotroph_cnt + _is_allocatable : true + datatype : + # Components of the derived type + # (_* are not part of the type) + _type_name : autotroph_settings_type + sname : + longname : Short name of the autotroph + subcategory : 10. autotrophs + units : non-numeric + datatype : string + default_value : + default : UNSET + ((autotroph_sname)) == "sp" : sp + ((autotroph_sname)) == "diat" : diat + ((autotroph_sname)) == "diaz" : diaz + lname : + longname : Long name of the autotroph + subcategory : 10. autotrophs + units : non-numeric + datatype : string + default_value : + default : UNSET + ((autotroph_sname)) == "sp" : Small Phyto + ((autotroph_sname)) == "diat" : Diatom + ((autotroph_sname)) == "diaz" : Diazotroph + temp_func_form_opt: + longname : Option for the temperature scaling functional form + subcategory : 10. autotrophs + units : non-numeric + datatype : string + valid_values : + - q_10 + - arrhenius + - power + default_value : + default : UNSET + ((autotroph_sname)) == "sp" : q_10 + ((autotroph_sname)) == "diat" : q_10 + ((autotroph_sname)) == "diaz" : q_10 + Nfixer : + longname : Flag set to true if autotroph fixes nitrogen + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : + default : .false. + ((autotroph_sname)) == "diaz" : .true. + imp_calcifier : + longname : Flag set to true if autotroph implicitly handles calcification + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : + default : .false. + ((autotroph_sname)) == "sp" : .true. + exp_calcifier : + longname : Flag set to true if autotroph explicitly handles calcification + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : + default : .false. + silicifier : + longname : Flag set to true if autotroph is a silicifier + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : + default : .false. + ((autotroph_sname)) == "diat" : .true. + is_carbon_limited : + longname : Flag set to true if autotroph is carbon limited + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : .false. + kFe : + longname : Fe uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.03e-3 + ((autotroph_sname)) == "diat" : 0.07e-3 + ((autotroph_sname)) == "diaz" : 0.045e-3 + kCO2 : + longname : CO2 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0 + ((autotroph_sname)) == "diat" : 0 + ((autotroph_sname)) == "diaz" : 0 + kPO4 : + longname : PO4 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.01 + ((autotroph_sname)) == "diat" : 0.05 + ((autotroph_sname)) == "diaz" : 0.015 + kDOP : + longname : DOP uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.3 + ((autotroph_sname)) == "diat" : 0.5 + ((autotroph_sname)) == "diaz" : 0.075 + kNO3 : + longname : NO3 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.25 + ((autotroph_sname)) == "diat" : 0.5 + ((autotroph_sname)) == "diaz" : 2 + kNH4 : + longname : NH4 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.01 + ((autotroph_sname)) == "diat" : 0.05 + ((autotroph_sname)) == "diaz" : 0.2 + kSiO3 : + longname : SiO3 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0 + ((autotroph_sname)) == "diat" : 0.7 + ((autotroph_sname)) == "diaz" : 0 + Qp_fixed : + longname : P/C ratio when using fixed P/C ratios + subcategory : 10. autotrophs + units : unitless + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 1.0/117 + ((autotroph_sname)) == "diat" : 1.0/117 + ((autotroph_sname)) == "diaz" : 0.32*(1.0/117) + gQfe_0 : + longname : Initial Fe/C ratio for growth + subcategory : 10. autotrophs + units : unitless + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 30e-6 + ((autotroph_sname)) == "diat" : 30e-6 + ((autotroph_sname)) == "diaz" : 60e-6 + gQfe_min : + longname : Minimum Fe/C ratio for growth + subcategory : 10. autotrophs + units : unitless + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 2.5e-6 + ((autotroph_sname)) == "diat" : 2.5e-6 + ((autotroph_sname)) == "diaz" : 2.5e-6 + alphaPI_per_day : + longname : Initial slope of P_I curve (GD98) + subcategory : 10. autotrophs + units : mmol m^2/(mg Chl W day) + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.39 + ((autotroph_sname)) == "diat" : 0.28 + ((autotroph_sname)) == "diaz" : 0.39 + PCref_per_day : + longname : Maximum C-spec growth rate at Tref + subcategory : 10. autotrophs + units : 1/day + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 5 + ((autotroph_sname)) == "diat" : 5 + ((autotroph_sname)) == "diaz" : 2.5 + thetaN_max : + longname : Maximum thetaN (Chl / N) + subcategory : 10. autotrophs + units : mg Chl / mmol + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 2.5 + ((autotroph_sname)) == "diat" : 4 + ((autotroph_sname)) == "diaz" : 2.5 + loss_thres : + longname : concentration where losses go to zero + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.01 + ((autotroph_sname)) == "diat" : 0.02 + ((autotroph_sname)) == "diaz" : 0.02 + loss_thres2 : + longname : concentration where losses go to zero + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0 + ((autotroph_sname)) == "diat" : 0 + ((autotroph_sname)) == "diaz" : 0.001 + temp_thres : + longname : Temperature where concentration threshold and photosynthesis rate drops + subcategory : 10. autotrophs + units : degC + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : -10 + ((autotroph_sname)) == "diat" : -10 + ((autotroph_sname)) == "diaz" : 15 + mort_per_day : + longname : Linear mortality rate + subcategory : 10. autotrophs + units : 1/day + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.1 + ((autotroph_sname)) == "diat" : 0.1 + ((autotroph_sname)) == "diaz" : 0.1 + mort2_per_day : + longname : Quadratic mortality rate + subcategory : 10. autotrophs + units : (1/day)/(mmol/m^3) + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.01 + ((autotroph_sname)) == "diat" : 0.01 + ((autotroph_sname)) == "diaz" : 0.01 + agg_rate_max : + longname : Maximum agg rate + subcategory : 10. autotrophs + units : 1/day + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.5 + ((autotroph_sname)) == "diat" : 0.5 + ((autotroph_sname)) == "diaz" : 0.5 + agg_rate_min : + longname : Minimum agg rate + subcategory : 10. autotrophs + units : 1/day + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.01 + ((autotroph_sname)) == "diat" : 0.02 + ((autotroph_sname)) == "diaz" : 0.01 + loss_poc : + longname : Routing of loss term + subcategory : 10. autotrophs + units : unitless + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0 + ((autotroph_sname)) == "diat" : 0 + ((autotroph_sname)) == "diaz" : 0 + Ea : + longname : Activation energy for Arrhenius equation + subcategory : 10. autotrophs + units : eV + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.32 + ((autotroph_sname)) == "diat" : 0.32 + ((autotroph_sname)) == "diaz" : 0.32 + zooplankton_settings : + _array_shape : zooplankton_cnt + _is_allocatable : true + datatype : + # Components of the derived type + # (_* are not part of the type) + _type_name : zooplankton_settings_type + sname : + longname : Short name of the zooplankton + subcategory : 11. zooplankton + units : non-numeric + datatype : string + default_value : + default : UNSET + ((zooplankton_sname)) == "zoo" : zoo + lname : + longname : Long name of the zooplankton + subcategory : 11. zooplankton + units : non-numeric + datatype : string + default_value : + default : UNSET + ((zooplankton_sname)) == "zoo" : Zooplankton + temp_func_form_opt: + longname : Option for the temperature scaling functional form + subcategory : 11. zooplankton + units : non-numeric + datatype : string + valid_values : + - q_10 + - arrhenius + - power + default_value : + default : UNSET + ((zooplankton_sname)) == "zoo" : q_10 + z_mort_0_per_day : + longname : Linear mortality rate + subcategory : 11. zooplankton + units : 1/day + datatype : real + default_value : + default : 1e34 + ((zooplankton_sname)) == "zoo" : 0.1 + z_mort2_0_per_day : + longname : Quadratic mortality rate + subcategory : 11. zooplankton + units : 1/day / (mmol/m^3) + datatype : real + default_value : + default : 1e34 + ((zooplankton_sname)) == "zoo" : 0.4 + loss_thres : + longname : Zoo concentration where losses go to zero + subcategory : 11. zooplankton + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((zooplankton_sname)) == "zoo" : 0.075 + Ea : + longname : Activation energy for Arrhenius equation + subcategory : 11. zooplankton + units : eV + datatype : real + default_value : + default : 1e34 + ((zooplankton_sname)) == "zoo" : 0.65 + grazing_relationship_settings : + _array_shape : + - max_grazer_prey_cnt + - zooplankton_cnt + _is_allocatable : true + datatype : + _type_name : grazing_relationship_settings_type + sname : + longname : Short name of the grazing relationship + subcategory : 12. grazing + units : non-numeric + datatype : string + default_value : + default : UNSET + ((grazer_sname)) == "sp_zoo" : grz_sp_zoo + ((grazer_sname)) == "diat_zoo" : grz_diat_zoo + ((grazer_sname)) == "diaz_zoo" : grz_diaz_zoo + lname : + longname : Long name of the grazing relationship + subcategory : 12. grazing + units : non-numeric + datatype : string + default_value : + default : UNSET + ((grazer_sname)) == "sp_zoo" : Grazing of sp by zoo + ((grazer_sname)) == "diat_zoo" : Grazing of diat by zoo + ((grazer_sname)) == "diaz_zoo" : Grazing of diaz by zoo + auto_ind_cnt : + longname : Number of autotrophs being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : + default : 1 + zoo_ind_cnt : + longname : Number of zooplankton being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : + default : 0 + grazing_function : + longname : Functional form of grazing parameterization + subcategory : 12. grazing + units : unitless + datatype : integer + _comment : 1 => Michaelis-Menten, 2 => Sigmoidal + default_value : 1 + z_umax_0_per_day : + longname : Max zoo growth rate at tref + subcategory : 12. grazing + units : 1/day + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_zoo" : 3.3 + ((grazer_sname)) == "diat_zoo" : 3.15 + ((grazer_sname)) == "diaz_zoo" : 3.3 + z_grz : + longname : Grazing coefficient + subcategory : 12. grazing + units : (mmol/m^3)^2 + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_zoo" : 1.2 + ((grazer_sname)) == "diat_zoo" : 1.2 + ((grazer_sname)) == "diaz_zoo" : 1.2 + graze_zoo : + longname : Routing of grazed term, remainder goes to dic + subcategory : 12. grazing + units : unitless + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_zoo" : 0.3 + ((grazer_sname)) == "diat_zoo" : 0.25 + ((grazer_sname)) == "diaz_zoo" : 0.3 + graze_poc : + longname : Routing of grazed term, remainder goes to dic + subcategory : 12. grazing + units : unitless + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_zoo" : 0 + ((grazer_sname)) == "diat_zoo" : 0.39 + ((grazer_sname)) == "diaz_zoo" : 0.1 + graze_doc : + longname : Routing of grazed term, remainder goes to dic + subcategory : 12. grazing + units : unitless + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_zoo" : 0.06 + ((grazer_sname)) == "diat_zoo" : 0.06 + ((grazer_sname)) == "diaz_zoo" : 0.06 + f_zoo_detr : + longname : Fraction of zoo losses to detrital + subcategory : 12. grazing + units : unitless + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_zoo" : 0.12 + ((grazer_sname)) == "diat_zoo" : 0.24 + ((grazer_sname)) == "diaz_zoo" : 0.12 + auto_ind : + _array_shape : autotroph_cnt + _array_len_to_print : auto_ind_cnt + _is_allocatable : true + longname : Indices of autotrophs being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : + default : 0 + ((grazer_sname)) == "sp_zoo" : 1 # index where autotroph_name = sp + ((grazer_sname)) == "diat_zoo" : 2 # index where autotroph_name = diat + ((grazer_sname)) == "diaz_zoo" : 3 # index where autotroph_name = diaz + zoo_ind : + _array_shape : zooplankton_cnt + _array_len_to_print : zoo_ind_cnt + _is_allocatable : true + longname : Indices of zooplankton being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : 0 + +################################################################################ +# Category 4: tracer_dependent # +################################################################################ + +tracer_dependent : + tracer_restore_vars : + longname : Tracer names for tracers that are restored + subcategory : 20. tracer restoring + units : non-numeric + datatype : string + _array_shape : _tracer_list + _is_allocatable : true + default_value : + default : '' + GCM == "CESM" : &CESM_TRACER_RESTORE + - 'PO4' + - 'NO3' + - 'SiO3' + - 'ALK' + - 'ALK_ALT_CO2' + GRID == "CESM_x3" : *CESM_TRACER_RESTORE + GRID == "CESM_x1" : *CESM_TRACER_RESTORE diff --git a/defaults/settings_cesm2.1.yaml b/defaults/settings_cesm2.1.yaml new file mode 100644 index 00000000..e2d01331 --- /dev/null +++ b/defaults/settings_cesm2.1.yaml @@ -0,0 +1,1191 @@ +# ABOUT THIS FILE +# --------------- +# MARBL users can change settings values for runtime-configurable variables via a settings +# input file. MARBL provides a python script that can generate an input file by reading a +# JSON file containing the configurable variables and default values, but JSON does not allow +# comments in the file format so the workflow is to edit this YAML file and then generate +# the JSON file via $MARBL/MARBL_tools/yaml_to_json.py +# +# Parameters in MARBL are divided into four different stages, based on the order in which they are set +# 1. General Parameters: variables that have no dependencies on other stages +# (note that init_bury_coeff_opt is alone in general_parms2 because it depends on ladjust_bury_coeff) +# 2. PFT Counts: variables that can not be set until after PFT_defaults (in General Parameters) is known +# 3. PFT Derived Types: variables that can not be set until PFT Counts are known +# (autotroph_cnt, zooplankton_cnt, and max_grazer_prey_cnt) +# 4. Post-Tracer: variables that can not be set until the tracer count is known +# (tracer count depends on PFT Derived Types) +# +# All variables need to provide the following metadata: +# 1. longname: a description of the variable +# 2. subcategory: when writing parameters to the log, MARBL will group variables by subcategory +# 3. units: physical units (use "unitless" for pure numbers and "non-numeric" for strings / logicals) +# 4. datatype: integer, real, logical, or string +# 5. default_value: Value to use unless overwritten by the MARBL input file +# NOTE: some parameters provide different default values for different configurations; +# e.g. in CESM, the value of some parameters is resolution-dependent. In these +# cases, default_value should be a dictionary with a "default" key and then keys +# for whatever resolutions differ from the default. +# +# Accepted keys: +# 1. default +# 2. CESM_x3 +# +# There are also some optional metadata options: +# 1. valid_values: only values that MARBL will accept (default_value must be in valid_values!) +# 2. cannot change: +# 3. must set: +# 4. _append_to_config_keywords: if default values of variables processed later depend on the +# value of another variable, then that variable needs to have +# _append_to_config_keywords = True +# + +# Order in which the categories are parsed +_order : + - general_parms + - general_parms2 + - PFT_counts + - PFT_derived_types + - tracer_dependent + +# Tracer count +_tracer_list : + # Non-living tracers + PO4 : + long_name : Dissolved Inorganic Phosphate + units : mmol/m^3 + NO3 : + long_name : Dissolved Inorganic Nitrate + units : mmol/m^3 + SiO3 : + long_name : Dissolved Inorganic Silicate + units : mmol/m^3 + NH4 : + long_name : Dissolved Ammonia + units : mmol/m^3 + Fe : + long_name : Dissolved Inorganic Iron + units : mmol/m^3 + Lig : + long_name : Iron Binding Ligand + units : mmol/m^3 + O2 : + long_name : Dissolved Oxygen + units : mmol/m^3 + DIC : + long_name : Dissolved Inorganic Carbon + units : mmol/m^3 + DIC_ALT_CO2 : + long_name : Dissolved Inorganic Carbon, Alternative CO2 + units : mmol/m^3 + ALK : + long_name : Alkalinity + units : meq/m^3 + ALK_ALT_CO2 : + long_name : Alkalinity, Alternative CO2 + units : meq/m^3 + DOC : + long_name : Dissolved Organic Carbon + units : mmol/m^3 + DON : + long_name : Dissolved Organic Nitrogen + units : mmol/m^3 + DOP : + long_name : Dissolved Organic Phosphorus + units : mmol/m^3 + DOPr : + long_name : Refractory DOP + units : mmol/m^3 + DONr : + long_name : Refractory DON + units : mmol/m^3 + DOCr : + long_name : Refractory DOC + units : mmol/m^3 + # Non-living (ciso only) + DI13C : + dependencies : + ciso_on : .true. + long_name : Dissolved Inorganic Carbon-13 + units : mmol/m^3 + DO13Ctot : + dependencies : + ciso_on : .true. + long_name : Dissolved Organic Carbon-13 (semi-labile+refractoy) + units : mmol/m^3 + DI14C : + dependencies : + ciso_on : .true. + long_name : Dissolved Inorganic Carbon-14 + units : mmol/m^3 + DO14Ctot : + dependencies : + ciso_on : .true. + long_name : Dissolved Organic Carbon-14 (semi-labile+refractoy) + units : mmol/m^3 + + # Per-autotroph tracers + ((autotroph_sname))Chl : + long_name : ((autotroph_lname)) Chlorophyll + units : mmol/m^3 + ((autotroph_sname))C : + long_name : ((autotroph_lname)) Carbon + units : mmol/m^3 + ((autotroph_sname))Fe : + long_name : ((autotroph_lname)) Iron + units : mmol/m^3 + ((autotroph_sname))Si : + dependencies : + ((autotroph_silicifier)) : True + long_name : ((autotroph_lname)) Silicon + units : mmol/m^3 + ((autotroph_sname))CaCO3 : + dependencies : + ((autotroph_calcifier)) : True + long_name : ((autotroph_lname)) CaCO3 + units : mmol/m^3 + ((autotroph_sname))P : + dependencies : + lvariable_PtoC : .true. + long_name : ((autotroph_lname)) Phosphorus + units : mmol/m^3 + # Per-autotroph (ciso only) + ((autotroph_sname))13C : + dependencies : + ciso_on : .true. + long_name : ((autotroph_lname)) Carbon-13 + units : mmol/m^3 + ((autotroph_sname))14C : + dependencies : + ciso_on : .true. + long_name : ((autotroph_lname)) Carbon-14 + units : mmol/m^3 + ((autotroph_sname))Ca13CO3 : + dependencies : + ciso_on : .true. + ((autotroph_calcifier)) : True + long_name : ((autotroph_lname)) Ca13CO3 + units : mmol/m^3 + ((autotroph_sname))Ca14CO3 : + dependencies : + ciso_on : .true. + ((autotroph_calcifier)) : True + long_name : ((autotroph_lname)) Ca14CO3 + units : mmol/m^3 + + # Per-zooplankton tracers + ((zooplankton_sname))C : + long_name : ((zooplankton_lname)) Carbon + units : mmol/m^3 + # Total zooplankton tracers (ciso only) + zootot13C : + dependencies : + ciso_on : .true. + long_name : Zooplankton Carbon-13 (sum over all zooplankton) + units : mmol/m^3 + zootot14C : + dependencies : + ciso_on : .true. + long_name : Zooplankton Carbon-14 (sum over all zooplankton) + units : mmol/m^3 + +################################################################################ +# Category 1: General Parameters # +################################################################################ + +general_parms : + PFT_defaults : + longname : Define how PFTs are initialized + subcategory : 1. config PFTs + units : unitless + datatype : string + default_value : CESM2 + valid_values : + - CESM2 + - user-specified + _CESM2_PFT_keys : + autotroph_settings : + - sp + - diat + - diaz + zooplankton_settings : + - zoo + grazing_relationship_settings : + - sp_zoo + - diat_zoo + - diaz_zoo + _append_to_config_keywords : true + ciso_on : + longname : Control whether CISO tracer module is active + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + lsource_sink : + longname : Control which portions of code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + ciso_lsource_sink : + longname : Control which portions of the carbon isotope code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lecovars_full_depth_tavg : + longname : Control whether base ecosystem variables are written full depth + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + ciso_lecovars_full_depth_tavg : + longname : Control whether carbon isotope variables are written full depth + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + lflux_gas_o2 : + longname : Control which portions of code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lflux_gas_co2 : + longname : Control which portions of code are executed (useful for debugging) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lcompute_nhx_surface_emis : + longname : Control if NHx emissions are computed + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + lvariable_PtoC : + longname : Control if PtoC ratios in autotrophs vary + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .true. + ladjust_bury_coeff : + longname : Control if bury coefficients are adjusted (rather than constant) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + _append_to_config_keywords : true + lo2_consumption_scalef : + longname : Apply o2_consumption_scalef to o2 consumption (and request it as a forcing) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : # default value is resolution dependent! + default : .false. + GRID == "CESM_x1" : .true. + lp_remin_scalef : + longname : Apply p_remin_scalef to particulate remin (and request it as a forcing) + subcategory : 2. config flags + units : unitless + datatype : logical + default_value : .false. + Jint_Ctot_thres_molpm2pyr : + longname : MARBL will abort if abs(Jint_Ctot) exceeds this threshold + subcategory : 4. general parameters + units : mol m-2 yr-1 + datatype : real + default_value : 1.0e-9 + gQsi_0 : + longname : initial Si/C ratio for growth + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.137 + gQsi_max : + longname : max Si/C ratio for growth + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.822 + gQsi_min : + longname : min Si/C ratio for growth + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.0457 + gQ_Fe_kFe_thres : + longname : Fe:kFe ratio threshold in uptake ratio computations + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 10.0 + gQ_Si_kSi_thres : + longname : Si:kSi ratio threshold in uptake ratio computations + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 6.0 + parm_Fe_bioavail : + longname : Fraction of Fe flux that is bioavailable + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1.0 + particulate_flux_ref_depth : + longname : reference depth for particulate flux diagnostics + subcategory : 4. general parameters + units : m + datatype : integer + default_value : 100 + parm_o2_min : + longname : Minimum O2 needed for production & consumption + subcategory : 4. general parameters + units : nmol/cm^3 + datatype : real + default_value : 5.0 + parm_o2_min_delta : + longname : Width of min O2 range + subcategory : 4. general parameters + units : nmol/cm^3 + datatype : real + default_value : 5.0 + parm_kappa_nitrif_per_day : + longname : Nitrification inverse time constant + subcategory : 4. general parameters (nitrification) + units : 1/day + datatype : real + default_value : 0.06 + parm_nitrif_par_lim : + longname : PAR limit for nitrification + subcategory : 4. general parameters (nitrification) + units : W/m^2 + datatype : real + default_value : 1.0 + parm_labile_ratio : + longname : Fraction of loss to DOC that routed directly to DIC + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 0.94 + parm_init_POC_bury_coeff : + longname : Initial scale factor for burial of POC, PON + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 2.54 + GRID == "CESM_x3" : 5.0 + parm_init_POP_bury_coeff : + longname : Initial scale factor for burial of POP + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 0.36 + GRID == "CESM_x3" : 5.0 + parm_init_bSi_bury_coeff : + longname : Initial scale factor for burial of bSi + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 1.53 + GRID == "CESM_x3" : 1.1 + parm_Fe_scavenge_rate0 : + longname : Scavenging base rate for Fe + subcategory : 4. general parameters (scavenging) + units : unitless + datatype : real + default_value : 22.0 + parm_Lig_scavenge_rate0 : + longname : Scavenging base rate for bound ligand + subcategory : 4. general parameters (scavenging) + units : unitless + datatype : real + default_value : 0.015 + parm_FeLig_scavenge_rate0 : + longname : Scavenging base rate for bound iron + subcategory : 4. general parameters (scavenging) + units : unitless + datatype : real + default_value : 1.2 + parm_Lig_degrade_rate0 : + longname : Fe-binding ligand bacterial degradation base rate coefficient + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 0.000094 + parm_Fe_desorption_rate0 : + longname : Desorption rate for scavenged Fe from particles + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1e-6 + parm_f_prod_sp_CaCO3 : + longname : Fraction of sp production as CaCO3 production + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : # default value is resolution dependent! + default : 0.07 + GRID == "CESM_x3" : 0.075 + parm_POC_diss : + longname : Base POC dissolution length scale + subcategory : 4. general parameters (dissolution) + units : cm + datatype : real + default_value : 100e2 + parm_SiO2_diss : + longname : Base SiO2 dissolution length scale + subcategory : 4. general parameters (dissolution) + units : cm + datatype : real + default_value : 650e2 + parm_SiO2_gamma : + longname : SiO2 gamma (fraction of production -> hard subclass) + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.0 + parm_hPOC_SiO2_ratio : + longname : hPOC to SiO2 ratio + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.01 + parm_CaCO3_diss : + longname : Base CaCO3 dissolution length scale + subcategory : 4. general parameters (dissolution) + units : cm + datatype : real + default_value : 500e2 + parm_CaCO3_gamma : + longname : CaCO3 gamma (fraction of production -> hard subclass) + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.02 + parm_hPOC_CaCO3_ratio : + longname : hPOC to CaCO3 ratio + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.01 + parm_hPOC_dust_ratio : + longname : hPOC to dust ratio + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.01 + o2_sf_o2_range_hi : + longname : o2_scalefactor is applied to diss length scales for O2 less than this + subcategory : 4. general parameters + units : mmol/m^3 + datatype : real + default_value : 45.0 + o2_sf_o2_range_lo : + longname : o2_scalefactor is constant for O2 less than this + subcategory : 4. general parameters + units : mmol/m^3 + datatype : real + default_value : 5.0 + o2_sf_val_lo_o2 : + longname : o2_scalefactor constant for O2 less than o2_sf_o2_range_lo + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 2.6 + parm_sed_denitrif_coeff : + longname : Global scaling factor for sed_denitrif + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : + default : 1 + GRID == "CESM_x3" : 1.4 + bury_coeff_rmean_timescale_years : + longname : Running mean time scale for bury coefficients + subcategory : 4. general parameters + units : years + datatype : real + default_value : 10 + parm_scalelen_z : + longname : Depths of prescribed scalelen values + subcategory : 5. Scale lengths + units : cm + datatype : real + _array_shape : 4 + default_value : + - 100.0e2 + - 250.0e2 + - 500.0e2 + - 1000.0e2 + parm_scalelen_vals : + longname : Prescribed scalelen values + subcategory : 5. Scale lengths + units : unitless + datatype : real + _array_shape : 4 + default_value : + default : + - 1 + - 3.6 + - 4.7 + - 4.8 + GRID == "CESM_x3" : + - 1 + - 3.3 + - 4.2 + - 4.4 + caco3_bury_thres_opt : + longname : Option of threshold of CaCO3 burial + subcategory : 4. general parameters + units : non-numeric + datatype : string + default_value : omega_calc + valid_values : + - fixed_depth + - omega_calc + caco3_bury_thres_depth : + longname : Threshold depth for CaCO3 burial when opt = 'fixed_depth' + subcategory : 4. general parameters + units : cm + datatype : real + default_value : 3000e2 + caco3_bury_thres_omega_calc : + longname : omega calcite threshold for CaCO3 burial when opt = 'omega_calc' + subcategory : 4. general parameters + units : 1 + datatype : real + default_value : 0.89 + PON_bury_coeff : + longname : Scale factor for burial of PON + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : 0.5 + POM_bury_frac_max : + longname : maximum bury fraction for POM + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : 0.8 + bSi_bury_frac_max : + longname : maximum bury fraction for bSi + subcategory : 4. general parameters (bury coeffs) + units : unitless + datatype : real + default_value : 1.0 + ciso_fract_factors : + longname : Option for which biological fractionation calculation to use + subcategory : 4. general parameters + units : non-numeric + datatype : string + default_value : Laws + auto_mort2_exp : + longname : Value of power loss exponent for autotrophs + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1.75 + zoo_mort2_exp : + longname : Value of power loss exponent for zooplankton + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 1.5 + QCaCO3_max : + longname : Max CaCO3/C ratio for implicit calcifiers + subcategory : 4. general parameters + units : mmol CaCO3/mmol C + datatype : real + default_value : 0.40 + QCaCO3_max_exp : + longname : Max CaCO3/C ratio for explicit calcifiers + subcategory : 4. general parameters + units : mmol CaCO3/mmol C + datatype : real + default_value : 2.0 + f_graze_CaCO3_remin : + longname : Fraction of spCaCO3 grazing which is remineralized in zooplankton guts + subcategory : 4. general parameters + units : unitless + datatype : real + default_value : 0.33 + +################################################################################ +# Category 1.5: General Parameters (cont) # +################################################################################ + +general_parms2 : + init_bury_coeff_opt : + longname : Source of initial burial coefficient + subcategory : 3. config strings + units : unitless + datatype : string + default_value : + # Note: this relies on SAVED_STATE_VARS_SOURCE appearing in _config_keyword + # before ladjust_bury_coeff because matching the keyword in + # MARBL_settings_file_class::_get_var_value relies on the last entry + # in _config_keyword that matches a key below; for this variable, if + # ladjust_bury_coeff = .false. and SAVED_STATE_VARS_SOURCE = GCM we + # want init_bury_coeff_opt = settings_file + default : settings_file + not ladjust_bury_coeff : settings_file + SAVED_STATE_VARS_SOURCE == "GCM" : GCM + +################################################################################ +# Category 2: PFT_counts # +################################################################################ + +PFT_counts : + autotroph_cnt : + longname : Number of autotroph classes + subcategory : 1. config PFTs + units : unitless + datatype : integer + default_value : + default : 1 + PFT_defaults == "CESM2" : 3 + cannot change : PFT_defaults == 'CESM2' + must set : PFT_defaults == 'user-specified' + zooplankton_cnt : + longname : Number of zooplankton classes + subcategory : 1. config PFTs + units : unitless + datatype : integer + default_value : + default : 1 + PFT_defaults == "CESM2" : 1 + max_grazer_prey_cnt : + longname : Number of grazer prey classes + subcategory : 1. config PFTs + units : unitless + datatype : integer + default_value : + default : 1 + PFT_defaults == "CESM2" : 3 + +################################################################################ +# Category 3: PFT_derived_types # +################################################################################ + +PFT_derived_types : + autotroph_settings : + _array_shape : autotroph_cnt + _is_allocatable : true + datatype : + # Components of the derived type + # (_* are not part of the type) + _type_name : autotroph_settings_type + sname : + longname : Short name of the autotroph + subcategory : 10. autotrophs + units : non-numeric + datatype : string + default_value : + default : UNSET + ((autotroph_sname)) == "sp" : sp + ((autotroph_sname)) == "diat" : diat + ((autotroph_sname)) == "diaz" : diaz + lname : + longname : Long name of the autotroph + subcategory : 10. autotrophs + units : non-numeric + datatype : string + default_value : + default : UNSET + ((autotroph_sname)) == "sp" : Small Phyto + ((autotroph_sname)) == "diat" : Diatom + ((autotroph_sname)) == "diaz" : Diazotroph + temp_func_form_opt: + longname : Option for the temperature scaling functional form + subcategory : 10. autotrophs + units : non-numeric + datatype : string + valid_values : + - q_10 + - arrhenius + - power + default_value : + default : UNSET + ((autotroph_sname)) == "sp" : q_10 + ((autotroph_sname)) == "diat" : q_10 + ((autotroph_sname)) == "diaz" : q_10 + Nfixer : + longname : Flag set to true if autotroph fixes nitrogen + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : + default : .false. + ((autotroph_sname)) == "diaz" : .true. + imp_calcifier : + longname : Flag set to true if autotroph implicitly handles calcification + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : + default : .false. + ((autotroph_sname)) == "sp" : .true. + exp_calcifier : + longname : Flag set to true if autotroph explicitly handles calcification + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : + default : .false. + silicifier : + longname : Flag set to true if autotroph is a silicifier + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : + default : .false. + ((autotroph_sname)) == "diat" : .true. + is_carbon_limited : + longname : Flag set to true if autotroph is carbon limited + subcategory : 10. autotrophs + units : non-numeric + datatype : logical + default_value : .false. + kFe : + longname : Fe uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.03e-3 + ((autotroph_sname)) == "diat" : 0.07e-3 + ((autotroph_sname)) == "diaz" : 0.045e-3 + kCO2 : + longname : CO2 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0 + ((autotroph_sname)) == "diat" : 0 + ((autotroph_sname)) == "diaz" : 0 + kPO4 : + longname : PO4 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.01 + ((autotroph_sname)) == "diat" : 0.05 + ((autotroph_sname)) == "diaz" : 0.015 + kDOP : + longname : DOP uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.3 + ((autotroph_sname)) == "diat" : 0.5 + ((autotroph_sname)) == "diaz" : 0.075 + kNO3 : + longname : NO3 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.25 + ((autotroph_sname)) == "diat" : 0.5 + ((autotroph_sname)) == "diaz" : 2 + kNH4 : + longname : NH4 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.01 + ((autotroph_sname)) == "diat" : 0.05 + ((autotroph_sname)) == "diaz" : 0.2 + kSiO3 : + longname : SiO3 uptake half-sat constant + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0 + ((autotroph_sname)) == "diat" : 0.7 + ((autotroph_sname)) == "diaz" : 0 + Qp_fixed : + longname : P/C ratio when using fixed P/C ratios + subcategory : 10. autotrophs + units : unitless + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 1.0/117 + ((autotroph_sname)) == "diat" : 1.0/117 + ((autotroph_sname)) == "diaz" : 0.32*(1.0/117) + gQfe_0 : + longname : Initial Fe/C ratio for growth + subcategory : 10. autotrophs + units : unitless + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 30e-6 + ((autotroph_sname)) == "diat" : 30e-6 + ((autotroph_sname)) == "diaz" : 60e-6 + gQfe_min : + longname : Minimum Fe/C ratio for growth + subcategory : 10. autotrophs + units : unitless + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 2.5e-6 + ((autotroph_sname)) == "diat" : 2.5e-6 + ((autotroph_sname)) == "diaz" : 2.5e-6 + alphaPI_per_day : + longname : Initial slope of P_I curve (GD98) + subcategory : 10. autotrophs + units : mmol m^2/(mg Chl W day) + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.39 + ((autotroph_sname)) == "diat" : 0.28 + ((autotroph_sname)) == "diaz" : 0.39 + PCref_per_day : + longname : Maximum C-spec growth rate at Tref + subcategory : 10. autotrophs + units : 1/day + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 5 + ((autotroph_sname)) == "diat" : 5 + ((autotroph_sname)) == "diaz" : 2.5 + thetaN_max : + longname : Maximum thetaN (Chl / N) + subcategory : 10. autotrophs + units : mg Chl / mmol + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 2.5 + ((autotroph_sname)) == "diat" : 4 + ((autotroph_sname)) == "diaz" : 2.5 + loss_thres : + longname : concentration where losses go to zero + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.01 + ((autotroph_sname)) == "diat" : 0.02 + ((autotroph_sname)) == "diaz" : 0.02 + loss_thres2 : + longname : concentration where losses go to zero + subcategory : 10. autotrophs + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0 + ((autotroph_sname)) == "diat" : 0 + ((autotroph_sname)) == "diaz" : 0.001 + temp_thres : + longname : Temperature where concentration threshold and photosynthesis rate drops + subcategory : 10. autotrophs + units : degC + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : -10 + ((autotroph_sname)) == "diat" : -10 + ((autotroph_sname)) == "diaz" : 15 + mort_per_day : + longname : Linear mortality rate + subcategory : 10. autotrophs + units : 1/day + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.1 + ((autotroph_sname)) == "diat" : 0.1 + ((autotroph_sname)) == "diaz" : 0.1 + mort2_per_day : + longname : Quadratic mortality rate + subcategory : 10. autotrophs + units : (1/day)/(mmol/m^3) + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.01 + ((autotroph_sname)) == "diat" : 0.01 + ((autotroph_sname)) == "diaz" : 0.01 + agg_rate_max : + longname : Maximum agg rate + subcategory : 10. autotrophs + units : 1/day + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.5 + ((autotroph_sname)) == "diat" : 0.5 + ((autotroph_sname)) == "diaz" : 0.5 + agg_rate_min : + longname : Minimum agg rate + subcategory : 10. autotrophs + units : 1/day + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.01 + ((autotroph_sname)) == "diat" : 0.02 + ((autotroph_sname)) == "diaz" : 0.01 + loss_poc : + longname : Routing of loss term + subcategory : 10. autotrophs + units : unitless + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0 + ((autotroph_sname)) == "diat" : 0 + ((autotroph_sname)) == "diaz" : 0 + Ea : + longname : Activation energy for Arrhenius equation + subcategory : 10. autotrophs + units : eV + datatype : real + default_value : + default : 1e34 + ((autotroph_sname)) == "sp" : 0.32 + ((autotroph_sname)) == "diat" : 0.32 + ((autotroph_sname)) == "diaz" : 0.32 + zooplankton_settings : + _array_shape : zooplankton_cnt + _is_allocatable : true + datatype : + # Components of the derived type + # (_* are not part of the type) + _type_name : zooplankton_settings_type + sname : + longname : Short name of the zooplankton + subcategory : 11. zooplankton + units : non-numeric + datatype : string + default_value : + default : UNSET + ((zooplankton_sname)) == "zoo" : zoo + lname : + longname : Long name of the zooplankton + subcategory : 11. zooplankton + units : non-numeric + datatype : string + default_value : + default : UNSET + ((zooplankton_sname)) == "zoo" : Zooplankton + temp_func_form_opt: + longname : Option for the temperature scaling functional form + subcategory : 11. zooplankton + units : non-numeric + datatype : string + valid_values : + - q_10 + - arrhenius + - power + default_value : + default : UNSET + ((zooplankton_sname)) == "zoo" : q_10 + z_mort_0_per_day : + longname : Linear mortality rate + subcategory : 11. zooplankton + units : 1/day + datatype : real + default_value : + default : 1e34 + ((zooplankton_sname)) == "zoo" : 0.1 + z_mort2_0_per_day : + longname : Quadratic mortality rate + subcategory : 11. zooplankton + units : 1/day / (mmol/m^3) + datatype : real + default_value : + default : 1e34 + ((zooplankton_sname)) == "zoo" : 0.4 + loss_thres : + longname : Zoo concentration where losses go to zero + subcategory : 11. zooplankton + units : nmol/cm^3 + datatype : real + default_value : + default : 1e34 + ((zooplankton_sname)) == "zoo" : 0.075 + Ea : + longname : Activation energy for Arrhenius equation + subcategory : 11. zooplankton + units : eV + datatype : real + default_value : + default : 1e34 + ((zooplankton_sname)) == "zoo" : 0.65 + grazing_relationship_settings : + _array_shape : + - max_grazer_prey_cnt + - zooplankton_cnt + _is_allocatable : true + datatype : + _type_name : grazing_relationship_settings_type + sname : + longname : Short name of the grazing relationship + subcategory : 12. grazing + units : non-numeric + datatype : string + default_value : + default : UNSET + ((grazer_sname)) == "sp_zoo" : grz_sp_zoo + ((grazer_sname)) == "diat_zoo" : grz_diat_zoo + ((grazer_sname)) == "diaz_zoo" : grz_diaz_zoo + lname : + longname : Long name of the grazing relationship + subcategory : 12. grazing + units : non-numeric + datatype : string + default_value : + default : UNSET + ((grazer_sname)) == "sp_zoo" : Grazing of sp by zoo + ((grazer_sname)) == "diat_zoo" : Grazing of diat by zoo + ((grazer_sname)) == "diaz_zoo" : Grazing of diaz by zoo + auto_ind_cnt : + longname : Number of autotrophs being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : + default : 1 + zoo_ind_cnt : + longname : Number of zooplankton being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : + default : 0 + grazing_function : + longname : Functional form of grazing parameterization + subcategory : 12. grazing + units : unitless + datatype : integer + _comment : 1 => Michaelis-Menten, 2 => Sigmoidal + default_value : 1 + z_umax_0_per_day : + longname : Max zoo growth rate at tref + subcategory : 12. grazing + units : 1/day + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_zoo" : 3.3 + ((grazer_sname)) == "diat_zoo" : 3.15 + ((grazer_sname)) == "diaz_zoo" : 3.3 + z_grz : + longname : Grazing coefficient + subcategory : 12. grazing + units : (mmol/m^3)^2 + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_zoo" : 1.2 + ((grazer_sname)) == "diat_zoo" : 1.2 + ((grazer_sname)) == "diaz_zoo" : 1.2 + graze_zoo : + longname : Routing of grazed term, remainder goes to dic + subcategory : 12. grazing + units : unitless + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_zoo" : 0.3 + ((grazer_sname)) == "diat_zoo" : 0.25 + ((grazer_sname)) == "diaz_zoo" : 0.3 + graze_poc : + longname : Routing of grazed term, remainder goes to dic + subcategory : 12. grazing + units : unitless + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_zoo" : 0 + ((grazer_sname)) == "diat_zoo" : 0.39 + ((grazer_sname)) == "diaz_zoo" : 0.1 + graze_doc : + longname : Routing of grazed term, remainder goes to dic + subcategory : 12. grazing + units : unitless + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_zoo" : 0.06 + ((grazer_sname)) == "diat_zoo" : 0.06 + ((grazer_sname)) == "diaz_zoo" : 0.06 + f_zoo_detr : + longname : Fraction of zoo losses to detrital + subcategory : 12. grazing + units : unitless + datatype : real + default_value : + default : 1e34 + ((grazer_sname)) == "sp_zoo" : 0.12 + ((grazer_sname)) == "diat_zoo" : 0.24 + ((grazer_sname)) == "diaz_zoo" : 0.12 + auto_ind : + _array_shape : autotroph_cnt + _array_len_to_print : auto_ind_cnt + _is_allocatable : true + longname : Indices of autotrophs being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : + default : 0 + ((grazer_sname)) == "sp_zoo" : 1 # index where autotroph_name = sp + ((grazer_sname)) == "diat_zoo" : 2 # index where autotroph_name = diat + ((grazer_sname)) == "diaz_zoo" : 3 # index where autotroph_name = diaz + zoo_ind : + _array_shape : zooplankton_cnt + _array_len_to_print : zoo_ind_cnt + _is_allocatable : true + longname : Indices of zooplankton being grazed + subcategory : 12. grazing + units : unitless + datatype : integer + default_value : 0 + +################################################################################ +# Category 4: tracer_dependent # +################################################################################ + +tracer_dependent : + tracer_restore_vars : + longname : Tracer names for tracers that are restored + subcategory : 20. tracer restoring + units : non-numeric + datatype : string + _array_shape : _tracer_list + _is_allocatable : true + default_value : + default : '' + GCM == "CESM" : &CESM_TRACER_RESTORE + - 'PO4' + - 'NO3' + - 'SiO3' + - 'ALK' + - 'ALK_ALT_CO2' + GRID == "CESM_x3" : *CESM_TRACER_RESTORE + GRID == "CESM_x1" : *CESM_TRACER_RESTORE From fd4c119299b47d34a90c2ee989fba96a4a265e60 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Thu, 13 Jun 2019 14:48:49 -0600 Subject: [PATCH 67/75] Update values in settings_cesm2.1+cocco.yaml Something to look at in code review: I added a workaround to marbl_settings_mod.F90 to set PFT_defaults = 'user-specified' if the namelist uses 'CESM2.1+cocco'; I can't use 'CESM2' because that will get the autotroph count wrong, and we intentionally did not hard-code the cocco settings in the fortran code so this seemed like a necessary step. --- MARBL_tools/MARBL_settings_file_class.py | 8 ++ defaults/json/settings_cesm2.1+cocco.json | 112 +++++++++++++++------- defaults/settings_cesm2.1+cocco.yaml | 106 +++++++++++++------- src/marbl_settings_mod.F90 | 7 ++ 4 files changed, 165 insertions(+), 68 deletions(-) diff --git a/MARBL_tools/MARBL_settings_file_class.py b/MARBL_tools/MARBL_settings_file_class.py index 92c6f081..9226c884 100644 --- a/MARBL_tools/MARBL_settings_file_class.py +++ b/MARBL_tools/MARBL_settings_file_class.py @@ -225,10 +225,18 @@ def _process_variable_value(self, category_name, variable_name): return # Process derived type! + # (a) check to see if PFT_defaults = "CESM2" append_to_keys = (('PFT_defaults == "CESM2"' in self._config_keyword) and (category_name == "PFT_derived_types")) if append_to_keys: PFT_keys = self._settings['general_parms']['PFT_defaults']['_CESM2_PFT_keys'][variable_name] + else: + # (b) check to see if PFT_defaults = "CESM2.1+cocco" + append_to_keys = (('PFT_defaults == "CESM2.1+cocco"' in self._config_keyword) and + (category_name == "PFT_derived_types")) + if append_to_keys: + PFT_keys = self._settings['general_parms']['PFT_defaults']['_CESM2.1+cocco_PFT_keys'][variable_name] + # Is the derived type an array? If so, treat each entry separately if ("_array_shape" in this_var.keys()): for n, elem_index in enumerate(_get_array_info(this_var["_array_shape"], self.settings_dict, self.tracers_dict)): diff --git a/defaults/json/settings_cesm2.1+cocco.json b/defaults/json/settings_cesm2.1+cocco.json index 884dda00..f0c748e1 100644 --- a/defaults/json/settings_cesm2.1+cocco.json +++ b/defaults/json/settings_cesm2.1+cocco.json @@ -1,10 +1,10 @@ { "PFT_counts": { "autotroph_cnt": { - "cannot change": "PFT_defaults == 'CESM2'", + "cannot change": "PFT_defaults == 'CESM2.1+cocco'", "datatype": "integer", "default_value": { - "PFT_defaults == \"CESM2\"": 3, + "PFT_defaults == \"CESM2.1+cocco\"": 4, "default": 1 }, "longname": "Number of autotroph classes", @@ -15,7 +15,7 @@ "max_grazer_prey_cnt": { "datatype": "integer", "default_value": { - "PFT_defaults == \"CESM2\"": 3, + "PFT_defaults == \"CESM2.1+cocco\"": 4, "default": 1 }, "longname": "Number of grazer prey classes", @@ -25,7 +25,7 @@ "zooplankton_cnt": { "datatype": "integer", "default_value": { - "PFT_defaults == \"CESM2\"": 1, + "PFT_defaults == \"CESM2.1+cocco\"": 1, "default": 1 }, "longname": "Number of zooplankton classes", @@ -41,6 +41,7 @@ "Ea": { "datatype": "real", "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.32, "((autotroph_sname)) == \"diat\"": 0.32, "((autotroph_sname)) == \"diaz\"": 0.32, "((autotroph_sname)) == \"sp\"": 0.32, @@ -63,9 +64,10 @@ "PCref_per_day": { "datatype": "real", "default_value": { + "((autotroph_sname)) == \"cocco\"": 4.7, "((autotroph_sname)) == \"diat\"": 5, - "((autotroph_sname)) == \"diaz\"": 2.5, - "((autotroph_sname)) == \"sp\"": 5, + "((autotroph_sname)) == \"diaz\"": 2.2, + "((autotroph_sname)) == \"sp\"": 4.4, "default": "1e34" }, "longname": "Maximum C-spec growth rate at Tref", @@ -75,6 +77,7 @@ "Qp_fixed": { "datatype": "real", "default_value": { + "((autotroph_sname)) == \"cocco\"": "1.0/117", "((autotroph_sname)) == \"diat\"": "1.0/117", "((autotroph_sname)) == \"diaz\"": "0.32*(1.0/117)", "((autotroph_sname)) == \"sp\"": "1.0/117", @@ -88,6 +91,7 @@ "agg_rate_max": { "datatype": "real", "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.5, "((autotroph_sname)) == \"diat\"": 0.5, "((autotroph_sname)) == \"diaz\"": 0.5, "((autotroph_sname)) == \"sp\"": 0.5, @@ -100,6 +104,7 @@ "agg_rate_min": { "datatype": "real", "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.01, "((autotroph_sname)) == \"diat\"": 0.02, "((autotroph_sname)) == \"diaz\"": 0.01, "((autotroph_sname)) == \"sp\"": 0.01, @@ -112,9 +117,10 @@ "alphaPI_per_day": { "datatype": "real", "default_value": { - "((autotroph_sname)) == \"diat\"": 0.28, + "((autotroph_sname)) == \"cocco\"": 0.28, + "((autotroph_sname)) == \"diat\"": 0.39, "((autotroph_sname)) == \"diaz\"": 0.39, - "((autotroph_sname)) == \"sp\"": 0.39, + "((autotroph_sname)) == \"sp\"": 0.35, "default": "1e34" }, "longname": "Initial slope of P_I curve (GD98)", @@ -124,6 +130,7 @@ "exp_calcifier": { "datatype": "logical", "default_value": { + "((autotroph_sname)) == \"cocco\"": ".true.", "default": ".false." }, "longname": "Flag set to true if autotroph explicitly handles calcification", @@ -133,9 +140,10 @@ "gQfe_0": { "datatype": "real", "default_value": { - "((autotroph_sname)) == \"diat\"": "30e-6", - "((autotroph_sname)) == \"diaz\"": "60e-6", - "((autotroph_sname)) == \"sp\"": "30e-6", + "((autotroph_sname)) == \"cocco\"": "35e-6", + "((autotroph_sname)) == \"diat\"": "35e-6", + "((autotroph_sname)) == \"diaz\"": "70e-6", + "((autotroph_sname)) == \"sp\"": "35e-6", "default": "1e34" }, "longname": "Initial Fe/C ratio for growth", @@ -145,9 +153,10 @@ "gQfe_min": { "datatype": "real", "default_value": { - "((autotroph_sname)) == \"diat\"": 2.5e-06, - "((autotroph_sname)) == \"diaz\"": 2.5e-06, - "((autotroph_sname)) == \"sp\"": 2.5e-06, + "((autotroph_sname)) == \"cocco\"": "3e-6", + "((autotroph_sname)) == \"diat\"": "3e-6", + "((autotroph_sname)) == \"diaz\"": "6e-6", + "((autotroph_sname)) == \"sp\"": "3e-6", "default": "1e34" }, "longname": "Minimum Fe/C ratio for growth", @@ -157,7 +166,6 @@ "imp_calcifier": { "datatype": "logical", "default_value": { - "((autotroph_sname)) == \"sp\"": ".true.", "default": ".false." }, "longname": "Flag set to true if autotroph implicitly handles calcification", @@ -166,7 +174,10 @@ }, "is_carbon_limited": { "datatype": "logical", - "default_value": ".false.", + "default_value": { + "((autotroph_sname)) == \"cocco\"": ".true.", + "default": ".false." + }, "longname": "Flag set to true if autotroph is carbon limited", "subcategory": "10. autotrophs", "units": "non-numeric" @@ -174,6 +185,7 @@ "kCO2": { "datatype": "real", "default_value": { + "((autotroph_sname)) == \"cocco\"": 1, "((autotroph_sname)) == \"diat\"": 0, "((autotroph_sname)) == \"diaz\"": 0, "((autotroph_sname)) == \"sp\"": 0, @@ -186,8 +198,9 @@ "kDOP": { "datatype": "real", "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.25, "((autotroph_sname)) == \"diat\"": 0.5, - "((autotroph_sname)) == \"diaz\"": 0.075, + "((autotroph_sname)) == \"diaz\"": 0.1, "((autotroph_sname)) == \"sp\"": 0.3, "default": "1e34" }, @@ -198,7 +211,8 @@ "kFe": { "datatype": "real", "default_value": { - "((autotroph_sname)) == \"diat\"": 7e-05, + "((autotroph_sname)) == \"cocco\"": 3.15e-05, + "((autotroph_sname)) == \"diat\"": 8e-05, "((autotroph_sname)) == \"diaz\"": 4.5e-05, "((autotroph_sname)) == \"sp\"": 3e-05, "default": "1e34" @@ -210,6 +224,7 @@ "kNH4": { "datatype": "real", "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.01, "((autotroph_sname)) == \"diat\"": 0.05, "((autotroph_sname)) == \"diaz\"": 0.2, "((autotroph_sname)) == \"sp\"": 0.01, @@ -222,9 +237,10 @@ "kNO3": { "datatype": "real", "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.2, "((autotroph_sname)) == \"diat\"": 0.5, "((autotroph_sname)) == \"diaz\"": 2, - "((autotroph_sname)) == \"sp\"": 0.25, + "((autotroph_sname)) == \"sp\"": 0.2, "default": "1e34" }, "longname": "NO3 uptake half-sat constant", @@ -234,9 +250,10 @@ "kPO4": { "datatype": "real", "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.006, "((autotroph_sname)) == \"diat\"": 0.05, "((autotroph_sname)) == \"diaz\"": 0.015, - "((autotroph_sname)) == \"sp\"": 0.01, + "((autotroph_sname)) == \"sp\"": 0.005, "default": "1e34" }, "longname": "PO4 uptake half-sat constant", @@ -246,7 +263,8 @@ "kSiO3": { "datatype": "real", "default_value": { - "((autotroph_sname)) == \"diat\"": 0.7, + "((autotroph_sname)) == \"cocco\"": 0, + "((autotroph_sname)) == \"diat\"": 1.8, "((autotroph_sname)) == \"diaz\"": 0, "((autotroph_sname)) == \"sp\"": 0, "default": "1e34" @@ -258,6 +276,7 @@ "lname": { "datatype": "string", "default_value": { + "((autotroph_sname)) == \"cocco\"": "Coccolithophores", "((autotroph_sname)) == \"diat\"": "Diatom", "((autotroph_sname)) == \"diaz\"": "Diazotroph", "((autotroph_sname)) == \"sp\"": "Small Phyto", @@ -270,6 +289,7 @@ "loss_poc": { "datatype": "real", "default_value": { + "((autotroph_sname)) == \"cocco\"": 0, "((autotroph_sname)) == \"diat\"": 0, "((autotroph_sname)) == \"diaz\"": 0, "((autotroph_sname)) == \"sp\"": 0, @@ -282,6 +302,7 @@ "loss_thres": { "datatype": "real", "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.01, "((autotroph_sname)) == \"diat\"": 0.02, "((autotroph_sname)) == \"diaz\"": 0.02, "((autotroph_sname)) == \"sp\"": 0.01, @@ -294,6 +315,7 @@ "loss_thres2": { "datatype": "real", "default_value": { + "((autotroph_sname)) == \"cocco\"": 0, "((autotroph_sname)) == \"diat\"": 0, "((autotroph_sname)) == \"diaz\"": 0.001, "((autotroph_sname)) == \"sp\"": 0, @@ -306,6 +328,7 @@ "mort2_per_day": { "datatype": "real", "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.01, "((autotroph_sname)) == \"diat\"": 0.01, "((autotroph_sname)) == \"diaz\"": 0.01, "((autotroph_sname)) == \"sp\"": 0.01, @@ -318,6 +341,7 @@ "mort_per_day": { "datatype": "real", "default_value": { + "((autotroph_sname)) == \"cocco\"": 0.1, "((autotroph_sname)) == \"diat\"": 0.1, "((autotroph_sname)) == \"diaz\"": 0.1, "((autotroph_sname)) == \"sp\"": 0.1, @@ -340,6 +364,7 @@ "sname": { "datatype": "string", "default_value": { + "((autotroph_sname)) == \"cocco\"": "cocco", "((autotroph_sname)) == \"diat\"": "diat", "((autotroph_sname)) == \"diaz\"": "diaz", "((autotroph_sname)) == \"sp\"": "sp", @@ -352,6 +377,7 @@ "temp_func_form_opt": { "datatype": "string", "default_value": { + "((autotroph_sname)) == \"cocco\"": "power", "((autotroph_sname)) == \"diat\"": "q_10", "((autotroph_sname)) == \"diaz\"": "q_10", "((autotroph_sname)) == \"sp\"": "q_10", @@ -369,6 +395,7 @@ "temp_thres": { "datatype": "real", "default_value": { + "((autotroph_sname)) == \"cocco\"": 0, "((autotroph_sname)) == \"diat\"": -10, "((autotroph_sname)) == \"diaz\"": 15, "((autotroph_sname)) == \"sp\"": -10, @@ -381,6 +408,7 @@ "thetaN_max": { "datatype": "real", "default_value": { + "((autotroph_sname)) == \"cocco\"": 3.5, "((autotroph_sname)) == \"diat\"": 4, "((autotroph_sname)) == \"diaz\"": 2.5, "((autotroph_sname)) == \"sp\"": 2.5, @@ -406,6 +434,7 @@ "_is_allocatable": true, "datatype": "integer", "default_value": { + "((grazer_sname)) == \"cocco_zoo\"": 4, "((grazer_sname)) == \"diat_zoo\"": 2, "((grazer_sname)) == \"diaz_zoo\"": 3, "((grazer_sname)) == \"sp_zoo\"": 1, @@ -427,6 +456,7 @@ "f_zoo_detr": { "datatype": "real", "default_value": { + "((grazer_sname)) == \"cocco_zoo\"": 0.18, "((grazer_sname)) == \"diat_zoo\"": 0.24, "((grazer_sname)) == \"diaz_zoo\"": 0.12, "((grazer_sname)) == \"sp_zoo\"": 0.12, @@ -439,6 +469,7 @@ "graze_doc": { "datatype": "real", "default_value": { + "((grazer_sname)) == \"cocco_zoo\"": 0.06, "((grazer_sname)) == \"diat_zoo\"": 0.06, "((grazer_sname)) == \"diaz_zoo\"": 0.06, "((grazer_sname)) == \"sp_zoo\"": 0.06, @@ -451,7 +482,8 @@ "graze_poc": { "datatype": "real", "default_value": { - "((grazer_sname)) == \"diat_zoo\"": 0.39, + "((grazer_sname)) == \"cocco_zoo\"": 0.3, + "((grazer_sname)) == \"diat_zoo\"": 0.38, "((grazer_sname)) == \"diaz_zoo\"": 0.1, "((grazer_sname)) == \"sp_zoo\"": 0, "default": "1e34" @@ -463,6 +495,7 @@ "graze_zoo": { "datatype": "real", "default_value": { + "((grazer_sname)) == \"cocco_zoo\"": 0.25, "((grazer_sname)) == \"diat_zoo\"": 0.25, "((grazer_sname)) == \"diaz_zoo\"": 0.3, "((grazer_sname)) == \"sp_zoo\"": 0.3, @@ -475,7 +508,10 @@ "grazing_function": { "_comment": "1 => Michaelis-Menten, 2 => Sigmoidal", "datatype": "integer", - "default_value": 1, + "default_value": { + "((grazer_sname)) == \"sp_zoo\"": 2, + "default": 1 + }, "longname": "Functional form of grazing parameterization", "subcategory": "12. grazing", "units": "unitless" @@ -483,6 +519,7 @@ "lname": { "datatype": "string", "default_value": { + "((grazer_sname)) == \"cocco_zoo\"": "Grazing of cocco by zoo", "((grazer_sname)) == \"diat_zoo\"": "Grazing of diat by zoo", "((grazer_sname)) == \"diaz_zoo\"": "Grazing of diaz by zoo", "((grazer_sname)) == \"sp_zoo\"": "Grazing of sp by zoo", @@ -495,6 +532,7 @@ "sname": { "datatype": "string", "default_value": { + "((grazer_sname)) == \"cocco_zoo\"": "grz_cocco_zoo", "((grazer_sname)) == \"diat_zoo\"": "grz_diat_zoo", "((grazer_sname)) == \"diaz_zoo\"": "grz_diaz_zoo", "((grazer_sname)) == \"sp_zoo\"": "grz_sp_zoo", @@ -507,9 +545,10 @@ "z_grz": { "datatype": "real", "default_value": { - "((grazer_sname)) == \"diat_zoo\"": 1.2, - "((grazer_sname)) == \"diaz_zoo\"": 1.2, - "((grazer_sname)) == \"sp_zoo\"": 1.2, + "((grazer_sname)) == \"cocco_zoo\"": 0.854, + "((grazer_sname)) == \"diat_zoo\"": 0.72, + "((grazer_sname)) == \"diaz_zoo\"": 0.6, + "((grazer_sname)) == \"sp_zoo\"": 0.54, "default": "1e34" }, "longname": "Grazing coefficient", @@ -519,9 +558,10 @@ "z_umax_0_per_day": { "datatype": "real", "default_value": { - "((grazer_sname)) == \"diat_zoo\"": 3.15, - "((grazer_sname)) == \"diaz_zoo\"": 3.3, - "((grazer_sname)) == \"sp_zoo\"": 3.3, + "((grazer_sname)) == \"cocco_zoo\"": 2.95, + "((grazer_sname)) == \"diat_zoo\"": 3.41, + "((grazer_sname)) == \"diaz_zoo\"": 3.35, + "((grazer_sname)) == \"sp_zoo\"": 3.6, "default": "1e34" }, "longname": "Max zoo growth rate at tref", @@ -827,16 +867,18 @@ "units": "mol m-2 yr-1" }, "PFT_defaults": { - "_CESM2_PFT_keys": { + "_CESM2.1+cocco_PFT_keys": { "autotroph_settings": [ "sp", "diat", - "diaz" + "diaz", + "cocco" ], "grazing_relationship_settings": [ "sp_zoo", "diat_zoo", - "diaz_zoo" + "diaz_zoo", + "cocco_zoo" ], "zooplankton_settings": [ "zoo" @@ -844,12 +886,12 @@ }, "_append_to_config_keywords": true, "datatype": "string", - "default_value": "CESM2", + "default_value": "CESM2.1+cocco", "longname": "Define how PFTs are initialized", "subcategory": "1. config PFTs", "units": "unitless", "valid_values": [ - "CESM2", + "CESM2.1+cocco", "user-specified" ] }, @@ -957,7 +999,7 @@ }, "f_graze_CaCO3_remin": { "datatype": "real", - "default_value": 0.33, + "default_value": 0.7, "longname": "Fraction of spCaCO3 grazing which is remineralized in zooplankton guts", "subcategory": "4. general parameters", "units": "unitless" diff --git a/defaults/settings_cesm2.1+cocco.yaml b/defaults/settings_cesm2.1+cocco.yaml index e2d01331..859744bb 100644 --- a/defaults/settings_cesm2.1+cocco.yaml +++ b/defaults/settings_cesm2.1+cocco.yaml @@ -198,21 +198,23 @@ general_parms : subcategory : 1. config PFTs units : unitless datatype : string - default_value : CESM2 + default_value : CESM2.1+cocco valid_values : - - CESM2 + - CESM2.1+cocco - user-specified - _CESM2_PFT_keys : + _CESM2.1+cocco_PFT_keys : autotroph_settings : - sp - diat - diaz + - cocco zooplankton_settings : - zoo grazing_relationship_settings : - sp_zoo - diat_zoo - diaz_zoo + - cocco_zoo _append_to_config_keywords : true ciso_on : longname : Control whether CISO tracer module is active @@ -611,7 +613,7 @@ general_parms : subcategory : 4. general parameters units : unitless datatype : real - default_value : 0.33 + default_value : 0.7 ################################################################################ # Category 1.5: General Parameters (cont) # @@ -646,8 +648,8 @@ PFT_counts : datatype : integer default_value : default : 1 - PFT_defaults == "CESM2" : 3 - cannot change : PFT_defaults == 'CESM2' + PFT_defaults == "CESM2.1+cocco" : 4 + cannot change : PFT_defaults == 'CESM2.1+cocco' must set : PFT_defaults == 'user-specified' zooplankton_cnt : longname : Number of zooplankton classes @@ -656,7 +658,7 @@ PFT_counts : datatype : integer default_value : default : 1 - PFT_defaults == "CESM2" : 1 + PFT_defaults == "CESM2.1+cocco" : 1 max_grazer_prey_cnt : longname : Number of grazer prey classes subcategory : 1. config PFTs @@ -664,7 +666,7 @@ PFT_counts : datatype : integer default_value : default : 1 - PFT_defaults == "CESM2" : 3 + PFT_defaults == "CESM2.1+cocco" : 4 ################################################################################ # Category 3: PFT_derived_types # @@ -688,6 +690,7 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : sp ((autotroph_sname)) == "diat" : diat ((autotroph_sname)) == "diaz" : diaz + ((autotroph_sname)) == "cocco" : cocco lname : longname : Long name of the autotroph subcategory : 10. autotrophs @@ -698,6 +701,7 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : Small Phyto ((autotroph_sname)) == "diat" : Diatom ((autotroph_sname)) == "diaz" : Diazotroph + ((autotroph_sname)) == "cocco" : Coccolithophores temp_func_form_opt: longname : Option for the temperature scaling functional form subcategory : 10. autotrophs @@ -712,6 +716,7 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : q_10 ((autotroph_sname)) == "diat" : q_10 ((autotroph_sname)) == "diaz" : q_10 + ((autotroph_sname)) == "cocco" : power Nfixer : longname : Flag set to true if autotroph fixes nitrogen subcategory : 10. autotrophs @@ -727,7 +732,6 @@ PFT_derived_types : datatype : logical default_value : default : .false. - ((autotroph_sname)) == "sp" : .true. exp_calcifier : longname : Flag set to true if autotroph explicitly handles calcification subcategory : 10. autotrophs @@ -735,6 +739,7 @@ PFT_derived_types : datatype : logical default_value : default : .false. + ((autotroph_sname)) == "cocco" : .true. silicifier : longname : Flag set to true if autotroph is a silicifier subcategory : 10. autotrophs @@ -748,7 +753,9 @@ PFT_derived_types : subcategory : 10. autotrophs units : non-numeric datatype : logical - default_value : .false. + default_value : + default : .false. + ((autotroph_sname)) == "cocco" : .true. kFe : longname : Fe uptake half-sat constant subcategory : 10. autotrophs @@ -757,8 +764,9 @@ PFT_derived_types : default_value : default : 1e34 ((autotroph_sname)) == "sp" : 0.03e-3 - ((autotroph_sname)) == "diat" : 0.07e-3 + ((autotroph_sname)) == "diat" : 0.08e-3 ((autotroph_sname)) == "diaz" : 0.045e-3 + ((autotroph_sname)) == "cocco" : 0.0315e-3 kCO2 : longname : CO2 uptake half-sat constant subcategory : 10. autotrophs @@ -769,6 +777,7 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : 0 ((autotroph_sname)) == "diat" : 0 ((autotroph_sname)) == "diaz" : 0 + ((autotroph_sname)) == "cocco" : 1 kPO4 : longname : PO4 uptake half-sat constant subcategory : 10. autotrophs @@ -776,9 +785,10 @@ PFT_derived_types : datatype : real default_value : default : 1e34 - ((autotroph_sname)) == "sp" : 0.01 + ((autotroph_sname)) == "sp" : 0.005 ((autotroph_sname)) == "diat" : 0.05 ((autotroph_sname)) == "diaz" : 0.015 + ((autotroph_sname)) == "cocco" : 0.006 kDOP : longname : DOP uptake half-sat constant subcategory : 10. autotrophs @@ -788,7 +798,8 @@ PFT_derived_types : default : 1e34 ((autotroph_sname)) == "sp" : 0.3 ((autotroph_sname)) == "diat" : 0.5 - ((autotroph_sname)) == "diaz" : 0.075 + ((autotroph_sname)) == "diaz" : 0.1 + ((autotroph_sname)) == "cocco" : 0.25 kNO3 : longname : NO3 uptake half-sat constant subcategory : 10. autotrophs @@ -796,9 +807,10 @@ PFT_derived_types : datatype : real default_value : default : 1e34 - ((autotroph_sname)) == "sp" : 0.25 + ((autotroph_sname)) == "sp" : 0.2 ((autotroph_sname)) == "diat" : 0.5 ((autotroph_sname)) == "diaz" : 2 + ((autotroph_sname)) == "cocco" : 0.2 kNH4 : longname : NH4 uptake half-sat constant subcategory : 10. autotrophs @@ -809,6 +821,7 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : 0.01 ((autotroph_sname)) == "diat" : 0.05 ((autotroph_sname)) == "diaz" : 0.2 + ((autotroph_sname)) == "cocco" : 0.01 kSiO3 : longname : SiO3 uptake half-sat constant subcategory : 10. autotrophs @@ -817,8 +830,9 @@ PFT_derived_types : default_value : default : 1e34 ((autotroph_sname)) == "sp" : 0 - ((autotroph_sname)) == "diat" : 0.7 + ((autotroph_sname)) == "diat" : 1.8 ((autotroph_sname)) == "diaz" : 0 + ((autotroph_sname)) == "cocco" : 0 Qp_fixed : longname : P/C ratio when using fixed P/C ratios subcategory : 10. autotrophs @@ -829,6 +843,7 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : 1.0/117 ((autotroph_sname)) == "diat" : 1.0/117 ((autotroph_sname)) == "diaz" : 0.32*(1.0/117) + ((autotroph_sname)) == "cocco" : 1.0/117 gQfe_0 : longname : Initial Fe/C ratio for growth subcategory : 10. autotrophs @@ -836,9 +851,10 @@ PFT_derived_types : datatype : real default_value : default : 1e34 - ((autotroph_sname)) == "sp" : 30e-6 - ((autotroph_sname)) == "diat" : 30e-6 - ((autotroph_sname)) == "diaz" : 60e-6 + ((autotroph_sname)) == "sp" : 35e-6 + ((autotroph_sname)) == "diat" : 35e-6 + ((autotroph_sname)) == "diaz" : 70e-6 + ((autotroph_sname)) == "cocco" : 35e-6 gQfe_min : longname : Minimum Fe/C ratio for growth subcategory : 10. autotrophs @@ -846,9 +862,10 @@ PFT_derived_types : datatype : real default_value : default : 1e34 - ((autotroph_sname)) == "sp" : 2.5e-6 - ((autotroph_sname)) == "diat" : 2.5e-6 - ((autotroph_sname)) == "diaz" : 2.5e-6 + ((autotroph_sname)) == "sp" : 3e-6 + ((autotroph_sname)) == "diat" : 3e-6 + ((autotroph_sname)) == "diaz" : 6e-6 + ((autotroph_sname)) == "cocco" : 3e-6 alphaPI_per_day : longname : Initial slope of P_I curve (GD98) subcategory : 10. autotrophs @@ -856,9 +873,10 @@ PFT_derived_types : datatype : real default_value : default : 1e34 - ((autotroph_sname)) == "sp" : 0.39 - ((autotroph_sname)) == "diat" : 0.28 + ((autotroph_sname)) == "sp" : 0.35 + ((autotroph_sname)) == "diat" : 0.39 ((autotroph_sname)) == "diaz" : 0.39 + ((autotroph_sname)) == "cocco" : 0.28 PCref_per_day : longname : Maximum C-spec growth rate at Tref subcategory : 10. autotrophs @@ -866,9 +884,10 @@ PFT_derived_types : datatype : real default_value : default : 1e34 - ((autotroph_sname)) == "sp" : 5 + ((autotroph_sname)) == "sp" : 4.4 ((autotroph_sname)) == "diat" : 5 - ((autotroph_sname)) == "diaz" : 2.5 + ((autotroph_sname)) == "diaz" : 2.2 + ((autotroph_sname)) == "cocco" : 4.7 thetaN_max : longname : Maximum thetaN (Chl / N) subcategory : 10. autotrophs @@ -879,6 +898,7 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : 2.5 ((autotroph_sname)) == "diat" : 4 ((autotroph_sname)) == "diaz" : 2.5 + ((autotroph_sname)) == "cocco" : 3.5 loss_thres : longname : concentration where losses go to zero subcategory : 10. autotrophs @@ -889,6 +909,7 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : 0.01 ((autotroph_sname)) == "diat" : 0.02 ((autotroph_sname)) == "diaz" : 0.02 + ((autotroph_sname)) == "cocco" : 0.01 loss_thres2 : longname : concentration where losses go to zero subcategory : 10. autotrophs @@ -899,6 +920,7 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : 0 ((autotroph_sname)) == "diat" : 0 ((autotroph_sname)) == "diaz" : 0.001 + ((autotroph_sname)) == "cocco" : 0 temp_thres : longname : Temperature where concentration threshold and photosynthesis rate drops subcategory : 10. autotrophs @@ -909,6 +931,7 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : -10 ((autotroph_sname)) == "diat" : -10 ((autotroph_sname)) == "diaz" : 15 + ((autotroph_sname)) == "cocco" : 0 mort_per_day : longname : Linear mortality rate subcategory : 10. autotrophs @@ -919,6 +942,7 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : 0.1 ((autotroph_sname)) == "diat" : 0.1 ((autotroph_sname)) == "diaz" : 0.1 + ((autotroph_sname)) == "cocco" : 0.1 mort2_per_day : longname : Quadratic mortality rate subcategory : 10. autotrophs @@ -929,6 +953,7 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : 0.01 ((autotroph_sname)) == "diat" : 0.01 ((autotroph_sname)) == "diaz" : 0.01 + ((autotroph_sname)) == "cocco" : 0.01 agg_rate_max : longname : Maximum agg rate subcategory : 10. autotrophs @@ -939,6 +964,7 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : 0.5 ((autotroph_sname)) == "diat" : 0.5 ((autotroph_sname)) == "diaz" : 0.5 + ((autotroph_sname)) == "cocco" : 0.5 agg_rate_min : longname : Minimum agg rate subcategory : 10. autotrophs @@ -949,6 +975,7 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : 0.01 ((autotroph_sname)) == "diat" : 0.02 ((autotroph_sname)) == "diaz" : 0.01 + ((autotroph_sname)) == "cocco" : 0.01 loss_poc : longname : Routing of loss term subcategory : 10. autotrophs @@ -959,6 +986,7 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : 0 ((autotroph_sname)) == "diat" : 0 ((autotroph_sname)) == "diaz" : 0 + ((autotroph_sname)) == "cocco" : 0 Ea : longname : Activation energy for Arrhenius equation subcategory : 10. autotrophs @@ -969,6 +997,7 @@ PFT_derived_types : ((autotroph_sname)) == "sp" : 0.32 ((autotroph_sname)) == "diat" : 0.32 ((autotroph_sname)) == "diaz" : 0.32 + ((autotroph_sname)) == "cocco" : 0.32 zooplankton_settings : _array_shape : zooplankton_cnt _is_allocatable : true @@ -1053,6 +1082,7 @@ PFT_derived_types : ((grazer_sname)) == "sp_zoo" : grz_sp_zoo ((grazer_sname)) == "diat_zoo" : grz_diat_zoo ((grazer_sname)) == "diaz_zoo" : grz_diaz_zoo + ((grazer_sname)) == "cocco_zoo" : grz_cocco_zoo lname : longname : Long name of the grazing relationship subcategory : 12. grazing @@ -1063,6 +1093,7 @@ PFT_derived_types : ((grazer_sname)) == "sp_zoo" : Grazing of sp by zoo ((grazer_sname)) == "diat_zoo" : Grazing of diat by zoo ((grazer_sname)) == "diaz_zoo" : Grazing of diaz by zoo + ((grazer_sname)) == "cocco_zoo" : Grazing of cocco by zoo auto_ind_cnt : longname : Number of autotrophs being grazed subcategory : 12. grazing @@ -1083,7 +1114,9 @@ PFT_derived_types : units : unitless datatype : integer _comment : 1 => Michaelis-Menten, 2 => Sigmoidal - default_value : 1 + default_value : + default : 1 + ((grazer_sname)) == "sp_zoo" : 2 z_umax_0_per_day : longname : Max zoo growth rate at tref subcategory : 12. grazing @@ -1091,9 +1124,10 @@ PFT_derived_types : datatype : real default_value : default : 1e34 - ((grazer_sname)) == "sp_zoo" : 3.3 - ((grazer_sname)) == "diat_zoo" : 3.15 - ((grazer_sname)) == "diaz_zoo" : 3.3 + ((grazer_sname)) == "sp_zoo" : 3.6 + ((grazer_sname)) == "diat_zoo" : 3.41 + ((grazer_sname)) == "diaz_zoo" : 3.35 + ((grazer_sname)) == "cocco_zoo" : 2.95 z_grz : longname : Grazing coefficient subcategory : 12. grazing @@ -1101,9 +1135,10 @@ PFT_derived_types : datatype : real default_value : default : 1e34 - ((grazer_sname)) == "sp_zoo" : 1.2 - ((grazer_sname)) == "diat_zoo" : 1.2 - ((grazer_sname)) == "diaz_zoo" : 1.2 + ((grazer_sname)) == "sp_zoo" : 0.54 + ((grazer_sname)) == "diat_zoo" : 0.72 + ((grazer_sname)) == "diaz_zoo" : 0.6 + ((grazer_sname)) == "cocco_zoo" : 0.854 graze_zoo : longname : Routing of grazed term, remainder goes to dic subcategory : 12. grazing @@ -1114,6 +1149,7 @@ PFT_derived_types : ((grazer_sname)) == "sp_zoo" : 0.3 ((grazer_sname)) == "diat_zoo" : 0.25 ((grazer_sname)) == "diaz_zoo" : 0.3 + ((grazer_sname)) == "cocco_zoo" : 0.25 graze_poc : longname : Routing of grazed term, remainder goes to dic subcategory : 12. grazing @@ -1122,8 +1158,9 @@ PFT_derived_types : default_value : default : 1e34 ((grazer_sname)) == "sp_zoo" : 0 - ((grazer_sname)) == "diat_zoo" : 0.39 + ((grazer_sname)) == "diat_zoo" : 0.38 ((grazer_sname)) == "diaz_zoo" : 0.1 + ((grazer_sname)) == "cocco_zoo" : 0.3 graze_doc : longname : Routing of grazed term, remainder goes to dic subcategory : 12. grazing @@ -1134,6 +1171,7 @@ PFT_derived_types : ((grazer_sname)) == "sp_zoo" : 0.06 ((grazer_sname)) == "diat_zoo" : 0.06 ((grazer_sname)) == "diaz_zoo" : 0.06 + ((grazer_sname)) == "cocco_zoo" : 0.06 f_zoo_detr : longname : Fraction of zoo losses to detrital subcategory : 12. grazing @@ -1144,6 +1182,7 @@ PFT_derived_types : ((grazer_sname)) == "sp_zoo" : 0.12 ((grazer_sname)) == "diat_zoo" : 0.24 ((grazer_sname)) == "diaz_zoo" : 0.12 + ((grazer_sname)) == "cocco_zoo" : 0.18 auto_ind : _array_shape : autotroph_cnt _array_len_to_print : auto_ind_cnt @@ -1157,6 +1196,7 @@ PFT_derived_types : ((grazer_sname)) == "sp_zoo" : 1 # index where autotroph_name = sp ((grazer_sname)) == "diat_zoo" : 2 # index where autotroph_name = diat ((grazer_sname)) == "diaz_zoo" : 3 # index where autotroph_name = diaz + ((grazer_sname)) == "cocco_zoo" : 4 # index where autotroph_name = cocco zoo_ind : _array_shape : zooplankton_cnt _array_len_to_print : zoo_ind_cnt diff --git a/src/marbl_settings_mod.F90 b/src/marbl_settings_mod.F90 index e04dc846..0267a9b9 100644 --- a/src/marbl_settings_mod.F90 +++ b/src/marbl_settings_mod.F90 @@ -446,6 +446,13 @@ subroutine marbl_settings_set_defaults_PFT_counts(marbl_status_log) character(len=*), parameter :: subname = 'marbl_settings_mod:marbl_settings_set_defaults_PFT_counts' character(len=char_len) :: log_message + if (trim(PFT_defaults) .eq. 'CESM2.1+cocco') then + write(log_message, '(3A)') 'PFT_defaults = "', trim(PFT_defaults), & + '" in input file, but being treated as "user-specified"' + call marbl_status_log%log_noerror(log_message, subname) + PFT_defaults = 'user-specified' + end if + select case (trim(PFT_defaults)) case ('CESM2') autotroph_cnt = 3 From 9cc23d1eae0f2bea7220b9fe4dbc19151b813a43 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Fri, 14 Jun 2019 16:15:22 -0600 Subject: [PATCH 68/75] Remove QCaCO3_max_exp Now that we have cesm2.1+cocco settings file, we can set QCaCO3_max to different values when using coccolithophores instead of needing a separate settings variable. --- defaults/json/settings_cesm2.0.json | 9 +-------- defaults/json/settings_cesm2.1+cocco.json | 9 +-------- defaults/json/settings_cesm2.1.json | 9 +-------- defaults/json/settings_latest.json | 9 +-------- defaults/settings_cesm2.0.yaml | 8 +------- defaults/settings_cesm2.1+cocco.yaml | 8 +------- defaults/settings_cesm2.1.yaml | 8 +------- defaults/settings_latest.yaml | 8 +------- src/marbl_interior_tendency_mod.F90 | 7 +------ src/marbl_settings_mod.F90 | 12 +----------- 10 files changed, 10 insertions(+), 77 deletions(-) diff --git a/defaults/json/settings_cesm2.0.json b/defaults/json/settings_cesm2.0.json index 5b02c004..22f0d60d 100644 --- a/defaults/json/settings_cesm2.0.json +++ b/defaults/json/settings_cesm2.0.json @@ -870,14 +870,7 @@ "QCaCO3_max": { "datatype": "real", "default_value": 0.4, - "longname": "Max CaCO3/C ratio for implicit calcifiers", - "subcategory": "4. general parameters", - "units": "mmol CaCO3/mmol C" - }, - "QCaCO3_max_exp": { - "datatype": "real", - "default_value": 2.0, - "longname": "Max CaCO3/C ratio for explicit calcifiers", + "longname": "Max CaCO3/C ratio for calcifiers", "subcategory": "4. general parameters", "units": "mmol CaCO3/mmol C" }, diff --git a/defaults/json/settings_cesm2.1+cocco.json b/defaults/json/settings_cesm2.1+cocco.json index f0c748e1..f98519a7 100644 --- a/defaults/json/settings_cesm2.1+cocco.json +++ b/defaults/json/settings_cesm2.1+cocco.json @@ -910,16 +910,9 @@ "units": "unitless" }, "QCaCO3_max": { - "datatype": "real", - "default_value": 0.4, - "longname": "Max CaCO3/C ratio for implicit calcifiers", - "subcategory": "4. general parameters", - "units": "mmol CaCO3/mmol C" - }, - "QCaCO3_max_exp": { "datatype": "real", "default_value": 2.0, - "longname": "Max CaCO3/C ratio for explicit calcifiers", + "longname": "Max CaCO3/C ratio for calcifiers", "subcategory": "4. general parameters", "units": "mmol CaCO3/mmol C" }, diff --git a/defaults/json/settings_cesm2.1.json b/defaults/json/settings_cesm2.1.json index 884dda00..37b8562a 100644 --- a/defaults/json/settings_cesm2.1.json +++ b/defaults/json/settings_cesm2.1.json @@ -870,14 +870,7 @@ "QCaCO3_max": { "datatype": "real", "default_value": 0.4, - "longname": "Max CaCO3/C ratio for implicit calcifiers", - "subcategory": "4. general parameters", - "units": "mmol CaCO3/mmol C" - }, - "QCaCO3_max_exp": { - "datatype": "real", - "default_value": 2.0, - "longname": "Max CaCO3/C ratio for explicit calcifiers", + "longname": "Max CaCO3/C ratio for calcifiers", "subcategory": "4. general parameters", "units": "mmol CaCO3/mmol C" }, diff --git a/defaults/json/settings_latest.json b/defaults/json/settings_latest.json index 884dda00..37b8562a 100644 --- a/defaults/json/settings_latest.json +++ b/defaults/json/settings_latest.json @@ -870,14 +870,7 @@ "QCaCO3_max": { "datatype": "real", "default_value": 0.4, - "longname": "Max CaCO3/C ratio for implicit calcifiers", - "subcategory": "4. general parameters", - "units": "mmol CaCO3/mmol C" - }, - "QCaCO3_max_exp": { - "datatype": "real", - "default_value": 2.0, - "longname": "Max CaCO3/C ratio for explicit calcifiers", + "longname": "Max CaCO3/C ratio for calcifiers", "subcategory": "4. general parameters", "units": "mmol CaCO3/mmol C" }, diff --git a/defaults/settings_cesm2.0.yaml b/defaults/settings_cesm2.0.yaml index c7e296a8..dd9478bc 100644 --- a/defaults/settings_cesm2.0.yaml +++ b/defaults/settings_cesm2.0.yaml @@ -593,17 +593,11 @@ general_parms : datatype : real default_value : 1.5 QCaCO3_max : - longname : Max CaCO3/C ratio for implicit calcifiers + longname : Max CaCO3/C ratio for calcifiers subcategory : 4. general parameters units : mmol CaCO3/mmol C datatype : real default_value : 0.40 - QCaCO3_max_exp : - longname : Max CaCO3/C ratio for explicit calcifiers - subcategory : 4. general parameters - units : mmol CaCO3/mmol C - datatype : real - default_value : 2.0 f_graze_CaCO3_remin : longname : Fraction of spCaCO3 grazing which is remineralized in zooplankton guts subcategory : 4. general parameters diff --git a/defaults/settings_cesm2.1+cocco.yaml b/defaults/settings_cesm2.1+cocco.yaml index 859744bb..391e7fe5 100644 --- a/defaults/settings_cesm2.1+cocco.yaml +++ b/defaults/settings_cesm2.1+cocco.yaml @@ -597,13 +597,7 @@ general_parms : datatype : real default_value : 1.5 QCaCO3_max : - longname : Max CaCO3/C ratio for implicit calcifiers - subcategory : 4. general parameters - units : mmol CaCO3/mmol C - datatype : real - default_value : 0.40 - QCaCO3_max_exp : - longname : Max CaCO3/C ratio for explicit calcifiers + longname : Max CaCO3/C ratio for calcifiers subcategory : 4. general parameters units : mmol CaCO3/mmol C datatype : real diff --git a/defaults/settings_cesm2.1.yaml b/defaults/settings_cesm2.1.yaml index e2d01331..e4e526b8 100644 --- a/defaults/settings_cesm2.1.yaml +++ b/defaults/settings_cesm2.1.yaml @@ -595,17 +595,11 @@ general_parms : datatype : real default_value : 1.5 QCaCO3_max : - longname : Max CaCO3/C ratio for implicit calcifiers + longname : Max CaCO3/C ratio for calcifiers subcategory : 4. general parameters units : mmol CaCO3/mmol C datatype : real default_value : 0.40 - QCaCO3_max_exp : - longname : Max CaCO3/C ratio for explicit calcifiers - subcategory : 4. general parameters - units : mmol CaCO3/mmol C - datatype : real - default_value : 2.0 f_graze_CaCO3_remin : longname : Fraction of spCaCO3 grazing which is remineralized in zooplankton guts subcategory : 4. general parameters diff --git a/defaults/settings_latest.yaml b/defaults/settings_latest.yaml index e2d01331..e4e526b8 100644 --- a/defaults/settings_latest.yaml +++ b/defaults/settings_latest.yaml @@ -595,17 +595,11 @@ general_parms : datatype : real default_value : 1.5 QCaCO3_max : - longname : Max CaCO3/C ratio for implicit calcifiers + longname : Max CaCO3/C ratio for calcifiers subcategory : 4. general parameters units : mmol CaCO3/mmol C datatype : real default_value : 0.40 - QCaCO3_max_exp : - longname : Max CaCO3/C ratio for explicit calcifiers - subcategory : 4. general parameters - units : mmol CaCO3/mmol C - datatype : real - default_value : 2.0 f_graze_CaCO3_remin : longname : Fraction of spCaCO3 grazing which is remineralized in zooplankton guts subcategory : 4. general parameters diff --git a/src/marbl_interior_tendency_mod.F90 b/src/marbl_interior_tendency_mod.F90 index 76aa3bdb..067ec2d9 100644 --- a/src/marbl_interior_tendency_mod.F90 +++ b/src/marbl_interior_tendency_mod.F90 @@ -1114,7 +1114,6 @@ subroutine compute_autotroph_elemental_ratios(km, autotroph_local, marbl_tracer_ use marbl_settings_mod, only : gQ_Si_kSi_thres use marbl_settings_mod, only : PquotaSlope, PquotaIntercept, PquotaMinNP use marbl_settings_mod, only : QCaCO3_max - use marbl_settings_mod, only : QCaCO3_max_exp integer, intent(in) :: km type(autotroph_local_type), intent(in) :: autotroph_local @@ -1210,11 +1209,7 @@ subroutine compute_autotroph_elemental_ratios(km, autotroph_local, marbl_tracer_ !----------------------------------------------------------------------- if (marbl_tracer_indices%auto_inds(auto_ind)%CaCO3_ind > 0) then - if (autotroph_settings(auto_ind)%exp_calcifier) then - QCaCO3(auto_ind,:) = min(auto_CaCO3(auto_ind,:) / (auto_C(auto_ind,:) + epsC), QCaCO3_max_exp) - else - QCaCO3(auto_ind,:) = min(auto_CaCO3(auto_ind,:) / (auto_C(auto_ind,:) + epsC), QCaCO3_max) - end if + QCaCO3(auto_ind,:) = min(auto_CaCO3(auto_ind,:) / (auto_C(auto_ind,:) + epsC), QCaCO3_max) end if end do end associate diff --git a/src/marbl_settings_mod.F90 b/src/marbl_settings_mod.F90 index 0267a9b9..fdb03591 100644 --- a/src/marbl_settings_mod.F90 +++ b/src/marbl_settings_mod.F90 @@ -277,8 +277,7 @@ module marbl_settings_mod parm_sed_denitrif_coeff, & ! global scaling factor for sed_denitrif auto_mort2_exp, & ! Value of power loss exponent for autotrophs zoo_mort2_exp, & ! Value of power loss exponent for zooplankton - QCaCO3_max, & ! Max CaCO3/C ratio for implicit calcifiers - QCaCO3_max_exp, & ! Max CaCO3/C ratio for explicit calcifiers + QCaCO3_max, & ! Max CaCO3/C ratio for calcifiers f_graze_CaCO3_remin, & ! Fraction of spCaCO3 grazing which is remineralized in zooplankton guts bury_coeff_rmean_timescale_years @@ -431,7 +430,6 @@ subroutine marbl_settings_set_defaults_general_parms() auto_mort2_exp = 1.75_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above zoo_mort2_exp = 1.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above QCaCO3_max = 0.40_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above - QCaCO3_max_exp = 2.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above f_graze_CaCO3_remin = 0.33_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above @@ -1131,14 +1129,6 @@ subroutine marbl_settings_define_general_parms(this, marbl_status_log) call this%add_var(sname, lname, units, datatype, category, & marbl_status_log, rptr=rptr) - sname = 'QCaCO3_max_exp' - lname = 'Max CaCO3/C ratio for explicit calcifiers' - units = 'mmol CaCO3/mmol C' - datatype = 'real' - rptr => QCaCO3_max_exp - call this%add_var(sname, lname, units, datatype, category, & - marbl_status_log, rptr=rptr) - sname = 'f_graze_CaCO3_remin' lname = 'Fraction of spCaCO3 grazing which is remineralized in zooplankton guts' units = 'unitless' From 31bbb03acee35edb6bb20bb2b8664623e62086f0 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Mon, 17 Jun 2019 13:41:54 -0600 Subject: [PATCH 69/75] Re-order compute_temperature_functional_form args intent(out) variable should be last (also added comments defining dimensions of each argument) --- src/marbl_interior_tendency_mod.F90 | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/marbl_interior_tendency_mod.F90 b/src/marbl_interior_tendency_mod.F90 index 067ec2d9..966281c7 100644 --- a/src/marbl_interior_tendency_mod.F90 +++ b/src/marbl_interior_tendency_mod.F90 @@ -324,9 +324,9 @@ subroutine marbl_interior_tendency_compute( & call compute_autotroph_elemental_ratios(km, autotroph_local, marbl_tracer_indices, tracer_local, & autotroph_derived_terms) - call compute_temperature_functional_form(temperature(:), Tref_auto(:), temp_func_opt_auto(:), Tfunc_auto(:,:), Ea_auto(:)) + call compute_temperature_functional_form(temperature(:), Tref_auto(:), temp_func_opt_auto(:), Ea_auto(:), Tfunc_auto(:,:)) - call compute_temperature_functional_form(temperature(:), Tref_zoo(:), temp_func_opt_zoo(:), Tfunc_zoo(:,:), Ea_zoo(:)) + call compute_temperature_functional_form(temperature(:), Tref_zoo(:), temp_func_opt_zoo(:), Ea_zoo(:), Tfunc_zoo(:,:)) call compute_Pprime(km, domain%zt, autotroph_local, temperature, autotroph_derived_terms%Pprime) @@ -1218,7 +1218,7 @@ end subroutine compute_autotroph_elemental_ratios !*********************************************************************** - subroutine compute_temperature_functional_form(temperature, Tref, temp_func_form_iopt, Tfunc, Ea) + subroutine compute_temperature_functional_form(temperature, Tref, temp_func_form_iopt, Ea, Tfunc) !----------------------------------------------------------------------- ! Scaling of physiological rates by temperature @@ -1241,11 +1241,11 @@ subroutine compute_temperature_functional_form(temperature, Tref, temp_func_form use marbl_constants_mod, only : c10 use marbl_constants_mod, only : K_Boltz - real(r8), intent(in) :: temperature(:) - real(r8), intent(in) :: Tref(:) - integer, intent(in) :: temp_func_form_iopt(:) - real(r8), intent(out) :: Tfunc(:,:) - real(r8), intent(in) :: Ea(size(Tfunc, dim=1)) + real(r8), intent(in) :: temperature(:) ! km + real(r8), intent(in) :: Tref(:) ! PFT_cnt + integer, intent(in) :: temp_func_form_iopt(:) ! PFT_cnt + real(r8), intent(in) :: Ea(:) ! PFT_cnt + real(r8), intent(out) :: Tfunc(:,:) ! PFT_cnt x km integer :: Tfunc_ind From 664c6d01d0524f7deca1093a961ecf51e01192b4 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Mon, 17 Jun 2019 13:56:02 -0600 Subject: [PATCH 70/75] Update comments in marbl_pft_mod Some default variable settings were missing the comment to see the CESM NOTE in marbl_settings_mod, others had an incorrect message (claiming the CESM NOTE was in marbl_pft_mod rather than settings_mod). Also, changed the order in which the autotroph settings are set so that it matches the order variables appear in the settings YAML file. --- src/marbl_pft_mod.F90 | 132 +++++++++++++++++++++--------------------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/src/marbl_pft_mod.F90 b/src/marbl_pft_mod.F90 index 8a68eaf5..dfdfdd42 100644 --- a/src/marbl_pft_mod.F90 +++ b/src/marbl_pft_mod.F90 @@ -27,7 +27,7 @@ module marbl_pft_mod logical(log_kind) :: silicifier ! flag set to true if this autotroph is a silicifier logical(log_kind) :: is_carbon_limited ! flag set to true if this autotroph is carbon limited - real(r8) :: kFe, kPO4, kDOP, kNO3, kNH4, kSiO3, kCO2 ! nutrient uptake half-sat constants + real(r8) :: kFe, kCO2, kPO4, kDOP, kNO3, kNH4, kSiO3 ! nutrient uptake half-sat constants real(r8) :: Qp_fixed ! P/C ratio for fixed P/C ratios real(r8) :: gQfe_0, gQfe_min ! initial and minimum Fe/C ratio for growth real(r8) :: alphaPI_per_day ! init slope of P_I curve (GD98) (mmol C m^2/(mg Chl W day)) @@ -117,97 +117,97 @@ subroutine autotroph_set_to_default(self, autotroph_id, marbl_status_log) case ('sp') self%sname = 'sp' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%lname = 'Small Phyto' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod - self%temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above - self%Nfixer = .false. - self%imp_calcifier = .true. - self%exp_calcifier = .false. - self%silicifier = .false. - self%is_carbon_limited = .false. + self%temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%Nfixer = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%imp_calcifier = .true. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%exp_calcifier = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%silicifier = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%is_carbon_limited = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kFe = 0.03e-3_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%kCO2 = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kPO4 = 0.01_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kDOP = 0.3_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kNO3 = 0.25_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kNH4 = 0.01_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kSiO3 = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod - self%kCO2 = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. - self%gQfe_0 = 30.0e-6_r8 - self%gQfe_min = 2.5e-6_r8 - self%alphaPI_per_day = 0.39_r8 - self%PCref_per_day = 5.0_r8 - self%thetaN_max = 2.5_r8 - self%loss_thres = 0.01_r8 - self%loss_thres2 = 0.0_r8 - self%temp_thres = -10.0_r8 - self%mort_per_day = 0.1_r8 - self%mort2_per_day = 0.01_r8 - self%agg_rate_max = 0.5_r8 - self%agg_rate_min = 0.01_r8 - self%loss_poc = 0.0_r8 - self%Ea = 0.32_r8 + self%gQfe_0 = 30.0e-6_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%gQfe_min = 2.5e-6_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%alphaPI_per_day = 0.39_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%PCref_per_day = 5.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%thetaN_max = 2.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_thres = 0.01_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_thres2 = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%temp_thres = -10.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%mort_per_day = 0.1_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%mort2_per_day = 0.01_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%agg_rate_max = 0.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%agg_rate_min = 0.01_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_poc = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%Ea = 0.32_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod case ('diat') self%sname = 'diat' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%lname = 'Diatom' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod - self%temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above - self%Nfixer = .false. - self%imp_calcifier = .false. - self%exp_calcifier = .false. - self%silicifier = .true. - self%is_carbon_limited = .false. + self%temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%Nfixer = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%imp_calcifier = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%exp_calcifier = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%silicifier = .true. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%is_carbon_limited = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kFe = 0.07e-3_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%kCO2 = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kPO4 = 0.05_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kDOP = 0.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kNO3 = 0.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kNH4 = 0.05_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kSiO3 = 0.7_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod - self%kCO2 = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%Qp_fixed = Qp_zoo ! only used for lvariable_PtoC=.false. - self%gQfe_0 = 30.0e-6_r8 - self%gQfe_min = 2.5e-6_r8 - self%alphaPI_per_day = 0.28_r8 - self%PCref_per_day = 5.0_r8 - self%thetaN_max = 4.0_r8 - self%loss_thres = 0.02_r8 - self%loss_thres2 = 0.0_r8 - self%temp_thres = -10.0_r8 - self%mort_per_day = 0.1_r8 - self%mort2_per_day = 0.01_r8 - self%agg_rate_max = 0.5_r8 - self%agg_rate_min = 0.02_r8 - self%loss_poc = 0.0_r8 - self%Ea = 0.32_r8 + self%gQfe_0 = 30.0e-6_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%gQfe_min = 2.5e-6_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%alphaPI_per_day = 0.28_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%PCref_per_day = 5.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%thetaN_max = 4.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_thres = 0.02_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_thres2 = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%temp_thres = -10.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%mort_per_day = 0.1_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%mort2_per_day = 0.01_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%agg_rate_max = 0.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%agg_rate_min = 0.02_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_poc = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%Ea = 0.32_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod case ('diaz') self%sname = 'diaz' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%lname = 'Diazotroph' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod - self%temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above - self%Nfixer = .true. - self%imp_calcifier = .false. - self%exp_calcifier = .false. - self%silicifier = .false. - self%is_carbon_limited = .false. + self%temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%Nfixer = .true. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%imp_calcifier = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%exp_calcifier = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%silicifier = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%is_carbon_limited = .false. ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kFe = 0.045e-3_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%kCO2 = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kPO4 = 0.015_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kDOP = 0.075_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kNO3 = 2.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kNH4 = 0.2_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%kSiO3 = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod - self%kCO2 = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%Qp_fixed = 0.32_r8 * Qp_zoo ! only used for lvariable_PtoC=.false. - self%gQfe_0 = 60.0e-6_r8 - self%gQfe_min = 2.5e-6_r8 - self%alphaPI_per_day = 0.39_r8 - self%PCref_per_day = 2.5_r8 - self%thetaN_max = 2.5_r8 - self%loss_thres = 0.02_r8 - self%loss_thres2 = 0.001_r8 - self%temp_thres = 15.0_r8 - self%mort_per_day = 0.1_r8 - self%mort2_per_day = 0.01_r8 - self%agg_rate_max = 0.5_r8 - self%agg_rate_min = 0.01_r8 - self%loss_poc = 0.0_r8 - self%Ea = 0.32_r8 + self%gQfe_0 = 60.0e-6_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%gQfe_min = 2.5e-6_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%alphaPI_per_day = 0.39_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%PCref_per_day = 2.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%thetaN_max = 2.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_thres = 0.02_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_thres2 = 0.001_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%temp_thres = 15.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%mort_per_day = 0.1_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%mort2_per_day = 0.01_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%agg_rate_max = 0.5_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%agg_rate_min = 0.01_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%loss_poc = 0.0_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod + self%Ea = 0.32_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod case ('unset') self%sname = 'unknown' self%lname = 'unknown' @@ -218,12 +218,12 @@ subroutine autotroph_set_to_default(self, autotroph_id, marbl_status_log) self%silicifier = .false. self%is_carbon_limited = .false. self%kFe = UnsetValue + self%kCO2 = UnsetValue self%kPO4 = UnsetValue self%kDOP = UnsetValue self%kNO3 = UnsetValue self%kNH4 = UnsetValue self%kSiO3 = UnsetValue - self%kCO2 = UnsetValue self%Qp_fixed = UnsetValue self%gQfe_0 = UnsetValue self%gQfe_min = UnsetValue @@ -262,7 +262,7 @@ subroutine zooplankton_set_to_default(self, zooplankton_id, marbl_status_log) case ('zoo') self%sname = 'zoo' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%lname = 'Zooplankton' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod - self%temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE above + self%temp_func_form_opt = 'q_10' ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%z_mort_0_per_day = 0.1_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%z_mort2_0_per_day = 0.4_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod self%loss_thres = 0.075_r8 ! CESM USERS - DO NOT CHANGE HERE! POP calls put_setting() for this var, see CESM NOTE in marbl_settings_mod From 116007e40cd24ee64d2f47611257ac08729ddd07 Mon Sep 17 00:00:00 2001 From: Kristen Krumhardt Date: Tue, 2 Jul 2019 14:01:07 -0600 Subject: [PATCH 71/75] cleaned up comments in calcification subroutine of marbl_interior_tendency_mod.F90 and switched CaCO3_PROD output from medium to low in diagnostics_lastest.yaml --- defaults/diagnostics_latest.yaml | 2 +- src/marbl_interior_tendency_mod.F90 | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/defaults/diagnostics_latest.yaml b/defaults/diagnostics_latest.yaml index 1542057f..fa870890 100644 --- a/defaults/diagnostics_latest.yaml +++ b/defaults/diagnostics_latest.yaml @@ -958,7 +958,7 @@ CaCO3_PROD : longname : CaCO3 Production units : mmol/m^3/s vertical_grid : layer_avg - frequency : medium + frequency : low operator : average CaCO3_REMIN : longname : CaCO3 Remineralization diff --git a/src/marbl_interior_tendency_mod.F90 b/src/marbl_interior_tendency_mod.F90 index 966281c7..5e51341b 100644 --- a/src/marbl_interior_tendency_mod.F90 +++ b/src/marbl_interior_tendency_mod.F90 @@ -1441,18 +1441,20 @@ subroutine compute_autotroph_calcification(km, autotroph_local, temperature, car (f_photosp_CaCO3 * photoC(auto_ind,:))) end where else if (autotroph_settings(auto_ind)%exp_calcifier) then - !first calculate PIC/POC in coccolithophore biomass---------- - !temperature effect + !calculate the CaCO3/organicC production ratio for coccolithophores ('picpoc') + !For details, see Krumhardt et al., 2019, JAMES & Krumhardt et al., 2017, Progress in Oceanography + + !temperature effect (linearly decreases calcification at temps < 11C) where (temperature < 11._r8) picpoc = max(0.,0.104 * temperature - 0.108) elsewhere picpoc = 1. end where - !CO2 effect + !CO2 effect (CaCO3/organicC ratio ('picpoc') decreases as CO2 increases) picpoc = max(0.,-0.0136 * CO2(:) + picpoc(:) + 0.21) - !nut lim effect (maybe just making this for P-limited areas? if (Plim(auto_ind) == f_nut(auto_ind) then..) + !P-limitation effect (CaCO2/organicC ratio increases when P limitation term is low) picpoc = max(0.,-0.48 * Plim(auto_ind,:) + picpoc(:) + 0.48) !multiply cocco growth rate by picpoc to get CaCO3 formation From acd6dfaf34978ef60074c4a32170cda11437c6f1 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Fri, 5 Jul 2019 10:21:31 -0600 Subject: [PATCH 72/75] Clean up comments and variable names Following the refactor to move Tref and temp_func_form_iopt onto the autotroph and zooplankton settings types, the variable Tfunc_ind was no longer an appropriate name (it wasn't just indexing Tfunc). So Tfunc_ind is now PFT_ind (matching the "PFT_cnt" dimension in the comments). I also cleaned up the comments about Tref in the function header to note that the setting is not used when Tfunc is computed with the power function. --- src/marbl_interior_tendency_mod.F90 | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/marbl_interior_tendency_mod.F90 b/src/marbl_interior_tendency_mod.F90 index 5e51341b..40b511df 100644 --- a/src/marbl_interior_tendency_mod.F90 +++ b/src/marbl_interior_tendency_mod.F90 @@ -1222,13 +1222,14 @@ subroutine compute_temperature_functional_form(temperature, Tref, temp_func_form !----------------------------------------------------------------------- ! Scaling of physiological rates by temperature - ! Use temp_func_form_iopt to select between two temperature functions, - ! Q10 and Arrhenius. + ! Use temp_func_form_iopt to select between three temperature functions, + ! Q10, Arrhenius, and a simple power function. ! ! Use slightly different reference temperatures as well ! (Future development can attempt to merge the two; will require additional tuning) ! Tref = 30.0 (deg C) reference temperature for Q10 formulation ! Tref = 25.0 (deg C) reference temperature for Arrhenius equation. + ! Tref is not currently used in the power function ! ! Tfunc scales the growth, mort and grazing rates where they are computed !----------------------------------------------------------------------- @@ -1241,23 +1242,23 @@ subroutine compute_temperature_functional_form(temperature, Tref, temp_func_form use marbl_constants_mod, only : c10 use marbl_constants_mod, only : K_Boltz - real(r8), intent(in) :: temperature(:) ! km - real(r8), intent(in) :: Tref(:) ! PFT_cnt + real(r8), intent(in) :: temperature(:) ! nlev + real(r8), intent(in) :: Tref(:) ! PFT_cnt (autotroph_cnt or zooplankton_cnt, depending on call) integer, intent(in) :: temp_func_form_iopt(:) ! PFT_cnt real(r8), intent(in) :: Ea(:) ! PFT_cnt - real(r8), intent(out) :: Tfunc(:,:) ! PFT_cnt x km + real(r8), intent(out) :: Tfunc(:,:) ! PFT_cnt x nlev - integer :: Tfunc_ind + integer :: PFT_ind - do Tfunc_ind = 1, size(Tfunc, dim=1) - select case (temp_func_form_iopt(Tfunc_ind)) + do PFT_ind = 1, size(Tref) + select case (temp_func_form_iopt(PFT_ind)) case (temp_func_form_iopt_q10) - Tfunc(Tfunc_ind,:) = Q_10**(((temperature(:) + T0_Kelvin) - (Tref(Tfunc_ind) + T0_Kelvin)) / c10) + Tfunc(PFT_ind,:) = Q_10**(((temperature(:) + T0_Kelvin) - (Tref(PFT_ind) + T0_Kelvin)) / c10) case (temp_func_form_iopt_arrhenius) - Tfunc(Tfunc_ind,:) = exp(-Ea(Tfunc_ind) * (Tref(Tfunc_ind) - temperature(:)) & - / (K_Boltz * (temperature(:) + T0_Kelvin) * (Tref(Tfunc_ind) + T0_Kelvin))) + Tfunc(PFT_ind,:) = exp(-Ea(PFT_ind) * (Tref(PFT_ind) - temperature(:)) & + / (K_Boltz * (temperature(:) + T0_Kelvin) * (Tref(PFT_ind) + T0_Kelvin))) case (temp_func_form_iopt_power) - Tfunc(Tfunc_ind,:) = 0.12_r8 * (max(c0, min(temperature(:), 27.0_r8))**0.4_r8) + Tfunc(PFT_ind,:) = 0.12_r8 * (max(c0, min(temperature(:), 27.0_r8))**0.4_r8) end select end do From 133cb036837f61d66b2121713da2ed2cf7b829a8 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Fri, 5 Jul 2019 15:29:26 -0600 Subject: [PATCH 73/75] Run yaml_to_json.py 116007e changed diagnostics_latest.yaml but did not change the JSON file --- defaults/json/diagnostics_latest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/defaults/json/diagnostics_latest.json b/defaults/json/diagnostics_latest.json index 9d30dc1b..aa109682 100644 --- a/defaults/json/diagnostics_latest.json +++ b/defaults/json/diagnostics_latest.json @@ -1024,7 +1024,7 @@ "vertical_grid": "layer_avg" }, "CaCO3_PROD": { - "frequency": "medium", + "frequency": "low", "longname": "CaCO3 Production", "operator": "average", "units": "mmol/m^3/s", From 3398c301bdf9142aa54d34a500a37b2c60dabb9a Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Thu, 11 Jul 2019 09:51:04 -0600 Subject: [PATCH 74/75] Clean up whitespace Missing a space between variable name and '==' operator --- MARBL_tools/MARBL_share.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MARBL_tools/MARBL_share.py b/MARBL_tools/MARBL_share.py index 184e7d47..d369386d 100644 --- a/MARBL_tools/MARBL_share.py +++ b/MARBL_tools/MARBL_share.py @@ -102,7 +102,7 @@ def expand_template_value(key_name, MARBL_settings, unprocessed_dict, check_freq template_fill_dict['((autotroph_lname))'] = MARBL_settings.settings_dict[auto_prefix + "lname"].strip('"') template_fill_dict['((autotroph_calcifier))'] = ".true." in [imp_calcifier, exp_calcifier] template_fill_dict['((autotroph_silicifier))'] = (silicifier == ".true.") - template_fill_dict['((autotroph_is_carbon_limited))'] = (is_carbon_limited== ".true.") + template_fill_dict['((autotroph_is_carbon_limited))'] = (is_carbon_limited == ".true.") template_fill_dict['((autotroph_Nfixer))'] = (Nfixer == ".true.") elif fill_source == 'zooplankton': zoo_prefix = "zooplankton_settings(%d)%%" % item From 1c529177a3046ae8df983881e4d37bb7d025bb78 Mon Sep 17 00:00:00 2001 From: Michael Levy Date: Thu, 11 Jul 2019 10:17:31 -0600 Subject: [PATCH 75/75] Update PFT_keys in more generic manner This will make it easier to add additional valid values for PFT_defaults in different settings files --- MARBL_tools/MARBL_settings_file_class.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/MARBL_tools/MARBL_settings_file_class.py b/MARBL_tools/MARBL_settings_file_class.py index 9226c884..7f9ee12f 100644 --- a/MARBL_tools/MARBL_settings_file_class.py +++ b/MARBL_tools/MARBL_settings_file_class.py @@ -225,17 +225,14 @@ def _process_variable_value(self, category_name, variable_name): return # Process derived type! - # (a) check to see if PFT_defaults = "CESM2" - append_to_keys = (('PFT_defaults == "CESM2"' in self._config_keyword) and - (category_name == "PFT_derived_types")) - if append_to_keys: - PFT_keys = self._settings['general_parms']['PFT_defaults']['_CESM2_PFT_keys'][variable_name] - else: - # (b) check to see if PFT_defaults = "CESM2.1+cocco" - append_to_keys = (('PFT_defaults == "CESM2.1+cocco"' in self._config_keyword) and - (category_name == "PFT_derived_types")) - if append_to_keys: - PFT_keys = self._settings['general_parms']['PFT_defaults']['_CESM2.1+cocco_PFT_keys'][variable_name] + # Check to see if PFT_defaults leads to specific PFT declarations + if (category_name == "PFT_derived_types"): + for valid_PFT_default in ["CESM2", "CESM2.1+cocco"]: + append_to_keys = 'PFT_defaults == "{}"'.format(valid_PFT_default) in self._config_keyword + if append_to_keys: + settings_key = '_{}_PFT_keys'.format(valid_PFT_default) + PFT_keys = self._settings['general_parms']['PFT_defaults'][settings_key][variable_name] + break # Is the derived type an array? If so, treat each entry separately if ("_array_shape" in this_var.keys()):