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

Last change on this file since 8074 was 8074, checked in by jpalmier, 4 years ago

JPALM — reverse MEDUSA cleaning and update MOCSY

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