source: branches/NERC/dev_r5518_GO6_MEDUSA_conserv/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_fin.F90 @ 8489

Last change on this file since 8489 was 8489, checked in by jpalmier, 3 years ago

JPALM — gmed ticket #346 : improve MEDUSA conservation — import BBL bug fix from NEMO ticket #1932 to GO6 branch

File size: 35.0 KB
Line 
1MODULE bio_medusa_fin_mod
2   !!======================================================================
3   !!                         ***  MODULE bio_medusa_fin_mod  ***
4   !! Finalisation for TRC_BIO_MEDUSA
5   !!======================================================================
6   !! History :
7   !!   -   ! 2017-04 (M. Stringer)        Code taken from trcbio_medusa.F90
8   !!   -   ! 2017-08 (A. Yool)            Amend bethic reservoir updating
9   !!----------------------------------------------------------------------
10#if defined key_medusa
11   !!----------------------------------------------------------------------
12   !!                                                   MEDUSA bio-model
13   !!----------------------------------------------------------------------
14
15   IMPLICIT NONE
16   PRIVATE
17     
18   PUBLIC   bio_medusa_fin     ! 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_fin( kt )
29      !!---------------------------------------------------------------------
30      !!                     ***  ROUTINE bio_medusa_fin  ***
31      !! This called from TRC_BIO_MEDUSA and
32      !!  - ...
33      !!----------------------------------------------------------------------
34      USE bio_medusa_mod
35      USE dom_oce,           ONLY: atfp, atfp1, neuler, rdt, e3t_n, tmask
36      USE in_out_manager,    ONLY: lwp, numout
37# if defined key_iomput
38      USE iom,               ONLY: iom_put, lk_iomput
39# endif
40      USE lbclnk,            ONLY: lbc_lnk
41      USE par_medusa,        ONLY: jp_medusa_2d, jp_medusa_3d,          &
42                                   jp_medusa_trd
43      USE par_oce,           ONLY: jpi, jpim1, jpj, jpjm1, jpk
44      USE phycst,            ONLY: rsmall
45      USE sms_medusa,        ONLY: jinorgben, jorgben,                  &
46                                   f3_co3, f3_h2co3, f3_hco3,           &
47                                   f3_omarg, f3_omcal, f3_pH,           &
48                                   za_sed_c, za_sed_ca, za_sed_fe,      &
49                                   za_sed_n, za_sed_si,                 &
50                                   zb_sed_c, zb_sed_ca, zb_sed_fe,      &
51                                   zb_sed_n, zb_sed_si,                 &
52                                   zn_sed_c, zn_sed_ca, zn_sed_fe,      &
53                                   zn_sed_n, zn_sed_si
54      USE trc,               ONLY: med_diag, nittrc000 
55      USE trcnam_trp,        ONLY: ln_trcadv_cen2, ln_trcadv_tvd
56 
57      !! time (integer timestep)
58      INTEGER, INTENT( in ) ::    kt
59
60      INTEGER :: ji, jj
61      INTEGER :: jn
62
63      REAL(wp) :: fq0,fq1,fq2,fq3
64
65# if defined key_roam                     
66      !!----------------------------------------------------------------------
67      !! AXY (09/08/17): fix benthic submodel
68      !!----------------------------------------------------------------------
69      !! Process benthic in/out fluxes
70      !! These can be handled outside of the 3D calculations since the
71      !! benthic pools (and fluxes) are 2D in nature; this code was
72      !! developed with help from George Nurser (NOC); it cannot be run
73      !! in a configuration with variable time-stepping with depth
74      !!----------------------------------------------------------------------
75      !!
76      !! time-step calculation
77      if (jorgben.eq.1) then
78         za_sed_n(:,:)  = zb_sed_n(:,:)  + ((2. * (rdt / 86400.)) * &
79                          ( f_sbenin_n(:,:)  + f_fbenin_n(:,:)  - f_benout_n(:,:)  ))
80         za_sed_fe(:,:) = zb_sed_fe(:,:) + ((2. * (rdt / 86400.)) * &
81                          ( f_sbenin_fe(:,:) + f_fbenin_fe(:,:) - f_benout_fe(:,:) ))
82         za_sed_c(:,:)  = zb_sed_c(:,:)  + ((2. * (rdt / 86400.)) * &
83                          ( f_sbenin_c(:,:)  + f_fbenin_c(:,:)  - f_benout_c(:,:)  ))
84      endif
85      if (jinorgben.eq.1) then
86         za_sed_si(:,:) = zb_sed_si(:,:) + ((2. * (rdt / 86400.)) * &
87                          ( f_fbenin_si(:,:) - f_benout_si(:,:) ))
88         za_sed_ca(:,:) = zb_sed_ca(:,:) + ((2. * (rdt / 86400.)) * &
89                          ( f_fbenin_ca(:,:) - f_benout_ca(:,:) ))
90      endif
91      !!
92      !! time-level calculation
93      if (jorgben.eq.1) then
94         zb_sed_n(:,:)  = zn_sed_n(:,:)  + (atfp * &
95                          ( za_sed_n(:,:)  - (2. * zn_sed_n(:,:))  + zb_sed_n(:,:)  ))
96         zn_sed_n(:,:)  = za_sed_n(:,:)
97         zb_sed_fe(:,:) = zn_sed_fe(:,:) + (atfp * &
98                          ( za_sed_fe(:,:) - (2. * zn_sed_fe(:,:)) + zb_sed_fe(:,:) ))
99         zn_sed_fe(:,:) = za_sed_fe(:,:)
100         zb_sed_c(:,:)  = zn_sed_c(:,:)  + (atfp * &
101                          ( za_sed_c(:,:)  - (2. * zn_sed_c(:,:))  + zb_sed_c(:,:)  ))
102         zn_sed_c(:,:)  = za_sed_c(:,:)
103      endif
104      if (jinorgben.eq.1) then
105         zb_sed_si(:,:) = zn_sed_si(:,:) + (atfp * &
106                          ( za_sed_si(:,:) - (2. * zn_sed_si(:,:)) + zb_sed_si(:,:) ))
107         zn_sed_si(:,:) = za_sed_si(:,:)
108         zb_sed_ca(:,:) = zn_sed_ca(:,:) + (atfp * &
109                          ( za_sed_ca(:,:) - (2. * zn_sed_ca(:,:)) + zb_sed_ca(:,:) ))
110         zn_sed_ca(:,:) = za_sed_ca(:,:)
111      endif
112# endif     
113
114#  if defined key_debug_medusa
115         !! AXY (12/07/17)
116         !!-----------------------------------------------------------------
117         !! Check conservation of MEDUSA's sinks-minus-sources using fflx_X
118         !! diagnostics (i.e. biogeochemical processes only)
119         !!   - fflx_X diagnostics *should* include all transfers between
120         !!     modelled components
121         !!   - they should also include gains / losses due to air-sea
122         !!     fluxes of C and O2, aeolian and seafloor inputs of Fe, and
123         !!     inputs from seafloor "benthic buckets" (N, Si, Fe, C and
124         !!     alkalinity)
125         !!   - however, they do not include the transfer of material to
126         !!     "benthic buckets" by sedimenting slow- and fast-sinking
127         !!     detritus since these are separate 2D reservoirs
128         !!   - consequently, for a given water column, the integrated
129         !!     fluxes should sum to the "loss" of material to the "benthic
130         !!     buckets"
131         !!   - if they do not, this suggests that MEDUSA contains errors
132         !!     in its accounting (e.g. processes omitted from calculated
133         !!     fluxes)
134         !!   - here, the local integrated fluxes and benthic inputs (plus
135         !!     air-sea fluxes in the case of C) are reported together with
136         !!     the resulting error
137         !!   - only N, Si, C and alkalinity inventories considered; Fe and
138         !!     O2 overlooked because of wholesale loss (and addition, in
139         !!     the case of O2) of these tracers within the water column
140         !!-----------------------------------------------------------------
141         !!
142         !! nitrogen
143         DO jj = 2,jpjm1
144            DO ji = 2,jpim1
145               if (tmask(ji,jj,1) == 1) then
146                  fq0 = fflx_n(ji,jj)
147                  fq1 = f_sbenin_n(ji,jj) + f_fbenin_n(ji,jj)
148                  fq2 = fq0 + fq1
149                  fq3 = f_benout_n(ji,jj)
150                  if (lwp) write (numout,'a,2i3,a,4f15,5)')                   &
151                     'AXY N   cons: (i,j)=',ji,jj,', (flx,ben,err,out)=',      &
152                     fq0,fq1,fq2,fq3
153               ENDIF
154            ENDDO
155         ENDDO   
156         !! silicon
157         DO jj = 2,jpjm1
158            DO ji = 2,jpim1
159               if (tmask(ji,jj,1) == 1) then
160                  fq0 = fflx_si(ji,jj)
161                  fq1 = f_fbenin_si(ji,jj)
162                  fq2 = fq0 + fq1
163                  fq3 = f_benout_si(ji,jj)
164                  if (lwp) write (numout,'a,2i3,a,4f15,5)')                   &
165                     'AXY Si  cons: (i,j)=',ji,jj,', (flx,ben,err,out)=',     &
166                     fq0,fq1,fq2,fq3
167               ENDIF
168            ENDDO
169         ENDDO   
170         !! carbon
171         DO jj = 2,jpjm1
172            DO ji = 2,jpim1
173               if (tmask(ji,jj,1) == 1) then
174                  fq0 = fflx_c(ji,jj)
175                  fq1 = f_sbenin_c(ji,jj) + f_fbenin_c(ji,jj) + f_fbenin_ca(ji,jj)
176                  fq2 = f_co2flux(ji,jj) * fse3t(ji,jj,1)
177                  fq3 = fq0 + fq1
178                  fq4 = f_benout_c(ji,jj) + f_benout_ca(ji,jj)
179                  if (lwp) write (numout,'a,2i3,a,5f15,5)')                   &
180                     'AXY C   cons: (i,j)=',ji,jj,', (flx,ben,asf,err,out)=', &
181                     fq0,fq1,fq2,fq3,fq4
182                ENDIF
183             ENDDO
184          ENDDO   
185          !! alkalinity
186          DO jj = 2,jpjm1
187             DO ji = 2,jpim1
188                if (tmask(ji,jj,1) == 1) then
189                   fq0 = fflx_a(ji,jj)
190                   fq1 = 2.0 * f_fbenin_ca(ji,jj)
191                   fq2 = fq0 + fq1
192                   fq3 = 2.0 * f_benout_ca(ji,jj)
193                   if (lwp) write (numout,'a,2i3,a,4f15,5)')                   &
194                      'AXY alk cons: (i,j)=',ji,jj,', (flx,ben,err,out)=',     &
195                      fq0,fq1,fq2,fq3
196               ENDIF
197            ENDDO
198         ENDDO   
199#  endif
200
201         !!!---------------------------------------------------------------
202         !! Add very last diag calculations
203         !!!---------------------------------------------------------------
204         DO jj = 2,jpjm1
205            DO ji = 2,jpim1
206               !!         
207               IF( med_diag%PN_JLIM%dgsave ) THEN
208                  fjln2d(ji,jj) = fjln2d(ji,jj)   / MAX(ftot_pn(ji,jj), rsmall)
209               ENDIF
210               IF( med_diag%PN_NLIM%dgsave ) THEN
211                  fnln2d(ji,jj) = fnln2d(ji,jj)   / MAX(ftot_pn(ji,jj), rsmall)
212               ENDIF
213               IF( med_diag%PN_FELIM%dgsave ) THEN
214                  ffln2d(ji,jj) = ffln2d(ji,jj)   / MAX(ftot_pn(ji,jj), rsmall)
215               ENDIF
216               IF( med_diag%PD_JLIM%dgsave ) THEN
217                  fjld2d(ji,jj) = fjld2d(ji,jj)   / MAX(ftot_pd(ji,jj), rsmall)
218               ENDIF
219               IF( med_diag%PD_NLIM%dgsave ) THEN
220                  fnld2d(ji,jj) = fnld2d(ji,jj)   / MAX(ftot_pd(ji,jj), rsmall)
221               ENDIF
222               IF( med_diag%PD_FELIM%dgsave ) THEN
223                  ffld2d(ji,jj) = ffld2d(ji,jj)   / MAX(ftot_pd(ji,jj), rsmall)
224               ENDIF
225               IF( med_diag%PD_SILIM%dgsave ) THEN
226                  fsld2d2(ji,jj) = fsld2d2(ji,jj) / MAX(ftot_pd(ji,jj), rsmall)
227               ENDIF
228               IF( med_diag%PDSILIM2%dgsave ) THEN
229                  fsld2d(ji,jj) = fsld2d(ji,jj)   / MAX(ftot_pd(ji,jj), rsmall)
230               ENDIF
231            ENDDO
232         ENDDO
233         !!----------------------------------------------------------------
234         !! Add in XML diagnostics stuff
235         !!----------------------------------------------------------------
236         !!
237         !! ** 2D diagnostics
238#   if defined key_debug_medusa
239         IF (lwp) write (numout,*) 'bio_medusa_fin: export all diag kt = ', kt
240         CALL flush(numout)
241#   endif
242         IF ( med_diag%INVTN%dgsave ) THEN
243            CALL iom_put( "INVTN"  , ftot_n )
244         ENDIF
245         IF ( med_diag%INVTSI%dgsave ) THEN
246            CALL iom_put( "INVTSI"  , ftot_si )
247         ENDIF
248         IF ( med_diag%INVTFE%dgsave ) THEN
249            CALL iom_put( "INVTFE"  , ftot_fe )
250         ENDIF                           
251         IF ( med_diag%ML_PRN%dgsave ) THEN
252            CALL iom_put( "ML_PRN"  , fprn_ml )
253         ENDIF
254         IF ( med_diag%ML_PRD%dgsave ) THEN
255            CALL iom_put( "ML_PRD"  , fprd_ml )
256         ENDIF
257         IF ( med_diag%OCAL_LVL%dgsave ) THEN
258       !! AXY (16/08/17): hijack!
259            CALL iom_put( "OCAL_LVL"  , fchl_ml )
260            !! CALL iom_put( "OCAL_LVL"  , fccd )
261         ENDIF
262         IF ( med_diag%PN_JLIM%dgsave ) THEN
263            CALL iom_put( "PN_JLIM"  , fjln2d )
264            DEALLOCATE( fjln2d )
265         ENDIF
266         IF ( med_diag%PN_NLIM%dgsave ) THEN
267            CALL iom_put( "PN_NLIM"  , fnln2d )
268            DEALLOCATE( fnln2d )
269         ENDIF
270         IF ( med_diag%PN_FELIM%dgsave ) THEN
271            CALL iom_put( "PN_FELIM"  , ffln2d )
272            DEALLOCATE( ffln2d )
273         ENDIF
274         IF ( med_diag%PD_JLIM%dgsave ) THEN
275            CALL iom_put( "PD_JLIM"  , fjld2d )
276            DEALLOCATE( fjld2d )
277         ENDIF
278         IF ( med_diag%PD_NLIM%dgsave ) THEN
279            CALL iom_put( "PD_NLIM"  , fnld2d )
280            DEALLOCATE( fnld2d )
281         ENDIF
282         IF ( med_diag%PD_FELIM%dgsave ) THEN
283            CALL iom_put( "PD_FELIM"  , ffld2d )
284            DEALLOCATE( ffld2d )
285         ENDIF
286         IF ( med_diag%PD_SILIM%dgsave ) THEN
287            CALL iom_put( "PD_SILIM"  , fsld2d2 )
288            DEALLOCATE( fsld2d2 )
289         ENDIF
290         IF ( med_diag%PDSILIM2%dgsave ) THEN
291            CALL iom_put( "PDSILIM2"  , fsld2d )
292            DEALLOCATE( fsld2d )
293         ENDIF
294         IF ( med_diag%INTFLX_N%dgsave ) THEN
295            CALL iom_put( "INTFLX_N"  , fflx_n )
296         ENDIF
297         IF ( med_diag%INTFLX_SI%dgsave ) THEN
298            CALL iom_put( "INTFLX_SI"  , fflx_si )
299         ENDIF
300         IF ( med_diag%INTFLX_FE%dgsave ) THEN
301            CALL iom_put( "INTFLX_FE"  , fflx_fe )
302         ENDIF       
303         IF ( med_diag%INT_PN%dgsave ) THEN
304            CALL iom_put( "INT_PN"  , ftot_pn )
305         ENDIF
306         IF ( med_diag%INT_PD%dgsave ) THEN
307            CALL iom_put( "INT_PD"  , ftot_pd )
308         ENDIF         
309         IF ( med_diag%INT_ZMI%dgsave ) THEN
310            CALL iom_put( "INT_ZMI"  , ftot_zmi )
311         ENDIF
312         IF ( med_diag%INT_ZME%dgsave ) THEN
313            CALL iom_put( "INT_ZME"  , ftot_zme )
314         ENDIF
315         IF ( med_diag%INT_DET%dgsave ) THEN
316            CALL iom_put( "INT_DET"  , ftot_det )
317         ENDIF
318         IF ( med_diag%INT_DTC%dgsave ) THEN
319            CALL iom_put( "INT_DTC"  , ftot_dtc )
320         ENDIF
321         IF ( med_diag%BEN_N%dgsave ) THEN
322            CALL iom_put( "BEN_N"  , za_sed_n )
323         ENDIF
324         IF ( med_diag%BEN_FE%dgsave ) THEN
325            CALL iom_put( "BEN_FE"  , za_sed_fe )
326         ENDIF
327         IF ( med_diag%BEN_C%dgsave ) THEN
328            CALL iom_put( "BEN_C"  , za_sed_c )
329         ENDIF
330         IF ( med_diag%BEN_SI%dgsave ) THEN
331            CALL iom_put( "BEN_SI"  , za_sed_si )
332         ENDIF
333         IF ( med_diag%BEN_CA%dgsave ) THEN
334            CALL iom_put( "BEN_CA"  , za_sed_ca )
335         ENDIF
336         IF ( med_diag%RUNOFF%dgsave ) THEN
337            CALL iom_put( "RUNOFF"  , f_runoff )
338         ENDIF 
339# if defined key_roam       
340         IF ( med_diag%N_PROD%dgsave ) THEN
341            CALL iom_put( "N_PROD"  , fnit_prod )
342         ENDIF
343         IF ( med_diag%N_CONS%dgsave ) THEN
344            CALL iom_put( "N_CONS"  , fnit_cons )
345         ENDIF
346         IF ( med_diag%C_PROD%dgsave ) THEN
347            CALL iom_put( "C_PROD"  , fcar_prod )
348         ENDIF
349         IF ( med_diag%C_CONS%dgsave ) THEN
350            CALL iom_put( "C_CONS"  , fcar_cons )
351         ENDIF
352         IF ( med_diag%O2_PROD%dgsave ) THEN
353            CALL iom_put( "O2_PROD"  , foxy_prod )
354         ENDIF
355         IF ( med_diag%O2_CONS%dgsave ) THEN
356            CALL iom_put( "O2_CONS"  , foxy_cons )
357         ENDIF
358         IF ( med_diag%O2_ANOX%dgsave ) THEN
359            CALL iom_put( "O2_ANOX"  , foxy_anox )
360         ENDIF
361         IF ( med_diag%INVTC%dgsave ) THEN
362            CALL iom_put( "INVTC"  , ftot_c )
363         ENDIF
364         IF ( med_diag%INVTALK%dgsave ) THEN
365            CALL iom_put( "INVTALK"  , ftot_a )
366         ENDIF
367         IF ( med_diag%INVTO2%dgsave ) THEN
368            CALL iom_put( "INVTO2"  , ftot_o2 )
369         ENDIF
370         IF ( med_diag%COM_RESP%dgsave ) THEN
371            CALL iom_put( "COM_RESP"  , fcomm_resp )
372         ENDIF         
373# endif     
374         !!
375         !! diagnostic filled in the i-j-k main loop
376         !!--------------------------------------------
377         IF ( med_diag%PRN%dgsave ) THEN
378            CALL iom_put( "PRN"  , fprn2d )
379            DEALLOCATE( fprn2d )
380         ENDIF
381         IF ( med_diag%MPN%dgsave ) THEN
382            CALL iom_put( "MPN"  ,fdpn2d )
383            DEALLOCATE( fdpn2d )
384         ENDIF
385         IF ( med_diag%PRD%dgsave ) THEN
386            CALL iom_put( "PRD"  ,fprd2d )
387            DEALLOCATE( fprd2d )
388         ENDIF
389         IF( med_diag%MPD%dgsave ) THEN
390            CALL iom_put( "MPD"  , fdpd2d )
391            DEALLOCATE( fdpd2d )
392         ENDIF
393         !  IF( med_diag%DSED%dgsave ) THEN
394         !      CALL iom_put( "DSED"  , ftot_n )
395         !  ENDIF
396         IF( med_diag%OPAL%dgsave ) THEN
397            CALL iom_put( "OPAL"  , fprds2d )
398            DEALLOCATE( fprds2d )
399         ENDIF
400         IF( med_diag%OPALDISS%dgsave ) THEN
401            CALL iom_put( "OPALDISS"  , fsdiss2d )
402            DEALLOCATE( fsdiss2d )
403         ENDIF
404         IF( med_diag%GMIPn%dgsave ) THEN
405            CALL iom_put( "GMIPn"  , fgmipn2d )
406            DEALLOCATE( fgmipn2d )
407         ENDIF
408         IF( med_diag%GMID%dgsave ) THEN
409            CALL iom_put( "GMID"  , fgmid2d )
410            DEALLOCATE( fgmid2d )
411         ENDIF
412         IF( med_diag%MZMI%dgsave ) THEN
413            CALL iom_put( "MZMI"  , fdzmi2d )
414            DEALLOCATE( fdzmi2d )
415         ENDIF
416         IF( med_diag%GMEPN%dgsave ) THEN
417            CALL iom_put( "GMEPN"  , fgmepn2d )
418            DEALLOCATE( fgmepn2d )
419         ENDIF
420         IF( med_diag%GMEPD%dgsave ) THEN
421            CALL iom_put( "GMEPD"  , fgmepd2d )
422            DEALLOCATE( fgmepd2d )
423         ENDIF
424         IF( med_diag%GMEZMI%dgsave ) THEN
425            CALL iom_put( "GMEZMI"  , fgmezmi2d )
426            DEALLOCATE( fgmezmi2d )
427         ENDIF
428         IF( med_diag%GMED%dgsave ) THEN
429            CALL iom_put( "GMED"  , fgmed2d )
430            DEALLOCATE( fgmed2d )
431         ENDIF
432         IF( med_diag%MZME%dgsave ) THEN
433            CALL iom_put( "MZME"  , fdzme2d )
434            DEALLOCATE( fdzme2d )
435         ENDIF
436         !  IF( med_diag%DEXP%dgsave ) THEN
437         !      CALL iom_put( "DEXP"  , ftot_n )
438         !  ENDIF
439         IF( med_diag%DETN%dgsave ) THEN
440            CALL iom_put( "DETN"  , fslown2d )
441            DEALLOCATE( fslown2d )
442         ENDIF
443         IF( med_diag%MDET%dgsave ) THEN
444            CALL iom_put( "MDET"  , fdd2d )
445            DEALLOCATE( fdd2d )
446         ENDIF
447         IF( med_diag%AEOLIAN%dgsave ) THEN
448            CALL iom_put( "AEOLIAN"  , ffetop2d )
449            DEALLOCATE( ffetop2d )
450         ENDIF
451         IF( med_diag%BENTHIC%dgsave ) THEN
452            CALL iom_put( "BENTHIC"  , ffebot2d )
453            DEALLOCATE( ffebot2d )
454         ENDIF
455         IF( med_diag%SCAVENGE%dgsave ) THEN
456            CALL iom_put( "SCAVENGE"  , ffescav2d )
457            DEALLOCATE( ffescav2d )
458         ENDIF
459         !!
460         IF( med_diag%TOTREG_N%dgsave ) THEN
461            CALL iom_put( "TOTREG_N"  , fregen2d )
462            DEALLOCATE( fregen2d )
463         ENDIF
464         IF( med_diag%TOTRG_SI%dgsave ) THEN
465            CALL iom_put( "TOTRG_SI"  , fregensi2d )
466            DEALLOCATE( fregensi2d )
467         ENDIF
468         !!
469         IF( med_diag%FASTN%dgsave ) THEN
470            CALL iom_put( "FASTN"  , ftempn2d )
471            DEALLOCATE( ftempn2d )
472         ENDIF
473         IF( med_diag%FASTSI%dgsave ) THEN
474            CALL iom_put( "FASTSI"  , ftempsi2d )
475            DEALLOCATE( ftempsi2d )
476         ENDIF
477         IF( med_diag%FASTFE%dgsave ) THEN
478            CALL iom_put( "FASTFE"  , ftempfe2d )
479            DEALLOCATE( ftempfe2d )
480         ENDIF
481         IF( med_diag%FASTC%dgsave ) THEN
482            CALL iom_put( "FASTC"  , ftempc2d )
483            DEALLOCATE( ftempc2d )
484         ENDIF
485         IF( med_diag%FASTCA%dgsave ) THEN
486            CALL iom_put( "FASTCA"  , ftempca2d )
487            DEALLOCATE( ftempca2d )
488         ENDIF
489         !!
490         IF( med_diag%REMINN%dgsave ) THEN
491            CALL iom_put( "REMINN"  , freminn2d )
492            DEALLOCATE( freminn2d )
493         ENDIF
494         IF( med_diag%REMINSI%dgsave ) THEN
495            CALL iom_put( "REMINSI"  , freminsi2d )
496            DEALLOCATE( freminsi2d )
497         ENDIF
498         IF( med_diag%REMINFE%dgsave ) THEN
499            CALL iom_put( "REMINFE"  , freminfe2d )
500            DEALLOCATE( freminfe2d )
501         ENDIF
502         IF( med_diag%REMINC%dgsave ) THEN
503            CALL iom_put( "REMINC"  , freminc2d )
504            DEALLOCATE( freminc2d )
505         ENDIF
506         IF( med_diag%REMINCA%dgsave ) THEN
507            CALL iom_put( "REMINCA"  , freminca2d )
508            DEALLOCATE( freminca2d )
509         ENDIF
510         IF( med_diag%SEAFLRN%dgsave ) THEN
511            CALL iom_put( "SEAFLRN"  , fsedn )
512         ENDIF
513         IF( med_diag%SEAFLRSI%dgsave ) THEN
514            CALL iom_put( "SEAFLRSI"  , fsedsi )
515         ENDIF
516         IF( med_diag%SEAFLRFE%dgsave ) THEN
517            CALL iom_put( "SEAFLRFE"  , fsedfe )
518         ENDIF
519         IF( med_diag%SEAFLRC%dgsave ) THEN
520            CALL iom_put( "SEAFLRC"  , fsedc )
521         ENDIF
522         IF( med_diag%SEAFLRCA%dgsave ) THEN
523            CALL iom_put( "SEAFLRCA"  , fsedca )
524         ENDIF
525         !!
526# if defined key_roam           
527         !!
528         IF( med_diag%RIV_N%dgsave ) THEN
529            CALL iom_put( "RIV_N"  , rivn2d )
530            DEALLOCATE( rivn2d )
531         ENDIF
532         IF( med_diag%RIV_SI%dgsave ) THEN
533            CALL iom_put( "RIV_SI"  , rivsi2d )
534            DEALLOCATE( rivsi2d )
535         ENDIF
536         IF( med_diag%RIV_C%dgsave ) THEN
537            CALL iom_put( "RIV_C"  , rivc2d )
538            DEALLOCATE( rivc2d )
539         ENDIF
540         IF( med_diag%RIV_ALK%dgsave ) THEN
541            CALL iom_put( "RIV_ALK"  , rivalk2d )
542            DEALLOCATE( rivalk2d )
543         ENDIF
544         IF( med_diag%DETC%dgsave ) THEN
545            CALL iom_put( "DETC"  , fslowc2d )
546            DEALLOCATE( fslowc2d )
547         ENDIF
548         !!
549         IF( med_diag%PN_LLOSS%dgsave ) THEN
550            CALL iom_put( "PN_LLOSS"  , fdpn22d )
551            DEALLOCATE( fdpn22d )
552         ENDIF
553         IF( med_diag%PD_LLOSS%dgsave ) THEN
554            CALL iom_put( "PD_LLOSS"  , fdpd22d )
555            DEALLOCATE( fdpd22d )
556         ENDIF
557         IF( med_diag%ZI_LLOSS%dgsave ) THEN
558            CALL iom_put( "ZI_LLOSS"  , fdzmi22d )
559             DEALLOCATE( fdzmi22d )
560          ENDIF
561          IF( med_diag%ZE_LLOSS%dgsave ) THEN
562             CALL iom_put( "ZE_LLOSS"  , fdzme22d )
563             DEALLOCATE( fdzme22d )
564          ENDIF
565          IF( med_diag%ZI_MES_N%dgsave ) THEN
566             CALL iom_put( "ZI_MES_N"  , zimesn2d )
567             DEALLOCATE( zimesn2d )
568          ENDIF
569          IF( med_diag%ZI_MES_D%dgsave ) THEN
570             CALL iom_put( "ZI_MES_D"  , zimesd2d )
571             DEALLOCATE( zimesd2d )
572          ENDIF
573          IF( med_diag%ZI_MES_C%dgsave ) THEN
574             CALL iom_put( "ZI_MES_C"  , zimesc2d )
575             DEALLOCATE( zimesc2d )
576          ENDIF
577          IF( med_diag%ZI_MESDC%dgsave ) THEN
578             CALL iom_put( "ZI_MESDC"  ,zimesdc2d )
579             DEALLOCATE( zimesdc2d )
580          ENDIF
581          IF( med_diag%ZI_EXCR%dgsave ) THEN
582             CALL iom_put( "ZI_EXCR"  , ziexcr2d )
583             DEALLOCATE( ziexcr2d )
584          ENDIF
585          IF( med_diag%ZI_RESP%dgsave ) THEN
586             CALL iom_put( "ZI_RESP"  , ziresp2d )
587             DEALLOCATE( ziresp2d )
588          ENDIF
589          IF( med_diag%ZI_GROW%dgsave ) THEN
590             CALL iom_put( "ZI_GROW"  , zigrow2d )
591             DEALLOCATE( zigrow2d )
592          ENDIF
593          IF( med_diag%ZE_MES_N%dgsave ) THEN
594             CALL iom_put( "ZE_MES_N"  , zemesn2d )
595             DEALLOCATE( zemesn2d )
596          ENDIF
597          IF( med_diag%ZE_MES_D%dgsave ) THEN
598             CALL iom_put( "ZE_MES_D"  , zemesd2d )
599             DEALLOCATE( zemesd2d )
600          ENDIF
601          IF( med_diag%ZE_MES_C%dgsave ) THEN
602             CALL iom_put( "ZE_MES_C"  , zemesc2d )
603             DEALLOCATE( zemesc2d )
604          ENDIF
605          IF( med_diag%ZE_MESDC%dgsave ) THEN
606             CALL iom_put( "ZE_MESDC"  , zemesdc2d )
607             DEALLOCATE( zemesdc2d )
608          ENDIF
609          IF( med_diag%ZE_EXCR%dgsave ) THEN
610             CALL iom_put( "ZE_EXCR"  , zeexcr2d )
611             DEALLOCATE( zeexcr2d )
612          ENDIF
613          IF( med_diag%ZE_RESP%dgsave ) THEN
614             CALL iom_put( "ZE_RESP"  , zeresp2d )
615             DEALLOCATE( zeresp2d )
616          ENDIF
617          IF( med_diag%ZE_GROW%dgsave ) THEN
618             CALL iom_put( "ZE_GROW"  , zegrow2d )
619             DEALLOCATE( zegrow2d )
620          ENDIF
621          IF( med_diag%MDETC%dgsave ) THEN
622             CALL iom_put( "MDETC"  , mdetc2d )
623             DEALLOCATE( mdetc2d )
624          ENDIF
625          IF( med_diag%GMIDC%dgsave ) THEN
626             CALL iom_put( "GMIDC"  , gmidc2d )
627             DEALLOCATE( gmidc2d )
628          ENDIF
629          IF( med_diag%GMEDC%dgsave ) THEN
630             CALL iom_put( "GMEDC"  , gmedc2d )
631             DEALLOCATE( gmedc2d )
632          ENDIF
633          IF( med_diag%IBEN_N%dgsave ) THEN
634             CALL iom_put( "IBEN_N"  , iben_n2d )
635             DEALLOCATE( iben_n2d )
636          ENDIF
637          IF( med_diag%IBEN_FE%dgsave ) THEN
638             CALL iom_put( "IBEN_FE"  , iben_fe2d )
639             DEALLOCATE( iben_fe2d )
640          ENDIF
641          IF( med_diag%IBEN_C%dgsave ) THEN
642             CALL iom_put( "IBEN_C"  , iben_c2d )
643             DEALLOCATE( iben_c2d )
644          ENDIF
645          IF( med_diag%IBEN_SI%dgsave ) THEN
646             CALL iom_put( "IBEN_SI"  , iben_si2d )
647             DEALLOCATE( iben_si2d )
648          ENDIF
649          IF( med_diag%IBEN_CA%dgsave ) THEN
650             CALL iom_put( "IBEN_CA"  , iben_ca2d )
651             DEALLOCATE( iben_ca2d )
652          ENDIF
653          IF( med_diag%OBEN_N%dgsave ) THEN
654             CALL iom_put( "OBEN_N"  , oben_n2d )
655             DEALLOCATE( oben_n2d )
656          ENDIF
657          IF( med_diag%OBEN_FE%dgsave ) THEN
658             CALL iom_put( "OBEN_FE"  , oben_fe2d )
659             DEALLOCATE( oben_fe2d )
660          ENDIF
661          IF( med_diag%OBEN_C%dgsave ) THEN
662             CALL iom_put( "OBEN_C"  , oben_c2d )
663             DEALLOCATE( oben_c2d )
664          ENDIF
665          IF( med_diag%OBEN_SI%dgsave ) THEN
666             CALL iom_put( "OBEN_SI"  , oben_si2d )
667             DEALLOCATE( oben_si2d )
668          ENDIF
669          IF( med_diag%OBEN_CA%dgsave ) THEN
670             CALL iom_put( "OBEN_CA"  , oben_ca2d )
671             DEALLOCATE( oben_ca2d )
672          ENDIF
673          IF( med_diag%SFR_OCAL%dgsave ) THEN
674             CALL iom_put( "SFR_OCAL"  , sfr_ocal2d )
675             DEALLOCATE( sfr_ocal2d )
676          ENDIF
677          IF( med_diag%SFR_OARG%dgsave ) THEN
678             CALL iom_put( "SFR_OARG"  , sfr_oarg2d )
679             DEALLOCATE( sfr_oarg2d )
680          ENDIF
681          IF( med_diag%LYSO_CA%dgsave ) THEN
682             CALL iom_put( "LYSO_CA"  , lyso_ca2d )
683             DEALLOCATE( lyso_ca2d )
684          ENDIF
685# endif                   
686          !!
687          !! ** 3D diagnostics
688          IF( med_diag%TPP3%dgsave ) THEN
689             CALL iom_put( "TPP3"  , tpp3d )
690             DEALLOCATE( tpp3d )
691          ENDIF
692          IF( med_diag%DETFLUX3%dgsave ) THEN
693             CALL iom_put( "DETFLUX3"  , detflux3d )
694             DEALLOCATE( detflux3d )
695          ENDIF
696          IF( med_diag%REMIN3N%dgsave ) THEN
697             CALL iom_put( "REMIN3N"  , remin3dn )
698             DEALLOCATE( remin3dn )
699          ENDIF
700# if defined key_roam         
701          IF( med_diag%PH3%dgsave ) THEN
702             CALL iom_put( "PH3"  , f3_pH )
703          ENDIF
704          IF( med_diag%OM_CAL3%dgsave ) THEN
705             CALL iom_put( "OM_CAL3"  , f3_omcal )
706          ENDIF
707          !!
708          !! AXY (09/11/16): 2D CMIP6 diagnostics
709          IF( med_diag%INTDISSIC%dgsave ) THEN
710             CALL iom_put( "INTDISSIC"  , intdissic )
711             DEALLOCATE( intdissic )
712          ENDIF         
713          IF( med_diag%INTDISSIN%dgsave ) THEN
714             CALL iom_put( "INTDISSIN"  , intdissin )
715             DEALLOCATE( intdissin )
716          ENDIF         
717          IF( med_diag%INTDISSISI%dgsave ) THEN
718             CALL iom_put( "INTDISSISI"  , intdissisi )
719             DEALLOCATE( intdissisi )
720          ENDIF         
721          IF( med_diag%INTTALK%dgsave ) THEN
722             CALL iom_put( "INTTALK"  , inttalk )
723             DEALLOCATE( inttalk )
724          ENDIF         
725          IF( med_diag%O2min%dgsave ) THEN
726             CALL iom_put( "O2min"  , o2min )
727             DEALLOCATE( o2min )
728          ENDIF         
729          IF( med_diag%ZO2min%dgsave ) THEN
730             CALL iom_put( "ZO2min"  , zo2min )
731             DEALLOCATE( zo2min )
732          ENDIF         
733          IF( med_diag%FBDDTALK%dgsave ) THEN
734             CALL iom_put( "FBDDTALK"  , fbddtalk )
735             DEALLOCATE( fbddtalk )
736          ENDIF         
737          IF( med_diag%FBDDTDIC%dgsave ) THEN
738             CALL iom_put( "FBDDTDIC"  , fbddtdic )
739             DEALLOCATE( fbddtdic )
740          ENDIF         
741          IF( med_diag%FBDDTDIFE%dgsave ) THEN
742             CALL iom_put( "FBDDTDIFE" , fbddtdife )
743             DEALLOCATE( fbddtdife )
744          ENDIF         
745          IF( med_diag%FBDDTDIN%dgsave ) THEN
746             CALL iom_put( "FBDDTDIN"  , fbddtdin )
747             DEALLOCATE( fbddtdin )
748          ENDIF         
749          IF( med_diag%FBDDTDISI%dgsave ) THEN
750             CALL iom_put( "FBDDTDISI" , fbddtdisi )
751             DEALLOCATE( fbddtdisi )
752          ENDIF   
753          !!
754          !! AXY (09/11/16): 3D CMIP6 diagnostics
755          IF( med_diag%TPPD3%dgsave ) THEN
756             CALL iom_put( "TPPD3"     , tppd3 )
757             DEALLOCATE( tppd3 )
758          ENDIF         
759          IF( med_diag%BDDTALK3%dgsave ) THEN
760             CALL iom_put( "BDDTALK3"  , bddtalk3 )
761             DEALLOCATE( bddtalk3 )
762          ENDIF         
763          IF( med_diag%BDDTDIC3%dgsave ) THEN
764             CALL iom_put( "BDDTDIC3"  , bddtdic3 )
765             DEALLOCATE( bddtdic3 )
766          ENDIF         
767          IF( med_diag%BDDTDIFE3%dgsave ) THEN
768             CALL iom_put( "BDDTDIFE3" , bddtdife3 )
769             DEALLOCATE( bddtdife3 )
770          ENDIF         
771          IF( med_diag%BDDTDIN3%dgsave ) THEN
772             CALL iom_put( "BDDTDIN3"  , bddtdin3 )
773             DEALLOCATE( bddtdin3 )
774          ENDIF         
775          IF( med_diag%BDDTDISI3%dgsave ) THEN
776             CALL iom_put( "BDDTDISI3" , bddtdisi3 )
777             DEALLOCATE( bddtdisi3 )
778          ENDIF   
779          IF( med_diag%FD_NIT3%dgsave ) THEN
780             CALL iom_put( "FD_NIT3"  , fd_nit3 )
781             DEALLOCATE( fd_nit3 )
782          ENDIF
783          IF( med_diag%FD_SIL3%dgsave ) THEN
784             CALL iom_put( "FD_SIL3"  , fd_sil3 )
785             DEALLOCATE( fd_sil3 )
786          ENDIF
787          IF( med_diag%FD_CAL3%dgsave ) THEN
788             CALL iom_put( "FD_CAL3"  , fd_cal3 )
789             DEALLOCATE( fd_cal3 )
790          ENDIF
791          IF( med_diag%FD_CAR3%dgsave ) THEN
792             CALL iom_put( "FD_CAR3"  , fd_car3 )
793             DEALLOCATE( fd_car3 )
794          ENDIF
795          IF( med_diag%CO33%dgsave ) THEN
796             CALL iom_put( "CO33"  , f3_co3 )
797          ENDIF                   
798          IF( med_diag%CO3SATARAG3%dgsave ) THEN
799             CALL iom_put( "CO3SATARAG3"  , f3_omarg )
800          ENDIF                   
801          IF( med_diag%CO3SATCALC3%dgsave ) THEN
802             CALL iom_put( "CO3SATCALC3"  , f3_omcal )
803          ENDIF                   
804          IF( med_diag%EXPC3%dgsave ) THEN
805             CALL iom_put( "EXPC3"  , expc3 )
806             DEALLOCATE( expc3 )
807          ENDIF                   
808          IF( med_diag%EXPN3%dgsave ) THEN
809             CALL iom_put( "EXPN3"  , expn3 )
810             DEALLOCATE( expn3 )
811          ENDIF                   
812          IF( med_diag%DCALC3%dgsave ) THEN
813             CALL iom_put( "DCALC3"  , dcalc3 )
814             DEALLOCATE( dcalc3 )
815          ENDIF                   
816          IF( med_diag%FEDISS3%dgsave ) THEN
817             CALL iom_put( "FEDISS3"  , fediss3 )
818             DEALLOCATE( fediss3 )
819          ENDIF                   
820          IF( med_diag%FESCAV3%dgsave ) THEN
821             CALL iom_put( "FESCAV3"  , fescav3 )
822             DEALLOCATE( fescav3 )
823          ENDIF                   
824          IF( med_diag%MIGRAZP3%dgsave ) THEN
825             CALL iom_put( "MIGRAZP3"  , migrazp3 )
826             DEALLOCATE( migrazp3 )
827          ENDIF                   
828          IF( med_diag%MIGRAZD3%dgsave ) THEN
829             CALL iom_put( "MIGRAZD3"  , migrazd3 )
830             DEALLOCATE( migrazd3 )
831          ENDIF                   
832          IF( med_diag%MEGRAZP3%dgsave ) THEN
833             CALL iom_put( "MEGRAZP3"  , megrazp3 )
834             DEALLOCATE( megrazp3 )
835          ENDIF                   
836          IF( med_diag%MEGRAZD3%dgsave ) THEN
837             CALL iom_put( "MEGRAZD3"  , megrazd3 )
838             DEALLOCATE( megrazd3 )
839          ENDIF                   
840          IF( med_diag%MEGRAZZ3%dgsave ) THEN
841             CALL iom_put( "MEGRAZZ3"  , megrazz3 )
842             DEALLOCATE( megrazz3 )
843          ENDIF                   
844          IF( med_diag%O2SAT3%dgsave ) THEN
845             CALL iom_put( "O2SAT3"  , o2sat3 )
846             DEALLOCATE( o2sat3 )
847          ENDIF                   
848          IF( med_diag%PBSI3%dgsave ) THEN
849             CALL iom_put( "PBSI3"  , pbsi3 )
850             DEALLOCATE( pbsi3 )
851          ENDIF                   
852          IF( med_diag%PCAL3%dgsave ) THEN
853             CALL iom_put( "PCAL3"  , pcal3 )
854             DEALLOCATE( pcal3 )
855          ENDIF                   
856          IF( med_diag%REMOC3%dgsave ) THEN
857             CALL iom_put( "REMOC3"  , remoc3 )
858             DEALLOCATE( remoc3 )
859          ENDIF                   
860          IF( med_diag%PNLIMJ3%dgsave ) THEN
861             CALL iom_put( "PNLIMJ3" , pnlimj3 )
862             DEALLOCATE( pnlimj3 )
863          ENDIF                   
864          IF( med_diag%PNLIMN3%dgsave ) THEN
865             CALL iom_put( "PNLIMN3" , pnlimn3 )
866             DEALLOCATE( pnlimn3 )
867          ENDIF                   
868          IF( med_diag%PNLIMFE3%dgsave ) THEN
869             CALL iom_put( "PNLIMFE3" , pnlimfe3 )
870             DEALLOCATE( pnlimfe3 )
871          ENDIF                   
872          IF( med_diag%PDLIMJ3%dgsave ) THEN
873             CALL iom_put( "PDLIMJ3" , pdlimj3 )
874             DEALLOCATE( pdlimj3 )
875          ENDIF                   
876          IF( med_diag%PDLIMN3%dgsave ) THEN
877             CALL iom_put( "PDLIMN3" , pdlimn3 )
878             DEALLOCATE( pdlimn3 )
879          ENDIF                   
880          IF( med_diag%PDLIMFE3%dgsave ) THEN
881             CALL iom_put( "PDLIMFE3" , pdlimfe3 )
882             DEALLOCATE( pdlimfe3 )
883          ENDIF                   
884          IF( med_diag%PDLIMSI3%dgsave ) THEN
885             CALL iom_put( "PDLIMSI3" , pdlimsi3 )
886             DEALLOCATE( pdlimsi3 )
887          ENDIF                   
888         
889# endif         
890
891          DEALLOCATE( zw2d )
892
893   END SUBROUTINE bio_medusa_fin
894
895#else
896   !!======================================================================
897   !!  Dummy module :                                   No MEDUSA bio-model
898   !!======================================================================
899CONTAINS
900   SUBROUTINE bio_medusa_fin( )                    ! Empty routine
901      WRITE(*,*) 'bio_medusa_fin: You should not have seen this print! error?'
902   END SUBROUTINE bio_medusa_fin
903#endif 
904
905   !!======================================================================
906END MODULE bio_medusa_fin_mod
Note: See TracBrowser for help on using the repository browser.