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/UKMO/dev_r5518_GO6_package_asm_3d_bgc_3dnitbal/NEMOGCM/NEMO/TOP_SRC/MEDUSA – NEMO

source: branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc_3dnitbal/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_init.F90 @ 11990

Last change on this file since 11990 was 11990, checked in by dford, 4 years ago

Get the nitrogen balancing working with 3D chlorophyll increments.

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