source: branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcdms_medusa.F90 @ 8132

Last change on this file since 8132 was 8132, checked in by jpalmier, 3 years ago

JPALM — debug DMS update ; add surf Chl coupling for the atm component

File size: 7.6 KB
Line 
1MODULE trcdms_medusa
2   !!======================================================================
3   !!                         ***  MODULE trcdms_medusa  ***
4   !! TOP :   MEDUSA
5   !!======================================================================
6   !! History :
7   !!  -   !  2014-08  (J. Palmieri - A. Yool)    added for UKESM1 project
8   !!  -   !  2017-05  (A. Yool)                  add extra Anderson scheme
9   !!----------------------------------------------------------------------
10#if defined key_medusa && defined key_roam
11   !!----------------------------------------------------------------------
12   !!                                        MEDUSA DMS surface concentration
13   !!----------------------------------------------------------------------
14   !!   trc_dms_medusa        : 
15   !!----------------------------------------------------------------------
16      USE oce_trc
17      USE trc
18      USE sms_medusa
19      USE lbclnk
20      USE prtctl_trc      ! Print control for debugging
21      USE in_out_manager  ! I/O manager
22
23      IMPLICIT NONE
24      PRIVATE
25
26      PUBLIC   trc_dms_medusa    ! called in trc_bio_medusa
27
28   !!* Substitution
29#  include "domzgr_substitute.h90"
30   !!----------------------------------------------------------------------
31   !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007)
32   !! $Id$
33   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
34   !!----------------------------------------------------------------------
35
36
37CONTAINS
38
39!=======================================================================
40!
41   SUBROUTINE trc_dms_medusa( chn, chd, mld, xqsr, xdin, xlim,  &  !! inputs
42     &  dms_andr, dms_simo, dms_aran, dms_hall, dms_andm)           !! outputs
43!     
44!=======================================================================
45      !!
46      !! Title  : Calculates DMS ocean surface concentration
47      !! Author : Julien Palmieri and Andrew Yool
48      !! Date   : 08/08/14
49      !!
50      !! DMS module is called in trc_bio's huge jk,jj,ji loop
51      !! --> DMS concentration is calculated in a specific cell
52      !! (no need of ji,jj,jk)
53      !!
54      !! AXY (13/03/15): amend to include all four schemes tested
55      !!                 during winter/spring 2015; these are:
56      !!
57      !!                 1. Anderson et al. (2001); this uses fields
58      !!                    of surface chl, irradiance and nutrients
59      !!                    to empirically estimate DMS via a broken
60      !!                    stick approach
61      !!
62      !!                 2. Simo & Dachs (2002); this uses fields of
63      !!                    surface chl and mixed layer depth
64      !!
65      !!                 3. Aranami & Tsunogai (2004); this is an
66      !!                    embellishment of Simo & Dachs
67      !!
68      !!                 4. Halloran et al. (2010); this is an
69      !!                    alternative embellishment of Sim & Dachs
70      !!                    and is included because it is formally
71      !!                    published (and different from the above)
72      !!
73      !! AXY (25/05/17): add extra "corrected" Anderson scheme
74      !!
75      !!                 5. As Anderson et al. (2001) but modified to
76      !!                    more accurately reflect nutrient limitation
77      !!                    status of phytoplankton community
78      !!
79      !! AXY (08/07/15): amend to remove Julien's original calculation
80      !!                 as this is now superfluous; the four schemes
81      !!                 are calculated and one is chosen to be passed
82      !!                 to the atmosphere in trc_bio_medusa
83      !!
84!=======================================================================
85
86      IMPLICIT NONE
87!
88      REAL(wp), INTENT( in )    :: chn                  !! non-diatom chlorophyll    (mg/m3)
89      REAL(wp), INTENT( in )    :: chd                  !! diatom chlorophyll        (mg/m3)
90      REAL(wp), INTENT( in )    :: mld                  !! mix layer depth           (m)
91      REAL(wp), INTENT( in )    :: xqsr                 !! surface irradiance        (W/m2)
92      REAL(wp), INTENT( in )    :: xdin                 !! surface DIN               (mmol N/m3)
93      REAL(wp), INTENT( in )    :: xlim                 !! surface DIN limitation    (mmol N/m3)
94      REAL(wp), INTENT( inout ) :: dms_andr             !! DMS surface concentration (nmol/L)
95      REAL(wp), INTENT( inout ) :: dms_simo             !! DMS surface concentration (nmol/L)
96      REAL(wp), INTENT( inout ) :: dms_aran             !! DMS surface concentration (nmol/L)
97      REAL(wp), INTENT( inout ) :: dms_hall             !! DMS surface concentration (nmol/L)
98      REAL(wp), INTENT( inout ) :: dms_andm             !! DMS surface concentration (nmol/L)
99!
100      REAL(wp) :: CHL, cmr, sw_dms
101      REAL(wp) :: Jterm, Qterm
102      !! temporary variables
103      REAL(wp) ::    fq1,fq2,fq3
104!
105!=======================================================================
106!
107! AXY (13/03/15): per remarks above, the following calculations estimate
108!                 DMS using all of the schemes examined for UKESM1
109!
110      CHL = 0.0
111      CHL = chn+chd                                 !! mg/m3
112      cmr = CHL / mld
113!
114! AXY (13/03/15): Anderson et al. (2001)
115        Jterm = xqsr + 1.0e-6
116        !! this next line makes a hard-coded assumption about the
117        !! half-saturation constant of MEDUSA (which should be
118        !! done properly; perhaps even scaled with the proportion
119        !! of diatoms and non-diatoms)
120        Qterm = xdin / (xdin + 0.5)
121        fq1 = log10(CHL * Jterm * Qterm)
122        if (fq1 > 1.72) then
123           dms_andr = (8.24 * (fq1 - 1.72)) + 2.29
124        else
125           dms_andr = 2.29
126        endif
127!
128! AXY (13/03/15): Simo & Dachs (2002)
129        fq1 = (-1.0 * log(mld)) + 5.7
130        fq2 = (55.8 * cmr) + 0.6
131        if (cmr < 0.02) then
132           dms_simo = fq1
133        else
134           dms_simo = fq2
135        endif
136!           
137! AXY (13/03/15): Aranami & Tsunogai (2004)
138        fq1 = 60.0 / mld
139        fq2 = (55.8 * cmr) + 0.6
140        if (cmr < 0.02) then
141           dms_aran = fq1
142        else
143           dms_aran = fq2
144        endif
145!       
146! AXY (13/03/15): Halloran et al. (2010)
147        fq1 = (-1.0 * log(mld)) + 5.7
148        fq2 = (55.8 * cmr) + 0.6
149        fq3 = (90.0 / mld)
150        if (cmr < 0.02) then
151           dms_hall = fq1
152        else
153           dms_hall = fq2
154        endif
155        if (mld > 182.5) then
156           dms_hall = fq3
157        endif
158!
159! AXY (25/05/17): modified Anderson et al. (2001)
160        Jterm = xqsr + 1.0e-6
161        !! this version fixes the hard-coded assumption above
162        Qterm = xlim
163        fq1 = log10(CHL * Jterm * Qterm)
164        if (fq1 > 1.72) then
165           dms_andm = (8.24 * (fq1 - 1.72)) + 2.29
166        else
167           dms_andm = 2.29
168        endif
169
170  END SUBROUTINE trc_dms_medusa
171
172
173!=======================================================================
174!=======================================================================
175!=======================================================================
176
177#else
178   !!======================================================================
179   !!  Dummy module :                                   No MEDUSA bio-model
180   !!======================================================================
181
182CONTAINS
183
184!=======================================================================
185!
186   SUBROUTINE trc_dms_medusa( kt )                                        !! EMPTY Routine
187!     
188!
189      INTEGER, INTENT( in ) ::   kt
190!
191
192      WRITE(*,*) 'trc_dms_medusa: You should not have seen this print! error?'
193
194   END SUBROUTINE trc_dms_medusa
195#endif
196
197   !!======================================================================
198END MODULE  trcdms_medusa
199
200
201
Note: See TracBrowser for help on using the repository browser.