New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
bio_medusa_init.F90 in branches/NERC/dev_r5518_GO6_CO2_cmip/NEMOGCM/NEMO/TOP_SRC/MEDUSA – NEMO

source: branches/NERC/dev_r5518_GO6_CO2_cmip/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_init.F90 @ 13709

Last change on this file since 13709 was 9257, checked in by frrh, 6 years ago

Commit JP's Met Office GMED ticket 371 for trapping or notifying of
peculiar values of MEDUSA fields arising from transient temperature
spikes in the ocean.

Committed using:
svn merge: 9177:9249 svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/branches/NERC/dev_r5518_GO6_Carb_Fail_from_GO6_9163

File size: 32.4 KB
Line 
1MODULE bio_medusa_init_mod
2   !!======================================================================
3   !!                         ***  MODULE bio_medusa_init  ***
4   !! Initialisation for TRC_BIO_MEDUSA
5   !!======================================================================
6   !! History :
7   !!   -   ! 2017-04 (M. Stringer)        Code taken from trcbio_medusa.F90
8   !!   -   ! 2017-08 (A. Yool)            Add slow-sinking detrius variables
9   !!----------------------------------------------------------------------
10#if defined key_medusa
11   !!----------------------------------------------------------------------
12   !!                                                   MEDUSA bio-model
13   !!----------------------------------------------------------------------
14
15   IMPLICIT NONE
16   PRIVATE
17     
18   PUBLIC   bio_medusa_init    ! Called in trcbio_medusa.F90
19
20   !!----------------------------------------------------------------------
21   !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007)
22   !! $Id$
23   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
24   !!----------------------------------------------------------------------
25
26CONTAINS
27
28   SUBROUTINE bio_medusa_init( kt )
29      !!---------------------------------------------------------------------
30      !!                     ***  ROUTINE bio_medusa_init  ***
31      !! This called from TRC_BIO_MEDUSA and
32      !!  - zeroes arrays used in TRC_BIO_MEDUSA
33      !!  - sets up the arrays needed for the diagnostics
34      !!----------------------------------------------------------------------
35      USE bio_medusa_mod
36      USE par_oce,           ONLY: jpi, jpj, jpk
37      USE sms_medusa,        ONLY: jdms
38      USE trc,               ONLY: ln_diatrc, med_diag, nittrc000 
39      USE in_out_manager,    ONLY: lwp
40
41# if defined key_iomput
42      USE iom,               ONLY: lk_iomput, numout
43      USE trcnam_medusa,     ONLY: trc_nam_iom_medusa
44# endif
45
46      !! time (integer timestep)
47      INTEGER, INTENT( in ) ::    kt
48
49      IF( ln_diatrc ) THEN
50         IF (lwp) write (numout,*) 'Diagnostics are now ALL through XIOS (key_xios)'
51         IF (lwp) write (numout,*) 'No more key_diatrc anymore.'
52      ENDIF
53
54      !!----------------------------------------------------------------------
55      !! Zero fast-sinking detritus 2D fields
56      !!----------------------------------------------------------------------
57      !!
58      ffastn(:,:)  = 0.0        !! organic nitrogen
59      ffastsi(:,:) = 0.0        !! biogenic silicon
60      ffastfe(:,:) = 0.0        !! organic iron
61      ffastc(:,:)  = 0.0        !! organic carbon
62      ffastca(:,:) = 0.0        !! biogenic calcium carbonate
63      !!
64      fsedn(:,:)   = 0.0        !! Seafloor flux of N
65      fsedsi(:,:)  = 0.0        !! Seafloor flux of Si
66      fsedfe(:,:)  = 0.0        !! Seafloor flux of Fe
67      fsedc(:,:)   = 0.0        !! Seafloor flux of C
68      fsedca(:,:)  = 0.0        !! Seafloor flux of CaCO3
69      !!
70      fregenfast(:,:)   = 0.0   !! integrated  N regeneration (fast detritus)
71      fregenfastsi(:,:) = 0.0   !! integrated Si regeneration (fast detritus)
72# if defined key_roam
73      fregenfastc(:,:)  = 0.0   !! integrated  C regeneration (fast detritus)
74# endif
75      !!
76      fccd(:,:)    = 0.0        !! last depth level before CCD
77
78      !!----------------------------------------------------------------------
79      !! blank nutrient/flux inventories
80      !!----------------------------------------------------------------------
81      !!
82      fflx_n(:,:)  = 0.0        !! nitrogen flux total
83      fflx_si(:,:) = 0.0        !! silicon  flux total
84      fflx_fe(:,:) = 0.0        !! iron     flux total
85      fifd_n(:,:)  = 0.0        !! nitrogen fast detritus production
86      fifd_si(:,:) = 0.0        !! silicon  fast detritus production
87      fifd_fe(:,:) = 0.0        !! iron     fast detritus production
88      fofd_n(:,:)  = 0.0        !! nitrogen fast detritus remineralisation
89      fofd_si(:,:) = 0.0        !! silicon  fast detritus remineralisation
90      fofd_fe(:,:) = 0.0        !! iron     fast detritus remineralisation
91# if defined key_roam
92      fflx_c(:,:)  = 0.0        !! carbon     flux total
93      fflx_a(:,:)  = 0.0        !! alkalinity flux total
94      fflx_o2(:,:) = 0.0        !! oxygen     flux total
95      ftot_c(:,:)  = 0.0        !! carbon     inventory
96      ftot_a(:,:)  = 0.0        !! alkalinity inventory
97      ftot_o2(:,:) = 0.0        !! oxygen     inventory
98      fifd_c(:,:)  = 0.0        !! carbon     fast detritus production
99! I don't think fifd_a or fifd_o2 are used - marc 11/5/17
100!      fifd_a(:,:)  = 0.0        !! alkalinity fast detritus production
101!      fifd_o2(:,:) = 0.0        !! oxygen     fast detritus production
102      fofd_c(:,:)  = 0.0        !! carbon     fast detritus remineralisation
103! I don't think fofd_a or fofd_o2 are used - marc 11/5/17
104!      fofd_a(:,:)  = 0.0        !! alkalinity fast detritus remineralisation
105!      fofd_o2(:,:) = 0.0        !! oxygen     fast detritus remineralisation
106      !!
107      fnit_prod(:,:) = 0.0      !! (organic)   nitrogen production
108      fnit_cons(:,:) = 0.0      !! (organic)   nitrogen consumption
109      fsil_prod(:,:) = 0.0      !! (inorganic) silicon production
110      fsil_cons(:,:) = 0.0      !! (inorganic) silicon consumption
111      fcar_prod(:,:) = 0.0      !! (organic)   carbon production
112      fcar_cons(:,:) = 0.0      !! (organic)   carbon consumption
113      !!
114      foxy_prod(:,:) = 0.0      !! oxygen production
115      foxy_cons(:,:) = 0.0      !! oxygen consumption
116      foxy_anox(:,:) = 0.0      !! unrealised oxygen consumption
117      !!
118# endif
119      ftot_n(:,:)   = 0.0       !! N inventory
120      ftot_si(:,:)  = 0.0       !! Si inventory
121      ftot_fe(:,:)  = 0.0       !! Fe inventory
122      ftot_pn(:,:)  = 0.0       !! integrated non-diatom phytoplankton
123      ftot_pd(:,:)  = 0.0       !! integrated diatom     phytoplankton
124      ftot_zmi(:,:) = 0.0       !! integrated microzooplankton
125      ftot_zme(:,:) = 0.0       !! integrated mesozooplankton
126      ftot_det(:,:) = 0.0       !! integrated slow detritus, nitrogen
127      ftot_dtc(:,:) = 0.0       !! integrated slow detritus, carbon
128      !!
129      fzmi_i(:,:)  = 0.0        !! material grazed by microzooplankton
130      fzmi_o(:,:)  = 0.0        !! ... sum of fate of this material
131      fzme_i(:,:)  = 0.0        !! material grazed by  mesozooplankton
132      fzme_o(:,:)  = 0.0        !! ... sum of fate of this material
133      !!
134      f_sbenin_n(:,:)  = 0.0    !! slow detritus N  -> benthic pool
135      f_sbenin_fe(:,:) = 0.0    !! slow detritus Fe -> benthic pool
136      f_sbenin_c(:,:)  = 0.0    !! slow detritus C  -> benthic pool
137      f_fbenin_n(:,:)  = 0.0    !! fast detritus N  -> benthic pool
138      f_fbenin_fe(:,:) = 0.0    !! fast detritus Fe -> benthic pool
139      f_fbenin_si(:,:) = 0.0    !! fast detritus Si -> benthic pool
140      f_fbenin_c(:,:)  = 0.0    !! fast detritus C  -> benthic pool
141      f_fbenin_ca(:,:) = 0.0    !! fast detritus Ca -> benthic pool
142      !!
143      f_benout_n(:,:)  = 0.0    !! benthic N  pool  -> dissolved
144      f_benout_fe(:,:) = 0.0    !! benthic Fe pool  -> dissolved
145      f_benout_si(:,:) = 0.0    !! benthic Si pool  -> dissolved
146      f_benout_c(:,:)  = 0.0    !! benthic C  pool  -> dissolved
147      f_benout_ca(:,:) = 0.0    !! benthic Ca pool  -> dissolved
148      !!
149      f_benout_lyso_ca(:,:) = 0.0 !! benthic Ca pool  -> dissolved (when it shouldn't!)
150      !!
151      f_runoff(:,:)  = 0.0      !! riverine runoff
152      f_riv_n(:,:)   = 0.0      !! riverine N   input
153      f_riv_si(:,:)  = 0.0      !! riverine Si  input
154      f_riv_c(:,:)   = 0.0      !! riverine C   input
155      f_riv_alk(:,:) = 0.0      !! riverine alk input
156      !!
157      !! Jpalm -- 06-03-2017 -- Forgotten var to init
158      f_omarg(:,:) = 0.0        !!
159      f_omcal(:,:) = 0.0 
160      xFree(:,:) = 0.0          !! state variables for iron-ligand system
161      fcomm_resp(:,:) = 0.0 
162      fprn_ml(:,:) = 0.0        !! mixed layer PP diagnostics
163      fprd_ml(:,:) = 0.0        !! mixed layer PP diagnostics
164      !! AXY (16/08/17)
165      fchl_ml(:,:) = 0.0   !! mixed layer chlorophyll diagnostics
166      !!
167      fslownflux(:,:) = 0.0 
168      fslowcflux(:,:) = 0.0 
169      !!
170      !! JPALM -- 21-09-2017 -- needed to debug air-sea carb
171      f_xco2a(:,:)  = 0.0
172      f_pco2w(:,:)  = 0.0
173      f_ph(:,:)     = 0.0
174      f_kw660(:,:)  = 0.0
175      ztmp(:,:)  = 0.0
176      zsal(:,:)  = 0.0
177      zalk(:,:)  = 0.0
178      zdic(:,:)  = 0.0
179      zsil(:,:)  = 0.0
180      zpho(:,:)  = 0.0
181      f_co2flux(:,:)  = 0.0 
182      f_pco2atm(:,:)  = 0.0
183      f_h2co3(:,:)    = 0.0
184      f_hco3(:,:)     = 0.0
185      f_co3(:,:)      = 0.0
186      f_omarg(:,:)    = 0.0
187      f_omcal(:,:)    = 0.0
188      !!
189      !! AXY (08/08/17): zero slow detritus fluxes
190      fslowsink(:,:)  = 0.0
191# if defined key_roam
192      fslowsinkc(:,:) = 0.0
193# endif     
194      !!
195      !! allocate and initiate 2D diag
196      !! -----------------------------
197      !! Juju :: add kt condition !!
198      IF ( lk_iomput ) THEN 
199
200         !! initialise iom_use test
201         IF ( kt == nittrc000 )   CALL trc_nam_iom_medusa 
202
203         ALLOCATE( zw2d(1:jpi, 1:jpj) )
204         zw2d(:,:)      = 0.0   !!
205         IF ( med_diag%PRN%dgsave ) THEN
206            ALLOCATE( fprn2d(1:jpi, 1:jpj) )
207            fprn2d(:,:)      = 0.0 !!
208         ENDIF
209         IF ( med_diag%MPN%dgsave ) THEN
210            ALLOCATE( fdpn2d(1:jpi, 1:jpj) )
211            fdpn2d(:,:)      = 0.0 !!
212         ENDIF
213         IF ( med_diag%PRD%dgsave ) THEN
214            ALLOCATE( fprd2d(1:jpi, 1:jpj) )
215            fprd2d(:,:)      = 0.0 !!
216         ENDIF
217         IF( med_diag%MPD%dgsave ) THEN
218            ALLOCATE( fdpd2d(1:jpi, 1:jpj) )
219            fdpd2d(:,:)      = 0.0 !!
220         ENDIF
221         IF( med_diag%OPAL%dgsave ) THEN
222            ALLOCATE( fprds2d(1:jpi, 1:jpj) )
223            fprds2d(:,:)      = 0.0 !!
224         ENDIF
225         IF( med_diag%OPALDISS%dgsave ) THEN
226            ALLOCATE( fsdiss2d(1:jpi, 1:jpj) )
227            fsdiss2d(:,:)      = 0.0 !!
228         ENDIF
229         IF( med_diag%GMIPn%dgsave ) THEN
230            ALLOCATE( fgmipn2d(1:jpi, 1:jpj) )
231            fgmipn2d(:,:)      = 0.0 !!
232         ENDIF
233         IF( med_diag%GMID%dgsave ) THEN
234            ALLOCATE( fgmid2d(1:jpi, 1:jpj) )
235            fgmid2d(:,:)      = 0.0 !!
236         ENDIF
237         IF( med_diag%MZMI%dgsave ) THEN
238            ALLOCATE( fdzmi2d(1:jpi, 1:jpj) )
239            fdzmi2d(:,:)      = 0.0 !!
240         ENDIF
241         IF( med_diag%GMEPN%dgsave ) THEN
242            ALLOCATE( fgmepn2d(1:jpi, 1:jpj) )
243            fgmepn2d(:,:)      = 0.0 !!
244         ENDIF
245         IF( med_diag%GMEPD%dgsave ) THEN
246            ALLOCATE( fgmepd2d(1:jpi, 1:jpj) )
247            fgmepd2d(:,:)      = 0.0 !!
248         ENDIF
249         IF( med_diag%GMEZMI%dgsave ) THEN
250            ALLOCATE( fgmezmi2d(1:jpi, 1:jpj) )
251            fgmezmi2d(:,:)      = 0.0 !!
252         ENDIF
253         IF( med_diag%GMED%dgsave ) THEN
254            ALLOCATE( fgmed2d(1:jpi, 1:jpj) )
255            fgmed2d(:,:)      = 0.0 !!
256         ENDIF
257         IF( med_diag%MZME%dgsave ) THEN
258            ALLOCATE( fdzme2d(1:jpi, 1:jpj) )
259            fdzme2d(:,:)      = 0.0 !!
260         ENDIF
261         IF( med_diag%DETN%dgsave ) THEN
262            ALLOCATE( fslown2d(1:jpi, 1:jpj) )
263            fslown2d(:,:)      = 0.0 !!
264         ENDIF
265         IF( med_diag%MDET%dgsave ) THEN
266            ALLOCATE( fdd2d(1:jpi, 1:jpj) )
267            fdd2d(:,:)      = 0.0 !!
268         ENDIF     
269         IF( med_diag%AEOLIAN%dgsave ) THEN
270            ALLOCATE( ffetop2d(1:jpi, 1:jpj) )
271            ffetop2d(:,:)      = 0.0 !!
272         ENDIF
273         IF( med_diag%BENTHIC%dgsave ) THEN
274            ALLOCATE( ffebot2d(1:jpi, 1:jpj) )
275            ffebot2d(:,:)      = 0.0 !!
276         ENDIF
277         IF( med_diag%SCAVENGE%dgsave ) THEN
278            ALLOCATE( ffescav2d(1:jpi, 1:jpj) )
279            ffescav2d(:,:)      = 0.0 !!
280         ENDIF
281         IF( med_diag%PN_JLIM%dgsave ) THEN
282            ALLOCATE( fjln2d(1:jpi, 1:jpj) )
283            fjln2d(:,:)      = 0.0 !!
284         ENDIF
285         IF( med_diag%PN_NLIM%dgsave ) THEN
286            ALLOCATE( fnln2d(1:jpi, 1:jpj) )
287            fnln2d(:,:)      = 0.0 !!
288         ENDIF
289         IF( med_diag%PN_FELIM%dgsave ) THEN
290            ALLOCATE( ffln2d(1:jpi, 1:jpj) )
291            ffln2d(:,:)      = 0.0 !!
292         ENDIF
293         IF( med_diag%PD_JLIM%dgsave ) THEN
294            ALLOCATE( fjld2d(1:jpi, 1:jpj) )
295            fjld2d(:,:)      = 0.0 !!
296         ENDIF
297         IF( med_diag%PD_NLIM%dgsave ) THEN
298            ALLOCATE( fnld2d(1:jpi, 1:jpj) )
299            fnld2d(:,:)      = 0.0 !!
300         ENDIF
301         IF( med_diag%PD_FELIM%dgsave ) THEN
302            ALLOCATE( ffld2d(1:jpi, 1:jpj) )
303            ffld2d(:,:)      = 0.0 !!
304         ENDIF
305         IF( med_diag%PD_SILIM%dgsave ) THEN
306            ALLOCATE( fsld2d2(1:jpi, 1:jpj) )
307            fsld2d2(:,:)      = 0.0 !!
308         ENDIF
309         IF( med_diag%PDSILIM2%dgsave ) THEN
310            ALLOCATE( fsld2d(1:jpi, 1:jpj) )
311            fsld2d(:,:)      = 0.0 !!
312         ENDIF
313!!
314!! skip SDT_XXXX diagnostics here
315!!
316         IF( med_diag%TOTREG_N%dgsave ) THEN
317            ALLOCATE( fregen2d(1:jpi, 1:jpj) )
318            fregen2d(:,:)      = 0.0 !!
319         ENDIF
320         IF( med_diag%TOTRG_SI%dgsave ) THEN
321            ALLOCATE( fregensi2d(1:jpi, 1:jpj) )
322            fregensi2d(:,:)      = 0.0 !!
323         ENDIF
324!!
325!! skip REG_XXXX diagnostics here
326!!
327         IF( med_diag%FASTN%dgsave ) THEN
328            ALLOCATE( ftempn2d(1:jpi, 1:jpj) )
329            ftempn2d(:,:)      = 0.0 !!
330         ENDIF
331         IF( med_diag%FASTSI%dgsave ) THEN
332            ALLOCATE( ftempsi2d(1:jpi, 1:jpj) )
333            ftempsi2d(:,:)      = 0.0 !!
334         ENDIF
335         IF( med_diag%FASTFE%dgsave ) THEN
336            ALLOCATE( ftempfe2d(1:jpi, 1:jpj) )
337            ftempfe2d(:,:)      = 0.0 !!
338         ENDIF
339         IF( med_diag%FASTC%dgsave ) THEN
340            ALLOCATE( ftempc2d(1:jpi, 1:jpj) )
341            ftempc2d(:,:)      = 0.0 !!
342         ENDIF
343         IF( med_diag%FASTCA%dgsave ) THEN
344            ALLOCATE( ftempca2d(1:jpi, 1:jpj) )
345            ftempca2d(:,:)      = 0.0 !!
346         ENDIF     
347!!
348!! skip FDT_XXXX, RG_XXXXF, FDS_XXXX, RGS_XXXXF diagnostics here
349!!
350         IF( med_diag%REMINN%dgsave ) THEN
351            ALLOCATE( freminn2d(1:jpi, 1:jpj) )
352            freminn2d(:,:)      = 0.0 !!
353         ENDIF
354         IF( med_diag%REMINSI%dgsave ) THEN
355            ALLOCATE( freminsi2d(1:jpi, 1:jpj) )
356            freminsi2d(:,:)      = 0.0 !!
357         ENDIF
358         IF( med_diag%REMINFE%dgsave ) THEN
359            ALLOCATE( freminfe2d(1:jpi, 1:jpj) )
360            freminfe2d(:,:)      = 0.0 !!
361         ENDIF
362         IF( med_diag%REMINC%dgsave ) THEN
363            ALLOCATE( freminc2d(1:jpi, 1:jpj) )
364            freminc2d(:,:)      = 0.0 !!
365         ENDIF
366         IF( med_diag%REMINCA%dgsave ) THEN
367            ALLOCATE( freminca2d(1:jpi, 1:jpj) )
368            freminca2d(:,:)      = 0.0 !!
369         ENDIF
370
371# if defined key_roam
372!!
373!! skip SEAFLRXX, MED_XXXX, INTFLX_XX, INT_XX, ML_XXX, OCAL_XXX, FE_XXXX, MED_XZE, WIND diagnostics here
374!!
375         IF( med_diag%RR_0100%dgsave ) THEN
376            ALLOCATE( ffastca2d(1:jpi, 1:jpj) )
377            ffastca2d(:,:)      = 0.0 !!
378         ENDIF
379
380         IF( med_diag%ATM_PCO2%dgsave ) THEN
381            ALLOCATE( f_pco2a2d(1:jpi, 1:jpj) )
382            f_pco2a2d(:,:)      = 0.0 !!
383         ENDIF
384!!
385!! skip OCN_PH diagnostic here
386!!
387         IF( med_diag%OCN_PCO2%dgsave ) THEN
388            ALLOCATE( f_pco2w2d(1:jpi, 1:jpj) )
389            f_pco2w2d(:,:)      = 0.0 !!
390         ENDIF
391!!
392!! skip OCNH2CO3, OCN_HCO3, OCN_CO3 diagnostics here
393!!
394         IF( med_diag%CO2FLUX%dgsave ) THEN
395            ALLOCATE( f_co2flux2d(1:jpi, 1:jpj) )
396            f_co2flux2d(:,:)      = 0.0 !!
397         ENDIF
398!!
399!! skip OM_XXX diagnostics here
400!!
401         IF( med_diag%TCO2%dgsave ) THEN
402            ALLOCATE( f_TDIC2d(1:jpi, 1:jpj) )
403            f_TDIC2d(:,:)      = 0.0 !!
404         ENDIF
405         IF( med_diag%TALK%dgsave ) THEN
406            ALLOCATE( f_TALK2d(1:jpi, 1:jpj) )
407            f_TALK2d(:,:)      = 0.0 !!
408         ENDIF
409         IF( med_diag%KW660%dgsave ) THEN
410            ALLOCATE( f_kw6602d(1:jpi, 1:jpj) )
411            f_kw6602d(:,:)      = 0.0 !!
412         ENDIF
413         IF( med_diag%ATM_PP0%dgsave ) THEN
414            ALLOCATE( f_pp02d(1:jpi, 1:jpj) )
415            f_pp02d(:,:)      = 0.0 !!
416         ENDIF
417         IF( med_diag%O2FLUX%dgsave ) THEN
418            ALLOCATE( f_o2flux2d(1:jpi, 1:jpj) )
419            f_o2flux2d(:,:)      = 0.0 !!
420         ENDIF
421         IF( med_diag%O2SAT%dgsave ) THEN
422            ALLOCATE( f_o2sat2d(1:jpi, 1:jpj) )
423            f_o2sat2d(:,:)      = 0.0 !!
424         ENDIF 
425!!
426!! skip XXX_CCD diagnostics here
427!!
428         IF( med_diag%SFR_OCAL%dgsave ) THEN
429            ALLOCATE( sfr_ocal2d(1:jpi, 1:jpj) )
430            sfr_ocal2d(:,:)      = 0.0 !!
431         ENDIF
432         IF( med_diag%SFR_OARG%dgsave ) THEN
433            ALLOCATE( sfr_oarg2d(1:jpi, 1:jpj) )
434            sfr_oarg2d(:,:)      = 0.0 !!
435         ENDIF
436!!
437!! skip XX_PROD, XX_CONS, O2_ANOX, RR_XXXX diagnostics here
438!!
439         IF( med_diag%IBEN_N%dgsave ) THEN
440            ALLOCATE( iben_n2d(1:jpi, 1:jpj) )
441            iben_n2d(:,:)      = 0.0 !!
442         ENDIF
443         IF( med_diag%IBEN_FE%dgsave ) THEN
444            ALLOCATE( iben_fe2d(1:jpi, 1:jpj) )
445            iben_fe2d(:,:)      = 0.0 !!
446         ENDIF
447         IF( med_diag%IBEN_C%dgsave ) THEN
448            ALLOCATE( iben_c2d(1:jpi, 1:jpj) )
449            iben_c2d(:,:)      = 0.0 !!
450         ENDIF
451         IF( med_diag%IBEN_SI%dgsave ) THEN
452            ALLOCATE( iben_si2d(1:jpi, 1:jpj) )
453            iben_si2d(:,:)      = 0.0 !!
454         ENDIF
455         IF( med_diag%IBEN_CA%dgsave ) THEN
456            ALLOCATE( iben_ca2d(1:jpi, 1:jpj) )
457            iben_ca2d(:,:)      = 0.0 !!
458         ENDIF
459         IF( med_diag%OBEN_N%dgsave ) THEN
460            ALLOCATE( oben_n2d(1:jpi, 1:jpj) )
461            oben_n2d(:,:)      = 0.0 !!
462         ENDIF
463         IF( med_diag%OBEN_FE%dgsave ) THEN
464            ALLOCATE( oben_fe2d(1:jpi, 1:jpj) )
465            oben_fe2d(:,:)      = 0.0 !!
466         ENDIF
467         IF( med_diag%OBEN_C%dgsave ) THEN
468            ALLOCATE( oben_c2d(1:jpi, 1:jpj) )
469            oben_c2d(:,:)      = 0.0 !!
470         ENDIF
471         IF( med_diag%OBEN_SI%dgsave ) THEN
472            ALLOCATE( oben_si2d(1:jpi, 1:jpj) )
473            oben_si2d(:,:)      = 0.0 !!
474         ENDIF
475         IF( med_diag%OBEN_CA%dgsave ) THEN
476            ALLOCATE( oben_ca2d(1:jpi, 1:jpj) )
477            oben_ca2d(:,:)      = 0.0 !!
478         ENDIF
479!!
480!! skip BEN_XX diagnostics here
481!!
482
483         IF( med_diag%RIV_N%dgsave ) THEN
484            ALLOCATE( rivn2d(1:jpi, 1:jpj) )
485            rivn2d(:,:)      = 0.0 !!
486         ENDIF
487         IF( med_diag%RIV_SI%dgsave ) THEN
488            ALLOCATE( rivsi2d(1:jpi, 1:jpj) )
489            rivsi2d(:,:)      = 0.0 !!
490         ENDIF
491         IF( med_diag%RIV_C%dgsave ) THEN
492            ALLOCATE( rivc2d(1:jpi, 1:jpj) )
493            rivc2d(:,:)      = 0.0 !!
494         ENDIF
495         IF( med_diag%RIV_ALK%dgsave ) THEN
496            ALLOCATE( rivalk2d(1:jpi, 1:jpj) )
497            rivalk2d(:,:)      = 0.0 !!
498         ENDIF
499         IF( med_diag%DETC%dgsave ) THEN
500            ALLOCATE( fslowc2d(1:jpi, 1:jpj) )
501            fslowc2d(:,:)      = 0.0 !!
502         ENDIF 
503!!
504!! skip SDC_XXXX, INVTXXX diagnostics here
505!!
506         IF( med_diag%LYSO_CA%dgsave ) THEN
507            ALLOCATE( lyso_ca2d(1:jpi, 1:jpj) )
508            lyso_ca2d(:,:)      = 0.0 !!
509         ENDIF
510!!
511!! skip COM_RESP diagnostic here
512!!
513         IF( med_diag%PN_LLOSS%dgsave ) THEN
514            ALLOCATE( fdpn22d(1:jpi, 1:jpj) )
515            fdpn22d(:,:)      = 0.0 !!
516         ENDIF
517         IF( med_diag%PD_LLOSS%dgsave ) THEN
518            ALLOCATE( fdpd22d(1:jpi, 1:jpj) )
519            fdpd22d(:,:)      = 0.0 !!
520         ENDIF
521         IF( med_diag%ZI_LLOSS%dgsave ) THEN
522            ALLOCATE( fdzmi22d(1:jpi, 1:jpj) )
523            fdzmi22d(:,:)      = 0.0 !!
524         ENDIF
525         IF( med_diag%ZE_LLOSS%dgsave ) THEN
526            ALLOCATE( fdzme22d(1:jpi, 1:jpj) )
527            fdzme22d(:,:)      = 0.0 !!
528         ENDIF
529         IF( med_diag%ZI_MES_N%dgsave ) THEN   
530            ALLOCATE( zimesn2d(1:jpi, 1:jpj) )
531            zimesn2d(:,:)      = 0.0 !!
532         ENDIF
533         IF( med_diag%ZI_MES_D%dgsave ) THEN
534            ALLOCATE( zimesd2d(1:jpi, 1:jpj) )
535            zimesd2d(:,:)      = 0.0 !!
536         ENDIF
537         IF( med_diag%ZI_MES_C%dgsave ) THEN
538            ALLOCATE( zimesc2d(1:jpi, 1:jpj) )
539            zimesc2d(:,:)      = 0.0 !!
540         ENDIF
541         IF( med_diag%ZI_MESDC%dgsave ) THEN
542            ALLOCATE( zimesdc2d(1:jpi, 1:jpj) )
543            zimesdc2d(:,:)      = 0.0 !!
544         ENDIF
545         IF( med_diag%ZI_EXCR%dgsave ) THEN
546            ALLOCATE( ziexcr2d(1:jpi, 1:jpj) )
547            ziexcr2d(:,:)      = 0.0 !!
548         ENDIF
549         IF( med_diag%ZI_RESP%dgsave ) THEN
550            ALLOCATE( ziresp2d(1:jpi, 1:jpj) )
551            ziresp2d(:,:)      = 0.0 !!
552         ENDIF
553         IF( med_diag%ZI_GROW%dgsave ) THEN
554            ALLOCATE( zigrow2d(1:jpi, 1:jpj) )
555            zigrow2d(:,:)      = 0.0 !!
556         ENDIF
557         IF( med_diag%ZE_MES_N%dgsave ) THEN
558            ALLOCATE( zemesn2d(1:jpi, 1:jpj) )
559            zemesn2d(:,:)      = 0.0 !!
560         ENDIF
561         IF( med_diag%ZE_MES_D%dgsave ) THEN
562            ALLOCATE( zemesd2d(1:jpi, 1:jpj) )
563            zemesd2d(:,:)      = 0.0 !!
564         ENDIF
565         IF( med_diag%ZE_MES_C%dgsave ) THEN
566            ALLOCATE( zemesc2d(1:jpi, 1:jpj) )
567            zemesc2d(:,:)      = 0.0 !!
568         ENDIF
569         IF( med_diag%ZE_MESDC%dgsave ) THEN
570            ALLOCATE( zemesdc2d(1:jpi, 1:jpj) )
571            zemesdc2d(:,:)      = 0.0 !!
572         ENDIF
573         IF( med_diag%ZE_EXCR%dgsave ) THEN
574            ALLOCATE( zeexcr2d(1:jpi, 1:jpj) )
575            zeexcr2d(:,:)      = 0.0 !!
576         ENDIF                 
577         IF( med_diag%ZE_RESP%dgsave ) THEN
578            ALLOCATE( zeresp2d(1:jpi, 1:jpj) )
579            zeresp2d(:,:)      = 0.0 !!
580         ENDIF
581         IF( med_diag%ZE_GROW%dgsave ) THEN
582            ALLOCATE( zegrow2d(1:jpi, 1:jpj) )
583            zegrow2d(:,:)      = 0.0 !!
584         ENDIF
585         IF( med_diag%MDETC%dgsave ) THEN
586            ALLOCATE( mdetc2d(1:jpi, 1:jpj) )
587            mdetc2d(:,:)      = 0.0 !!
588         ENDIF
589         IF( med_diag%GMIDC%dgsave ) THEN
590            ALLOCATE( gmidc2d(1:jpi, 1:jpj) )
591            gmidc2d(:,:)      = 0.0 !!
592         ENDIF
593         IF( med_diag%GMEDC%dgsave ) THEN
594            ALLOCATE( gmedc2d(1:jpi, 1:jpj) )
595            gmedc2d(:,:)      = 0.0 !!
596         ENDIF
597!!
598!! skip INT_XXX diagnostics here
599!!
600         IF (jdms .eq. 1) THEN
601            IF( med_diag%DMS_SURF%dgsave ) THEN
602               ALLOCATE( dms_surf2d(1:jpi, 1:jpj) )
603               dms_surf2d(:,:)      = 0.0 !!
604            ENDIF
605            IF( med_diag%DMS_ANDR%dgsave ) THEN
606               ALLOCATE( dms_andr2d(1:jpi, 1:jpj) )
607               dms_andr2d(:,:)      = 0.0 !!
608            ENDIF
609            IF( med_diag%DMS_SIMO%dgsave ) THEN
610               ALLOCATE( dms_simo2d(1:jpi, 1:jpj) )
611               dms_simo2d(:,:)      = 0.0 !!
612            ENDIF
613            IF( med_diag%DMS_ARAN%dgsave ) THEN
614               ALLOCATE( dms_aran2d(1:jpi, 1:jpj) )
615               dms_aran2d(:,:)      = 0.0 !!
616            ENDIF
617            IF( med_diag%DMS_HALL%dgsave ) THEN
618               ALLOCATE( dms_hall2d(1:jpi, 1:jpj) )
619               dms_hall2d(:,:)      = 0.0 !!
620            ENDIF
621            IF( med_diag%DMS_ANDM%dgsave ) THEN
622               ALLOCATE( dms_andm2d(1:jpi, 1:jpj) )
623               dms_andm2d(:,:)      = 0.0 !!
624            ENDIF
625         ENDIF   
626         !!
627         !! AXY (24/11/16): extra MOCSY diagnostics, 2D
628         IF( med_diag%ATM_XCO2%dgsave ) THEN
629            ALLOCATE( f_xco2a_2d(1:jpi, 1:jpj) )
630            f_xco2a_2d(:,:)      = 0.0 !!
631         ENDIF
632         IF( med_diag%OCN_FCO2%dgsave ) THEN
633            ALLOCATE( f_fco2w_2d(1:jpi, 1:jpj) )
634            f_fco2w_2d(:,:)      = 0.0 !!
635         ENDIF
636         IF( med_diag%ATM_FCO2%dgsave ) THEN
637            ALLOCATE( f_fco2a_2d(1:jpi, 1:jpj) )
638            f_fco2a_2d(:,:)      = 0.0 !!
639         ENDIF
640         IF( med_diag%OCN_RHOSW%dgsave ) THEN
641            ALLOCATE( f_ocnrhosw_2d(1:jpi, 1:jpj) )
642            f_ocnrhosw_2d(:,:)      = 0.0 !!
643         ENDIF
644         IF( med_diag%OCN_SCHCO2%dgsave ) THEN
645            ALLOCATE( f_ocnschco2_2d(1:jpi, 1:jpj) )
646            f_ocnschco2_2d(:,:)      = 0.0 !!
647         ENDIF
648         IF( med_diag%OCN_KWCO2%dgsave ) THEN
649            ALLOCATE( f_ocnkwco2_2d(1:jpi, 1:jpj) )
650            f_ocnkwco2_2d(:,:)      = 0.0 !!
651         ENDIF
652         IF( med_diag%OCN_K0%dgsave ) THEN
653            ALLOCATE( f_ocnk0_2d(1:jpi, 1:jpj) )
654            f_ocnk0_2d(:,:)      = 0.0 !!
655         ENDIF
656         IF( med_diag%CO2STARAIR%dgsave ) THEN
657            ALLOCATE( f_co2starair_2d(1:jpi, 1:jpj) )
658            f_co2starair_2d(:,:)      = 0.0 !!
659         ENDIF
660         IF( med_diag%OCN_DPCO2%dgsave ) THEN
661            ALLOCATE( f_ocndpco2_2d(1:jpi, 1:jpj) )
662            f_ocndpco2_2d(:,:)      = 0.0 !!
663         ENDIF
664# endif 
665         IF( med_diag%TPP3%dgsave ) THEN
666            ALLOCATE( tpp3d(1:jpi, 1:jpj, 1:jpk) )
667            tpp3d(:,:,:)      = 0.0 !!
668         ENDIF
669         IF( med_diag%DETFLUX3%dgsave ) THEN
670            ALLOCATE( detflux3d(1:jpi, 1:jpj, 1:jpk) )
671            detflux3d(:,:,:)      = 0.0 !!
672         ENDIF
673         IF( med_diag%REMIN3N%dgsave ) THEN
674             ALLOCATE( remin3dn(1:jpi, 1:jpj, 1:jpk) )
675             remin3dn(:,:,:)      = 0.0 !!
676         ENDIF
677         !!
678         !! AXY (10/11/16): CMIP6 diagnostics, 2D
679         !! JPALM -- 17-11-16 -- put fgco2 alloc out of diag request
680         !!                   needed for coupling/passed through restart
681         !! IF( med_diag%FGCO2%dgsave ) THEN
682            ALLOCATE( fgco2(1:jpi, 1:jpj) )
683            fgco2(:,:)      = 0.0 !!
684         !! ENDIF
685         IF( med_diag%INTDISSIC%dgsave ) THEN
686            ALLOCATE( intdissic(1:jpi, 1:jpj) )
687            intdissic(:,:)  = 0.0 !!
688         ENDIF         
689         IF( med_diag%INTDISSIN%dgsave ) THEN
690            ALLOCATE( intdissin(1:jpi, 1:jpj) )
691            intdissin(:,:)  = 0.0 !!
692         ENDIF         
693         IF( med_diag%INTDISSISI%dgsave ) THEN
694            ALLOCATE( intdissisi(1:jpi, 1:jpj) )
695            intdissisi(:,:)  = 0.0 !!
696         ENDIF         
697         IF( med_diag%INTTALK%dgsave ) THEN
698            ALLOCATE( inttalk(1:jpi, 1:jpj) )
699            inttalk(:,:)  = 0.0 !!
700         ENDIF         
701         IF( med_diag%O2min%dgsave ) THEN
702            ALLOCATE( o2min(1:jpi, 1:jpj) )
703            o2min(:,:)  = 1.e3 !! set to high value as we're looking for min(o2)
704         ENDIF         
705         IF( med_diag%ZO2min%dgsave ) THEN
706            ALLOCATE( zo2min(1:jpi, 1:jpj) )
707            zo2min(:,:)  = 0.0 !!
708         ENDIF         
709         IF( med_diag%FBDDTALK%dgsave  ) THEN
710            ALLOCATE( fbddtalk(1:jpi, 1:jpj) )
711            fbddtalk(:,:)  = 0.0 !!
712         ENDIF
713         IF( med_diag%FBDDTDIC%dgsave  ) THEN
714            ALLOCATE( fbddtdic(1:jpi, 1:jpj) )
715            fbddtdic(:,:)  = 0.0 !!
716         ENDIF
717         IF( med_diag%FBDDTDIFE%dgsave ) THEN
718            ALLOCATE( fbddtdife(1:jpi, 1:jpj) )
719            fbddtdife(:,:) = 0.0 !!
720         ENDIF
721         IF( med_diag%FBDDTDIN%dgsave  ) THEN
722            ALLOCATE( fbddtdin(1:jpi, 1:jpj) )
723            fbddtdin(:,:)  = 0.0 !!
724         ENDIF
725         IF( med_diag%FBDDTDISI%dgsave ) THEN
726            ALLOCATE( fbddtdisi(1:jpi, 1:jpj) )
727            fbddtdisi(:,:) = 0.0 !!
728         ENDIF
729         !!
730         !! AXY (10/11/16): CMIP6 diagnostics, 3D
731         IF( med_diag%TPPD3%dgsave     ) THEN
732            ALLOCATE( tppd3(1:jpi, 1:jpj, 1:jpk) )
733            tppd3(:,:,:)     = 0.0 !!
734         ENDIF
735         IF( med_diag%BDDTALK3%dgsave  ) THEN
736            ALLOCATE( bddtalk3(1:jpi, 1:jpj, 1:jpk) )
737            bddtalk3(:,:,:)  = 0.0 !!
738         ENDIF
739         IF( med_diag%BDDTDIC3%dgsave  ) THEN
740            ALLOCATE( bddtdic3(1:jpi, 1:jpj, 1:jpk) )
741            bddtdic3(:,:,:)  = 0.0 !!
742         ENDIF
743         IF( med_diag%BDDTDIFE3%dgsave ) THEN
744            ALLOCATE( bddtdife3(1:jpi, 1:jpj, 1:jpk) )
745            bddtdife3(:,:,:) = 0.0 !!
746         ENDIF
747         IF( med_diag%BDDTDIN3%dgsave  ) THEN
748            ALLOCATE( bddtdin3(1:jpi, 1:jpj, 1:jpk) )
749            bddtdin3(:,:,:)  = 0.0 !!
750         ENDIF
751         IF( med_diag%BDDTDISI3%dgsave ) THEN
752            ALLOCATE( bddtdisi3(1:jpi, 1:jpj, 1:jpk) )
753            bddtdisi3(:,:,:) = 0.0 !!
754         ENDIF
755         IF( med_diag%FD_NIT3%dgsave   ) THEN
756            ALLOCATE( fd_nit3(1:jpi, 1:jpj, 1:jpk) )
757            fd_nit3(:,:,:)   = 0.0 !!
758         ENDIF
759         IF( med_diag%FD_SIL3%dgsave   ) THEN
760            ALLOCATE( fd_sil3(1:jpi, 1:jpj, 1:jpk) )
761            fd_sil3(:,:,:)   = 0.0 !!
762         ENDIF
763         IF( med_diag%FD_CAR3%dgsave   ) THEN
764            ALLOCATE( fd_car3(1:jpi, 1:jpj, 1:jpk) )
765            fd_car3(:,:,:)   = 0.0 !!
766         ENDIF
767         IF( med_diag%FD_CAL3%dgsave   ) THEN
768            ALLOCATE( fd_cal3(1:jpi, 1:jpj, 1:jpk) )
769            fd_cal3(:,:,:)   = 0.0 !!
770         ENDIF
771         IF( med_diag%DCALC3%dgsave    ) THEN
772            ALLOCATE( dcalc3(1:jpi, 1:jpj, 1:jpk) )
773            dcalc3(:,:,: )   = 0.0 !!
774         ENDIF
775         IF( med_diag%EXPC3%dgsave     ) THEN
776            ALLOCATE( expc3(1:jpi, 1:jpj, 1:jpk) )
777            expc3(:,:,: )    = 0.0 !!
778         ENDIF
779         IF( med_diag%EXPN3%dgsave     ) THEN
780            ALLOCATE( expn3(1:jpi, 1:jpj, 1:jpk) )
781            expn3(:,:,: )    = 0.0 !!
782         ENDIF
783         IF( med_diag%FEDISS3%dgsave   ) THEN
784            ALLOCATE( fediss3(1:jpi, 1:jpj, 1:jpk) )
785            fediss3(:,:,: )  = 0.0 !!
786         ENDIF
787         IF( med_diag%FESCAV3%dgsave   ) THEN
788            ALLOCATE( fescav3(1:jpi, 1:jpj, 1:jpk) )
789            fescav3(:,:,: )  = 0.0 !!
790         ENDIF
791         IF( med_diag%MIGRAZP3%dgsave   ) THEN
792            ALLOCATE( migrazp3(1:jpi, 1:jpj, 1:jpk) )
793            migrazp3(:,:,: )  = 0.0 !!
794         ENDIF
795         IF( med_diag%MIGRAZD3%dgsave   ) THEN
796            ALLOCATE( migrazd3(1:jpi, 1:jpj, 1:jpk) )
797            migrazd3(:,:,: )  = 0.0 !!
798         ENDIF
799         IF( med_diag%MEGRAZP3%dgsave   ) THEN
800            ALLOCATE( megrazp3(1:jpi, 1:jpj, 1:jpk) )
801            megrazp3(:,:,: )  = 0.0 !!
802         ENDIF
803         IF( med_diag%MEGRAZD3%dgsave   ) THEN
804            ALLOCATE( megrazd3(1:jpi, 1:jpj, 1:jpk) )
805            megrazd3(:,:,: )  = 0.0 !!
806         ENDIF
807         IF( med_diag%MEGRAZZ3%dgsave   ) THEN
808            ALLOCATE( megrazz3(1:jpi, 1:jpj, 1:jpk) )
809            megrazz3(:,:,: )  = 0.0 !!
810         ENDIF
811         IF( med_diag%O2SAT3%dgsave     ) THEN
812            ALLOCATE( o2sat3(1:jpi, 1:jpj, 1:jpk) )
813            o2sat3(:,:,: )    = 0.0 !!
814         ENDIF
815         IF( med_diag%PBSI3%dgsave      ) THEN
816            ALLOCATE( pbsi3(1:jpi, 1:jpj, 1:jpk) )
817            pbsi3(:,:,: )     = 0.0 !!
818         ENDIF
819         IF( med_diag%PCAL3%dgsave      ) THEN
820            ALLOCATE( pcal3(1:jpi, 1:jpj, 1:jpk) )
821            pcal3(:,:,: )     = 0.0 !!
822         ENDIF
823         IF( med_diag%REMOC3%dgsave     ) THEN
824            ALLOCATE( remoc3(1:jpi, 1:jpj, 1:jpk) )
825            remoc3(:,:,: )    = 0.0 !!
826         ENDIF
827         IF( med_diag%PNLIMJ3%dgsave    ) THEN
828            ALLOCATE( pnlimj3(1:jpi, 1:jpj, 1:jpk) )
829            pnlimj3(:,:,: )   = 0.0 !!
830         ENDIF
831         IF( med_diag%PNLIMN3%dgsave    ) THEN
832            ALLOCATE( pnlimn3(1:jpi, 1:jpj, 1:jpk) )
833            pnlimn3(:,:,: )   = 0.0 !!
834         ENDIF
835         IF( med_diag%PNLIMFE3%dgsave   ) THEN
836            ALLOCATE( pnlimfe3(1:jpi, 1:jpj, 1:jpk) )
837            pnlimfe3(:,:,: )  = 0.0 !!
838         ENDIF
839         IF( med_diag%PDLIMJ3%dgsave    ) THEN
840            ALLOCATE( pdlimj3(1:jpi, 1:jpj, 1:jpk) )
841            pdlimj3(:,:,: )   = 0.0 !!
842         ENDIF
843         IF( med_diag%PDLIMN3%dgsave    ) THEN
844            ALLOCATE( pdlimn3(1:jpi, 1:jpj, 1:jpk) )
845            pdlimn3(:,:,: )   = 0.0 !!
846         ENDIF
847         IF( med_diag%PDLIMFE3%dgsave   ) THEN
848            ALLOCATE( pdlimfe3(1:jpi, 1:jpj, 1:jpk) )
849            pdlimfe3(:,:,: )  = 0.0 !!
850         ENDIF
851         IF( med_diag%PDLIMSI3%dgsave   ) THEN
852            ALLOCATE( pdlimsi3(1:jpi, 1:jpj, 1:jpk) )
853            pdlimsi3(:,:,: )  = 0.0 !!
854         ENDIF
855      ENDIF
856      !! lk_iomput
857
858   END SUBROUTINE bio_medusa_init
859
860#else
861   !!======================================================================
862   !!  Dummy module :                                   No MEDUSA bio-model
863   !!======================================================================
864CONTAINS
865   SUBROUTINE bio_medusa_init( )                   ! Empty routine
866      WRITE(*,*) 'bio_medusa_init: You should not have seen this print! error?'
867   END SUBROUTINE bio_medusa_init
868#endif 
869
870   !!======================================================================
871END MODULE bio_medusa_init_mod
Note: See TracBrowser for help on using the repository browser.