From 63f1bc7ff13cfae03d66c440c0746c729cd5b7ab Mon Sep 17 00:00:00 2001 From: Oliver Jahn Date: Mon, 28 Jul 2025 16:04:38 -0400 Subject: [PATCH 1/2] Add macromolecular growth parameterization --- pkg/darwin/DARWIN_DIAGS.h | 40 +++ pkg/darwin/DARWIN_OPTIONS.h | 13 +- pkg/darwin/DARWIN_PARAMS.h | 9 +- pkg/darwin/DARWIN_TRAITPARAMS.h | 68 ++++ pkg/darwin/DARWIN_TRAITS.h | 131 ++++++- pkg/darwin/darwin_check.F | 183 +++++++++- pkg/darwin/darwin_diagnostics_init.F | 197 +++++++++- pkg/darwin/darwin_forcing.F | 92 ++++- pkg/darwin/darwin_generate_allometric.F | 48 ++- pkg/darwin/darwin_init_chl.F | 2 +- pkg/darwin/darwin_plankton.F | 456 ++++++++++++++++++++++-- pkg/darwin/darwin_read_params.F | 6 +- pkg/darwin/darwin_read_traitparams.F | 68 ++++ pkg/darwin/darwin_read_traits.F | 74 ++++ pkg/darwin/darwin_tempfunc.F | 8 +- 15 files changed, 1344 insertions(+), 51 deletions(-) diff --git a/pkg/darwin/DARWIN_DIAGS.h b/pkg/darwin/DARWIN_DIAGS.h index 520da4337..157e3969d 100644 --- a/pkg/darwin/DARWIN_DIAGS.h +++ b/pkg/darwin/DARWIN_DIAGS.h @@ -46,6 +46,15 @@ C Contains indices into diagnostics array integer ifnut integer ifIph integer ifTph +# ifdef DARWIN_MACROMOLECULAR_GROWTH + integer iPChl, iVN, iVP + integer iCChl, iNChl, iNPho, iNSyn, iNPrn, iNRNA + integer iNDNA, iNSTO, iNEXC + integer iPRNA, iPDNA, iPTHY, iPCON, iPSTO, iPEXC + integer iFPHO, iFSTO, iFEXC, iY_RQ + integer iMODE, iFe_C, iexQc + integer ilimC, ilimL +# endif #endif #ifdef DARWIN_ALLOW_CSTORE integer iEX @@ -127,7 +136,38 @@ C Contains indices into diagnostics array PARAMETER(ifnut=ilimS+nplank) PARAMETER(ifIph=ifnut+nplank) PARAMETER(ifTph=ifIph+nplank) +# ifdef DARWIN_MACROMOLECULAR_GROWTH + PARAMETER(iPChl=ifTph+nplank) + PARAMETER(iVN= iPChl+nPhoto) + PARAMETER(iVP= iVN +nPhoto) + PARAMETER(iMODE=iVP +nPhoto) + PARAMETER(iFe_C=iMODE+nPhoto) + PARAMETER(iexQc=iFe_C+nPhoto) + PARAMETER(iCChl=iexQc+nPhoto) + PARAMETER(iNChl=iCChl+nPhoto) + PARAMETER(iNPho=iNChl+nPhoto) + PARAMETER(iNSyn=iNPho+nPhoto) + PARAMETER(iNPrn=iNSyn+nPhoto) + PARAMETER(iNRNA=iNPrn+nPhoto) + PARAMETER(iNDNA=iNRNA+nPhoto) + PARAMETER(iNSTO=iNDNA+nPhoto) + PARAMETER(iNEXC=iNSTO+nPhoto) + PARAMETER(iPRNA=iNEXC+nPhoto) + PARAMETER(iPDNA=iPRNA+nPhoto) + PARAMETER(iPTHY=iPDNA+nPhoto) + PARAMETER(iPCON=iPTHY+nPhoto) + PARAMETER(iPSTO=iPCON+nPhoto) + PARAMETER(iPEXC=iPSTO+nPhoto) + PARAMETER(iFPHO=iPEXC+nPhoto) + PARAMETER(iFSTO=iFPHO+nPhoto) + PARAMETER(iFEXC=iFSTO+nPhoto) + PARAMETER(iY_RQ=iFEXC+nPhoto) + PARAMETER(ilimC=iY_RQ+nPhoto) + PARAMETER(ilimL=ilimC+nPhoto) + PARAMETER(darwin_nDiag=ilimL+nPhoto-1) +# else PARAMETER(darwin_nDiag=ifTph+nplank-1) +# endif #else PARAMETER(iPCplank=iPPplank) PARAMETER(iGRplank=iPPplank) diff --git a/pkg/darwin/DARWIN_OPTIONS.h b/pkg/darwin/DARWIN_OPTIONS.h index 4dcb0fcb6..e509f7e70 100644 --- a/pkg/darwin/DARWIN_OPTIONS.h +++ b/pkg/darwin/DARWIN_OPTIONS.h @@ -51,11 +51,8 @@ C but will use solvesaphe dissociation coefficient options. C this needs to be defined for coupling to atmospheric model: #undef DARWIN_USE_PLOAD -C enable RADI sediment metamodel v1 -#undef DARWIN_ALLOW_RADIv1 - -C enable RADI sediment metamodel v2 -#undef DARWIN_ALLOW_RADIv2 +C enable macromolecular growth code; requires N, P and Fe quotas +#undef DARWIN_MACROMOLECULAR_GROWTH C optional bits @@ -84,6 +81,12 @@ C CDOM is in carbon units and follows POC C include code for reading nutrient runoff from files #undef DARWIN_NUTRIENT_RUNOFF +C enable RADI sediment metamodel v1 +#undef DARWIN_ALLOW_RADIv1 + +C enable RADI sediment metamodel v2 +#undef DARWIN_ALLOW_RADIv2 + C include diel vertical migration code #undef DARWIN_ALLOW_DVM diff --git a/pkg/darwin/DARWIN_PARAMS.h b/pkg/darwin/DARWIN_PARAMS.h index e48e41093..186c858f5 100644 --- a/pkg/darwin/DARWIN_PARAMS.h +++ b/pkg/darwin/DARWIN_PARAMS.h @@ -335,6 +335,7 @@ C tempnorm :: [] set temperature function (was 1.0) C TempAeArr :: [K] slope for pseudo-Arrhenius (TEMP_VERSION 2) C TemprefArr :: [K] reference temp for pseudo-Arrhenius (TEMP_VERSION 2) C TempCoeffArr :: [] pre-factor for pseudo-Arrhenius (TEMP_VERSION 2) +C TempAeArrMacromol :: [K] slope for pseudo-Arrhenius for macromolecular (TEMP_VERSION 2) C reminTempAe :: [1/K] temperature coefficient for remineralization (TEMP_VERSION 4) C mortTempAe :: [1/K] temperature coefficient for linear mortality (TEMP_VERSION 4) C mort2TempAe :: [1/K] temperature coefficient for quadr. mortality (TEMP_VERSION 4) @@ -377,6 +378,7 @@ C KPON :: [1/s] PON remineralization rate C KPOP :: [1/s] POP remineralization rate C KPOFe :: [1/s] POFe remineralization rate C KPOSi :: [1/s] POSi remineralization rate +C ksatO2remin :: [mmol O2/m3] half-saturation conc. of O2 for remineralization C C wC_sink :: [m/s] sinking velocity for POC C wN_sink :: [m/s] sinking velocity for PON @@ -432,7 +434,6 @@ C chl2nmax :: [mg Chl / mmol N] max Chl:N ratio for Chl synthesis C synthcost :: [mmol C / mmol N] cost of biosynthesis C inhib_graz :: [(mmol C m-3)-1] inverse decay scale for grazing inhibition C inhib_graz_exp :: [] exponent for grazing inhibition (0 to turn off inhibition) -C hillnumUptake :: [] exponent for limiting quota uptake in nutrient uptake C hillnumGraz :: [] exponent for limiting quota uptake in grazing C hollexp :: [] grazing exponential 1= "Holling 2", 2= "Holling 3" C phygrazmin :: [mmol C m-3] minimum total prey conc for grazing to occur @@ -464,6 +465,7 @@ C depthdenit :: [m] not implemented (depth for denitrific & TempAeArr, & TemprefArr, & TempCoeffArr, + & TempAeArrMacromol, & reminTempAe, & mortTempAe, & mort2TempAe, @@ -508,6 +510,7 @@ C depthdenit :: [m] not implemented (depth for denitrific & KPOP, & KPOFe, & KPOSi, + & ksatO2remin, & wC_sink, & wN_sink, & wP_sink, @@ -557,7 +560,6 @@ C depthdenit :: [m] not implemented (depth for denitrific & synthcost, & inhib_graz, & inhib_graz_exp, - & hillnumUptake, & hillnumGraz, & hollexp, & phygrazmin, @@ -584,6 +586,7 @@ C & yono2, _RL TempAeArr _RL TemprefArr _RL TempCoeffArr + _RL TempAeArrMacromol _RL reminTempAe _RL mortTempAe _RL mort2TempAe @@ -628,6 +631,7 @@ C & yono2, _RL KPOP _RL KPOFe _RL KPOSi + _RL ksatO2remin _RL wC_sink _RL wN_sink _RL wP_sink @@ -677,7 +681,6 @@ C & yono2, _RL synthcost _RL inhib_graz _RL inhib_graz_exp - _RL hillnumUptake _RL hillnumGraz _RL hollexp _RL phygrazmin diff --git a/pkg/darwin/DARWIN_TRAITPARAMS.h b/pkg/darwin/DARWIN_TRAITPARAMS.h index a9bcf38d5..143a2ff7e 100644 --- a/pkg/darwin/DARWIN_TRAITPARAMS.h +++ b/pkg/darwin/DARWIN_TRAITPARAMS.h @@ -352,6 +352,36 @@ C & a_grazTempExp2, & a_grazTempOptimum, & a_grazDecayPower, +#ifdef DARWIN_MACROMOLECULAR_GROWTH + & a_Y_CP_Plip, + & a_Y_CN_protein, + & a_Y_NC_chl, + & a_Y_CN_cyano, + & a_Y_PN_nucacid, + & a_Y_CN_DNA, + & a_Y_CN_RNA, + & a_Y_THY_P, + & a_Y_FeN_photo, + & a_ECo2Prod, + & a_maintConsum, + & a_VI_max, + & b_VI_max, + & a_A_I, + & a_QC_other, + & a_QC_pro_other, + & a_QP_other, + & a_QP_RNA_min, + & a_QC_DNA, + & a_QN_sto_max, + & b_QN_sto_max, + & a_Qp_max, + & b_Qp_max, + & a_Qfe_max, + & b_Qfe_max, + & a_A_pho, + & a_A_bio, + & a_AP_RNA, +#endif #ifdef DARWIN_ALLOW_GEIDER & a_mQyield, & a_chl2cmax, @@ -365,6 +395,10 @@ C & a_acclimtimescl_denom, & a_ksatPON, & a_ksatDON, + & a_hillnumDIN, + & a_hillnumPO4, + & a_hillnumFeT, + & a_hillnumSiO2, & a_grazemax, & a_grazemax_denom, & b_grazemax, @@ -497,6 +531,36 @@ C _RL a_grazTempExp2(nGroup) _RL a_grazTempOptimum(nGroup) _RL a_grazDecayPower(nGroup) +#ifdef DARWIN_MACROMOLECULAR_GROWTH + _RL a_Y_CP_Plip(nGroup) + _RL a_Y_CN_protein(nGroup) + _RL a_Y_NC_chl(nGroup) + _RL a_Y_CN_cyano(nGroup) + _RL a_Y_PN_nucacid(nGroup) + _RL a_Y_CN_DNA(nGroup) + _RL a_Y_CN_RNA(nGroup) + _RL a_Y_THY_P(nGroup) + _RL a_Y_FeN_photo(nGroup) + _RL a_ECo2Prod(nGroup) + _RL a_maintConsum(nGroup) + _RL a_VI_max(nGroup) + _RL b_VI_max(nGroup) + _RL a_A_I(nGroup) + _RL a_QC_other(nGroup) + _RL a_QC_pro_other(nGroup) + _RL a_QP_other(nGroup) + _RL a_QP_RNA_min(nGroup) + _RL a_QC_DNA(nGroup) + _RL a_QN_sto_max(nGroup) + _RL b_QN_sto_max(nGroup) + _RL a_Qp_max(nGroup) + _RL b_Qp_max(nGroup) + _RL a_Qfe_max(nGroup) + _RL b_Qfe_max(nGroup) + _RL a_A_pho(nGroup) + _RL a_A_bio(nGroup) + _RL a_AP_RNA(nGroup) +#endif #ifdef DARWIN_ALLOW_GEIDER _RL a_mQyield(nGroup) _RL a_chl2cmax(nGroup) @@ -510,6 +574,10 @@ C _RL a_acclimtimescl_denom(nGroup) _RL a_ksatPON(nGroup) _RL a_ksatDON(nGroup) + _RL a_hillnumDIN(nGroup) + _RL a_hillnumPO4(nGroup) + _RL a_hillnumFeT(nGroup) + _RL a_hillnumSiO2(nGroup) _RL a_grazemax(nGroup) _RL a_grazemax_denom(nGroup) _RL b_grazemax(nGroup) diff --git a/pkg/darwin/DARWIN_TRAITS.h b/pkg/darwin/DARWIN_TRAITS.h index fad5e4286..1119f748d 100644 --- a/pkg/darwin/DARWIN_TRAITS.h +++ b/pkg/darwin/DARWIN_TRAITS.h @@ -171,8 +171,46 @@ C ksatDVM :: [mmol C m^-3] half saturation for DVM mortality C ksatPARDVM :: [uEin m^-2 s^-1] half sat for light limitation for DVM C fracPARmort :: [] fraction of mortality from light-dependent mortality C ExportFracDVM :: [] fraction of light-dep mortality from DVM to POM - - +C +C- MACROMOLECULAR_GROWTH parameters +C Y_CP_Plip :: [molC molP^-1] C/P molar ratio of thylacoid membrane +C Y_CN_protein :: [molC molN^-1] C/N molar ratio in protein +C Y_NC_chl :: [molN molC^-1] N/C molar ratio in chlorophyll +C Y_CN_cyano :: [molC molN^-1] C/N molar ratio of cyanophycin +C Y_PN_nucacid :: [molP molN^-1] P/N molar ratio of RNA +C Y_CN_DNA :: [molC molN^-1] C/N molar ratio of DNA +C Y_CN_RNA :: [molC molN^-1] C/N molar ratio of RNA +C Y_THY_P :: [(molP)/(molC in chl)^-1] the stoichiometric ratio for cell phosphorus in thylakoid membrane to chlorophyll +C Y_FeN_photo :: [molFe mol N^-1] Fe/N ratio in photosystem iron +C ECo2Prod :: [dimensionless] CO2 production ratio +C maintConsum :: [s^-1] maintenance carbohydrate consumption +C VI_max :: [molC (molC in Chl)^-1 s^-1] carbon fixing rate +C A_I :: [umol^-1 m2 s] coefficient characterizing the absorption cross section +C QC_other :: [molC molC^-1] essential carbon (lipid membrane, etc.) +C QC_pro_other :: [molC molC^-1] +C QP_other :: [molP molC^-1] constant part of phosphorus +C QP_RNA_min :: [molP molC^-1] +C QC_DNA :: [molC molC^-1] constant part of DNA in carbon +C QN_pro_other :: [molN molC^-1] +C QN_RNA_min :: [molN molC^-1] constant part of RNA in nitrogen +C QC_RNA_min :: [molN molC^-1] constant part of RNA in carbon +C QN_DNA :: [molN molC^-1] DNA in nitrogen +C QP_DNA :: [molP molC^-1] DNA in phosphorous +C QN_sto_max :: [molN molC^-1] maximum nitrogen storage +C Qp_max :: [molP molC^-1] maximum phosphorus quota +C Qfe_max :: [molFe molC^-1] maximum iron quota +C A_pho :: [(molC)/(molC in chl)^-1] A constant of proportionalty +C A_bio :: [molC molC^-1 s] constant for variable part of biosynthesis protein +C AP_RNA :: [molP molC^-1 s] constant for Variable part of RNA +C AN_RNA :: [molN molN^-1 s] constant for Variable part of RNA +C A_thy :: [molC (molC in chl)^-1] +C Sf :: [unitless] enhancement of photosynthesis due to size +C QC_const :: [molC molC^-1] constant portion of the cell +C VI_min :: [molC (molC in Chl)^-1 s^-1] minimum photosynthesis rate +C QC_chlMax :: [molC molC^-1] maximum chlorophyll concentration at minimum light +C QnNoChl :: [molN molC^-1] minimum QN at zero growth rate +C QpNoChl :: [molP molC^-1] minimum QP at zero growth rate +C QfeNoChl :: [molFe molC^-1] minimum QFe at zero growth rate COMMON /DARWIN_TRAITS_r/ & Xmin, & amminhib, @@ -229,6 +267,10 @@ C ExportFracDVM :: [] fraction of light-dep mortality fro & ksatPO4, & ksatSiO2, & ksatFeT, + & hillnumDIN, + & hillnumPO4, + & hillnumFeT, + & hillnumSiO2, & kexcc, & kexcn, & kexcp, @@ -264,6 +306,46 @@ C ExportFracDVM :: [] fraction of light-dep mortality fro & ksatPARDVM, & fracPARmort, & ExportFracDVM +#ifdef DARWIN_MACROMOLECULAR_GROWTH + & ,Y_CN_protein, + & Y_CP_Plip, + & Y_NC_chl, + & Y_CN_cyano, + & Y_PN_nucacid, + & Y_CN_DNA, + & Y_CN_RNA, + & Y_THY_P, + & Y_FeN_photo, + & ECo2Prod, + & maintConsum, + & VI_max, + & A_I, + & QC_other, + & QC_pro_other, + & QP_other, + & QP_RNA_min, + & QC_DNA, + & QN_pro_other, + & QN_RNA_min, + & QC_RNA_min, + & QN_DNA, + & QP_DNA, + & QN_sto_max, + & Qp_max, + & Qfe_max, + & A_pho, + & A_bio, + & AP_RNA, + & AN_RNA, + & A_thy, + & Sf, + & VI_min, + & QC_chlMax, + & QnNoChl, + & QpNoChl, + & QfeNoChl, + & QC_const +#endif _RL Xmin(nplank) _RL amminhib(nplank) _RL acclimtimescl(nplank) @@ -319,6 +401,10 @@ C ExportFracDVM :: [] fraction of light-dep mortality fro _RL ksatPO4(nplank) _RL ksatSiO2(nplank) _RL ksatFeT(nplank) + _RL hillnumDIN(nplank) + _RL hillnumPO4(nplank) + _RL hillnumFeT(nplank) + _RL hillnumSiO2(nplank) _RL kexcc(nplank) _RL kexcn(nplank) _RL kexcp(nplank) @@ -354,7 +440,46 @@ C ExportFracDVM :: [] fraction of light-dep mortality fro _RL ksatPARDVM(nplank) _RL fracPARmort(nplank) _RL ExportFracDVM(nplank) - +#ifdef DARWIN_MACROMOLECULAR_GROWTH + _RL Y_CN_protein(nplank) + _RL Y_CP_Plip(nplank) + _RL Y_NC_chl(nplank) + _RL Y_CN_cyano(nplank) + _RL Y_PN_nucacid(nplank) + _RL Y_CN_DNA(nplank) + _RL Y_CN_RNA(nplank) + _RL Y_THY_P(nplank) + _RL Y_FeN_photo(nplank) + _RL ECo2Prod(nplank) + _RL maintConsum(nplank) + _RL VI_max(nplank) + _RL A_I(nplank) + _RL QC_other(nplank) + _RL QC_pro_other(nplank) + _RL QP_other(nplank) + _RL QP_RNA_min(nplank) + _RL QC_DNA(nplank) + _RL QN_pro_other(nplank) + _RL QN_RNA_min(nplank) + _RL QC_RNA_min(nplank) + _RL QN_DNA(nplank) + _RL QP_DNA(nplank) + _RL QN_sto_max(nplank) + _RL Qp_max(nplank) + _RL Qfe_max(nplank) + _RL A_pho(nplank) + _RL A_bio(nplank) + _RL AP_RNA(nplank) + _RL AN_RNA(nplank) + _RL A_thy(nplank) + _RL Sf(nplank) + _RL VI_min(nplank) + _RL QC_chlMax(nplank) + _RL QnNoChl(nplank) + _RL QpNoChl(nplank) + _RL QfeNoChl(nplank) + _RL QC_const(nplank) +#endif C-- COMMON /DARWIN_DEPENDENT_TRAITS_i/ Dependent and constant (not read-in) parameters C group :: which group this type belongs to diff --git a/pkg/darwin/darwin_check.F b/pkg/darwin/darwin_check.F index c95869a78..b377db32c 100644 --- a/pkg/darwin/darwin_check.F +++ b/pkg/darwin/darwin_check.F @@ -66,7 +66,7 @@ SUBROUTINE DARWIN_CHECK( myThid ) C msgBuf - Informational/error meesage buffer CHARACTER*(MAX_LEN_MBUF) msgBuf CHARACTER*80 gname - INTEGER j,jz,iPtr,oUnit,g,l + INTEGER j,iPtr,oUnit,g,l,errCount _RL dm CCOG[[[cog CCOGcog.out('\n'.join(''' @@ -426,6 +426,42 @@ SUBROUTINE DARWIN_CHECK( myThid ) ENDIF #endif + errCount = 0 +#ifdef DARWIN_MACROMOLECULAR_GROWTH +# ifndef DARWIN_ALLOW_NQUOTA + WRITE(msgBuf,'(2A)') 'DARWIN_CHECK: ERROR: ', + & 'DARWIN_MACROMOLECULAR_GROWTH requires DARWIN_ALLOW_NQUOTA' + CALL PRINT_ERROR( msgBuf , 1) + errCount = errCount + 1 +# endif +# ifndef DARWIN_ALLOW_PQUOTA + WRITE(msgBuf,'(2A)') 'DARWIN_CHECK: ERROR: ', + & 'DARWIN_MACROMOLECULAR_GROWTH requires DARWIN_ALLOW_PQUOTA' + CALL PRINT_ERROR( msgBuf , 1) + errCount = errCount + 1 +# endif +# ifndef DARWIN_ALLOW_FEQUOTA + WRITE(msgBuf,'(2A)') 'DARWIN_CHECK: ERROR: ', + & 'DARWIN_MACROMOLECULAR_GROWTH requires DARWIN_ALLOW_FEQUOTA' + CALL PRINT_ERROR( msgBuf , 1) + errCount = errCount + 1 +# endif +# ifdef DARWIN_ALLOW_SIQUOTA + WRITE(msgBuf,'(3A)') 'DARWIN_CHECK: ERROR: ', + & 'DARWIN_MACROMOLECULAR_GROWTH does not support ', + & 'DARWIN_ALLOW_SIQUOTA' + CALL PRINT_ERROR( msgBuf , 1) + errCount = errCount + 1 +# endif + IF (errCount .GT. 0) THEN + WRITE(msgBuf,'(A,I3,A)') + & 'DARWIN_CHECK: detected', errCount,' fatal error(s)' + CALL PRINT_ERROR( msgBuf, myThid ) + CALL ALL_PROC_DIE( 0 ) + STOP 'ABNORMAL END: S/R DARWIN_CHECK' + ENDIF +#endif + C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| C-- Print settings of some CPP flags. @@ -1832,6 +1868,9 @@ SUBROUTINE DARWIN_CHECK( myThid ) CALL WRITE_0D_RL(TempCoeffArr,INDEX_NONE, &'TempCoeffArr =', &' /* pre-factor for pseudo-Arrhenius (TEMP_VERSION 2) */') + CALL WRITE_0D_RL(TempAeArrMacromol,INDEX_NONE, + &'TempAeArrMacromol =', + &' /* temp effect on protein biosyn (MACROMOL GROWTH) (K) */') CALL WRITE_0D_RL(reminTempAe,INDEX_NONE, &'reminTempAe =', &' /* temperature coefficient for remineralization (TEMP_VERSION 4) @@ -1965,6 +2004,9 @@ SUBROUTINE DARWIN_CHECK( myThid ) CALL WRITE_0D_RL(KPOSi,INDEX_NONE, &'KPOSi =', &' /* POSi remineralization rate (1/s) */') + CALL WRITE_0D_RL(ksatO2remin,INDEX_NONE, + &'ksatO2remin =', + &' /* O2 half saturation for remineralization (mmol O2 m^-3) */') CALL WRITE_0D_RL(wC_sink,INDEX_NONE, &'wC_sink =', &' /* sinking velocity for POC (m/s) */') @@ -2136,9 +2178,6 @@ SUBROUTINE DARWIN_CHECK( myThid ) &'inhib_graz_exp =', &' /* exponent for grazing inhibition (0 to turn off inhibition) */ &') - CALL WRITE_0D_RL(hillnumUptake,INDEX_NONE, - &'hillnumUptake =', - &' /* exponent for limiting quota uptake in nutrient uptake */') CALL WRITE_0D_RL(hillnumGraz,INDEX_NONE, &'hillnumGraz =', &' /* exponent for limiting quota uptake in grazing */') @@ -2479,6 +2518,18 @@ SUBROUTINE DARWIN_CHECK( myThid ) &'ksatFeT =', &' /* half-saturation conc. for iron uptake/limitation (mmol Fe m^- &3) */') + CALL WRITE_1D_RL(hillnumDIN,nphoto,INDEX_NONE, + &'hillnumDIN =', + &' /* exponent for limiting quota uptake in DIN uptake */') + CALL WRITE_1D_RL(hillnumPO4,nphoto,INDEX_NONE, + &'hillnumPO4 =', + &' /* exponent for limiting quota uptake in PO4 uptake */') + CALL WRITE_1D_RL(hillnumFeT,nphoto,INDEX_NONE, + &'hillnumFeT =', + &' /* exponent for limiting quota uptake in FeT uptake */') + CALL WRITE_1D_RL(hillnumSiO2,nphoto,INDEX_NONE, + &'hillnumSiO2 =', + &' /* exponent for limiting quota uptake in SiO2 uptake */') CALL WRITE_1D_RL(kexcc,nplank,INDEX_NONE, &'kexcc =', &' /* exudation rate for carbon (s^-1) */') @@ -2604,6 +2655,130 @@ SUBROUTINE DARWIN_CHECK( myThid ) &'normI =', &' /* normalization factor for non-Geider light curve */') #endif +#ifdef DARWIN_MACROMOLECULAR_GROWTH + CALL WRITE_1D_RL(Y_CP_Plip,nplank,INDEX_NONE, + &'Y_CP_Plip = ', + &' /* C/P molar ratio of PG: Phosphatidyl glycerol (molC molP^-1) * + &/') + CALL WRITE_1D_RL(Y_CN_protein,nplank,INDEX_NONE, + &'Y_CN_protein = ', + &' /* C/N molar ratio in protein (molC molN^-1) */') + CALL WRITE_1D_RL(Y_NC_chl,nplank,INDEX_NONE, + &'Y_NC_chl = ', + &' /* N/C molar ratio in chlorophyll (molN molC^-1) */') + CALL WRITE_1D_RL(Y_CN_cyano,nplank,INDEX_NONE, + &'Y_CN_cyano = ', + &' /* C/N molar ratio of cyanophycin (molC molN^-1) */') + CALL WRITE_1D_RL(Y_PN_nucacid,nplank,INDEX_NONE, + &'Y_PN_nucacid = ', + &' /* P/N molar ratio of RNA (molP molN^-1) */') + CALL WRITE_1D_RL(Y_CN_DNA,nplank,INDEX_NONE, + &'Y_CN_DNA = ', + &' /* C/N molar ratio of DNA (molC molN^-1) */') + CALL WRITE_1D_RL(Y_CN_RNA,nplank,INDEX_NONE, + &'Y_CN_RNA = ', + &' /* C/N molar ratio of RNA (molC molN^-1) */') + CALL WRITE_1D_RL(Y_THY_P,nplank,INDEX_NONE, + &'Y_THY_P = ', + &' /* the stoichiometric ratio for cell phosphorus in thylakoid mem + &brane to chlorophyll ((molP)/(molC in chl)^-1) */') + CALL WRITE_1D_RL(Y_FeN_photo,nplank,INDEX_NONE, + &'Y_FeN_photo = ', + &' /* Fe/N ratio in photosystem iron (molFe mol N^-1) */') + CALL WRITE_1D_RL(ECo2Prod,nplank,INDEX_NONE, + &'ECo2Prod = ', + &' /* CO2 production ratio (dimensionless) */') + CALL WRITE_1D_RL(maintConsum,nplank,INDEX_NONE, + &'maintConsum = ', + &' /* maintenance carbohydrate consumption (s^-1) */') + CALL WRITE_1D_RL(VI_max,nplank,INDEX_NONE, + &'VI_max = ', + &' /* carbon fixing rate (molC (molC in Chl)^-1 s^-1) */') + CALL WRITE_1D_RL(A_I,nplank,INDEX_NONE, + &'A_I = ', + &' /* coefficient characterizing the absorption cross section (umol + &^-1 m2 s) */') + CALL WRITE_1D_RL(QC_other,nplank,INDEX_NONE, + &'QC_other = ', + &' /* essential carbon (lipid membrane, etc.) (molC molC^-1) */') + CALL WRITE_1D_RL(QC_pro_other,nplank,INDEX_NONE, + &'QC_pro_other = ', + &' /* (molC molC^-1) */') + CALL WRITE_1D_RL(QP_other,nplank,INDEX_NONE, + &'QP_other = ', + &' /* constant part of phosphorus (molP molC^-1) */') + CALL WRITE_1D_RL(QP_RNA_min,nplank,INDEX_NONE, + &'QP_RNA_min = ', + &' /* (molP molC^-1) */') + CALL WRITE_1D_RL(QC_DNA,nplank,INDEX_NONE, + &'QC_DNA = ', + &' /* constant part of DNA in carbon (molC molC^-1) */') + CALL WRITE_1D_RL(QN_pro_other,nplank,INDEX_NONE, + &'QN_pro_other = ', + &' /* (molN molC^-1) */') + CALL WRITE_1D_RL(QN_RNA_min,nplank,INDEX_NONE, + &'QN_RNA_min = ', + &' /* constant part of RNA in nitrogen (molN molC^-1) */') + CALL WRITE_1D_RL(QC_RNA_min,nplank,INDEX_NONE, + &'QC_RNA_min = ', + &' /* constant part of RNA in carbon (molN molC^-1) */') + CALL WRITE_1D_RL(QN_DNA,nplank,INDEX_NONE, + &'QN_DNA = ', + &' /* DNA in nitrogen (molN molC^-1) */') + CALL WRITE_1D_RL(QP_DNA,nplank,INDEX_NONE, + &'QP_DNA = ', + &' /* DNA in phosphorous (molP molC^-1) */') + CALL WRITE_1D_RL(QN_sto_max,nplank,INDEX_NONE, + &'QN_sto_max = ', + &' /* maximum nitrogen storage (molN molC^-1) */') + CALL WRITE_1D_RL(Qp_max,nplank,INDEX_NONE, + &'Qp_max = ', + &' /* maximum phosphorus quota (molP molC^-1) */') + CALL WRITE_1D_RL(Qfe_max,nplank,INDEX_NONE, + &'Qfe_max = ', + &' /* maximum iron quota (molFe molC^-1) */') + CALL WRITE_1D_RL(A_pho,nplank,INDEX_NONE, + &'A_pho = ', + &' /* A constant of proportionalty ((molC)/(molC in chl)^-1) */') + CALL WRITE_1D_RL(A_bio,nplank,INDEX_NONE, + &'A_bio = ', + &' /* constant for variable part of biosynthesis protein (molC molC + &^-1 s) */') + CALL WRITE_1D_RL(AP_RNA,nplank,INDEX_NONE, + &'AP_RNA = ', + &' /* constant for Variable part of RNA (molP molC^-1 s) */') + CALL WRITE_1D_RL(AN_RNA,nplank,INDEX_NONE, + &'AN_RNA = ', + &' /* constant for Variable part of RNA (molN molN^-1 s) */') + CALL WRITE_1D_RL(A_thy,nplank,INDEX_NONE, + &'A_thy = ', + &' /* (molC (molC in chl)^-1) */') + CALL WRITE_1D_RL(Sf,nplank,INDEX_NONE, + &'Sf = ', + &' /* enhancement of photosynthesis due to size */') + CALL WRITE_1D_RL(VI_min,nplank,INDEX_NONE, + &'VI_min = ', + &' /* minimum photosynthesis rate (molC (molC in Chl)^-1 s^-1) */') + CALL WRITE_1D_RL(QC_chlMax,nplank,INDEX_NONE, + &'QC_chlMax = ', + &' /* maximum chlorophyll concentration at minimum light (molC molC + &^-1) */') + CALL WRITE_1D_RL(QnNoChl,nplank,INDEX_NONE, + &'QnNoChl = ', + &' /* minimum QN at zero growth rate (molN molC^-1) */') + CALL WRITE_1D_RL(QpNoChl,nplank,INDEX_NONE, + &'QpNoChl = ', + &' /* minimum QP at zero growth rate (molP molC^-1) */') + CALL WRITE_1D_RL(QfeNoChl,nplank,INDEX_NONE, + &'QfeNoChl = ', + &' /* minimum QFe at zero growth rate (molFe molC^-1) */') + CALL WRITE_1D_RL(QC_const,nplank,INDEX_NONE, + &'QC_const =', + &' /* constant portion of the cell (molC molC^-1) */') +#endif + +C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| +C-- Print dependent traits CALL WRITE_1D_RL(alpha_mean,nplank,INDEX_NONE, &'alpha_mean =', &' /* mean initial slope of light curve (over wavebands) (mmol C s- diff --git a/pkg/darwin/darwin_diagnostics_init.F b/pkg/darwin/darwin_diagnostics_init.F index 90cb7dbd2..75925d8eb 100644 --- a/pkg/darwin/darwin_diagnostics_init.F +++ b/pkg/darwin/darwin_diagnostics_init.F @@ -517,7 +517,202 @@ SUBROUTINE DARWIN_DIAGNOSTICS_INIT( myThid ) CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) ENDDO -#endif + +# ifdef DARWIN_MACROMOLECULAR_GROWTH + DO j = 1,nPhoto + WRITE(diagName,'(A,I4.4)')'PChl', j + WRITE(diagTitle,'(A,I4)')'Chl-spec carbohydrat fix rate plank ',j + diagUnits = 'mol C/mol Chl/s ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'VN', j + WRITE(diagTitle,'(A,I4)') + & 'Carbon-spec nitrogen uptake rate plank ',j + diagUnits = 'mmol N/mmol C/s ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'VP', j + WRITE(diagTitle,'(A,I4)') + & 'Carbon-spec phosphorus uptake rate plank ',j + diagUnits = 'mmol N/mmol C/s ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'MODE', j + WRITE(diagTitle,'(A,I4)')'Growth limitation enum plankton ',j + diagUnits = 'dimensionless ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'Fe_C', j + WRITE(diagTitle,'(A,I4)')'Fe/C plankton ',j + diagUnits = 'mol Fe/mol C ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'exQc', j + WRITE(diagTitle,'(A,I4)')'exQc plankton ',j + diagUnits = 's-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'CChl', j + WRITE(diagTitle,'(A,I4)')'C quota in Chlorophyll plankton ',j + diagUnits = 'molC molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'NChl', j + WRITE(diagTitle,'(A,I4)')'N quota in Chlorophyll plankton ',j + diagUnits = 'molN molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'NPho', j + WRITE(diagTitle,'(A,I4)')'N quota related to photosynth plank ',j + diagUnits = 'molN molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'NSyn', j + WRITE(diagTitle,'(A,I4)')'N quota related to biosynth plank ',j + diagUnits = 'molN molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'NPrn', j + WRITE(diagTitle,'(A,I4)')'N quota in proteins plankton ',j + diagUnits = 'molN molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'NRNA', j + WRITE(diagTitle,'(A,I4)')'N quota in RNA plankton ',j + diagUnits = 'molN molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'NDNA', j + WRITE(diagTitle,'(A,I4)')'N quota in DNA plankton ',j + diagUnits = 'molN molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'NSTO', j + WRITE(diagTitle,'(A,I4)')'N quota in QN_store plankton ',j + diagUnits = 'molN molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'NEXC', j + WRITE(diagTitle,'(A,I4)')'N quota in QN_excess plankton ',j + diagUnits = 'molN molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'PRNA', j + WRITE(diagTitle,'(A,I4)')'P quota in RNA plankton ',j + diagUnits = 'molP molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'PDNA', j + WRITE(diagTitle,'(A,I4)')'P quota in DNA plankton ',j + diagUnits = 'molP molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'PTHY', j + WRITE(diagTitle,'(A,I4)')'P quota in Thylakoid membrane plank ',j + diagUnits = 'molP molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'PCON', j + WRITE(diagTitle,'(A,I4)')'P quota a constant part plankton ',j + diagUnits = 'molP molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'PSTO', j + WRITE(diagTitle,'(A,I4)')'P quota in P storage plankton ',j + diagUnits = 'molP molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'PEXC', j + WRITE(diagTitle,'(A,I4)')'P quota in QP_excess plankton ',j + diagUnits = 'mol P molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'FPHO', j + WRITE(diagTitle,'(A,I4)')'Fe quota in Photosystem plankton ',j + diagUnits = 'mol Fe molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'FSTO', j + WRITE(diagTitle,'(A,I4)')'Fe quota in QFe_store plankton ',j + diagUnits = 'mol Fe molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'FEXC', j + WRITE(diagTitle,'(A,I4)')'Fe quota in QFe_excess plankton ',j + diagUnits = 'mol Fe molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'Y_RQ', j + WRITE(diagTitle,'(A,I4)')'O2:C ratio for respiration plankton ',j + diagUnits = 'mol O2 molC-1 ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'limC', j + WRITE(diagTitle,'(A,I4)')'C growth limitation plankton ',j + diagUnits = '[0/1] ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + + WRITE(diagName,'(A,I4.4)')'limL', j + WRITE(diagTitle,'(A,I4)')'Light growth limitation plankton ',j + diagUnits = '[0/1] ' + diagCode = 'SM P MR ' + CALL DIAGNOSTICS_ADDTOLIST( diagNum, + I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) + ENDDO +# endif /* DARWIN_MACROMOLECULAR_GROWTH */ +#endif /* DARWIN_DIAG_PERTYPE */ #ifdef DARWIN_ALLOW_CSTORE #ifdef DARWIN_ALLOW_CSTORE_DIAGS diff --git a/pkg/darwin/darwin_forcing.F b/pkg/darwin/darwin_forcing.F index 7670fd2c4..25446be46 100644 --- a/pkg/darwin/darwin_forcing.F +++ b/pkg/darwin/darwin_forcing.F @@ -157,6 +157,7 @@ SUBROUTINE DARWIN_FORCING( Ptrdummy, _RL mortTempFunc _RL mort2TempFunc _RL uptakeTempFunc + _RL macromolTempFunc _RL omegaCl _RL tmp, tmpFac _RL sedFe(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) @@ -515,7 +516,7 @@ SUBROUTINE DARWIN_FORCING( Ptrdummy, IF (k .GE. kMinFeSed .AND. k .LE. kMaxFeSed) THEN #ifdef DARWIN_IRON_SED_SOURCE_VARIABLE # ifdef DARWIN_IRON_SED_SOURCE_POP -C mask is needed to make sure k-1 isn't an ice shelf +C mask is needed to make sure k-1 is not an ice shelf flx = fesedflux_pcm*wp_sink*R_CP_fesed* & MAX(0 _d 0, Ptracer(i,j,k-1,bi,bj,iPOP)) & *maskC(i,j,k-1,bi,bj) @@ -653,7 +654,7 @@ SUBROUTINE DARWIN_FORCING( Ptrdummy, CALL DARWIN_TEMPFUNC(Theta(i,j,k,bi,bj), & photoTempFunc, hetTempFunc, grazTempFunc, & reminTempFunc, mortTempFunc, mort2TempFunc, - & uptakeTempFunc, myThid) + & uptakeTempFunc, macromolTempFunc, myThid) DO iTr=1,nDarwin ptr(iTr) = Ptracer(i, j, k, bi, bj, iTr) gtr(iTr) = gPtr(i, j, k, iTr) @@ -675,7 +676,7 @@ SUBROUTINE DARWIN_FORCING( Ptrdummy, I grazTempFunc, I reminTempFunc, I mortTempFunc, mort2TempFunc, - I uptakeTempFunc, + I uptakeTempFunc, macromolTempFunc, I omegaCl, I k_debug, I subTime, myIter, myThid ) @@ -1371,6 +1372,91 @@ SUBROUTINE DARWIN_FORCING( Ptrdummy, CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ilimS+iTr-1), & diagname,0,Nr,2,bi,bj,myThid) ENDDO +# ifdef DARWIN_MACROMOLECULAR_GROWTH + DO iTr=1,nPhoto + WRITE(diagname, '(A,I4.4)') 'PChl', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iPChl+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'VN', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iVN+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'VP', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iVP+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'MODE', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iMODE+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'Fe_C', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iFe_C+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'exQc', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iexQc+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'CChl', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iCChl+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'NChl', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iNChl+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'NPho', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iNPho+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'NSyn', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iNSyn+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'NPrn', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iNPrn+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'NRNA', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iNRNA+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'NDNA', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iNDNA+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'NSTO', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iNSTO+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'NEXC', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iNEXC+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'PRNA', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iPRNA+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'PDNA', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iPDNA+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'PTHY', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iPTHY+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'PCON', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iPCON+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'PSTO', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iPSTO+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'PEXC', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iPEXC+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'FPHO', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iFPHO+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'FSTO', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iFSTO+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'FEXC', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iFEXC+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'Y_RQ', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iY_RQ+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'limC', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ilimC+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + WRITE(diagname, '(A,I4.4)') 'limL', iTr + CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ilimL+iTr-1),diagname, + & 0,Nr,2,bi,bj,myThid) + ENDDO +# endif #endif #ifdef DARWIN_ALLOW_CSTORE #ifdef DARWIN_ALLOW_CSTORE_DIAGS diff --git a/pkg/darwin/darwin_generate_allometric.F b/pkg/darwin/darwin_generate_allometric.F index d44b35ea6..576047a94 100644 --- a/pkg/darwin/darwin_generate_allometric.F +++ b/pkg/darwin/darwin_generate_allometric.F @@ -48,7 +48,6 @@ SUBROUTINE DARWIN_GENERATE_ALLOMETRIC( myThid ) _RL bmean, bbmean _RL bbbratiomeas, bbbratioac - C ====================================================================== C compute cell volumes in micrometer^3 C @@ -267,6 +266,11 @@ SUBROUTINE DARWIN_GENERATE_ALLOMETRIC( myThid ) fracPARmort(jp) = a_fracPARmort(g)*biovol(jp)**b_fracPARmort(g) ExportFracDVM(jp) = a_ExportFracDVM(g) + hillnumDIN(jp) = a_hillnumDIN(g) + hillnumPO4(jp) = a_hillnumPO4(g) + hillnumFeT(jp) = a_hillnumFeT(g) + hillnumSiO2(jp) = a_hillnumSiO2(g) + C respRate rate is given in terms of carbon content qcarbon(jp) = a_qcarbon(g) * biovol(jp)**b_qcarbon(g) respRate(jp) = a_respRate_c(g) @@ -374,14 +378,50 @@ SUBROUTINE DARWIN_GENERATE_ALLOMETRIC( myThid ) ksatDOP(jp) = ksatDON(jp)/R_NC(jp)*R_PC(jp) ksatDOFe(jp) = ksatDON(jp)/R_NC(jp)*R_FeC(jp) -#ifdef DARWIN_ALLOW_GEIDER +C ---------------------------------------------------------------------- +#ifdef DARWIN_MACROMOLECULAR_GROWTH + Y_CP_Plip(jp) = a_Y_CP_Plip(g) + Y_CN_protein(jp) = a_Y_CN_protein(g) + Y_NC_chl(jp) = a_Y_NC_chl(g) + Y_CN_cyano(jp) = a_Y_CN_cyano(g) + Y_PN_nucacid(jp) = a_Y_PN_nucacid(g) + Y_CN_DNA(jp) = a_Y_CN_DNA(g) + Y_CN_RNA(jp) = a_Y_CN_RNA(g) + Y_THY_P(jp) = a_Y_THY_P(g) + Y_FeN_photo(jp) = a_Y_FeN_photo(g) + + ECo2Prod(jp) = a_ECo2Prod(g) + maintConsum(jp) = a_maintConsum(g) + A_I(jp) = a_A_I(g) + A_pho(jp) = a_A_pho(g) + A_bio(jp) = a_A_bio(g) + + QC_other(jp) = a_QC_other(g) + QC_pro_other(jp) = a_QC_pro_other(g) + QP_other(jp) = a_QP_other(g) + QP_RNA_min(jp) = a_QP_RNA_min(g) + QC_DNA(jp) = a_QC_DNA(g) + AP_RNA(jp) = a_AP_RNA(g) + + VI_max(jp) = a_VI_max(g) * biovol(jp)**b_VI_max(g) + QN_sto_max(jp) = a_QN_sto_max(g) * biovol(jp)**b_QN_sto_max(g) + Qp_max(jp) = a_Qp_max(g) * biovol(jp)**b_Qp_max(g) + Qfe_max(jp) = a_Qfe_max(g) * biovol(jp)**b_Qfe_max(g) + + Sf(jp) = 1.0 _d 0 + +#else /* DARWIN_MACROMOLECULAR_GROWTH */ + +# ifdef DARWIN_ALLOW_GEIDER mQyield(jp) = a_mQyield(g) chl2cmax(jp) = a_chl2cmax(g) inhibGeider(jp) = a_inhibGeider(g) -#else +# else ksatPAR(jp) = a_ksatPAR(g) kinhPAR(jp) = a_kinhPAR(g) -#endif /* DARWIN_ALLOW_GEIDER */ +# endif /* DARWIN_ALLOW_GEIDER */ + +#endif /* DARWIN_MACROMOLECULAR_GROWTH */ #ifdef ALLOW_RADTRANS aptype(jp) = grp_aptype(g) diff --git a/pkg/darwin/darwin_init_chl.F b/pkg/darwin/darwin_init_chl.F index b2ed43e87..18d02d7bd 100644 --- a/pkg/darwin/darwin_init_chl.F +++ b/pkg/darwin/darwin_init_chl.F @@ -108,7 +108,7 @@ SUBROUTINE DARWIN_INIT_CHL( bi, bj, myTime, myIter, myThid ) #else /* not DARWIN_CHL_INIT_LEGACY */ -C compute PAR from current Chl +C compute PAR from current Chl C (usually initialized to 0 if darwin_chlInitBalanced) C do not fill diagnostics, C do not take ice into account for backwards compatibility diff --git a/pkg/darwin/darwin_plankton.F b/pkg/darwin/darwin_plankton.F index 11b1dd195..b7df2e91c 100644 --- a/pkg/darwin/darwin_plankton.F +++ b/pkg/darwin/darwin_plankton.F @@ -8,7 +8,8 @@ SUBROUTINE DARWIN_PLANKTON( U gTr, O chlout, diags, sumprey, I PAR, photoTempFunc, hetTempFunc, grazTempFunc, reminTempFunc, - I mortTempFunc, mort2TempFunc, uptakeTempFunc, + I mortTempFunc, mort2TempFunc, + I uptakeTempFunc, macromolTempFunc, I omegaCl, I k_debug,myTime,myIter,myThid) @@ -42,6 +43,7 @@ SUBROUTINE DARWIN_PLANKTON( _RL grazTempFunc(nplank) _RL mortTempFunc _RL mort2TempFunc + _RL macromolTempFunc _RL omegaCl _RL myTime INTEGER k_debug @@ -226,6 +228,99 @@ SUBROUTINE DARWIN_PLANKTON( _RL tmp +#ifdef DARWIN_MACROMOLECULAR_GROWTH + _RL mmX, mmQn, mmQp, mmQfe + _RL PChl + _RL QC_chl_D0 + _RL QC_chl_D1 + _RL QN_chl_D0 + _RL QN_chl_D1 + _RL QN_photo_D0 + _RL QN_photo_D1 + _RL QN_bio_D1 + _RL QN_pro_D0 + _RL QN_pro_D1 + _RL QN_rna_D1 + _RL QN_rna_D2 + _RL Qn_D0 + _RL Qn_D1 + _RL Qn_D2 + _RL Qn_exc + _RL QC_chl + _RL QN_chl + _RL QN_pro_photo + _RL QN_pro_bio + _RL QN_pro_tot + _RL QN_RNA + _RL QnExc + _RL exQn + _RL QC_thy_D0 + _RL QC_thy_D1 + _RL QC_pro_D0 + _RL QC_pro_D1 + _RL QC_rna_D1 + _RL QC_rna_D2 + _RL Qc_D0 + _RL Qc_D1 + _RL Qc_D2 + _RL Qc_exc +C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + _RL QP_thy_D0 + _RL QP_thy_D1 + _RL QP_rna_D1 + _RL QP_rna_D2 + _RL Qp_D0 + _RL Qp_D1 + _RL Qp_D2 + _RL PC_n + _RL Qp_exc + _RL PC_p + _RL QP_thy + _RL QP_RNA + _RL QN_essential + _RL QP_essential + _RL QN_max + _RL QC_essential + _RL PC_c + _RL QP_store + _RL QP_excess + _RL QN_store + _RL QN_excess + _RL QpExc + _RL exQp + _RL VN,VP,VFe,VSi +C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + _RL exQc +C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + _RL Qfe_D1 + _RL Qfe_D0 + _RL Qfe_exc + _RL PC_fe + _RL Qfe_pro_photo + _RL Qfe_essential + _RL Qfe_Store + _RL Qfe_excess + _RL exQfe + _RL QfeExc + _RL MODE + _RL limN + _RL limP + _RL limF + _RL limC + _RL limL +C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + _RL QC_chlN + _RL QC_chlP + _RL QC_chlF + _RL Scal_coeff + _RL QC_store + _RL RQ + _RL QN_DNA_actl + _RL QP_other_actl + _RL QP_DNA_actl +C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +#endif /* DARWIN_MACROMOLECULAR_GROWTH */ + #ifdef DARWIN_ALLOW_CDOM _RL CDOM _RL reminPOC_CDOM @@ -472,6 +567,305 @@ SUBROUTINE DARWIN_PLANKTON( DO j = 1, nPhoto IF (isPhoto(j) .NE. 0) THEN +#ifdef DARWIN_MACROMOLECULAR_GROWTH + + IF (X(j) .GT. DARWIN_EPS) THEN + mmQn = Qn(j) + mmQp = Qp(j) + mmQfe = Qfe(j) + mmX = X(j) + ELSE + mmQn = 0 _d 0 + mmQp = 0 _d 0 + mmQfe = 0 _d 0 + mmX = 0 _d 0 + ENDIF + + limP = 0 _d 0 + limN = 0 _d 0 + limF = 0 _d 0 + limC = 0 _d 0 + limL = 0 _d 0 + +C set up Chl and N requirements as a function of growth rate PC +C then solve for PC + +C Carbohydrate fixation rate per chlorophyll +C (molC (mol C in chl s)-1) + PChl = Sf(j)*VI_max(j)*(1 - EXP(-A_I(j)*PARtot)) + +C Case 1: Enought light, growth rate is a function of macromol +C allocation + IF ( PChl .GT. VI_min(j) ) THEN + +C chlorophyll quota (mol C cell-1) +C Chl = ((1 _d 0 + E)*ls + m)/PChl +C where ls = D*Qc (molC s-1) Biomass synthesis rate + QC_chl_D0 = maintConsum(j)/PChl + QC_chl_D1 = (1 + ECo2Prod(j))/PChl + +C nitrogen pools in mol N (mol C)-1 + QN_chl_D0 = QC_chl_D0*Y_NC_chl(j) + QN_chl_D1 = QC_chl_D1*Y_NC_chl(j) + +C photosynthesis related protein + QN_photo_D0 = QC_chl_D0*A_pho(j)/Y_CN_protein(j) + QN_photo_D1 = QC_chl_D1*A_pho(j)/Y_CN_protein(j) + +C biosynthesis related protein + QN_bio_D1 = A_bio(j)/Y_CN_protein(j)/macromolTempFunc + +C total protein + QN_pro_D0 = QN_photo_D0 + QN_pro_other(j) + QN_pro_D1 = QN_photo_D1 + QN_bio_D1 + +C nitrogen in RNA + QN_rna_D1 = QN_pro_D0*AN_RNA(j)/macromolTempFunc + QN_rna_D2 = QN_pro_D1*AN_RNA(j)/macromolTempFunc + +C Total nitrogen + Qn_D0 = QN_chl_D0 + QN_pro_D0 + QN_RNA_min(j) + QN_DNA(j) + Qn_D1 = QN_chl_D1 + QN_pro_D1 + QN_rna_D1 + Qn_D2 = QN_rna_D2 + + +C Phosphate restriction on growth rate + QP_rna_D1 = QN_rna_D1*Y_PN_nucacid(j) + QP_rna_D2 = QN_rna_D2*Y_PN_nucacid(j) + QP_thy_D0 = QC_chl_D0*Y_THY_P(j) + QP_thy_D1 = QC_chl_D1*Y_THY_P(j) + + Qp_D0 = QP_thy_D0 + QP_RNA_min(j) + QP_DNA(j) + QP_other(j) + Qp_D1 = QP_thy_D1 + QP_rna_D1 + Qp_D2 = QP_rna_D2 + + +C Iron restriction on growth + Qfe_D0 = QN_photo_D0*Y_FeN_photo(j) + Qfe_D1 = QN_photo_D1*Y_FeN_photo(j) + + +C carbon restriction on growth rate + QC_thy_D0 = QP_thy_D0*Y_CP_Plip(j) + QC_thy_D1 = QP_thy_D1*Y_CP_Plip(j) + QC_pro_D0 = QN_pro_D0*Y_CN_protein(j) + QC_pro_D1 = QN_pro_D1*Y_CN_protein(j) + QC_rna_D1 = QN_rna_D1*Y_CN_RNA(j) + QC_rna_D2 = QN_rna_D2*Y_CN_RNA(j) + + Qc_D0 = QC_chl_D0 + QC_pro_D0 + QC_RNA_min(j) + QC_thy_D0 + & + QC_DNA(j) + QC_other(j) + Qc_D1 = QC_chl_D1 + QC_pro_D1 + QC_thy_D1 + QC_rna_D1 + Qc_D2 = QC_rna_D2 + + +C Determine what is limiting + Qn_exc = MAX(0 _d 0, mmQn - Qn_D0) + PC_n = 2*Qn_exc/(Qn_D1 + SQRT(Qn_D1*Qn_D1 + 4*Qn_D2*Qn_exc)) + Qp_exc = MAX(0 _d 0, mmQp - Qp_D0) + PC_p = 2*Qp_exc/(Qp_D1 + SQRT(Qp_D1*Qp_D1 + 4*Qp_D2*Qp_exc)) + Qfe_exc = MAX(0 _d 0, mmQfe - Qfe_D0) + PC_fe = Qfe_exc/Qfe_D1 + Qc_exc = MAX(0 _d 0, Qc(j) - Qc_D0) + PC_c = 2*Qc_exc/(Qc_D1 + SQRT(Qc_D1*Qc_D1 + 4*Qc_D2*Qc_exc)) + + PC = MIN(PC_n,PC_p,PC_fe,PC_c) + IF (PC_p.EQ.PC) THEN + MODE = 1 _d 0 + limP = 1 _d 0 + ELSEIF (PC_n.EQ.PC) THEN + MODE = 2 _d 0 + limN = 1 _d 0 + ELSEIF (PC_fe.EQ.PC) THEN + MODE = 3 _d 0 + limF = 1 _d 0 + ELSEIF (PC_c.EQ.PC) THEN + MODE = 4 _d 0 + limC = 1 _d 0 + ELSE + MODE = 0 _d 0 + ENDIF + + QC_chl = QC_chl_D0 + QC_chl_D1*PC + +C Case 2: Light limitation, growth rate is zero, QC_chl is +C calculated based on cellular mass balance + ELSE + MODE = 4 _d 0 + limL = 1 _d 0 + PC = 0. _d 0 + ENDIF + +C If growth rate is zero, recompute maximum QC_chl possible with +C given quotas + IF (PC .EQ. 0. _d 0) THEN + QC_chlN = (mmQn - QnNoChl(j)) + & /(Y_NC_chl(j) + A_pho(j)/Y_CN_protein(j)) + QC_chlP = (mmQp - QpNoChl(j))/Y_THY_P(j) + QC_chlF = (mmQfe - QfeNoChl(j)) + & /(A_pho(j)/Y_CN_protein(j)*Y_FeN_photo(j)) + QC_chl = MAX(0 _d 0, MIN(QC_chlN,QC_chlP,QC_chlF,QC_chlMax(j))) + ENDIF + +C convert to mg Chl m-3 + chlout(j) = 893.49 _d 0*X(j)*QC_chl/55 _d 0 + +C Calculate diagnostics and essentials + QN_chl = QC_chl*Y_NC_chl(j) + QN_pro_photo = QC_chl*A_pho(j)/Y_CN_protein(j) + QN_pro_bio = A_bio(j)/Y_CN_protein(j)*PC/macromolTempFunc + QN_pro_tot = QN_pro_other(j) + QN_pro_photo + QN_pro_bio + QN_RNA = QN_RNA_min(j) + & + QN_pro_tot*AN_RNA(j)*PC/macromolTempFunc + + QP_thy = QC_chl*Y_THY_P(j) + QP_RNA = QN_RNA*Y_PN_nucacid(j) + + Qfe_pro_photo = QN_pro_photo*Y_FeN_photo(j) + +C Case 3: if Qn, Qp are lower then the minimum requirement for Chl +C the remaining pools are scaled down to not exceed quotas + IF (QC_chl.EQ.0 _d 0) THEN + Scal_coeff = MIN(mmQp/QpNoChl(j),mmQn/QnNoChl(j),1 _d 0) + QN_RNA = QN_RNA_min(j)*Scal_coeff + QN_DNA_actl = QN_DNA(j)*Scal_coeff + QP_RNA = QP_RNA_min(j)*Scal_coeff + QP_DNA_actl = QP_DNA(j)*Scal_coeff +C excess N (if Qp.LT.QpNoChl) goes here + QN_pro_tot = MIN(mmQn - QN_RNA - QN_DNA_actl, QN_pro_other(j)) +C excess P (if Qn.LT.QnNoChl) goes here + QP_other_actl = MIN(mmQp - QP_RNA - QP_DNA_actl, QP_other(j)) + ELSE + QN_DNA_actl = QN_DNA(j) + QP_DNA_actl = QP_DNA(j) + QP_other_actl = QP_other(j) + ENDIF + +C total pools required for functioning (or scaled down) + QN_essential = QN_chl + QN_pro_tot + QN_RNA + QN_DNA_actl + QN_max = QN_essential + QN_sto_max(j) + QP_essential = QP_thy + QP_RNA + QP_DNA_actl + QP_other_actl + Qfe_essential = Qfe_pro_photo + QC_essential = QC_chl + QN_pro_tot*Y_CN_protein(j) + & + QP_thy*Y_CP_Plip(j) + QN_RNA*Y_CN_RNA(j) + & + QN_DNA_actl*Y_CN_DNA(j) + QC_other(j) + +C Storage calculation ----------------- + +C N quota above QN_essential is store, but not more than +C QN_sto_max(j) and make sure enough C for store + QN_store = MIN(mmQn - QN_essential, + & (Qc(j) - QC_essential)/Y_CN_cyano(j), + & QN_sto_max(j)) + QN_store = MAX(0 _d 0, QN_store) + QN_excess = MAX(0 _d 0, mmQn - QN_essential - QN_store) + +C P quota above QP_essential is store, but keep total P under +C Qp_max(j) + QP_store = MAX(0 _d 0, MIN(mmQp, Qp_max(j)) - QP_essential) + QP_excess = MAX(0 _d 0, mmQp - QP_essential - QP_store) + +C Fe quota above Qfe_essential is store, but keep total iron under +C Qfe_max(j) + Qfe_store = MAX(0 _d 0, MIN(mmQfe, Qfe_max(j)) - Qfe_essential) + Qfe_excess = MAX(0 _d 0, mmQfe - Qfe_essential - Qfe_store) + +C deduce carbon store + QC_store = MAX(0 _d 0, + & 1 _d 0 - QC_essential - QN_store*Y_CN_cyano(j)) + +C shlomit: new nutrient-uptake regulation terms: +C when store is full, phytoplankton reduce their nutrient-uptake: + +C Nitrogen: + IF ((QN_essential + QN_store) .GT. 0 _d 0) THEN + regQn = (1.1 _d 0*(QN_essential + QN_store) - mmQn)/ + & (0.1 _d 0*(QN_essential + QN_store)) + regQn = MAX(0 _d 0, MIN(1 _d 0, regQn)) + ELSE + regQn = 1 _d 0 + ENDIF + MM_NO3 = NO3/(NO3 + ksatNO3(j)) +C Carbon-specific NO3 uptake rate + VN = vmaxNO3(j)*MM_NO3*regQn*uptakeTempFunc + uptakeN = VN*mmX + uptakeNO3 = VN*mmX + uptakeNO2 = 0 _d 0 + uptakeNH4 = 0 _d 0 + +C Phosphorous: + IF ((QP_essential+QP_store) .GT. 0 _d 0) THEN + regQp = (1.1 _d 0*(QP_essential+QP_store) - mmQp)/ + & (0.1 _d 0*(QP_essential+QP_store)) + regQp = MAX(0 _d 0, MIN(1 _d 0, regQp)) + ELSE + regQp = 1 _d 0 + ENDIF + MM_PO4 = PO4/(PO4 + ksatPO4(j)) +C Carbon-specific PO4 uptake rate + VP = vmaxPO4(j)*MM_PO4*regQp*uptakeTempFunc + uptakePO4 = VP*mmX + +C Iron: + IF ((Qfe_essential + Qfe_Store) .GT. 0 _d 0) THEN + regQFe = (1.1 _d 0*(Qfe_essential + Qfe_Store) - mmQfe)/ + & (0.1 _d 0*(Qfe_essential + Qfe_Store)) + regQFe = MAX(0 _d 0, MIN(1 _d 0, regQFe)) + ELSE + regQFe = 1 _d 0 + ENDIF + MM_FeT = FeT/(FeT + ksatFeT(j)) +C Carbon-specific FeT uptake rate + Vfe = vmaxFeT(j)*MM_FeT*regQFe*uptakeTempFunc + uptakeFeT = Vfe*mmX + + exQc = 0 _d 0 + +C shlomit: Calclate the O2:C ratio + RQ = ( QN_pro_tot*Y_CN_protein(j))* 1.56 _d 0 + & + ( QC_other(j)/2 + QC_store/2) * 1.34 _d 0 + & + ( Y_CP_Plip(j) * QP_thy)* 1.30 _d 0 + & + ( QC_other(j)/2 + QC_store/2) * 1.0 _d 0 + & + ( QC_chl) * 1.39 _d 0 + & + ( QN_DNA_actl*Y_CN_DNA(j)) * 1.62 _d 0 + & + ( QN_RNA*Y_CN_RNA(j)) * 1.57 _d 0 + & + ( QN_store*Y_CN_cyano(j)) * 1.85 _d 0 + +# ifdef DARWIN_DIAG_PERTYPE + diags(iPChl+j-1) = PChl + diags(iVN +j-1) = VN + diags(iVP +j-1) = VP + diags(iMODE+j-1) = MODE + diags(iFe_C+j-1) = mmQfe + diags(iexQc+j-1) = exQc + diags(iCChl+j-1) = QC_chl + diags(iNChl+j-1) = QN_chl + diags(iNPho+j-1) = QN_pro_photo + diags(iNSyn+j-1) = QN_pro_bio + diags(iNPrn+j-1) = QN_pro_tot + diags(iNRNA+j-1) = QN_RNA + diags(iNDNA+j-1) = QN_DNA_actl + diags(iNSTO+j-1) = QN_store + diags(iNEXC+j-1) = QN_excess + diags(iPRNA+j-1) = QP_RNA + diags(iPDNA+j-1) = QP_DNA_actl + diags(iPTHY+j-1) = QP_thy + diags(iPCON+j-1) = QP_other_actl + diags(iPSTO+j-1) = QP_store + diags(iPEXC+j-1) = QP_excess + diags(iFPHO+j-1) = Qfe_pro_photo + diags(iFSTO+j-1) = Qfe_Store + diags(iFEXC+j-1) = Qfe_excess + diags(iY_RQ+j-1) = RQ + diags(ilimN+j-1) = limN + diags(ilimP+j-1) = limP + diags(ilimF+j-1) = limF + diags(ilimC+j-1) = limC + diags(ilimL+j-1) = limL +# endif + +#else /* DARWIN_MACROMOLECULAR_GROWTH */ + C==== Uptake and nutrient limitation =================================== C for quota elements, growth is limiteed by available quota, C for non-quota elements, by available nutrients in medium @@ -499,7 +893,7 @@ SUBROUTINE DARWIN_PLANKTON( #ifdef DARWIN_ALLOW_PQUOTA regQp = MAX(0 _d 0, MIN(1 _d 0, (Qpmax(j)-Qp(j))/ & (Qpmax(j)-Qpmin(j)) )) - regQp = regQp**hillnumUptake + regQp = regQp**hillnumPO4(j) C carbon-specific PO4 uptake rate uptakePO4 = vmaxPO4(j)*MM_PO4*regQp*uptakeTempFunc*X(j) c normalized Droop limitation @@ -528,7 +922,7 @@ SUBROUTINE DARWIN_PLANKTON( #ifdef DARWIN_ALLOW_SIQUOTA regQsi = MAX(0 _d 0, MIN(1 _d 0, (Qsimax(j) - Qsi(j))/ & (Qsimax(j) - Qsimin(j)) )) - regQsi = regQsi**hillnumUptake + regQsi = regQsi**hillnumSiO2(j) uptakeSiO2 = vmaxSiO2(j)*MM_SiO2*regQsi*uptakeTempFunc*X(j) c linear limitation limitsi = MAX(0 _d 0, MIN(1 _d 0, (Qsi(j) - Qsimin(j))/ @@ -555,7 +949,7 @@ SUBROUTINE DARWIN_PLANKTON( #ifdef DARWIN_ALLOW_FEQUOTA regQfe = MAX(0 _d 0, MIN(1 _d 0, (Qfemax(j)-Qfe(j))/ & (Qfemax(j)-Qfemin(j)) )) - regQfe = regQfe**hillnumUptake + regQfe = regQfe**hillnumFeT(j) uptakeFeT = vmaxFeT(j)*MM_FeT*regQfe*uptakeTempFunc*X(j) c normalized Droop limitation limitfe = MIN(1 _d 0, (1.0-Qfemin(j)/MAX(Qfemin(j), Qfe(j)))/ @@ -583,7 +977,7 @@ SUBROUTINE DARWIN_PLANKTON( MM_NO3 = NO3/(NO3 + ksatNO3(j))*inhibNH4 regQn = MAX(0 _d 0, MIN(1 _d 0, (Qnmax(j)-Qn(j))/ & (Qnmax(j)-Qnmin(j)) )) - regQn = regQn**hillnumUptake + regQn = regQn**hillnumDIN(j) uptakeNH4 = vmaxNH4(j)*MM_NH4*regQn*uptakeTempFunc*X(j) uptakeNO2 = vmaxNO2(j)*MM_NO2*regQn*uptakeTempFunc*X(j) uptakeNO3 = vmaxNO3(j)*MM_NO3*regQn*uptakeTempFunc*X(j) @@ -715,6 +1109,20 @@ SUBROUTINE DARWIN_PLANKTON( #endif /* DARWIN_ALLOW_GEIDER */ +#ifdef DARWIN_DIAG_PERTYPE +C which nutrient is limiting growth? + IF (limitnut==limitn) diags(ilimN+j-1) = 1 _d 0 + IF (limitnut==limitp) diags(ilimP+j-1) = 1 _d 0 + IF (limitnut==limitfe) diags(ilimF+j-1) = 1 _d 0 + IF (limitnut==limitsi) diags(ilimS+j-1) = 1 _d 0 +C factors that go into growth equation + diags(ifIph+j-1) = limitI + diags(ifTph+j-1) = photoTempFunc(j) + diags(ifnut+j-1) = limitnut +#endif + +#endif /* DARWIN_MACROMOLECULAR_GROWTH */ + photoSyn = PC*X(j) C==== Respiration ====================================================== @@ -827,15 +1235,6 @@ SUBROUTINE DARWIN_PLANKTON( #ifdef DARWIN_DIAG_PERTYPE diags(iPPplank+j-1) = diags(iPPplank+j-1) + uptakeDIC diags(iPCplank+j-1) = diags(iPCplank+j-1) + PC -C which nutrient is limiting growth? - IF (limitnut==limitn) diags(ilimN+j-1) = 1 _d 0 - IF (limitnut==limitp) diags(ilimP+j-1) = 1 _d 0 - IF (limitnut==limitfe) diags(ilimF+j-1) = 1 _d 0 - IF (limitnut==limitsi) diags(ilimS+j-1) = 1 _d 0 -C factors that go into growth equation - diags(ifIph+j-1) = limitI - diags(ifTph+j-1) = photoTempFunc(j) - diags(ifnut+j-1) = limitnut #endif IF (diazo(j) .GT. 0.0 _d 0) THEN diags(iNfix)=diags(iNfix)+uptakeN-uptakeNH4-uptakeNO2-uptakeNO3 @@ -862,6 +1261,10 @@ SUBROUTINE DARWIN_PLANKTON( C==== Apply phototrophy tendencies ===================================== gTr(ic+j-1)=gTr(ic+j-1) + growth +#ifdef DARWIN_MACROMOLECULAR_GROWTH + gTr(ic+j-1)=gTr(ic+j-1) - mmX*exQc + gTr(iDOC) = gTr(iDOC) + mmX*exQc +#endif #ifdef DARWIN_ALLOW_CSTORE gTr(ich+j-1)=gTr(ich+j-1) + storeC #endif @@ -1070,17 +1473,23 @@ SUBROUTINE DARWIN_PLANKTON( #else IF (.TRUE.) THEN #endif + IF (ksatO2remin .GT. 0 _d 0) THEN + tmp = O2/(O2 + ksatO2remin) + ELSE + tmp = 1 _d 0 + ENDIF C parameterized remineralization; want to set all K except KPOSi to zero C if running with bacteria - respDOC = reminTempFunc*KDOC *DOC - respDON = reminTempFunc*KDON *DON - respDOP = reminTempFunc*KDOP *DOP - respDOFe = reminTempFunc*KDOFe*DOFe - respPOC = reminTempFunc*KPOC *POC - respPON = reminTempFunc*KPON *PON - respPOP = reminTempFunc*KPOP *POP - respPOSi = reminTempFunc*KPOSi*POSi - respPOFe = reminTempFunc*KPOFe*POFe +C shlomit: add O2-dependece respiration + respDOC = reminTempFunc*KDOC *DOC*tmp + respDON = reminTempFunc*KDON *DON*tmp + respDOP = reminTempFunc*KDOP *DOP*tmp + respDOFe = reminTempFunc*KDOFe*DOFe*tmp + respPOC = reminTempFunc*KPOC *POC*tmp + respPON = reminTempFunc*KPON *PON*tmp + respPOP = reminTempFunc*KPOP *POP*tmp + respPOSi = reminTempFunc*KPOSi*POSi*tmp + respPOFe = reminTempFunc*KPOFe*POFe*tmp consumDOC = consumDOC + respDOC consumDON = consumDON + respDON @@ -1784,4 +2193,3 @@ SUBROUTINE DARWIN_PLANKTON( RETURN END SUBROUTINE - diff --git a/pkg/darwin/darwin_read_params.F b/pkg/darwin/darwin_read_params.F index cefc37433..1a86ea3b7 100644 --- a/pkg/darwin/darwin_read_params.F +++ b/pkg/darwin/darwin_read_params.F @@ -99,6 +99,7 @@ SUBROUTINE DARWIN_READ_PARAMS(iUnit,oUnit,myThid) & TempAeArr, & TemprefArr, & TempCoeffArr, + & TempAeArrMacromol, & reminTempAe, & mortTempAe, & mort2TempAe, @@ -143,6 +144,7 @@ SUBROUTINE DARWIN_READ_PARAMS(iUnit,oUnit,myThid) & KPON, & KPOFe, & KPOSi, + & ksatO2remin, & wC_sink, & wP_sink, & wN_sink, @@ -230,7 +232,6 @@ SUBROUTINE DARWIN_READ_PARAMS(iUnit,oUnit,myThid) & synthcost, & inhib_graz, & inhib_graz_exp, - & hillnumUptake, & hillnumGraz, & hollexp, & phygrazmin, @@ -452,6 +453,7 @@ SUBROUTINE DARWIN_READ_PARAMS(iUnit,oUnit,myThid) TempAeArr = -4000.0 _d 0 TemprefArr = 293.15 _d 0 TempCoeffArr = 0.5882 _d 0 + TempAeArrMacromol = -8420.0 _d 0 reminTempAe = 0.0438 _d 0 mortTempAe = 0.0438 _d 0 mort2TempAe = 0.0438 _d 0 @@ -498,6 +500,7 @@ SUBROUTINE DARWIN_READ_PARAMS(iUnit,oUnit,myThid) KPON = KPOC KPOFe = KPOC KPOSi = 1 _d 0/(300 _d 0*pday) + ksatO2remin = 0 _d 0 wC_sink = 10 _d 0/pday wP_sink = wC_sink wN_sink = wC_sink @@ -554,7 +557,6 @@ SUBROUTINE DARWIN_READ_PARAMS(iUnit,oUnit,myThid) synthcost = 0.0 _d 0 inhib_graz = 1.0 _d 0 inhib_graz_exp = 0.0 _d 0 - hillnumUptake = 1.0 _d 0 hillnumGraz = 1.0 _d 0 hollexp = 1.0 _d 0 phygrazmin = 120 _d -10 diff --git a/pkg/darwin/darwin_read_traitparams.F b/pkg/darwin/darwin_read_traitparams.F index 5a09a56ee..d1728d0ad 100644 --- a/pkg/darwin/darwin_read_traitparams.F +++ b/pkg/darwin/darwin_read_traitparams.F @@ -172,6 +172,36 @@ SUBROUTINE DARWIN_READ_TRAITPARAMS(iUnit,oUnit,myThid) & a_grazTempExp2, & a_grazTempOptimum, & a_grazDecayPower, +#ifdef DARWIN_MACROMOLECULAR_GROWTH + & a_Y_CP_Plip, + & a_Y_CN_protein, + & a_Y_NC_chl, + & a_Y_CN_cyano, + & a_Y_PN_nucacid, + & a_Y_CN_DNA, + & a_Y_CN_RNA, + & a_Y_THY_P, + & a_Y_FeN_photo, + & a_ECo2Prod, + & a_maintConsum, + & a_VI_max, + & b_VI_max, + & a_A_I, + & a_QC_other, + & a_QC_pro_other, + & a_QP_other, + & a_QP_RNA_min, + & a_QC_DNA, + & a_QN_sto_max, + & b_QN_sto_max, + & a_Qp_max, + & b_Qp_max, + & a_Qfe_max, + & b_Qfe_max, + & a_A_pho, + & a_A_bio, + & a_AP_RNA, +#endif #ifdef DARWIN_ALLOW_GEIDER & a_mQyield, & a_chl2cmax, @@ -185,6 +215,10 @@ SUBROUTINE DARWIN_READ_TRAITPARAMS(iUnit,oUnit,myThid) & a_acclimtimescl_denom, & a_ksatPON, & a_ksatDON, + & a_hillnumDIN, + & a_hillnumPO4, + & a_hillnumFeT, + & a_hillnumSiO2, & a_grazemax, & a_grazemax_denom, & b_grazemax, @@ -462,6 +496,36 @@ SUBROUTINE DARWIN_READ_TRAITPARAMS(iUnit,oUnit,myThid) a_grazTempExp2 = 0.001 _d 0 a_grazTempOptimum = 2. _d 0 a_grazDecayPower = 4. _d 0 +#ifdef DARWIN_MACROMOLECULAR_GROWTH + a_A_pho = 16.0 _d 0 + a_Y_THY_P = 0.028163 _d 0 + a_Y_CN_protein = 5.3 _d 0 /1.4 _d 0 + a_Y_FeN_photo = 0.00163 _d 0 + a_Y_NC_chl = 4.0 _d 0/55.0 _d 0 + a_Y_CN_cyano = 2.0 _d 0 + a_Y_PN_nucacid = 1. _d 0 /3.75 _d 0 + a_Y_CN_DNA = 9.75 _d 0 /3.75 _d 0 + a_Y_CN_RNA = 9.50 _d 0 /3.75 _d 0 + a_Y_CP_Plip = 40.0 _d 0 + a_ECo2Prod = 0.774 _d 0 + a_maintConsum = 0.393 _d 0/3600/24 + a_VI_max = 277 _d 0/3600/24 + b_VI_max = 0 _d 0 + a_A_I = 0.008633641 _d 0 + a_QC_other = 0.0182 _d 0 + a_QC_pro_other = 0.24 _d 0 + a_QP_other = 6.5344 _d -4 + a_QP_RNA_min = 2.23 _d -4 + a_QC_DNA = 9.41 _d -4 + a_QN_sto_max = 0.035 _d 0 + b_QN_sto_max = 0 _d 0 + a_Qp_max = 0.0052 _d 0 + b_Qp_max = 0 _d 0 + a_Qfe_max = 2.436 _d -4 + b_Qfe_max = 0 _d 0 + a_A_bio = 0.2711 _d 0*3600*24 + a_AP_RNA = 0.00423 _d 0*3600*24 +#endif #ifdef DARWIN_ALLOW_GEIDER a_mQyield = 75 _d -6 a_chl2cmax = .3 _d 0 @@ -475,6 +539,10 @@ SUBROUTINE DARWIN_READ_TRAITPARAMS(iUnit,oUnit,myThid) a_acclimtimescl_denom = 1 _d 0 a_ksatPON = 1 _d 0 a_ksatDON = 1 _d 0 + a_hillnumDIN = 1 _d 0 + a_hillnumPO4 = 1 _d 0 + a_hillnumFeT = 1 _d 0 + a_hillnumSiO2 = 1 _d 0 a_grazemax = 21.9 _d 0 / pday a_grazemax_denom = 1. _d 0 b_grazemax = -0.16 _d 0 diff --git a/pkg/darwin/darwin_read_traits.F b/pkg/darwin/darwin_read_traits.F index 0effd53be..54edb753f 100644 --- a/pkg/darwin/darwin_read_traits.F +++ b/pkg/darwin/darwin_read_traits.F @@ -99,6 +99,10 @@ SUBROUTINE DARWIN_READ_TRAITS(iUnit,oUnit,myThid) & ksatPO4, & ksatSiO2, & ksatFeT, + & hillnumDIN, + & hillnumPO4, + & hillnumFeT, + & hillnumSiO2, & kexcc, & kexcn, & kexcp, @@ -134,6 +138,33 @@ SUBROUTINE DARWIN_READ_TRAITS(iUnit,oUnit,myThid) & ksatPARDVM, & fracPARmort, & ExportFracDVM +#ifdef DARWIN_MACROMOLECULAR_GROWTH + & ,Y_CP_Plip, + & Y_CN_protein, + & Y_NC_chl, + & Y_CN_cyano, + & Y_PN_nucacid, + & Y_CN_DNA, + & Y_CN_RNA, + & Y_THY_P, + & Y_FeN_photo, + & ECo2Prod, + & maintConsum, + & VI_max, + & A_I, + & QC_other, + & QC_pro_other, + & QP_other, + & QP_RNA_min, + & QC_DNA, + & QN_sto_max, + & Qp_max, + & Qfe_max, + & A_pho, + & A_bio, + & AP_RNA, + & Sf +#endif NAMELIST/DARWIN_DEPENDENT_TRAITS/ #ifndef DARWIN_ALLOW_GEIDER @@ -149,6 +180,21 @@ SUBROUTINE DARWIN_READ_TRAITS(iUnit,oUnit,myThid) & biovol_bygroup, & alpha_mean, & chl2cmin +#ifdef DARWIN_MACROMOLECULAR_GROWTH + & ,QN_pro_other + & ,QN_RNA_min + & ,QC_RNA_min + & ,QN_DNA + & ,QP_DNA + & ,A_thy + & ,AN_RNA + & ,VI_min + & ,QC_chlMax + & ,QnNoChl + & ,QpNoChl + & ,QfeNoChl + & ,QC_const +#endif #ifdef ALLOW_RADTRANS @@ -251,6 +297,29 @@ SUBROUTINE DARWIN_READ_TRAITS(iUnit,oUnit,myThid) ENDDO #endif +#ifdef DARWIN_MACROMOLECULAR_GROWTH + DO jp = 1,nplank + QN_pro_other(jp) = QC_pro_other(jp)/Y_CN_protein(jp) + QN_RNA_min(jp) = QP_RNA_min(jp)/Y_PN_nucacid(jp) + QC_RNA_min(jp) = QN_RNA_min(jp)*Y_CN_RNA(jp) + QN_DNA(jp) = QC_DNA(jp)/Y_CN_DNA(jp) + QP_DNA(jp) = QN_DNA(jp)*Y_PN_nucacid(jp) + A_thy(jp) = Y_THY_P(jp)*Y_CP_Plip(jp) + AN_RNA(jp) = AP_RNA(jp)*Y_CN_protein(jp)/Y_PN_nucacid(jp) + + QC_const(jp) = QC_pro_other(jp) + QN_RNA_min(jp)*Y_CN_RNA(jp) + + & QC_DNA(jp) + QC_other(jp) + VI_min(jp) = maintConsum(jp)* + & (1. + A_thy(jp) + A_pho(jp))/(1 - QC_const(jp)) + QC_chlMax(jp) = maintConsum(jp)/VI_min(jp) + + QnNoChl(jp) = QN_DNA(jp) + QN_RNA_min(jp) + QN_pro_other(jp) + QpNoChl(jp) = QP_RNA_min(jp) + QN_DNA(jp)*Y_PN_nucacid(jp) + & + QP_other(jp) + QfeNoChl(jp) = 0.0 _d 0 + ENDDO +#endif + CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C Checks CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC @@ -439,6 +508,11 @@ SUBROUTINE DARWIN_READ_TRAITS(iUnit,oUnit,myThid) ksatSiO2(jp) = DARWIN_UNUSED ksatFeT(jp) = DARWIN_UNUSED + hillnumDIN(jp) = DARWIN_UNUSED + hillnumPO4(jp) = DARWIN_UNUSED + hillnumFeT(jp) = DARWIN_UNUSED + hillnumSiO2(jp) = DARWIN_UNUSED + #ifdef DARWIN_ALLOW_GEIDER inhibGeider(jp) = DARWIN_UNUSED #else diff --git a/pkg/darwin/darwin_tempfunc.F b/pkg/darwin/darwin_tempfunc.F index c1f81822e..3c35ea333 100644 --- a/pkg/darwin/darwin_tempfunc.F +++ b/pkg/darwin/darwin_tempfunc.F @@ -8,7 +8,7 @@ SUBROUTINE DARWIN_TEMPFUNC( I Temp, O photoFun, hetFun, grazFun, O reminFun, mortFun, mort2Fun, - O uptakeFun, + O uptakeFun, macromolFun, I myThid) C !DESCRIPTION: ======================================================== @@ -42,6 +42,7 @@ SUBROUTINE DARWIN_TEMPFUNC( _RL mortFun _RL mort2Fun _RL uptakeFun + _RL macromolFun CEOP #ifdef ALLOW_DARWIN @@ -59,6 +60,7 @@ SUBROUTINE DARWIN_TEMPFUNC( mortFun = 1.0 _d 0 mort2Fun = 1.0 _d 0 uptakeFun = 1.0 _d 0 + macromolFun = 1.0 _d 0 #elif DARWIN_TEMP_VERSION == 1 @@ -89,6 +91,7 @@ SUBROUTINE DARWIN_TEMPFUNC( mortFun = 1.0 _d 0 mort2Fun = 1.0 _d 0 uptakeFun = 1.0 _d 0 + macromolFun = 1.0 _d 0 c ++++++++++++++ END VERSION 1 +++++++++++++++++++++++++++++++++++++++ #elif DARWIN_TEMP_VERSION == 2 @@ -129,6 +132,9 @@ SUBROUTINE DARWIN_TEMPFUNC( c mortFun = 1.0 _d 0 c mort2Fun = 1.0 _d 0 uptakeFun = 1.0 _d 0 + macromolFun = exp(TempAeArrMacromol*(1.0 _d 0/(Temp+Tkel) - + & 1.0 _d 0/(TemprefArr) ) ) + macromolFun = max(macromolFun , 1. _d -10) c ++++++++++++++ END VERSION 2 +++++++++++++++++++++++++++++++++++++++ #elif DARWIN_TEMP_VERSION == 3 From 594809a4a61937a68cb26aaeb04f01f3dbc77093 Mon Sep 17 00:00:00 2001 From: Oliver Jahn Date: Mon, 1 Dec 2025 15:08:55 -0500 Subject: [PATCH 2/2] Revert "Add macromolecular growth parameterization" --- pkg/darwin/DARWIN_DIAGS.h | 40 -- pkg/darwin/DARWIN_OPTIONS.h | 13 +- pkg/darwin/DARWIN_PARAMS.h | 9 +- pkg/darwin/DARWIN_TRAITPARAMS.h | 68 ---- pkg/darwin/DARWIN_TRAITS.h | 131 +------ pkg/darwin/darwin_check.F | 183 +--------- pkg/darwin/darwin_diagnostics_init.F | 197 +--------- pkg/darwin/darwin_forcing.F | 92 +---- pkg/darwin/darwin_generate_allometric.F | 48 +-- pkg/darwin/darwin_init_chl.F | 2 +- pkg/darwin/darwin_plankton.F | 463 ++---------------------- pkg/darwin/darwin_read_params.F | 6 +- pkg/darwin/darwin_read_traitparams.F | 68 ---- pkg/darwin/darwin_read_traits.F | 74 ---- pkg/darwin/darwin_tempfunc.F | 8 +- 15 files changed, 54 insertions(+), 1348 deletions(-) diff --git a/pkg/darwin/DARWIN_DIAGS.h b/pkg/darwin/DARWIN_DIAGS.h index b8660fa35..0c1d372b0 100644 --- a/pkg/darwin/DARWIN_DIAGS.h +++ b/pkg/darwin/DARWIN_DIAGS.h @@ -49,15 +49,6 @@ C Contains indices into diagnostics array integer ifnut integer ifIph integer ifTph -# ifdef DARWIN_MACROMOLECULAR_GROWTH - integer iPChl, iVN, iVP - integer iCChl, iNChl, iNPho, iNSyn, iNPrn, iNRNA - integer iNDNA, iNSTO, iNEXC - integer iPRNA, iPDNA, iPTHY, iPCON, iPSTO, iPEXC - integer iFPHO, iFSTO, iFEXC, iY_RQ - integer iMODE, iFe_C, iexQc - integer ilimC, ilimL -# endif #endif #ifdef DARWIN_ALLOW_CSTORE integer iEX @@ -142,38 +133,7 @@ C Contains indices into diagnostics array PARAMETER(ifnut=ilimS+nplank) PARAMETER(ifIph=ifnut+nplank) PARAMETER(ifTph=ifIph+nplank) -# ifdef DARWIN_MACROMOLECULAR_GROWTH - PARAMETER(iPChl=ifTph+nplank) - PARAMETER(iVN= iPChl+nPhoto) - PARAMETER(iVP= iVN +nPhoto) - PARAMETER(iMODE=iVP +nPhoto) - PARAMETER(iFe_C=iMODE+nPhoto) - PARAMETER(iexQc=iFe_C+nPhoto) - PARAMETER(iCChl=iexQc+nPhoto) - PARAMETER(iNChl=iCChl+nPhoto) - PARAMETER(iNPho=iNChl+nPhoto) - PARAMETER(iNSyn=iNPho+nPhoto) - PARAMETER(iNPrn=iNSyn+nPhoto) - PARAMETER(iNRNA=iNPrn+nPhoto) - PARAMETER(iNDNA=iNRNA+nPhoto) - PARAMETER(iNSTO=iNDNA+nPhoto) - PARAMETER(iNEXC=iNSTO+nPhoto) - PARAMETER(iPRNA=iNEXC+nPhoto) - PARAMETER(iPDNA=iPRNA+nPhoto) - PARAMETER(iPTHY=iPDNA+nPhoto) - PARAMETER(iPCON=iPTHY+nPhoto) - PARAMETER(iPSTO=iPCON+nPhoto) - PARAMETER(iPEXC=iPSTO+nPhoto) - PARAMETER(iFPHO=iPEXC+nPhoto) - PARAMETER(iFSTO=iFPHO+nPhoto) - PARAMETER(iFEXC=iFSTO+nPhoto) - PARAMETER(iY_RQ=iFEXC+nPhoto) - PARAMETER(ilimC=iY_RQ+nPhoto) - PARAMETER(ilimL=ilimC+nPhoto) - PARAMETER(darwin_nDiag=ilimL+nPhoto-1) -# else PARAMETER(darwin_nDiag=ifTph+nplank-1) -# endif #else PARAMETER(iPCplank=iPPplank) PARAMETER(iGRplank=iPPplank) diff --git a/pkg/darwin/DARWIN_OPTIONS.h b/pkg/darwin/DARWIN_OPTIONS.h index e509f7e70..4dcb0fcb6 100644 --- a/pkg/darwin/DARWIN_OPTIONS.h +++ b/pkg/darwin/DARWIN_OPTIONS.h @@ -51,8 +51,11 @@ C but will use solvesaphe dissociation coefficient options. C this needs to be defined for coupling to atmospheric model: #undef DARWIN_USE_PLOAD -C enable macromolecular growth code; requires N, P and Fe quotas -#undef DARWIN_MACROMOLECULAR_GROWTH +C enable RADI sediment metamodel v1 +#undef DARWIN_ALLOW_RADIv1 + +C enable RADI sediment metamodel v2 +#undef DARWIN_ALLOW_RADIv2 C optional bits @@ -81,12 +84,6 @@ C CDOM is in carbon units and follows POC C include code for reading nutrient runoff from files #undef DARWIN_NUTRIENT_RUNOFF -C enable RADI sediment metamodel v1 -#undef DARWIN_ALLOW_RADIv1 - -C enable RADI sediment metamodel v2 -#undef DARWIN_ALLOW_RADIv2 - C include diel vertical migration code #undef DARWIN_ALLOW_DVM diff --git a/pkg/darwin/DARWIN_PARAMS.h b/pkg/darwin/DARWIN_PARAMS.h index 186c858f5..e48e41093 100644 --- a/pkg/darwin/DARWIN_PARAMS.h +++ b/pkg/darwin/DARWIN_PARAMS.h @@ -335,7 +335,6 @@ C tempnorm :: [] set temperature function (was 1.0) C TempAeArr :: [K] slope for pseudo-Arrhenius (TEMP_VERSION 2) C TemprefArr :: [K] reference temp for pseudo-Arrhenius (TEMP_VERSION 2) C TempCoeffArr :: [] pre-factor for pseudo-Arrhenius (TEMP_VERSION 2) -C TempAeArrMacromol :: [K] slope for pseudo-Arrhenius for macromolecular (TEMP_VERSION 2) C reminTempAe :: [1/K] temperature coefficient for remineralization (TEMP_VERSION 4) C mortTempAe :: [1/K] temperature coefficient for linear mortality (TEMP_VERSION 4) C mort2TempAe :: [1/K] temperature coefficient for quadr. mortality (TEMP_VERSION 4) @@ -378,7 +377,6 @@ C KPON :: [1/s] PON remineralization rate C KPOP :: [1/s] POP remineralization rate C KPOFe :: [1/s] POFe remineralization rate C KPOSi :: [1/s] POSi remineralization rate -C ksatO2remin :: [mmol O2/m3] half-saturation conc. of O2 for remineralization C C wC_sink :: [m/s] sinking velocity for POC C wN_sink :: [m/s] sinking velocity for PON @@ -434,6 +432,7 @@ C chl2nmax :: [mg Chl / mmol N] max Chl:N ratio for Chl synthesis C synthcost :: [mmol C / mmol N] cost of biosynthesis C inhib_graz :: [(mmol C m-3)-1] inverse decay scale for grazing inhibition C inhib_graz_exp :: [] exponent for grazing inhibition (0 to turn off inhibition) +C hillnumUptake :: [] exponent for limiting quota uptake in nutrient uptake C hillnumGraz :: [] exponent for limiting quota uptake in grazing C hollexp :: [] grazing exponential 1= "Holling 2", 2= "Holling 3" C phygrazmin :: [mmol C m-3] minimum total prey conc for grazing to occur @@ -465,7 +464,6 @@ C depthdenit :: [m] not implemented (depth for denitrific & TempAeArr, & TemprefArr, & TempCoeffArr, - & TempAeArrMacromol, & reminTempAe, & mortTempAe, & mort2TempAe, @@ -510,7 +508,6 @@ C depthdenit :: [m] not implemented (depth for denitrific & KPOP, & KPOFe, & KPOSi, - & ksatO2remin, & wC_sink, & wN_sink, & wP_sink, @@ -560,6 +557,7 @@ C depthdenit :: [m] not implemented (depth for denitrific & synthcost, & inhib_graz, & inhib_graz_exp, + & hillnumUptake, & hillnumGraz, & hollexp, & phygrazmin, @@ -586,7 +584,6 @@ C & yono2, _RL TempAeArr _RL TemprefArr _RL TempCoeffArr - _RL TempAeArrMacromol _RL reminTempAe _RL mortTempAe _RL mort2TempAe @@ -631,7 +628,6 @@ C & yono2, _RL KPOP _RL KPOFe _RL KPOSi - _RL ksatO2remin _RL wC_sink _RL wN_sink _RL wP_sink @@ -681,6 +677,7 @@ C & yono2, _RL synthcost _RL inhib_graz _RL inhib_graz_exp + _RL hillnumUptake _RL hillnumGraz _RL hollexp _RL phygrazmin diff --git a/pkg/darwin/DARWIN_TRAITPARAMS.h b/pkg/darwin/DARWIN_TRAITPARAMS.h index 143a2ff7e..a9bcf38d5 100644 --- a/pkg/darwin/DARWIN_TRAITPARAMS.h +++ b/pkg/darwin/DARWIN_TRAITPARAMS.h @@ -352,36 +352,6 @@ C & a_grazTempExp2, & a_grazTempOptimum, & a_grazDecayPower, -#ifdef DARWIN_MACROMOLECULAR_GROWTH - & a_Y_CP_Plip, - & a_Y_CN_protein, - & a_Y_NC_chl, - & a_Y_CN_cyano, - & a_Y_PN_nucacid, - & a_Y_CN_DNA, - & a_Y_CN_RNA, - & a_Y_THY_P, - & a_Y_FeN_photo, - & a_ECo2Prod, - & a_maintConsum, - & a_VI_max, - & b_VI_max, - & a_A_I, - & a_QC_other, - & a_QC_pro_other, - & a_QP_other, - & a_QP_RNA_min, - & a_QC_DNA, - & a_QN_sto_max, - & b_QN_sto_max, - & a_Qp_max, - & b_Qp_max, - & a_Qfe_max, - & b_Qfe_max, - & a_A_pho, - & a_A_bio, - & a_AP_RNA, -#endif #ifdef DARWIN_ALLOW_GEIDER & a_mQyield, & a_chl2cmax, @@ -395,10 +365,6 @@ C & a_acclimtimescl_denom, & a_ksatPON, & a_ksatDON, - & a_hillnumDIN, - & a_hillnumPO4, - & a_hillnumFeT, - & a_hillnumSiO2, & a_grazemax, & a_grazemax_denom, & b_grazemax, @@ -531,36 +497,6 @@ C _RL a_grazTempExp2(nGroup) _RL a_grazTempOptimum(nGroup) _RL a_grazDecayPower(nGroup) -#ifdef DARWIN_MACROMOLECULAR_GROWTH - _RL a_Y_CP_Plip(nGroup) - _RL a_Y_CN_protein(nGroup) - _RL a_Y_NC_chl(nGroup) - _RL a_Y_CN_cyano(nGroup) - _RL a_Y_PN_nucacid(nGroup) - _RL a_Y_CN_DNA(nGroup) - _RL a_Y_CN_RNA(nGroup) - _RL a_Y_THY_P(nGroup) - _RL a_Y_FeN_photo(nGroup) - _RL a_ECo2Prod(nGroup) - _RL a_maintConsum(nGroup) - _RL a_VI_max(nGroup) - _RL b_VI_max(nGroup) - _RL a_A_I(nGroup) - _RL a_QC_other(nGroup) - _RL a_QC_pro_other(nGroup) - _RL a_QP_other(nGroup) - _RL a_QP_RNA_min(nGroup) - _RL a_QC_DNA(nGroup) - _RL a_QN_sto_max(nGroup) - _RL b_QN_sto_max(nGroup) - _RL a_Qp_max(nGroup) - _RL b_Qp_max(nGroup) - _RL a_Qfe_max(nGroup) - _RL b_Qfe_max(nGroup) - _RL a_A_pho(nGroup) - _RL a_A_bio(nGroup) - _RL a_AP_RNA(nGroup) -#endif #ifdef DARWIN_ALLOW_GEIDER _RL a_mQyield(nGroup) _RL a_chl2cmax(nGroup) @@ -574,10 +510,6 @@ C _RL a_acclimtimescl_denom(nGroup) _RL a_ksatPON(nGroup) _RL a_ksatDON(nGroup) - _RL a_hillnumDIN(nGroup) - _RL a_hillnumPO4(nGroup) - _RL a_hillnumFeT(nGroup) - _RL a_hillnumSiO2(nGroup) _RL a_grazemax(nGroup) _RL a_grazemax_denom(nGroup) _RL b_grazemax(nGroup) diff --git a/pkg/darwin/DARWIN_TRAITS.h b/pkg/darwin/DARWIN_TRAITS.h index 1119f748d..fad5e4286 100644 --- a/pkg/darwin/DARWIN_TRAITS.h +++ b/pkg/darwin/DARWIN_TRAITS.h @@ -171,46 +171,8 @@ C ksatDVM :: [mmol C m^-3] half saturation for DVM mortality C ksatPARDVM :: [uEin m^-2 s^-1] half sat for light limitation for DVM C fracPARmort :: [] fraction of mortality from light-dependent mortality C ExportFracDVM :: [] fraction of light-dep mortality from DVM to POM -C -C- MACROMOLECULAR_GROWTH parameters -C Y_CP_Plip :: [molC molP^-1] C/P molar ratio of thylacoid membrane -C Y_CN_protein :: [molC molN^-1] C/N molar ratio in protein -C Y_NC_chl :: [molN molC^-1] N/C molar ratio in chlorophyll -C Y_CN_cyano :: [molC molN^-1] C/N molar ratio of cyanophycin -C Y_PN_nucacid :: [molP molN^-1] P/N molar ratio of RNA -C Y_CN_DNA :: [molC molN^-1] C/N molar ratio of DNA -C Y_CN_RNA :: [molC molN^-1] C/N molar ratio of RNA -C Y_THY_P :: [(molP)/(molC in chl)^-1] the stoichiometric ratio for cell phosphorus in thylakoid membrane to chlorophyll -C Y_FeN_photo :: [molFe mol N^-1] Fe/N ratio in photosystem iron -C ECo2Prod :: [dimensionless] CO2 production ratio -C maintConsum :: [s^-1] maintenance carbohydrate consumption -C VI_max :: [molC (molC in Chl)^-1 s^-1] carbon fixing rate -C A_I :: [umol^-1 m2 s] coefficient characterizing the absorption cross section -C QC_other :: [molC molC^-1] essential carbon (lipid membrane, etc.) -C QC_pro_other :: [molC molC^-1] -C QP_other :: [molP molC^-1] constant part of phosphorus -C QP_RNA_min :: [molP molC^-1] -C QC_DNA :: [molC molC^-1] constant part of DNA in carbon -C QN_pro_other :: [molN molC^-1] -C QN_RNA_min :: [molN molC^-1] constant part of RNA in nitrogen -C QC_RNA_min :: [molN molC^-1] constant part of RNA in carbon -C QN_DNA :: [molN molC^-1] DNA in nitrogen -C QP_DNA :: [molP molC^-1] DNA in phosphorous -C QN_sto_max :: [molN molC^-1] maximum nitrogen storage -C Qp_max :: [molP molC^-1] maximum phosphorus quota -C Qfe_max :: [molFe molC^-1] maximum iron quota -C A_pho :: [(molC)/(molC in chl)^-1] A constant of proportionalty -C A_bio :: [molC molC^-1 s] constant for variable part of biosynthesis protein -C AP_RNA :: [molP molC^-1 s] constant for Variable part of RNA -C AN_RNA :: [molN molN^-1 s] constant for Variable part of RNA -C A_thy :: [molC (molC in chl)^-1] -C Sf :: [unitless] enhancement of photosynthesis due to size -C QC_const :: [molC molC^-1] constant portion of the cell -C VI_min :: [molC (molC in Chl)^-1 s^-1] minimum photosynthesis rate -C QC_chlMax :: [molC molC^-1] maximum chlorophyll concentration at minimum light -C QnNoChl :: [molN molC^-1] minimum QN at zero growth rate -C QpNoChl :: [molP molC^-1] minimum QP at zero growth rate -C QfeNoChl :: [molFe molC^-1] minimum QFe at zero growth rate + + COMMON /DARWIN_TRAITS_r/ & Xmin, & amminhib, @@ -267,10 +229,6 @@ C QfeNoChl :: [molFe molC^-1] minimum QFe at zero growth rate & ksatPO4, & ksatSiO2, & ksatFeT, - & hillnumDIN, - & hillnumPO4, - & hillnumFeT, - & hillnumSiO2, & kexcc, & kexcn, & kexcp, @@ -306,46 +264,6 @@ C QfeNoChl :: [molFe molC^-1] minimum QFe at zero growth rate & ksatPARDVM, & fracPARmort, & ExportFracDVM -#ifdef DARWIN_MACROMOLECULAR_GROWTH - & ,Y_CN_protein, - & Y_CP_Plip, - & Y_NC_chl, - & Y_CN_cyano, - & Y_PN_nucacid, - & Y_CN_DNA, - & Y_CN_RNA, - & Y_THY_P, - & Y_FeN_photo, - & ECo2Prod, - & maintConsum, - & VI_max, - & A_I, - & QC_other, - & QC_pro_other, - & QP_other, - & QP_RNA_min, - & QC_DNA, - & QN_pro_other, - & QN_RNA_min, - & QC_RNA_min, - & QN_DNA, - & QP_DNA, - & QN_sto_max, - & Qp_max, - & Qfe_max, - & A_pho, - & A_bio, - & AP_RNA, - & AN_RNA, - & A_thy, - & Sf, - & VI_min, - & QC_chlMax, - & QnNoChl, - & QpNoChl, - & QfeNoChl, - & QC_const -#endif _RL Xmin(nplank) _RL amminhib(nplank) _RL acclimtimescl(nplank) @@ -401,10 +319,6 @@ C QfeNoChl :: [molFe molC^-1] minimum QFe at zero growth rate _RL ksatPO4(nplank) _RL ksatSiO2(nplank) _RL ksatFeT(nplank) - _RL hillnumDIN(nplank) - _RL hillnumPO4(nplank) - _RL hillnumFeT(nplank) - _RL hillnumSiO2(nplank) _RL kexcc(nplank) _RL kexcn(nplank) _RL kexcp(nplank) @@ -440,46 +354,7 @@ C QfeNoChl :: [molFe molC^-1] minimum QFe at zero growth rate _RL ksatPARDVM(nplank) _RL fracPARmort(nplank) _RL ExportFracDVM(nplank) -#ifdef DARWIN_MACROMOLECULAR_GROWTH - _RL Y_CN_protein(nplank) - _RL Y_CP_Plip(nplank) - _RL Y_NC_chl(nplank) - _RL Y_CN_cyano(nplank) - _RL Y_PN_nucacid(nplank) - _RL Y_CN_DNA(nplank) - _RL Y_CN_RNA(nplank) - _RL Y_THY_P(nplank) - _RL Y_FeN_photo(nplank) - _RL ECo2Prod(nplank) - _RL maintConsum(nplank) - _RL VI_max(nplank) - _RL A_I(nplank) - _RL QC_other(nplank) - _RL QC_pro_other(nplank) - _RL QP_other(nplank) - _RL QP_RNA_min(nplank) - _RL QC_DNA(nplank) - _RL QN_pro_other(nplank) - _RL QN_RNA_min(nplank) - _RL QC_RNA_min(nplank) - _RL QN_DNA(nplank) - _RL QP_DNA(nplank) - _RL QN_sto_max(nplank) - _RL Qp_max(nplank) - _RL Qfe_max(nplank) - _RL A_pho(nplank) - _RL A_bio(nplank) - _RL AP_RNA(nplank) - _RL AN_RNA(nplank) - _RL A_thy(nplank) - _RL Sf(nplank) - _RL VI_min(nplank) - _RL QC_chlMax(nplank) - _RL QnNoChl(nplank) - _RL QpNoChl(nplank) - _RL QfeNoChl(nplank) - _RL QC_const(nplank) -#endif + C-- COMMON /DARWIN_DEPENDENT_TRAITS_i/ Dependent and constant (not read-in) parameters C group :: which group this type belongs to diff --git a/pkg/darwin/darwin_check.F b/pkg/darwin/darwin_check.F index b377db32c..c95869a78 100644 --- a/pkg/darwin/darwin_check.F +++ b/pkg/darwin/darwin_check.F @@ -66,7 +66,7 @@ SUBROUTINE DARWIN_CHECK( myThid ) C msgBuf - Informational/error meesage buffer CHARACTER*(MAX_LEN_MBUF) msgBuf CHARACTER*80 gname - INTEGER j,iPtr,oUnit,g,l,errCount + INTEGER j,jz,iPtr,oUnit,g,l _RL dm CCOG[[[cog CCOGcog.out('\n'.join(''' @@ -426,42 +426,6 @@ SUBROUTINE DARWIN_CHECK( myThid ) ENDIF #endif - errCount = 0 -#ifdef DARWIN_MACROMOLECULAR_GROWTH -# ifndef DARWIN_ALLOW_NQUOTA - WRITE(msgBuf,'(2A)') 'DARWIN_CHECK: ERROR: ', - & 'DARWIN_MACROMOLECULAR_GROWTH requires DARWIN_ALLOW_NQUOTA' - CALL PRINT_ERROR( msgBuf , 1) - errCount = errCount + 1 -# endif -# ifndef DARWIN_ALLOW_PQUOTA - WRITE(msgBuf,'(2A)') 'DARWIN_CHECK: ERROR: ', - & 'DARWIN_MACROMOLECULAR_GROWTH requires DARWIN_ALLOW_PQUOTA' - CALL PRINT_ERROR( msgBuf , 1) - errCount = errCount + 1 -# endif -# ifndef DARWIN_ALLOW_FEQUOTA - WRITE(msgBuf,'(2A)') 'DARWIN_CHECK: ERROR: ', - & 'DARWIN_MACROMOLECULAR_GROWTH requires DARWIN_ALLOW_FEQUOTA' - CALL PRINT_ERROR( msgBuf , 1) - errCount = errCount + 1 -# endif -# ifdef DARWIN_ALLOW_SIQUOTA - WRITE(msgBuf,'(3A)') 'DARWIN_CHECK: ERROR: ', - & 'DARWIN_MACROMOLECULAR_GROWTH does not support ', - & 'DARWIN_ALLOW_SIQUOTA' - CALL PRINT_ERROR( msgBuf , 1) - errCount = errCount + 1 -# endif - IF (errCount .GT. 0) THEN - WRITE(msgBuf,'(A,I3,A)') - & 'DARWIN_CHECK: detected', errCount,' fatal error(s)' - CALL PRINT_ERROR( msgBuf, myThid ) - CALL ALL_PROC_DIE( 0 ) - STOP 'ABNORMAL END: S/R DARWIN_CHECK' - ENDIF -#endif - C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| C-- Print settings of some CPP flags. @@ -1868,9 +1832,6 @@ SUBROUTINE DARWIN_CHECK( myThid ) CALL WRITE_0D_RL(TempCoeffArr,INDEX_NONE, &'TempCoeffArr =', &' /* pre-factor for pseudo-Arrhenius (TEMP_VERSION 2) */') - CALL WRITE_0D_RL(TempAeArrMacromol,INDEX_NONE, - &'TempAeArrMacromol =', - &' /* temp effect on protein biosyn (MACROMOL GROWTH) (K) */') CALL WRITE_0D_RL(reminTempAe,INDEX_NONE, &'reminTempAe =', &' /* temperature coefficient for remineralization (TEMP_VERSION 4) @@ -2004,9 +1965,6 @@ SUBROUTINE DARWIN_CHECK( myThid ) CALL WRITE_0D_RL(KPOSi,INDEX_NONE, &'KPOSi =', &' /* POSi remineralization rate (1/s) */') - CALL WRITE_0D_RL(ksatO2remin,INDEX_NONE, - &'ksatO2remin =', - &' /* O2 half saturation for remineralization (mmol O2 m^-3) */') CALL WRITE_0D_RL(wC_sink,INDEX_NONE, &'wC_sink =', &' /* sinking velocity for POC (m/s) */') @@ -2178,6 +2136,9 @@ SUBROUTINE DARWIN_CHECK( myThid ) &'inhib_graz_exp =', &' /* exponent for grazing inhibition (0 to turn off inhibition) */ &') + CALL WRITE_0D_RL(hillnumUptake,INDEX_NONE, + &'hillnumUptake =', + &' /* exponent for limiting quota uptake in nutrient uptake */') CALL WRITE_0D_RL(hillnumGraz,INDEX_NONE, &'hillnumGraz =', &' /* exponent for limiting quota uptake in grazing */') @@ -2518,18 +2479,6 @@ SUBROUTINE DARWIN_CHECK( myThid ) &'ksatFeT =', &' /* half-saturation conc. for iron uptake/limitation (mmol Fe m^- &3) */') - CALL WRITE_1D_RL(hillnumDIN,nphoto,INDEX_NONE, - &'hillnumDIN =', - &' /* exponent for limiting quota uptake in DIN uptake */') - CALL WRITE_1D_RL(hillnumPO4,nphoto,INDEX_NONE, - &'hillnumPO4 =', - &' /* exponent for limiting quota uptake in PO4 uptake */') - CALL WRITE_1D_RL(hillnumFeT,nphoto,INDEX_NONE, - &'hillnumFeT =', - &' /* exponent for limiting quota uptake in FeT uptake */') - CALL WRITE_1D_RL(hillnumSiO2,nphoto,INDEX_NONE, - &'hillnumSiO2 =', - &' /* exponent for limiting quota uptake in SiO2 uptake */') CALL WRITE_1D_RL(kexcc,nplank,INDEX_NONE, &'kexcc =', &' /* exudation rate for carbon (s^-1) */') @@ -2655,130 +2604,6 @@ SUBROUTINE DARWIN_CHECK( myThid ) &'normI =', &' /* normalization factor for non-Geider light curve */') #endif -#ifdef DARWIN_MACROMOLECULAR_GROWTH - CALL WRITE_1D_RL(Y_CP_Plip,nplank,INDEX_NONE, - &'Y_CP_Plip = ', - &' /* C/P molar ratio of PG: Phosphatidyl glycerol (molC molP^-1) * - &/') - CALL WRITE_1D_RL(Y_CN_protein,nplank,INDEX_NONE, - &'Y_CN_protein = ', - &' /* C/N molar ratio in protein (molC molN^-1) */') - CALL WRITE_1D_RL(Y_NC_chl,nplank,INDEX_NONE, - &'Y_NC_chl = ', - &' /* N/C molar ratio in chlorophyll (molN molC^-1) */') - CALL WRITE_1D_RL(Y_CN_cyano,nplank,INDEX_NONE, - &'Y_CN_cyano = ', - &' /* C/N molar ratio of cyanophycin (molC molN^-1) */') - CALL WRITE_1D_RL(Y_PN_nucacid,nplank,INDEX_NONE, - &'Y_PN_nucacid = ', - &' /* P/N molar ratio of RNA (molP molN^-1) */') - CALL WRITE_1D_RL(Y_CN_DNA,nplank,INDEX_NONE, - &'Y_CN_DNA = ', - &' /* C/N molar ratio of DNA (molC molN^-1) */') - CALL WRITE_1D_RL(Y_CN_RNA,nplank,INDEX_NONE, - &'Y_CN_RNA = ', - &' /* C/N molar ratio of RNA (molC molN^-1) */') - CALL WRITE_1D_RL(Y_THY_P,nplank,INDEX_NONE, - &'Y_THY_P = ', - &' /* the stoichiometric ratio for cell phosphorus in thylakoid mem - &brane to chlorophyll ((molP)/(molC in chl)^-1) */') - CALL WRITE_1D_RL(Y_FeN_photo,nplank,INDEX_NONE, - &'Y_FeN_photo = ', - &' /* Fe/N ratio in photosystem iron (molFe mol N^-1) */') - CALL WRITE_1D_RL(ECo2Prod,nplank,INDEX_NONE, - &'ECo2Prod = ', - &' /* CO2 production ratio (dimensionless) */') - CALL WRITE_1D_RL(maintConsum,nplank,INDEX_NONE, - &'maintConsum = ', - &' /* maintenance carbohydrate consumption (s^-1) */') - CALL WRITE_1D_RL(VI_max,nplank,INDEX_NONE, - &'VI_max = ', - &' /* carbon fixing rate (molC (molC in Chl)^-1 s^-1) */') - CALL WRITE_1D_RL(A_I,nplank,INDEX_NONE, - &'A_I = ', - &' /* coefficient characterizing the absorption cross section (umol - &^-1 m2 s) */') - CALL WRITE_1D_RL(QC_other,nplank,INDEX_NONE, - &'QC_other = ', - &' /* essential carbon (lipid membrane, etc.) (molC molC^-1) */') - CALL WRITE_1D_RL(QC_pro_other,nplank,INDEX_NONE, - &'QC_pro_other = ', - &' /* (molC molC^-1) */') - CALL WRITE_1D_RL(QP_other,nplank,INDEX_NONE, - &'QP_other = ', - &' /* constant part of phosphorus (molP molC^-1) */') - CALL WRITE_1D_RL(QP_RNA_min,nplank,INDEX_NONE, - &'QP_RNA_min = ', - &' /* (molP molC^-1) */') - CALL WRITE_1D_RL(QC_DNA,nplank,INDEX_NONE, - &'QC_DNA = ', - &' /* constant part of DNA in carbon (molC molC^-1) */') - CALL WRITE_1D_RL(QN_pro_other,nplank,INDEX_NONE, - &'QN_pro_other = ', - &' /* (molN molC^-1) */') - CALL WRITE_1D_RL(QN_RNA_min,nplank,INDEX_NONE, - &'QN_RNA_min = ', - &' /* constant part of RNA in nitrogen (molN molC^-1) */') - CALL WRITE_1D_RL(QC_RNA_min,nplank,INDEX_NONE, - &'QC_RNA_min = ', - &' /* constant part of RNA in carbon (molN molC^-1) */') - CALL WRITE_1D_RL(QN_DNA,nplank,INDEX_NONE, - &'QN_DNA = ', - &' /* DNA in nitrogen (molN molC^-1) */') - CALL WRITE_1D_RL(QP_DNA,nplank,INDEX_NONE, - &'QP_DNA = ', - &' /* DNA in phosphorous (molP molC^-1) */') - CALL WRITE_1D_RL(QN_sto_max,nplank,INDEX_NONE, - &'QN_sto_max = ', - &' /* maximum nitrogen storage (molN molC^-1) */') - CALL WRITE_1D_RL(Qp_max,nplank,INDEX_NONE, - &'Qp_max = ', - &' /* maximum phosphorus quota (molP molC^-1) */') - CALL WRITE_1D_RL(Qfe_max,nplank,INDEX_NONE, - &'Qfe_max = ', - &' /* maximum iron quota (molFe molC^-1) */') - CALL WRITE_1D_RL(A_pho,nplank,INDEX_NONE, - &'A_pho = ', - &' /* A constant of proportionalty ((molC)/(molC in chl)^-1) */') - CALL WRITE_1D_RL(A_bio,nplank,INDEX_NONE, - &'A_bio = ', - &' /* constant for variable part of biosynthesis protein (molC molC - &^-1 s) */') - CALL WRITE_1D_RL(AP_RNA,nplank,INDEX_NONE, - &'AP_RNA = ', - &' /* constant for Variable part of RNA (molP molC^-1 s) */') - CALL WRITE_1D_RL(AN_RNA,nplank,INDEX_NONE, - &'AN_RNA = ', - &' /* constant for Variable part of RNA (molN molN^-1 s) */') - CALL WRITE_1D_RL(A_thy,nplank,INDEX_NONE, - &'A_thy = ', - &' /* (molC (molC in chl)^-1) */') - CALL WRITE_1D_RL(Sf,nplank,INDEX_NONE, - &'Sf = ', - &' /* enhancement of photosynthesis due to size */') - CALL WRITE_1D_RL(VI_min,nplank,INDEX_NONE, - &'VI_min = ', - &' /* minimum photosynthesis rate (molC (molC in Chl)^-1 s^-1) */') - CALL WRITE_1D_RL(QC_chlMax,nplank,INDEX_NONE, - &'QC_chlMax = ', - &' /* maximum chlorophyll concentration at minimum light (molC molC - &^-1) */') - CALL WRITE_1D_RL(QnNoChl,nplank,INDEX_NONE, - &'QnNoChl = ', - &' /* minimum QN at zero growth rate (molN molC^-1) */') - CALL WRITE_1D_RL(QpNoChl,nplank,INDEX_NONE, - &'QpNoChl = ', - &' /* minimum QP at zero growth rate (molP molC^-1) */') - CALL WRITE_1D_RL(QfeNoChl,nplank,INDEX_NONE, - &'QfeNoChl = ', - &' /* minimum QFe at zero growth rate (molFe molC^-1) */') - CALL WRITE_1D_RL(QC_const,nplank,INDEX_NONE, - &'QC_const =', - &' /* constant portion of the cell (molC molC^-1) */') -#endif - -C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| -C-- Print dependent traits CALL WRITE_1D_RL(alpha_mean,nplank,INDEX_NONE, &'alpha_mean =', &' /* mean initial slope of light curve (over wavebands) (mmol C s- diff --git a/pkg/darwin/darwin_diagnostics_init.F b/pkg/darwin/darwin_diagnostics_init.F index 3b276ab6f..9eed6e87f 100644 --- a/pkg/darwin/darwin_diagnostics_init.F +++ b/pkg/darwin/darwin_diagnostics_init.F @@ -517,202 +517,7 @@ SUBROUTINE DARWIN_DIAGNOSTICS_INIT( myThid ) CALL DIAGNOSTICS_ADDTOLIST( diagNum, I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) ENDDO - -# ifdef DARWIN_MACROMOLECULAR_GROWTH - DO j = 1,nPhoto - WRITE(diagName,'(A,I4.4)')'PChl', j - WRITE(diagTitle,'(A,I4)')'Chl-spec carbohydrat fix rate plank ',j - diagUnits = 'mol C/mol Chl/s ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'VN', j - WRITE(diagTitle,'(A,I4)') - & 'Carbon-spec nitrogen uptake rate plank ',j - diagUnits = 'mmol N/mmol C/s ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'VP', j - WRITE(diagTitle,'(A,I4)') - & 'Carbon-spec phosphorus uptake rate plank ',j - diagUnits = 'mmol N/mmol C/s ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'MODE', j - WRITE(diagTitle,'(A,I4)')'Growth limitation enum plankton ',j - diagUnits = 'dimensionless ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'Fe_C', j - WRITE(diagTitle,'(A,I4)')'Fe/C plankton ',j - diagUnits = 'mol Fe/mol C ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'exQc', j - WRITE(diagTitle,'(A,I4)')'exQc plankton ',j - diagUnits = 's-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'CChl', j - WRITE(diagTitle,'(A,I4)')'C quota in Chlorophyll plankton ',j - diagUnits = 'molC molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'NChl', j - WRITE(diagTitle,'(A,I4)')'N quota in Chlorophyll plankton ',j - diagUnits = 'molN molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'NPho', j - WRITE(diagTitle,'(A,I4)')'N quota related to photosynth plank ',j - diagUnits = 'molN molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'NSyn', j - WRITE(diagTitle,'(A,I4)')'N quota related to biosynth plank ',j - diagUnits = 'molN molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'NPrn', j - WRITE(diagTitle,'(A,I4)')'N quota in proteins plankton ',j - diagUnits = 'molN molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'NRNA', j - WRITE(diagTitle,'(A,I4)')'N quota in RNA plankton ',j - diagUnits = 'molN molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'NDNA', j - WRITE(diagTitle,'(A,I4)')'N quota in DNA plankton ',j - diagUnits = 'molN molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'NSTO', j - WRITE(diagTitle,'(A,I4)')'N quota in QN_store plankton ',j - diagUnits = 'molN molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'NEXC', j - WRITE(diagTitle,'(A,I4)')'N quota in QN_excess plankton ',j - diagUnits = 'molN molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'PRNA', j - WRITE(diagTitle,'(A,I4)')'P quota in RNA plankton ',j - diagUnits = 'molP molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'PDNA', j - WRITE(diagTitle,'(A,I4)')'P quota in DNA plankton ',j - diagUnits = 'molP molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'PTHY', j - WRITE(diagTitle,'(A,I4)')'P quota in Thylakoid membrane plank ',j - diagUnits = 'molP molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'PCON', j - WRITE(diagTitle,'(A,I4)')'P quota a constant part plankton ',j - diagUnits = 'molP molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'PSTO', j - WRITE(diagTitle,'(A,I4)')'P quota in P storage plankton ',j - diagUnits = 'molP molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'PEXC', j - WRITE(diagTitle,'(A,I4)')'P quota in QP_excess plankton ',j - diagUnits = 'mol P molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'FPHO', j - WRITE(diagTitle,'(A,I4)')'Fe quota in Photosystem plankton ',j - diagUnits = 'mol Fe molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'FSTO', j - WRITE(diagTitle,'(A,I4)')'Fe quota in QFe_store plankton ',j - diagUnits = 'mol Fe molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'FEXC', j - WRITE(diagTitle,'(A,I4)')'Fe quota in QFe_excess plankton ',j - diagUnits = 'mol Fe molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'Y_RQ', j - WRITE(diagTitle,'(A,I4)')'O2:C ratio for respiration plankton ',j - diagUnits = 'mol O2 molC-1 ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'limC', j - WRITE(diagTitle,'(A,I4)')'C growth limitation plankton ',j - diagUnits = '[0/1] ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - - WRITE(diagName,'(A,I4.4)')'limL', j - WRITE(diagTitle,'(A,I4)')'Light growth limitation plankton ',j - diagUnits = '[0/1] ' - diagCode = 'SM P MR ' - CALL DIAGNOSTICS_ADDTOLIST( diagNum, - I diagName, diagCode, diagUnits, diagTitle, 0, myThid ) - ENDDO -# endif /* DARWIN_MACROMOLECULAR_GROWTH */ -#endif /* DARWIN_DIAG_PERTYPE */ +#endif #ifdef DARWIN_ALLOW_CSTORE #ifdef DARWIN_ALLOW_CSTORE_DIAGS diff --git a/pkg/darwin/darwin_forcing.F b/pkg/darwin/darwin_forcing.F index e5a438913..cd1388d0c 100644 --- a/pkg/darwin/darwin_forcing.F +++ b/pkg/darwin/darwin_forcing.F @@ -157,7 +157,6 @@ SUBROUTINE DARWIN_FORCING( Ptrdummy, _RL mortTempFunc _RL mort2TempFunc _RL uptakeTempFunc - _RL macromolTempFunc _RL omegaCl _RL tmp, tmpFac _RL sedFe(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) @@ -516,7 +515,7 @@ SUBROUTINE DARWIN_FORCING( Ptrdummy, IF (k .GE. kMinFeSed .AND. k .LE. kMaxFeSed) THEN #ifdef DARWIN_IRON_SED_SOURCE_VARIABLE # ifdef DARWIN_IRON_SED_SOURCE_POP -C mask is needed to make sure k-1 is not an ice shelf +C mask is needed to make sure k-1 isn't an ice shelf flx = fesedflux_pcm*wp_sink*R_CP_fesed* & MAX(0 _d 0, Ptracer(i,j,k-1,bi,bj,iPOP)) & *maskC(i,j,k-1,bi,bj) @@ -654,7 +653,7 @@ SUBROUTINE DARWIN_FORCING( Ptrdummy, CALL DARWIN_TEMPFUNC(Theta(i,j,k,bi,bj), & photoTempFunc, hetTempFunc, grazTempFunc, & reminTempFunc, mortTempFunc, mort2TempFunc, - & uptakeTempFunc, macromolTempFunc, myThid) + & uptakeTempFunc, myThid) DO iTr=1,nDarwin ptr(iTr) = Ptracer(i, j, k, bi, bj, iTr) gtr(iTr) = gPtr(i, j, k, iTr) @@ -676,7 +675,7 @@ SUBROUTINE DARWIN_FORCING( Ptrdummy, I grazTempFunc, I reminTempFunc, I mortTempFunc, mort2TempFunc, - I uptakeTempFunc, macromolTempFunc, + I uptakeTempFunc, I omegaCl, I k_debug, I subTime, myIter, myThid ) @@ -1378,91 +1377,6 @@ SUBROUTINE DARWIN_FORCING( Ptrdummy, CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ilimS+iTr-1), & diagname,0,Nr,2,bi,bj,myThid) ENDDO -# ifdef DARWIN_MACROMOLECULAR_GROWTH - DO iTr=1,nPhoto - WRITE(diagname, '(A,I4.4)') 'PChl', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iPChl+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'VN', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iVN+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'VP', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iVP+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'MODE', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iMODE+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'Fe_C', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iFe_C+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'exQc', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iexQc+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'CChl', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iCChl+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'NChl', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iNChl+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'NPho', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iNPho+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'NSyn', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iNSyn+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'NPrn', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iNPrn+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'NRNA', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iNRNA+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'NDNA', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iNDNA+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'NSTO', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iNSTO+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'NEXC', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iNEXC+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'PRNA', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iPRNA+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'PDNA', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iPDNA+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'PTHY', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iPTHY+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'PCON', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iPCON+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'PSTO', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iPSTO+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'PEXC', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iPEXC+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'FPHO', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iFPHO+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'FSTO', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iFSTO+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'FEXC', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iFEXC+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'Y_RQ', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iY_RQ+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'limC', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ilimC+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - WRITE(diagname, '(A,I4.4)') 'limL', iTr - CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ilimL+iTr-1),diagname, - & 0,Nr,2,bi,bj,myThid) - ENDDO -# endif #endif #ifdef DARWIN_ALLOW_CSTORE #ifdef DARWIN_ALLOW_CSTORE_DIAGS diff --git a/pkg/darwin/darwin_generate_allometric.F b/pkg/darwin/darwin_generate_allometric.F index 576047a94..d44b35ea6 100644 --- a/pkg/darwin/darwin_generate_allometric.F +++ b/pkg/darwin/darwin_generate_allometric.F @@ -48,6 +48,7 @@ SUBROUTINE DARWIN_GENERATE_ALLOMETRIC( myThid ) _RL bmean, bbmean _RL bbbratiomeas, bbbratioac + C ====================================================================== C compute cell volumes in micrometer^3 C @@ -266,11 +267,6 @@ SUBROUTINE DARWIN_GENERATE_ALLOMETRIC( myThid ) fracPARmort(jp) = a_fracPARmort(g)*biovol(jp)**b_fracPARmort(g) ExportFracDVM(jp) = a_ExportFracDVM(g) - hillnumDIN(jp) = a_hillnumDIN(g) - hillnumPO4(jp) = a_hillnumPO4(g) - hillnumFeT(jp) = a_hillnumFeT(g) - hillnumSiO2(jp) = a_hillnumSiO2(g) - C respRate rate is given in terms of carbon content qcarbon(jp) = a_qcarbon(g) * biovol(jp)**b_qcarbon(g) respRate(jp) = a_respRate_c(g) @@ -378,50 +374,14 @@ SUBROUTINE DARWIN_GENERATE_ALLOMETRIC( myThid ) ksatDOP(jp) = ksatDON(jp)/R_NC(jp)*R_PC(jp) ksatDOFe(jp) = ksatDON(jp)/R_NC(jp)*R_FeC(jp) -C ---------------------------------------------------------------------- -#ifdef DARWIN_MACROMOLECULAR_GROWTH - Y_CP_Plip(jp) = a_Y_CP_Plip(g) - Y_CN_protein(jp) = a_Y_CN_protein(g) - Y_NC_chl(jp) = a_Y_NC_chl(g) - Y_CN_cyano(jp) = a_Y_CN_cyano(g) - Y_PN_nucacid(jp) = a_Y_PN_nucacid(g) - Y_CN_DNA(jp) = a_Y_CN_DNA(g) - Y_CN_RNA(jp) = a_Y_CN_RNA(g) - Y_THY_P(jp) = a_Y_THY_P(g) - Y_FeN_photo(jp) = a_Y_FeN_photo(g) - - ECo2Prod(jp) = a_ECo2Prod(g) - maintConsum(jp) = a_maintConsum(g) - A_I(jp) = a_A_I(g) - A_pho(jp) = a_A_pho(g) - A_bio(jp) = a_A_bio(g) - - QC_other(jp) = a_QC_other(g) - QC_pro_other(jp) = a_QC_pro_other(g) - QP_other(jp) = a_QP_other(g) - QP_RNA_min(jp) = a_QP_RNA_min(g) - QC_DNA(jp) = a_QC_DNA(g) - AP_RNA(jp) = a_AP_RNA(g) - - VI_max(jp) = a_VI_max(g) * biovol(jp)**b_VI_max(g) - QN_sto_max(jp) = a_QN_sto_max(g) * biovol(jp)**b_QN_sto_max(g) - Qp_max(jp) = a_Qp_max(g) * biovol(jp)**b_Qp_max(g) - Qfe_max(jp) = a_Qfe_max(g) * biovol(jp)**b_Qfe_max(g) - - Sf(jp) = 1.0 _d 0 - -#else /* DARWIN_MACROMOLECULAR_GROWTH */ - -# ifdef DARWIN_ALLOW_GEIDER +#ifdef DARWIN_ALLOW_GEIDER mQyield(jp) = a_mQyield(g) chl2cmax(jp) = a_chl2cmax(g) inhibGeider(jp) = a_inhibGeider(g) -# else +#else ksatPAR(jp) = a_ksatPAR(g) kinhPAR(jp) = a_kinhPAR(g) -# endif /* DARWIN_ALLOW_GEIDER */ - -#endif /* DARWIN_MACROMOLECULAR_GROWTH */ +#endif /* DARWIN_ALLOW_GEIDER */ #ifdef ALLOW_RADTRANS aptype(jp) = grp_aptype(g) diff --git a/pkg/darwin/darwin_init_chl.F b/pkg/darwin/darwin_init_chl.F index 18d02d7bd..b2ed43e87 100644 --- a/pkg/darwin/darwin_init_chl.F +++ b/pkg/darwin/darwin_init_chl.F @@ -108,7 +108,7 @@ SUBROUTINE DARWIN_INIT_CHL( bi, bj, myTime, myIter, myThid ) #else /* not DARWIN_CHL_INIT_LEGACY */ -C compute PAR from current Chl +C compute PAR from current Chl C (usually initialized to 0 if darwin_chlInitBalanced) C do not fill diagnostics, C do not take ice into account for backwards compatibility diff --git a/pkg/darwin/darwin_plankton.F b/pkg/darwin/darwin_plankton.F index 3d709502d..b5f7d7a7b 100644 --- a/pkg/darwin/darwin_plankton.F +++ b/pkg/darwin/darwin_plankton.F @@ -8,8 +8,7 @@ SUBROUTINE DARWIN_PLANKTON( U gTr, O chlout, diags, sumprey, I PAR, photoTempFunc, hetTempFunc, grazTempFunc, reminTempFunc, - I mortTempFunc, mort2TempFunc, - I uptakeTempFunc, macromolTempFunc, + I mortTempFunc, mort2TempFunc, uptakeTempFunc, I omegaCl, I k_debug,myTime,myIter,myThid) @@ -43,7 +42,6 @@ SUBROUTINE DARWIN_PLANKTON( _RL grazTempFunc(nplank) _RL mortTempFunc _RL mort2TempFunc - _RL macromolTempFunc _RL omegaCl _RL myTime INTEGER k_debug @@ -232,99 +230,6 @@ SUBROUTINE DARWIN_PLANKTON( _RL tmp -#ifdef DARWIN_MACROMOLECULAR_GROWTH - _RL mmX, mmQn, mmQp, mmQfe - _RL PChl - _RL QC_chl_D0 - _RL QC_chl_D1 - _RL QN_chl_D0 - _RL QN_chl_D1 - _RL QN_photo_D0 - _RL QN_photo_D1 - _RL QN_bio_D1 - _RL QN_pro_D0 - _RL QN_pro_D1 - _RL QN_rna_D1 - _RL QN_rna_D2 - _RL Qn_D0 - _RL Qn_D1 - _RL Qn_D2 - _RL Qn_exc - _RL QC_chl - _RL QN_chl - _RL QN_pro_photo - _RL QN_pro_bio - _RL QN_pro_tot - _RL QN_RNA - _RL QnExc - _RL exQn - _RL QC_thy_D0 - _RL QC_thy_D1 - _RL QC_pro_D0 - _RL QC_pro_D1 - _RL QC_rna_D1 - _RL QC_rna_D2 - _RL Qc_D0 - _RL Qc_D1 - _RL Qc_D2 - _RL Qc_exc -C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - _RL QP_thy_D0 - _RL QP_thy_D1 - _RL QP_rna_D1 - _RL QP_rna_D2 - _RL Qp_D0 - _RL Qp_D1 - _RL Qp_D2 - _RL PC_n - _RL Qp_exc - _RL PC_p - _RL QP_thy - _RL QP_RNA - _RL QN_essential - _RL QP_essential - _RL QN_max - _RL QC_essential - _RL PC_c - _RL QP_store - _RL QP_excess - _RL QN_store - _RL QN_excess - _RL QpExc - _RL exQp - _RL VN,VP,VFe,VSi -C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - _RL exQc -C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - _RL Qfe_D1 - _RL Qfe_D0 - _RL Qfe_exc - _RL PC_fe - _RL Qfe_pro_photo - _RL Qfe_essential - _RL Qfe_Store - _RL Qfe_excess - _RL exQfe - _RL QfeExc - _RL MODE - _RL limN - _RL limP - _RL limF - _RL limC - _RL limL -C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - _RL QC_chlN - _RL QC_chlP - _RL QC_chlF - _RL Scal_coeff - _RL QC_store - _RL RQ - _RL QN_DNA_actl - _RL QP_other_actl - _RL QP_DNA_actl -C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -#endif /* DARWIN_MACROMOLECULAR_GROWTH */ - #ifdef DARWIN_ALLOW_CDOM _RL CDOM _RL reminPOC_CDOM @@ -575,305 +480,6 @@ SUBROUTINE DARWIN_PLANKTON( DO j = 1, nPhoto IF (isPhoto(j) .NE. 0) THEN -#ifdef DARWIN_MACROMOLECULAR_GROWTH - - IF (X(j) .GT. DARWIN_EPS) THEN - mmQn = Qn(j) - mmQp = Qp(j) - mmQfe = Qfe(j) - mmX = X(j) - ELSE - mmQn = 0 _d 0 - mmQp = 0 _d 0 - mmQfe = 0 _d 0 - mmX = 0 _d 0 - ENDIF - - limP = 0 _d 0 - limN = 0 _d 0 - limF = 0 _d 0 - limC = 0 _d 0 - limL = 0 _d 0 - -C set up Chl and N requirements as a function of growth rate PC -C then solve for PC - -C Carbohydrate fixation rate per chlorophyll -C (molC (mol C in chl s)-1) - PChl = Sf(j)*VI_max(j)*(1 - EXP(-A_I(j)*PARtot)) - -C Case 1: Enought light, growth rate is a function of macromol -C allocation - IF ( PChl .GT. VI_min(j) ) THEN - -C chlorophyll quota (mol C cell-1) -C Chl = ((1 _d 0 + E)*ls + m)/PChl -C where ls = D*Qc (molC s-1) Biomass synthesis rate - QC_chl_D0 = maintConsum(j)/PChl - QC_chl_D1 = (1 + ECo2Prod(j))/PChl - -C nitrogen pools in mol N (mol C)-1 - QN_chl_D0 = QC_chl_D0*Y_NC_chl(j) - QN_chl_D1 = QC_chl_D1*Y_NC_chl(j) - -C photosynthesis related protein - QN_photo_D0 = QC_chl_D0*A_pho(j)/Y_CN_protein(j) - QN_photo_D1 = QC_chl_D1*A_pho(j)/Y_CN_protein(j) - -C biosynthesis related protein - QN_bio_D1 = A_bio(j)/Y_CN_protein(j)/macromolTempFunc - -C total protein - QN_pro_D0 = QN_photo_D0 + QN_pro_other(j) - QN_pro_D1 = QN_photo_D1 + QN_bio_D1 - -C nitrogen in RNA - QN_rna_D1 = QN_pro_D0*AN_RNA(j)/macromolTempFunc - QN_rna_D2 = QN_pro_D1*AN_RNA(j)/macromolTempFunc - -C Total nitrogen - Qn_D0 = QN_chl_D0 + QN_pro_D0 + QN_RNA_min(j) + QN_DNA(j) - Qn_D1 = QN_chl_D1 + QN_pro_D1 + QN_rna_D1 - Qn_D2 = QN_rna_D2 - - -C Phosphate restriction on growth rate - QP_rna_D1 = QN_rna_D1*Y_PN_nucacid(j) - QP_rna_D2 = QN_rna_D2*Y_PN_nucacid(j) - QP_thy_D0 = QC_chl_D0*Y_THY_P(j) - QP_thy_D1 = QC_chl_D1*Y_THY_P(j) - - Qp_D0 = QP_thy_D0 + QP_RNA_min(j) + QP_DNA(j) + QP_other(j) - Qp_D1 = QP_thy_D1 + QP_rna_D1 - Qp_D2 = QP_rna_D2 - - -C Iron restriction on growth - Qfe_D0 = QN_photo_D0*Y_FeN_photo(j) - Qfe_D1 = QN_photo_D1*Y_FeN_photo(j) - - -C carbon restriction on growth rate - QC_thy_D0 = QP_thy_D0*Y_CP_Plip(j) - QC_thy_D1 = QP_thy_D1*Y_CP_Plip(j) - QC_pro_D0 = QN_pro_D0*Y_CN_protein(j) - QC_pro_D1 = QN_pro_D1*Y_CN_protein(j) - QC_rna_D1 = QN_rna_D1*Y_CN_RNA(j) - QC_rna_D2 = QN_rna_D2*Y_CN_RNA(j) - - Qc_D0 = QC_chl_D0 + QC_pro_D0 + QC_RNA_min(j) + QC_thy_D0 - & + QC_DNA(j) + QC_other(j) - Qc_D1 = QC_chl_D1 + QC_pro_D1 + QC_thy_D1 + QC_rna_D1 - Qc_D2 = QC_rna_D2 - - -C Determine what is limiting - Qn_exc = MAX(0 _d 0, mmQn - Qn_D0) - PC_n = 2*Qn_exc/(Qn_D1 + SQRT(Qn_D1*Qn_D1 + 4*Qn_D2*Qn_exc)) - Qp_exc = MAX(0 _d 0, mmQp - Qp_D0) - PC_p = 2*Qp_exc/(Qp_D1 + SQRT(Qp_D1*Qp_D1 + 4*Qp_D2*Qp_exc)) - Qfe_exc = MAX(0 _d 0, mmQfe - Qfe_D0) - PC_fe = Qfe_exc/Qfe_D1 - Qc_exc = MAX(0 _d 0, Qc(j) - Qc_D0) - PC_c = 2*Qc_exc/(Qc_D1 + SQRT(Qc_D1*Qc_D1 + 4*Qc_D2*Qc_exc)) - - PC = MIN(PC_n,PC_p,PC_fe,PC_c) - IF (PC_p.EQ.PC) THEN - MODE = 1 _d 0 - limP = 1 _d 0 - ELSEIF (PC_n.EQ.PC) THEN - MODE = 2 _d 0 - limN = 1 _d 0 - ELSEIF (PC_fe.EQ.PC) THEN - MODE = 3 _d 0 - limF = 1 _d 0 - ELSEIF (PC_c.EQ.PC) THEN - MODE = 4 _d 0 - limC = 1 _d 0 - ELSE - MODE = 0 _d 0 - ENDIF - - QC_chl = QC_chl_D0 + QC_chl_D1*PC - -C Case 2: Light limitation, growth rate is zero, QC_chl is -C calculated based on cellular mass balance - ELSE - MODE = 4 _d 0 - limL = 1 _d 0 - PC = 0. _d 0 - ENDIF - -C If growth rate is zero, recompute maximum QC_chl possible with -C given quotas - IF (PC .EQ. 0. _d 0) THEN - QC_chlN = (mmQn - QnNoChl(j)) - & /(Y_NC_chl(j) + A_pho(j)/Y_CN_protein(j)) - QC_chlP = (mmQp - QpNoChl(j))/Y_THY_P(j) - QC_chlF = (mmQfe - QfeNoChl(j)) - & /(A_pho(j)/Y_CN_protein(j)*Y_FeN_photo(j)) - QC_chl = MAX(0 _d 0, MIN(QC_chlN,QC_chlP,QC_chlF,QC_chlMax(j))) - ENDIF - -C convert to mg Chl m-3 - chlout(j) = 893.49 _d 0*X(j)*QC_chl/55 _d 0 - -C Calculate diagnostics and essentials - QN_chl = QC_chl*Y_NC_chl(j) - QN_pro_photo = QC_chl*A_pho(j)/Y_CN_protein(j) - QN_pro_bio = A_bio(j)/Y_CN_protein(j)*PC/macromolTempFunc - QN_pro_tot = QN_pro_other(j) + QN_pro_photo + QN_pro_bio - QN_RNA = QN_RNA_min(j) - & + QN_pro_tot*AN_RNA(j)*PC/macromolTempFunc - - QP_thy = QC_chl*Y_THY_P(j) - QP_RNA = QN_RNA*Y_PN_nucacid(j) - - Qfe_pro_photo = QN_pro_photo*Y_FeN_photo(j) - -C Case 3: if Qn, Qp are lower then the minimum requirement for Chl -C the remaining pools are scaled down to not exceed quotas - IF (QC_chl.EQ.0 _d 0) THEN - Scal_coeff = MIN(mmQp/QpNoChl(j),mmQn/QnNoChl(j),1 _d 0) - QN_RNA = QN_RNA_min(j)*Scal_coeff - QN_DNA_actl = QN_DNA(j)*Scal_coeff - QP_RNA = QP_RNA_min(j)*Scal_coeff - QP_DNA_actl = QP_DNA(j)*Scal_coeff -C excess N (if Qp.LT.QpNoChl) goes here - QN_pro_tot = MIN(mmQn - QN_RNA - QN_DNA_actl, QN_pro_other(j)) -C excess P (if Qn.LT.QnNoChl) goes here - QP_other_actl = MIN(mmQp - QP_RNA - QP_DNA_actl, QP_other(j)) - ELSE - QN_DNA_actl = QN_DNA(j) - QP_DNA_actl = QP_DNA(j) - QP_other_actl = QP_other(j) - ENDIF - -C total pools required for functioning (or scaled down) - QN_essential = QN_chl + QN_pro_tot + QN_RNA + QN_DNA_actl - QN_max = QN_essential + QN_sto_max(j) - QP_essential = QP_thy + QP_RNA + QP_DNA_actl + QP_other_actl - Qfe_essential = Qfe_pro_photo - QC_essential = QC_chl + QN_pro_tot*Y_CN_protein(j) - & + QP_thy*Y_CP_Plip(j) + QN_RNA*Y_CN_RNA(j) - & + QN_DNA_actl*Y_CN_DNA(j) + QC_other(j) - -C Storage calculation ----------------- - -C N quota above QN_essential is store, but not more than -C QN_sto_max(j) and make sure enough C for store - QN_store = MIN(mmQn - QN_essential, - & (Qc(j) - QC_essential)/Y_CN_cyano(j), - & QN_sto_max(j)) - QN_store = MAX(0 _d 0, QN_store) - QN_excess = MAX(0 _d 0, mmQn - QN_essential - QN_store) - -C P quota above QP_essential is store, but keep total P under -C Qp_max(j) - QP_store = MAX(0 _d 0, MIN(mmQp, Qp_max(j)) - QP_essential) - QP_excess = MAX(0 _d 0, mmQp - QP_essential - QP_store) - -C Fe quota above Qfe_essential is store, but keep total iron under -C Qfe_max(j) - Qfe_store = MAX(0 _d 0, MIN(mmQfe, Qfe_max(j)) - Qfe_essential) - Qfe_excess = MAX(0 _d 0, mmQfe - Qfe_essential - Qfe_store) - -C deduce carbon store - QC_store = MAX(0 _d 0, - & 1 _d 0 - QC_essential - QN_store*Y_CN_cyano(j)) - -C shlomit: new nutrient-uptake regulation terms: -C when store is full, phytoplankton reduce their nutrient-uptake: - -C Nitrogen: - IF ((QN_essential + QN_store) .GT. 0 _d 0) THEN - regQn = (1.1 _d 0*(QN_essential + QN_store) - mmQn)/ - & (0.1 _d 0*(QN_essential + QN_store)) - regQn = MAX(0 _d 0, MIN(1 _d 0, regQn)) - ELSE - regQn = 1 _d 0 - ENDIF - MM_NO3 = NO3/(NO3 + ksatNO3(j)) -C Carbon-specific NO3 uptake rate - VN = vmaxNO3(j)*MM_NO3*regQn*uptakeTempFunc - uptakeN = VN*mmX - uptakeNO3 = VN*mmX - uptakeNO2 = 0 _d 0 - uptakeNH4 = 0 _d 0 - -C Phosphorous: - IF ((QP_essential+QP_store) .GT. 0 _d 0) THEN - regQp = (1.1 _d 0*(QP_essential+QP_store) - mmQp)/ - & (0.1 _d 0*(QP_essential+QP_store)) - regQp = MAX(0 _d 0, MIN(1 _d 0, regQp)) - ELSE - regQp = 1 _d 0 - ENDIF - MM_PO4 = PO4/(PO4 + ksatPO4(j)) -C Carbon-specific PO4 uptake rate - VP = vmaxPO4(j)*MM_PO4*regQp*uptakeTempFunc - uptakePO4 = VP*mmX - -C Iron: - IF ((Qfe_essential + Qfe_Store) .GT. 0 _d 0) THEN - regQFe = (1.1 _d 0*(Qfe_essential + Qfe_Store) - mmQfe)/ - & (0.1 _d 0*(Qfe_essential + Qfe_Store)) - regQFe = MAX(0 _d 0, MIN(1 _d 0, regQFe)) - ELSE - regQFe = 1 _d 0 - ENDIF - MM_FeT = FeT/(FeT + ksatFeT(j)) -C Carbon-specific FeT uptake rate - Vfe = vmaxFeT(j)*MM_FeT*regQFe*uptakeTempFunc - uptakeFeT = Vfe*mmX - - exQc = 0 _d 0 - -C shlomit: Calclate the O2:C ratio - RQ = ( QN_pro_tot*Y_CN_protein(j))* 1.56 _d 0 - & + ( QC_other(j)/2 + QC_store/2) * 1.34 _d 0 - & + ( Y_CP_Plip(j) * QP_thy)* 1.30 _d 0 - & + ( QC_other(j)/2 + QC_store/2) * 1.0 _d 0 - & + ( QC_chl) * 1.39 _d 0 - & + ( QN_DNA_actl*Y_CN_DNA(j)) * 1.62 _d 0 - & + ( QN_RNA*Y_CN_RNA(j)) * 1.57 _d 0 - & + ( QN_store*Y_CN_cyano(j)) * 1.85 _d 0 - -# ifdef DARWIN_DIAG_PERTYPE - diags(iPChl+j-1) = PChl - diags(iVN +j-1) = VN - diags(iVP +j-1) = VP - diags(iMODE+j-1) = MODE - diags(iFe_C+j-1) = mmQfe - diags(iexQc+j-1) = exQc - diags(iCChl+j-1) = QC_chl - diags(iNChl+j-1) = QN_chl - diags(iNPho+j-1) = QN_pro_photo - diags(iNSyn+j-1) = QN_pro_bio - diags(iNPrn+j-1) = QN_pro_tot - diags(iNRNA+j-1) = QN_RNA - diags(iNDNA+j-1) = QN_DNA_actl - diags(iNSTO+j-1) = QN_store - diags(iNEXC+j-1) = QN_excess - diags(iPRNA+j-1) = QP_RNA - diags(iPDNA+j-1) = QP_DNA_actl - diags(iPTHY+j-1) = QP_thy - diags(iPCON+j-1) = QP_other_actl - diags(iPSTO+j-1) = QP_store - diags(iPEXC+j-1) = QP_excess - diags(iFPHO+j-1) = Qfe_pro_photo - diags(iFSTO+j-1) = Qfe_Store - diags(iFEXC+j-1) = Qfe_excess - diags(iY_RQ+j-1) = RQ - diags(ilimN+j-1) = limN - diags(ilimP+j-1) = limP - diags(ilimF+j-1) = limF - diags(ilimC+j-1) = limC - diags(ilimL+j-1) = limL -# endif - -#else /* DARWIN_MACROMOLECULAR_GROWTH */ - C==== Uptake and nutrient limitation =================================== C for quota elements, growth is limiteed by available quota, C for non-quota elements, by available nutrients in medium @@ -901,7 +507,7 @@ SUBROUTINE DARWIN_PLANKTON( #ifdef DARWIN_ALLOW_PQUOTA regQp = MAX(0 _d 0, MIN(1 _d 0, (Qpmax(j)-Qp(j))/ & (Qpmax(j)-Qpmin(j)) )) - regQp = regQp**hillnumPO4(j) + regQp = regQp**hillnumUptake C carbon-specific PO4 uptake rate uptakePO4 = vmaxPO4(j)*MM_PO4*regQp*uptakeTempFunc*X(j) c normalized Droop limitation @@ -930,7 +536,7 @@ SUBROUTINE DARWIN_PLANKTON( #ifdef DARWIN_ALLOW_SIQUOTA regQsi = MAX(0 _d 0, MIN(1 _d 0, (Qsimax(j) - Qsi(j))/ & (Qsimax(j) - Qsimin(j)) )) - regQsi = regQsi**hillnumSiO2(j) + regQsi = regQsi**hillnumUptake uptakeSiO2 = vmaxSiO2(j)*MM_SiO2*regQsi*uptakeTempFunc*X(j) c linear limitation limitsi = MAX(0 _d 0, MIN(1 _d 0, (Qsi(j) - Qsimin(j))/ @@ -957,7 +563,7 @@ SUBROUTINE DARWIN_PLANKTON( #ifdef DARWIN_ALLOW_FEQUOTA regQfe = MAX(0 _d 0, MIN(1 _d 0, (Qfemax(j)-Qfe(j))/ & (Qfemax(j)-Qfemin(j)) )) - regQfe = regQfe**hillnumFeT(j) + regQfe = regQfe**hillnumUptake uptakeFeT = vmaxFeT(j)*MM_FeT*regQfe*uptakeTempFunc*X(j) c normalized Droop limitation limitfe = MIN(1 _d 0, (1.0-Qfemin(j)/MAX(Qfemin(j), Qfe(j)))/ @@ -985,7 +591,7 @@ SUBROUTINE DARWIN_PLANKTON( MM_NO3 = NO3/(NO3 + ksatNO3(j))*inhibNH4 regQn = MAX(0 _d 0, MIN(1 _d 0, (Qnmax(j)-Qn(j))/ & (Qnmax(j)-Qnmin(j)) )) - regQn = regQn**hillnumDIN(j) + regQn = regQn**hillnumUptake uptakeNH4 = vmaxNH4(j)*MM_NH4*regQn*uptakeTempFunc*X(j) uptakeNO2 = vmaxNO2(j)*MM_NO2*regQn*uptakeTempFunc*X(j) uptakeNO3 = vmaxNO3(j)*MM_NO3*regQn*uptakeTempFunc*X(j) @@ -1117,23 +723,6 @@ SUBROUTINE DARWIN_PLANKTON( #endif /* DARWIN_ALLOW_GEIDER */ -#ifdef DARWIN_DIAG_PERTYPE -C which nutrient is limiting growth? - IF (limitnut==limitn) diags(ilimN+j-1) = 1 _d 0 - IF (limitnut==limitp) diags(ilimP+j-1) = 1 _d 0 - IF (limitnut==limitfe) diags(ilimF+j-1) = 1 _d 0 - IF (limitnut==limitsi) diags(ilimS+j-1) = 1 _d 0 -C factors that go into growth equation - diags(ifIph+j-1) = limitI - fIph_sum = fIph_sum + limitI * X(j) - diags(ifTph+j-1) = photoTempFunc(j) - fTph_sum = fTph_sum + photoTempFunc(j) * X(j) - diags(ifnut+j-1) = limitnut - fnut_sum = fnut_sum + limitnut * X(j) -#endif - -#endif /* DARWIN_MACROMOLECULAR_GROWTH */ - photoSyn = PC*X(j) C==== Respiration ====================================================== @@ -1246,6 +835,18 @@ SUBROUTINE DARWIN_PLANKTON( #ifdef DARWIN_DIAG_PERTYPE diags(iPPplank+j-1) = diags(iPPplank+j-1) + uptakeDIC diags(iPCplank+j-1) = diags(iPCplank+j-1) + PC +C which nutrient is limiting growth? + IF (limitnut==limitn) diags(ilimN+j-1) = 1 _d 0 + IF (limitnut==limitp) diags(ilimP+j-1) = 1 _d 0 + IF (limitnut==limitfe) diags(ilimF+j-1) = 1 _d 0 + IF (limitnut==limitsi) diags(ilimS+j-1) = 1 _d 0 +C factors that go into growth equation + diags(ifIph+j-1) = limitI + fIph_sum = fIph_sum + limitI * X(j) + diags(ifTph+j-1) = photoTempFunc(j) + fTph_sum = fTph_sum + photoTempFunc(j) * X(j) + diags(ifnut+j-1) = limitnut + fnut_sum = fnut_sum + limitnut * X(j) #endif IF (diazo(j) .GT. 0.0 _d 0) THEN diags(iNfix)=diags(iNfix)+uptakeN-uptakeNH4-uptakeNO2-uptakeNO3 @@ -1272,10 +873,6 @@ SUBROUTINE DARWIN_PLANKTON( C==== Apply phototrophy tendencies ===================================== gTr(ic+j-1)=gTr(ic+j-1) + growth -#ifdef DARWIN_MACROMOLECULAR_GROWTH - gTr(ic+j-1)=gTr(ic+j-1) - mmX*exQc - gTr(iDOC) = gTr(iDOC) + mmX*exQc -#endif #ifdef DARWIN_ALLOW_CSTORE gTr(ich+j-1)=gTr(ich+j-1) + storeC #endif @@ -1328,7 +925,6 @@ SUBROUTINE DARWIN_PLANKTON( diags(ifIphavg) = fIph_sum diags(ifTphavg) = fTph_sum diags(ifnutavg) = fnut_sum - C======================================================================= C==== Bacteria ========================================================= @@ -1499,23 +1095,17 @@ SUBROUTINE DARWIN_PLANKTON( #else IF (.TRUE.) THEN #endif - IF (ksatO2remin .GT. 0 _d 0) THEN - tmp = O2/(O2 + ksatO2remin) - ELSE - tmp = 1 _d 0 - ENDIF C parameterized remineralization; want to set all K except KPOSi to zero C if running with bacteria -C shlomit: add O2-dependece respiration - respDOC = reminTempFunc*KDOC *DOC*tmp - respDON = reminTempFunc*KDON *DON*tmp - respDOP = reminTempFunc*KDOP *DOP*tmp - respDOFe = reminTempFunc*KDOFe*DOFe*tmp - respPOC = reminTempFunc*KPOC *POC*tmp - respPON = reminTempFunc*KPON *PON*tmp - respPOP = reminTempFunc*KPOP *POP*tmp - respPOSi = reminTempFunc*KPOSi*POSi*tmp - respPOFe = reminTempFunc*KPOFe*POFe*tmp + respDOC = reminTempFunc*KDOC *DOC + respDON = reminTempFunc*KDON *DON + respDOP = reminTempFunc*KDOP *DOP + respDOFe = reminTempFunc*KDOFe*DOFe + respPOC = reminTempFunc*KPOC *POC + respPON = reminTempFunc*KPON *PON + respPOP = reminTempFunc*KPOP *POP + respPOSi = reminTempFunc*KPOSi*POSi + respPOFe = reminTempFunc*KPOFe*POFe consumDOC = consumDOC + respDOC consumDON = consumDON + respDON @@ -2219,3 +1809,4 @@ SUBROUTINE DARWIN_PLANKTON( RETURN END SUBROUTINE + diff --git a/pkg/darwin/darwin_read_params.F b/pkg/darwin/darwin_read_params.F index 1a86ea3b7..cefc37433 100644 --- a/pkg/darwin/darwin_read_params.F +++ b/pkg/darwin/darwin_read_params.F @@ -99,7 +99,6 @@ SUBROUTINE DARWIN_READ_PARAMS(iUnit,oUnit,myThid) & TempAeArr, & TemprefArr, & TempCoeffArr, - & TempAeArrMacromol, & reminTempAe, & mortTempAe, & mort2TempAe, @@ -144,7 +143,6 @@ SUBROUTINE DARWIN_READ_PARAMS(iUnit,oUnit,myThid) & KPON, & KPOFe, & KPOSi, - & ksatO2remin, & wC_sink, & wP_sink, & wN_sink, @@ -232,6 +230,7 @@ SUBROUTINE DARWIN_READ_PARAMS(iUnit,oUnit,myThid) & synthcost, & inhib_graz, & inhib_graz_exp, + & hillnumUptake, & hillnumGraz, & hollexp, & phygrazmin, @@ -453,7 +452,6 @@ SUBROUTINE DARWIN_READ_PARAMS(iUnit,oUnit,myThid) TempAeArr = -4000.0 _d 0 TemprefArr = 293.15 _d 0 TempCoeffArr = 0.5882 _d 0 - TempAeArrMacromol = -8420.0 _d 0 reminTempAe = 0.0438 _d 0 mortTempAe = 0.0438 _d 0 mort2TempAe = 0.0438 _d 0 @@ -500,7 +498,6 @@ SUBROUTINE DARWIN_READ_PARAMS(iUnit,oUnit,myThid) KPON = KPOC KPOFe = KPOC KPOSi = 1 _d 0/(300 _d 0*pday) - ksatO2remin = 0 _d 0 wC_sink = 10 _d 0/pday wP_sink = wC_sink wN_sink = wC_sink @@ -557,6 +554,7 @@ SUBROUTINE DARWIN_READ_PARAMS(iUnit,oUnit,myThid) synthcost = 0.0 _d 0 inhib_graz = 1.0 _d 0 inhib_graz_exp = 0.0 _d 0 + hillnumUptake = 1.0 _d 0 hillnumGraz = 1.0 _d 0 hollexp = 1.0 _d 0 phygrazmin = 120 _d -10 diff --git a/pkg/darwin/darwin_read_traitparams.F b/pkg/darwin/darwin_read_traitparams.F index d1728d0ad..5a09a56ee 100644 --- a/pkg/darwin/darwin_read_traitparams.F +++ b/pkg/darwin/darwin_read_traitparams.F @@ -172,36 +172,6 @@ SUBROUTINE DARWIN_READ_TRAITPARAMS(iUnit,oUnit,myThid) & a_grazTempExp2, & a_grazTempOptimum, & a_grazDecayPower, -#ifdef DARWIN_MACROMOLECULAR_GROWTH - & a_Y_CP_Plip, - & a_Y_CN_protein, - & a_Y_NC_chl, - & a_Y_CN_cyano, - & a_Y_PN_nucacid, - & a_Y_CN_DNA, - & a_Y_CN_RNA, - & a_Y_THY_P, - & a_Y_FeN_photo, - & a_ECo2Prod, - & a_maintConsum, - & a_VI_max, - & b_VI_max, - & a_A_I, - & a_QC_other, - & a_QC_pro_other, - & a_QP_other, - & a_QP_RNA_min, - & a_QC_DNA, - & a_QN_sto_max, - & b_QN_sto_max, - & a_Qp_max, - & b_Qp_max, - & a_Qfe_max, - & b_Qfe_max, - & a_A_pho, - & a_A_bio, - & a_AP_RNA, -#endif #ifdef DARWIN_ALLOW_GEIDER & a_mQyield, & a_chl2cmax, @@ -215,10 +185,6 @@ SUBROUTINE DARWIN_READ_TRAITPARAMS(iUnit,oUnit,myThid) & a_acclimtimescl_denom, & a_ksatPON, & a_ksatDON, - & a_hillnumDIN, - & a_hillnumPO4, - & a_hillnumFeT, - & a_hillnumSiO2, & a_grazemax, & a_grazemax_denom, & b_grazemax, @@ -496,36 +462,6 @@ SUBROUTINE DARWIN_READ_TRAITPARAMS(iUnit,oUnit,myThid) a_grazTempExp2 = 0.001 _d 0 a_grazTempOptimum = 2. _d 0 a_grazDecayPower = 4. _d 0 -#ifdef DARWIN_MACROMOLECULAR_GROWTH - a_A_pho = 16.0 _d 0 - a_Y_THY_P = 0.028163 _d 0 - a_Y_CN_protein = 5.3 _d 0 /1.4 _d 0 - a_Y_FeN_photo = 0.00163 _d 0 - a_Y_NC_chl = 4.0 _d 0/55.0 _d 0 - a_Y_CN_cyano = 2.0 _d 0 - a_Y_PN_nucacid = 1. _d 0 /3.75 _d 0 - a_Y_CN_DNA = 9.75 _d 0 /3.75 _d 0 - a_Y_CN_RNA = 9.50 _d 0 /3.75 _d 0 - a_Y_CP_Plip = 40.0 _d 0 - a_ECo2Prod = 0.774 _d 0 - a_maintConsum = 0.393 _d 0/3600/24 - a_VI_max = 277 _d 0/3600/24 - b_VI_max = 0 _d 0 - a_A_I = 0.008633641 _d 0 - a_QC_other = 0.0182 _d 0 - a_QC_pro_other = 0.24 _d 0 - a_QP_other = 6.5344 _d -4 - a_QP_RNA_min = 2.23 _d -4 - a_QC_DNA = 9.41 _d -4 - a_QN_sto_max = 0.035 _d 0 - b_QN_sto_max = 0 _d 0 - a_Qp_max = 0.0052 _d 0 - b_Qp_max = 0 _d 0 - a_Qfe_max = 2.436 _d -4 - b_Qfe_max = 0 _d 0 - a_A_bio = 0.2711 _d 0*3600*24 - a_AP_RNA = 0.00423 _d 0*3600*24 -#endif #ifdef DARWIN_ALLOW_GEIDER a_mQyield = 75 _d -6 a_chl2cmax = .3 _d 0 @@ -539,10 +475,6 @@ SUBROUTINE DARWIN_READ_TRAITPARAMS(iUnit,oUnit,myThid) a_acclimtimescl_denom = 1 _d 0 a_ksatPON = 1 _d 0 a_ksatDON = 1 _d 0 - a_hillnumDIN = 1 _d 0 - a_hillnumPO4 = 1 _d 0 - a_hillnumFeT = 1 _d 0 - a_hillnumSiO2 = 1 _d 0 a_grazemax = 21.9 _d 0 / pday a_grazemax_denom = 1. _d 0 b_grazemax = -0.16 _d 0 diff --git a/pkg/darwin/darwin_read_traits.F b/pkg/darwin/darwin_read_traits.F index 54edb753f..0effd53be 100644 --- a/pkg/darwin/darwin_read_traits.F +++ b/pkg/darwin/darwin_read_traits.F @@ -99,10 +99,6 @@ SUBROUTINE DARWIN_READ_TRAITS(iUnit,oUnit,myThid) & ksatPO4, & ksatSiO2, & ksatFeT, - & hillnumDIN, - & hillnumPO4, - & hillnumFeT, - & hillnumSiO2, & kexcc, & kexcn, & kexcp, @@ -138,33 +134,6 @@ SUBROUTINE DARWIN_READ_TRAITS(iUnit,oUnit,myThid) & ksatPARDVM, & fracPARmort, & ExportFracDVM -#ifdef DARWIN_MACROMOLECULAR_GROWTH - & ,Y_CP_Plip, - & Y_CN_protein, - & Y_NC_chl, - & Y_CN_cyano, - & Y_PN_nucacid, - & Y_CN_DNA, - & Y_CN_RNA, - & Y_THY_P, - & Y_FeN_photo, - & ECo2Prod, - & maintConsum, - & VI_max, - & A_I, - & QC_other, - & QC_pro_other, - & QP_other, - & QP_RNA_min, - & QC_DNA, - & QN_sto_max, - & Qp_max, - & Qfe_max, - & A_pho, - & A_bio, - & AP_RNA, - & Sf -#endif NAMELIST/DARWIN_DEPENDENT_TRAITS/ #ifndef DARWIN_ALLOW_GEIDER @@ -180,21 +149,6 @@ SUBROUTINE DARWIN_READ_TRAITS(iUnit,oUnit,myThid) & biovol_bygroup, & alpha_mean, & chl2cmin -#ifdef DARWIN_MACROMOLECULAR_GROWTH - & ,QN_pro_other - & ,QN_RNA_min - & ,QC_RNA_min - & ,QN_DNA - & ,QP_DNA - & ,A_thy - & ,AN_RNA - & ,VI_min - & ,QC_chlMax - & ,QnNoChl - & ,QpNoChl - & ,QfeNoChl - & ,QC_const -#endif #ifdef ALLOW_RADTRANS @@ -297,29 +251,6 @@ SUBROUTINE DARWIN_READ_TRAITS(iUnit,oUnit,myThid) ENDDO #endif -#ifdef DARWIN_MACROMOLECULAR_GROWTH - DO jp = 1,nplank - QN_pro_other(jp) = QC_pro_other(jp)/Y_CN_protein(jp) - QN_RNA_min(jp) = QP_RNA_min(jp)/Y_PN_nucacid(jp) - QC_RNA_min(jp) = QN_RNA_min(jp)*Y_CN_RNA(jp) - QN_DNA(jp) = QC_DNA(jp)/Y_CN_DNA(jp) - QP_DNA(jp) = QN_DNA(jp)*Y_PN_nucacid(jp) - A_thy(jp) = Y_THY_P(jp)*Y_CP_Plip(jp) - AN_RNA(jp) = AP_RNA(jp)*Y_CN_protein(jp)/Y_PN_nucacid(jp) - - QC_const(jp) = QC_pro_other(jp) + QN_RNA_min(jp)*Y_CN_RNA(jp) + - & QC_DNA(jp) + QC_other(jp) - VI_min(jp) = maintConsum(jp)* - & (1. + A_thy(jp) + A_pho(jp))/(1 - QC_const(jp)) - QC_chlMax(jp) = maintConsum(jp)/VI_min(jp) - - QnNoChl(jp) = QN_DNA(jp) + QN_RNA_min(jp) + QN_pro_other(jp) - QpNoChl(jp) = QP_RNA_min(jp) + QN_DNA(jp)*Y_PN_nucacid(jp) - & + QP_other(jp) - QfeNoChl(jp) = 0.0 _d 0 - ENDDO -#endif - CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C Checks CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC @@ -508,11 +439,6 @@ SUBROUTINE DARWIN_READ_TRAITS(iUnit,oUnit,myThid) ksatSiO2(jp) = DARWIN_UNUSED ksatFeT(jp) = DARWIN_UNUSED - hillnumDIN(jp) = DARWIN_UNUSED - hillnumPO4(jp) = DARWIN_UNUSED - hillnumFeT(jp) = DARWIN_UNUSED - hillnumSiO2(jp) = DARWIN_UNUSED - #ifdef DARWIN_ALLOW_GEIDER inhibGeider(jp) = DARWIN_UNUSED #else diff --git a/pkg/darwin/darwin_tempfunc.F b/pkg/darwin/darwin_tempfunc.F index 3c35ea333..c1f81822e 100644 --- a/pkg/darwin/darwin_tempfunc.F +++ b/pkg/darwin/darwin_tempfunc.F @@ -8,7 +8,7 @@ SUBROUTINE DARWIN_TEMPFUNC( I Temp, O photoFun, hetFun, grazFun, O reminFun, mortFun, mort2Fun, - O uptakeFun, macromolFun, + O uptakeFun, I myThid) C !DESCRIPTION: ======================================================== @@ -42,7 +42,6 @@ SUBROUTINE DARWIN_TEMPFUNC( _RL mortFun _RL mort2Fun _RL uptakeFun - _RL macromolFun CEOP #ifdef ALLOW_DARWIN @@ -60,7 +59,6 @@ SUBROUTINE DARWIN_TEMPFUNC( mortFun = 1.0 _d 0 mort2Fun = 1.0 _d 0 uptakeFun = 1.0 _d 0 - macromolFun = 1.0 _d 0 #elif DARWIN_TEMP_VERSION == 1 @@ -91,7 +89,6 @@ SUBROUTINE DARWIN_TEMPFUNC( mortFun = 1.0 _d 0 mort2Fun = 1.0 _d 0 uptakeFun = 1.0 _d 0 - macromolFun = 1.0 _d 0 c ++++++++++++++ END VERSION 1 +++++++++++++++++++++++++++++++++++++++ #elif DARWIN_TEMP_VERSION == 2 @@ -132,9 +129,6 @@ SUBROUTINE DARWIN_TEMPFUNC( c mortFun = 1.0 _d 0 c mort2Fun = 1.0 _d 0 uptakeFun = 1.0 _d 0 - macromolFun = exp(TempAeArrMacromol*(1.0 _d 0/(Temp+Tkel) - - & 1.0 _d 0/(TemprefArr) ) ) - macromolFun = max(macromolFun , 1. _d -10) c ++++++++++++++ END VERSION 2 +++++++++++++++++++++++++++++++++++++++ #elif DARWIN_TEMP_VERSION == 3