source: branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_init.F90 @ 13316

Last change on this file since 13316 was 13316, checked in by dford, 10 months ago

Allow nitrogen balancing when assimilating 3D chlorophyll data. See Met Office utils ticket 346.

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