source: branches/NERC/dev_r5518_GO6_GeoAlk_MEDUSA/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_init.F90 @ 11726

Last change on this file since 11726 was 11726, checked in by jpalmier, 13 months ago

add Changes to enable Alkalinity geo-ingeneering tests within MEDUSA

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