Skip to content

Commit fd20fa8

Browse files
committed
Add per-type diagnostics for limitation factors etc
1 parent b0bcc83 commit fd20fa8

File tree

5 files changed

+145
-4
lines changed

5 files changed

+145
-4
lines changed

doc/phys_pkgs/darwin.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -897,6 +897,15 @@ Diagnostics
897897
GR#### & ``SMRP____MR`` & mmol C /m\ :sup:`3`/s & Grazing loss of plankton ####
898898
GrGn#### & ``SMRP____MR`` & mmol C /m\ :sup:`3`/s & Grazing gain of plankton ####
899899
GrGC#### & ``SMRP____MR`` & 1/s & Carbon-specific grazing rate plankton ####
900+
Mort#### & ``SMRP____MR`` & mmol C /m\ :sup:`3`/s & Mortality loss plankton ####
901+
Resp#### & ``SMRP____MR`` & mmol C /m\ :sup:`3`/s & Respiration loss plankton ####
902+
limN#### & ``SMRP____MR`` & [0/1] & N growth limitation plankton ####
903+
limP#### & ``SMRP____MR`` & [0/1] & P growth limitation plankton ####
904+
limF#### & ``SMRP____MR`` & [0/1] & Fe growth limitation plankton ####
905+
limS#### & ``SMRP____MR`` & [0/1] & Si growth limitation plankton ####
906+
fnut#### & ``SMRP____MR`` & [0/1] & Nutrient growth factor plankton ####
907+
fIph#### & ``SMRP____MR`` & [0/1] & Light growth factor plankton ####
908+
fTph#### & ``SMRP____MR`` & [0/1] & Temperature growth factor plankton ####
900909
EXU#### & ``SMRP____MR`` & mmol C /m\ :sup:`3`/s & Exudation plankton ####
901910
BS#### & ``SMRP____MR`` & mmol C /m\ :sup:`3`/s & Biosynthesis rate plankton ####
902911
DN#### & ``SMRP____MR`` & mmol C /m\ :sup:`3`/s & Carbon demand from N limit plankton ####

pkg/darwin/DARWIN_DIAGS.h

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,17 @@ C Contains indices into diagnostics array
3636
integer iGrGC
3737
integer iHPplank
3838
integer iHCplank
39+
#ifdef DARWIN_DIAG_PERTYPE
40+
integer iMort
41+
integer iResp
42+
integer ilimN
43+
integer ilimP
44+
integer ilimF
45+
integer ilimS
46+
integer ifnut
47+
integer ifIph
48+
integer ifTph
49+
#endif
3950
#ifdef DARWIN_ALLOW_CSTORE
4051
integer iEX
4152
integer iGW
@@ -107,7 +118,16 @@ C Contains indices into diagnostics array
107118
PARAMETER(iGrGC=iGrGn+nplank)
108119
PARAMETER(iHPplank=iGrGC+nplank)
109120
PARAMETER(iHCplank=iHPplank+nplank)
110-
PARAMETER(darwin_nDiag=iHCplank+nplank-1)
121+
PARAMETER(iMort=iHCplank+nplank)
122+
PARAMETER(iResp=iMort+nplank)
123+
PARAMETER(ilimN=iResp+nplank)
124+
PARAMETER(ilimP=ilimN+nplank)
125+
PARAMETER(ilimF=ilimP+nplank)
126+
PARAMETER(ilimS=ilimF+nplank)
127+
PARAMETER(ifnut=ilimS+nplank)
128+
PARAMETER(ifIph=ifnut+nplank)
129+
PARAMETER(ifTph=ifIph+nplank)
130+
PARAMETER(darwin_nDiag=ifTph+nplank-1)
111131
#else
112132
PARAMETER(iPCplank=iPPplank)
113133
PARAMETER(iGRplank=iPPplank)

pkg/darwin/darwin_diagnostics_init.F

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,69 @@ SUBROUTINE DARWIN_DIAGNOSTICS_INIT( myThid )
453453
diagCode = 'SMRP MR '
454454
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
455455
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
456+
457+
WRITE(diagName,'(A,I4.4)')'Mort',j
458+
WRITE(diagTitle,'(A,I4)')'Mortality loss plankton ',j
459+
diagUnits = 'mmol C/m^3/s '
460+
diagCode = 'SMRP MR '
461+
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
462+
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
463+
464+
WRITE(diagName,'(A,I4.4)')'Resp',j
465+
WRITE(diagTitle,'(A,I4)')'Respiration loss plankton ',j
466+
diagUnits = 'mmol C/m^3/s '
467+
diagCode = 'SMRP MR '
468+
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
469+
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
470+
471+
WRITE(diagName,'(A,I4.4)')'limN',j
472+
WRITE(diagTitle,'(A,I4)')'N growth limitation plankton ',j
473+
diagUnits = '[0/1] '
474+
diagCode = 'SMRP MR '
475+
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
476+
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
477+
478+
WRITE(diagName,'(A,I4.4)')'limP',j
479+
WRITE(diagTitle,'(A,I4)')'P growth limitation plankton ',j
480+
diagUnits = '[0/1] '
481+
diagCode = 'SMRP MR '
482+
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
483+
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
484+
485+
WRITE(diagName,'(A,I4.4)')'limF',j
486+
WRITE(diagTitle,'(A,I4)')'Fe growth limitation plankton ',j
487+
diagUnits = '[0/1] '
488+
diagCode = 'SMRP MR '
489+
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
490+
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
491+
492+
WRITE(diagName,'(A,I4.4)')'limS',j
493+
WRITE(diagTitle,'(A,I4)')'Si growth limitation plankton ',j
494+
diagUnits = '[0/1] '
495+
diagCode = 'SMRP MR '
496+
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
497+
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
498+
499+
WRITE(diagName,'(A,I4.4)')'fnut',j
500+
WRITE(diagTitle,'(A,I4)')'Nutrient growth factor plankton ',j
501+
diagUnits = '[0/1] '
502+
diagCode = 'SMRP MR '
503+
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
504+
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
505+
506+
WRITE(diagName,'(A,I4.4)')'fIph',j
507+
WRITE(diagTitle,'(A,I4)')'Light growth factor plankton ',j
508+
diagUnits = '[0/1] '
509+
diagCode = 'SMRP MR '
510+
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
511+
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
512+
513+
WRITE(diagName,'(A,I4.4)')'fTph',j
514+
WRITE(diagTitle,'(A,I4)')'Temperature growth factor plankton ',j
515+
diagUnits = '[0/1] '
516+
diagCode = 'SMRP MR '
517+
CALL DIAGNOSTICS_ADDTOLIST( diagNum,
518+
I diagName, diagCode, diagUnits, diagTitle, 0, myThid )
456519
ENDDO
457520
#endif
458521

pkg/darwin/darwin_forcing.F

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,6 +1007,33 @@ SUBROUTINE DARWIN_FORCING( Ptrdummy,
10071007
& diagname,0,Nr,2,bi,bj,myThid)
10081008
WRITE(diagname, '(A,I4.4)') 'GrGC', iTr
10091009
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iGrGC+iTr-1),
1010+
& diagname,0,Nr,2,bi,bj,myThid)
1011+
WRITE(diagname, '(A,I4.4)') 'Mort', iTr
1012+
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iMort+iTr-1),
1013+
& diagname,0,Nr,2,bi,bj,myThid)
1014+
WRITE(diagname, '(A,I4.4)') 'Resp', iTr
1015+
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,iResp+iTr-1),
1016+
& diagname,0,Nr,2,bi,bj,myThid)
1017+
WRITE(diagname, '(A,I4.4)') 'fnut', iTr
1018+
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ifnut+iTr-1),
1019+
& diagname,0,Nr,2,bi,bj,myThid)
1020+
WRITE(diagname, '(A,I4.4)') 'fIph', iTr
1021+
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ifIph+iTr-1),
1022+
& diagname,0,Nr,2,bi,bj,myThid)
1023+
WRITE(diagname, '(A,I4.4)') 'fTph', iTr
1024+
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ifTph+iTr-1),
1025+
& diagname,0,Nr,2,bi,bj,myThid)
1026+
WRITE(diagname, '(A,I4.4)') 'limN', iTr
1027+
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ilimN+iTr-1),
1028+
& diagname,0,Nr,2,bi,bj,myThid)
1029+
WRITE(diagname, '(A,I4.4)') 'limP', iTr
1030+
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ilimP+iTr-1),
1031+
& diagname,0,Nr,2,bi,bj,myThid)
1032+
WRITE(diagname, '(A,I4.4)') 'limF', iTr
1033+
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ilimF+iTr-1),
1034+
& diagname,0,Nr,2,bi,bj,myThid)
1035+
WRITE(diagname, '(A,I4.4)') 'limS', iTr
1036+
CALL DIAGNOSTICS_FILL(diags(1-OLx,1-OLy,1,ilimS+iTr-1),
10101037
& diagname,0,Nr,2,bi,bj,myThid)
10111038
ENDDO
10121039
#endif

pkg/darwin/darwin_plankton.F

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -668,9 +668,9 @@ SUBROUTINE DARWIN_PLANKTON(
668668

669669
C carbon-specific growth rate
670670
IF (PCm .GT. 0.0 .AND. PARtot .GT. PARmin) THEN
671-
PC = PCm*(1-EXP(-alpha_I_growth*chl2c/PCm))
671+
limitI = 1 _d 0 - EXP(-alpha_I_growth*chl2c/PCm)
672672
ELSE
673-
PC = 0.0 _d 0
673+
limitI = 0 _d 0
674674
ENDIF
675675

676676
IF (inhibGeider(j) .GT. 0.0) THEN
@@ -679,10 +679,12 @@ SUBROUTINE DARWIN_PLANKTON(
679679
Ek = PCm/(chl2c*alpha_mean(j))
680680
IF (tmp .GT. Ek) THEN
681681
EkoverE = Ek / tmp
682-
PC = PC*EkoverE*inhibGeider(j)
682+
limitI = limitI*EkoverE*inhibGeider(j)
683683
ENDIF
684684
ENDIF
685685

686+
PC = PCm*limitI
687+
686688
#else /* not DARWIN_ALLOW_GEIDER */
687689

688690
IF (PARtot .GT. PARmin) THEN
@@ -691,6 +693,7 @@ SUBROUTINE DARWIN_PLANKTON(
691693
& EXP(-PARtot*kinhPAR(j)) * normI(j)
692694
PC = PCmax(j)*limitnut*limitI*photoTempFunc(j)*limitpCO2
693695
ELSE
696+
limitI = 0 _d 0
694697
PC = 0.0 _d 0
695698
ENDIF
696699
synthChl = 0.0
@@ -708,6 +711,9 @@ SUBROUTINE DARWIN_PLANKTON(
708711
respir_c = respRate(j)*Xe*reminTempFunc
709712
respir = respir + respir_c
710713
uptakeDIC = photoSyn - respir_c
714+
#ifdef DARWIN_DIAG_PERTYPE
715+
diags(iResp+j-1) = respir_c
716+
#endif
711717

712718
C==== Growth ===========================================================
713719
C Growth is growth rate of functional internal carbon
@@ -806,6 +812,15 @@ SUBROUTINE DARWIN_PLANKTON(
806812
#ifdef DARWIN_DIAG_PERTYPE
807813
diags(iPPplank+j-1) = diags(iPPplank+j-1) + uptakeDIC
808814
diags(iPCplank+j-1) = diags(iPCplank+j-1) + PC
815+
C which nutrient is limiting growth?
816+
IF (limitnut==limitn) diags(ilimN+j-1) = 1 _d 0
817+
IF (limitnut==limitp) diags(ilimP+j-1) = 1 _d 0
818+
IF (limitnut==limitfe) diags(ilimF+j-1) = 1 _d 0
819+
IF (limitnut==limitsi) diags(ilimS+j-1) = 1 _d 0
820+
C factors that go into growth equation
821+
diags(ifIph+j-1) = limitI
822+
diags(ifTph+j-1) = photoTempFunc(j)
823+
diags(ifnut+j-1) = limitnut
809824
#endif
810825
IF (diazo(j) .GT. 0.0 _d 0) THEN
811826
diags(iNfix)=diags(iNfix)+uptakeN-uptakeNH4-uptakeNO2-uptakeNO3
@@ -1566,6 +1581,9 @@ SUBROUTINE DARWIN_PLANKTON(
15661581
IF (isPhoto(jp) .EQ. 0) THEN
15671582
respir_c = respRate(jp)*Xe*reminTempFunc
15681583
gTr(ic+jp-1) = gTr(ic+jp-1) - respir_c
1584+
#ifdef DARWIN_DIAG_PERTYPE
1585+
diags(iResp+jp-1) = respir_c
1586+
#endif
15691587
respir = respir + respir_c*(1 _d 0 + R_PICPOC(jp))
15701588
#ifndef DARWIN_ALLOW_NQUOTA
15711589
respirN = respirN + respir_c*R_NC(jp)
@@ -1594,6 +1612,10 @@ SUBROUTINE DARWIN_PLANKTON(
15941612
#ifdef DARWIN_ALLOW_FEQUOTA
15951613
gTr(ife+jp-1)=gTr(ife+jp-1) - mort_c(jp)*Qfe(jp)
15961614
#endif
1615+
#ifdef DARWIN_DIAG_PERTYPE
1616+
diags(iMort+jp-1) = mort_c(jp)
1617+
#endif
1618+
15971619

15981620
#ifdef DARWIN_ALLOW_EXUDE
15991621
exude_DOC =

0 commit comments

Comments
 (0)