Skip to content

Commit

Permalink
Add per-type diagnostics for limitation factors etc
Browse files Browse the repository at this point in the history
  • Loading branch information
jahn committed Oct 4, 2024
1 parent b0bcc83 commit fd20fa8
Show file tree
Hide file tree
Showing 5 changed files with 145 additions and 4 deletions.
9 changes: 9 additions & 0 deletions doc/phys_pkgs/darwin.rst
Original file line number Diff line number Diff line change
Expand Up @@ -897,6 +897,15 @@ Diagnostics
GR#### & ``SMRP____MR`` & mmol C /m\ :sup:`3`/s & Grazing loss of plankton ####
GrGn#### & ``SMRP____MR`` & mmol C /m\ :sup:`3`/s & Grazing gain of plankton ####
GrGC#### & ``SMRP____MR`` & 1/s & Carbon-specific grazing rate plankton ####
Mort#### & ``SMRP____MR`` & mmol C /m\ :sup:`3`/s & Mortality loss plankton ####
Resp#### & ``SMRP____MR`` & mmol C /m\ :sup:`3`/s & Respiration loss plankton ####
limN#### & ``SMRP____MR`` & [0/1] & N growth limitation plankton ####
limP#### & ``SMRP____MR`` & [0/1] & P growth limitation plankton ####
limF#### & ``SMRP____MR`` & [0/1] & Fe growth limitation plankton ####
limS#### & ``SMRP____MR`` & [0/1] & Si growth limitation plankton ####
fnut#### & ``SMRP____MR`` & [0/1] & Nutrient growth factor plankton ####
fIph#### & ``SMRP____MR`` & [0/1] & Light growth factor plankton ####
fTph#### & ``SMRP____MR`` & [0/1] & Temperature growth factor plankton ####
EXU#### & ``SMRP____MR`` & mmol C /m\ :sup:`3`/s & Exudation plankton ####
BS#### & ``SMRP____MR`` & mmol C /m\ :sup:`3`/s & Biosynthesis rate plankton ####
DN#### & ``SMRP____MR`` & mmol C /m\ :sup:`3`/s & Carbon demand from N limit plankton ####
Expand Down
22 changes: 21 additions & 1 deletion pkg/darwin/DARWIN_DIAGS.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,17 @@ C Contains indices into diagnostics array
integer iGrGC
integer iHPplank
integer iHCplank
#ifdef DARWIN_DIAG_PERTYPE
integer iMort
integer iResp
integer ilimN
integer ilimP
integer ilimF
integer ilimS
integer ifnut
integer ifIph
integer ifTph
#endif
#ifdef DARWIN_ALLOW_CSTORE
integer iEX
integer iGW
Expand Down Expand Up @@ -107,7 +118,16 @@ C Contains indices into diagnostics array
PARAMETER(iGrGC=iGrGn+nplank)
PARAMETER(iHPplank=iGrGC+nplank)
PARAMETER(iHCplank=iHPplank+nplank)
PARAMETER(darwin_nDiag=iHCplank+nplank-1)
PARAMETER(iMort=iHCplank+nplank)
PARAMETER(iResp=iMort+nplank)
PARAMETER(ilimN=iResp+nplank)
PARAMETER(ilimP=ilimN+nplank)
PARAMETER(ilimF=ilimP+nplank)
PARAMETER(ilimS=ilimF+nplank)
PARAMETER(ifnut=ilimS+nplank)
PARAMETER(ifIph=ifnut+nplank)
PARAMETER(ifTph=ifIph+nplank)
PARAMETER(darwin_nDiag=ifTph+nplank-1)
#else
PARAMETER(iPCplank=iPPplank)
PARAMETER(iGRplank=iPPplank)
Expand Down
63 changes: 63 additions & 0 deletions pkg/darwin/darwin_diagnostics_init.F
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,69 @@ SUBROUTINE DARWIN_DIAGNOSTICS_INIT( myThid )
diagCode = 'SMRP MR '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )

WRITE(diagName,'(A,I4.4)')'Mort',j
WRITE(diagTitle,'(A,I4)')'Mortality loss plankton ',j
diagUnits = 'mmol C/m^3/s '
diagCode = 'SMRP MR '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )

WRITE(diagName,'(A,I4.4)')'Resp',j
WRITE(diagTitle,'(A,I4)')'Respiration loss plankton ',j
diagUnits = 'mmol C/m^3/s '
diagCode = 'SMRP MR '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )

WRITE(diagName,'(A,I4.4)')'limN',j
WRITE(diagTitle,'(A,I4)')'N growth limitation plankton ',j
diagUnits = '[0/1] '
diagCode = 'SMRP MR '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )

WRITE(diagName,'(A,I4.4)')'limP',j
WRITE(diagTitle,'(A,I4)')'P growth limitation plankton ',j
diagUnits = '[0/1] '
diagCode = 'SMRP MR '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )

WRITE(diagName,'(A,I4.4)')'limF',j
WRITE(diagTitle,'(A,I4)')'Fe growth limitation plankton ',j
diagUnits = '[0/1] '
diagCode = 'SMRP MR '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )

WRITE(diagName,'(A,I4.4)')'limS',j
WRITE(diagTitle,'(A,I4)')'Si growth limitation plankton ',j
diagUnits = '[0/1] '
diagCode = 'SMRP MR '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )

WRITE(diagName,'(A,I4.4)')'fnut',j
WRITE(diagTitle,'(A,I4)')'Nutrient growth factor plankton ',j
diagUnits = '[0/1] '
diagCode = 'SMRP MR '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )

WRITE(diagName,'(A,I4.4)')'fIph',j
WRITE(diagTitle,'(A,I4)')'Light growth factor plankton ',j
diagUnits = '[0/1] '
diagCode = 'SMRP MR '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )

WRITE(diagName,'(A,I4.4)')'fTph',j
WRITE(diagTitle,'(A,I4)')'Temperature growth factor plankton ',j
diagUnits = '[0/1] '
diagCode = 'SMRP MR '
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
ENDDO
#endif

Expand Down
27 changes: 27 additions & 0 deletions pkg/darwin/darwin_forcing.F
Original file line number Diff line number Diff line change
Expand Up @@ -1007,6 +1007,33 @@ SUBROUTINE DARWIN_FORCING( Ptrdummy,
& diagname,0,Nr,2,bi,bj,myThid)
WRITE(diagname, '(A,I4.4)') 'GrGC', iTr
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iGrGC+iTr-1),
& diagname,0,Nr,2,bi,bj,myThid)
WRITE(diagname, '(A,I4.4)') 'Mort', iTr
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iMort+iTr-1),
& diagname,0,Nr,2,bi,bj,myThid)
WRITE(diagname, '(A,I4.4)') 'Resp', iTr
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iResp+iTr-1),
& diagname,0,Nr,2,bi,bj,myThid)
WRITE(diagname, '(A,I4.4)') 'fnut', iTr
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ifnut+iTr-1),
& diagname,0,Nr,2,bi,bj,myThid)
WRITE(diagname, '(A,I4.4)') 'fIph', iTr
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ifIph+iTr-1),
& diagname,0,Nr,2,bi,bj,myThid)
WRITE(diagname, '(A,I4.4)') 'fTph', iTr
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ifTph+iTr-1),
& diagname,0,Nr,2,bi,bj,myThid)
WRITE(diagname, '(A,I4.4)') 'limN', iTr
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ilimN+iTr-1),
& diagname,0,Nr,2,bi,bj,myThid)
WRITE(diagname, '(A,I4.4)') 'limP', iTr
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ilimP+iTr-1),
& diagname,0,Nr,2,bi,bj,myThid)
WRITE(diagname, '(A,I4.4)') 'limF', iTr
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ilimF+iTr-1),
& diagname,0,Nr,2,bi,bj,myThid)
WRITE(diagname, '(A,I4.4)') 'limS', iTr
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ilimS+iTr-1),
& diagname,0,Nr,2,bi,bj,myThid)
ENDDO
#endif
Expand Down
28 changes: 25 additions & 3 deletions pkg/darwin/darwin_plankton.F
Original file line number Diff line number Diff line change
Expand Up @@ -668,9 +668,9 @@ SUBROUTINE DARWIN_PLANKTON(

C carbon-specific growth rate
IF (PCm .GT. 0.0 .AND. PARtot .GT. PARmin) THEN
PC = PCm*(1-EXP(-alpha_I_growth*chl2c/PCm))
limitI = 1 _d 0 - EXP(-alpha_I_growth*chl2c/PCm)
ELSE
PC = 0.0 _d 0
limitI = 0 _d 0
ENDIF

IF (inhibGeider(j) .GT. 0.0) THEN
Expand All @@ -679,10 +679,12 @@ SUBROUTINE DARWIN_PLANKTON(
Ek = PCm/(chl2c*alpha_mean(j))
IF (tmp .GT. Ek) THEN
EkoverE = Ek / tmp
PC = PC*EkoverE*inhibGeider(j)
limitI = limitI*EkoverE*inhibGeider(j)
ENDIF
ENDIF

PC = PCm*limitI

#else /* not DARWIN_ALLOW_GEIDER */

IF (PARtot .GT. PARmin) THEN
Expand All @@ -691,6 +693,7 @@ SUBROUTINE DARWIN_PLANKTON(
& EXP(-PARtot*kinhPAR(j)) * normI(j)
PC = PCmax(j)*limitnut*limitI*photoTempFunc(j)*limitpCO2
ELSE
limitI = 0 _d 0
PC = 0.0 _d 0
ENDIF
synthChl = 0.0
Expand All @@ -708,6 +711,9 @@ SUBROUTINE DARWIN_PLANKTON(
respir_c = respRate(j)*Xe*reminTempFunc
respir = respir + respir_c
uptakeDIC = photoSyn - respir_c
#ifdef DARWIN_DIAG_PERTYPE
diags(iResp+j-1) = respir_c
#endif

C==== Growth ===========================================================
C Growth is growth rate of functional internal carbon
Expand Down Expand Up @@ -806,6 +812,15 @@ 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
Expand Down Expand Up @@ -1566,6 +1581,9 @@ SUBROUTINE DARWIN_PLANKTON(
IF (isPhoto(jp) .EQ. 0) THEN
respir_c = respRate(jp)*Xe*reminTempFunc
gTr(ic+jp-1) = gTr(ic+jp-1) - respir_c
#ifdef DARWIN_DIAG_PERTYPE
diags(iResp+jp-1) = respir_c
#endif
respir = respir + respir_c*(1 _d 0 + R_PICPOC(jp))
#ifndef DARWIN_ALLOW_NQUOTA
respirN = respirN + respir_c*R_NC(jp)
Expand Down Expand Up @@ -1594,6 +1612,10 @@ SUBROUTINE DARWIN_PLANKTON(
#ifdef DARWIN_ALLOW_FEQUOTA
gTr(ife+jp-1)=gTr(ife+jp-1) - mort_c(jp)*Qfe(jp)
#endif
#ifdef DARWIN_DIAG_PERTYPE
diags(iMort+jp-1) = mort_c(jp)
#endif


#ifdef DARWIN_ALLOW_EXUDE
exude_DOC =
Expand Down

0 comments on commit fd20fa8

Please sign in to comment.