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

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

source: branches/UKMO/dev_r5518_medusa_chg_trc_bio_medusa/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_fin.F90 @ 7920

Last change on this file since 7920 was 7920, checked in by marc, 7 years ago

Removing the finalisation of diagnostics from trcbio_medusa.F90 into bio_medusa_fin.F90

File size: 45.9 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   !!----------------------------------------------------------------------
9#if defined key_medusa
10   !!----------------------------------------------------------------------
11   !!                                                   MEDUSA bio-model
12   !!----------------------------------------------------------------------
13
14   IMPLICIT NONE
15   PRIVATE
16     
17   PUBLIC   bio_medusa_fin     ! Called in trcbio_medusa.F90
18
19   !!----------------------------------------------------------------------
20   !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007)
21   !! $Id$
22   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
23   !!----------------------------------------------------------------------
24
25CONTAINS
26
27   SUBROUTINE bio_medusa_fin( kt )
28      !!---------------------------------------------------------------------
29      !!                     ***  ROUTINE bio_medusa_fin  ***
30      !! This called from TRC_BIO_MEDUSA and
31      !!  - ...
32      !!----------------------------------------------------------------------
33      USE bio_medusa_mod
34      USE dom_oce,           ONLY: atfp, atfp1, neuler, rdt
35      USE in_out_manager,    ONLY: lwp, numout
36      USE iom,               ONLY: iom_put, lk_iomput
37      USE lbclnk,            ONLY: lbc_lnk
38      USE par_medusa,        ONLY: jp_medusa_2d, jp_medusa_3d,          &
39                                   jp_medusa_trd
40      USE par_oce,           ONLY: jpi, jpim1, jpj, jpjm1, jpk
41      USE phycst,            ONLY: rsmall
42      USE sms_medusa,        ONLY: jinorgben, jorgben,                  &
43                                   f3_co3, f3_h2co3, f3_hco3,           &
44                                   f3_omarg, f3_omcal, f3_pH,           &
45                                   za_sed_c, za_sed_ca, za_sed_fe,      &
46                                   za_sed_n, za_sed_si,                 &
47                                   zb_sed_c, zb_sed_ca, zb_sed_fe,      &
48                                   zb_sed_n, zb_sed_si,                 &
49                                   zn_sed_c, zn_sed_ca, zn_sed_fe,      &
50                                   zn_sed_n, zn_sed_si
51      USE trc,               ONLY: ctrc2d, ctrc3d, ln_diatrc,           &
52                                   med_diag, nittrc000,                 &
53                                   trbio, trc2d, trc3d
54      USE trcnam_trp,        ONLY: ln_trcadv_cen2, ln_trcadv_tvd
55      USE wrk_nemo,          ONLY: wrk_dealloc
56 
57      !! time (integer timestep)
58      INTEGER, INTENT( in ) ::    kt
59
60      INTEGER :: ji, jj
61      INTEGER :: jn
62      !!----------------------------------------------------------------------
63      !! Process benthic in/out fluxes
64      !! These can be handled outside of the 3D calculations since the
65      !! benthic pools (and fluxes) are 2D in nature; this code is
66      !! (shamelessly) borrowed from corresponding code in the LOBSTER
67      !! model
68      !!----------------------------------------------------------------------
69      !!
70      !! IF(lwp) WRITE(numout,*) 'AXY: rdt = ', rdt
71      if (jorgben.eq.1) then
72         za_sed_n(:,:)  = zn_sed_n(:,:)  +                                 & 
73                          ( f_sbenin_n(:,:)  + f_fbenin_n(:,:)  -          &
74                            f_benout_n(:,:)  ) * (rdt / 86400.)
75         zn_sed_n(:,:)  = za_sed_n(:,:)
76         !!
77         za_sed_fe(:,:) = zn_sed_fe(:,:) +                                 &
78                          ( f_sbenin_fe(:,:) + f_fbenin_fe(:,:) -          &
79                            f_benout_fe(:,:) ) * (rdt / 86400.)
80         zn_sed_fe(:,:) = za_sed_fe(:,:)
81         !!
82         za_sed_c(:,:)  = zn_sed_c(:,:)  +                                 &
83                          ( f_sbenin_c(:,:)  + f_fbenin_c(:,:)  -          &
84                            f_benout_c(:,:)  ) * (rdt / 86400.)
85         zn_sed_c(:,:)  = za_sed_c(:,:)
86      endif
87      if (jinorgben.eq.1) then
88         za_sed_si(:,:) = zn_sed_si(:,:) +                                 & 
89                          ( f_fbenin_si(:,:) - f_benout_si(:,:) ) *        &
90                          (rdt / 86400.)
91         zn_sed_si(:,:) = za_sed_si(:,:)
92         !!
93         za_sed_ca(:,:) = zn_sed_ca(:,:) +                                 &
94                          ( f_fbenin_ca(:,:) - f_benout_ca(:,:) ) *        &
95                          (rdt / 86400.)
96         zn_sed_ca(:,:) = za_sed_ca(:,:)
97      endif
98      IF( ln_diatrc ) THEN
99         DO jj = 2,jpjm1
100            DO ji = 2,jpim1
101               trc2d(ji,jj,131) = za_sed_n(ji,jj)
102               trc2d(ji,jj,132) = za_sed_fe(ji,jj)
103               trc2d(ji,jj,133) = za_sed_c(ji,jj)
104               trc2d(ji,jj,134) = za_sed_si(ji,jj)
105               trc2d(ji,jj,135) = za_sed_ca(ji,jj)
106            ENDDO
107         ENDDO
108         !! AXY (07/07/15): temporary hijacking
109# if defined key_roam
110  !!       trc2d(:,:,126) = zn_dms_chn(:,:)
111  !!       trc2d(:,:,127) = zn_dms_chd(:,:)
112  !!       trc2d(:,:,128) = zn_dms_mld(:,:)
113  !!       trc2d(:,:,129) = zn_dms_qsr(:,:)
114  !!       trc2d(:,:,130) = zn_dms_din(:,:)
115# endif
116      ENDIF 
117      !!
118      if (ibenthic.eq.2) then
119         !! The code below (in this if ... then ... endif loop) is
120         !! effectively commented out because it does not work as
121         !! anticipated; it can be deleted at a later date
122         if (jorgben.eq.1) then
123            za_sed_n(:,:)  = ( f_sbenin_n(:,:)  + f_fbenin_n(:,:)  -       &
124                               f_benout_n(:,:)  ) * rdt
125            za_sed_fe(:,:) = ( f_sbenin_fe(:,:) + f_fbenin_fe(:,:) -       &
126                               f_benout_fe(:,:) ) * rdt
127            za_sed_c(:,:)  = ( f_sbenin_c(:,:)  + f_fbenin_c(:,:)  -       &
128                               f_benout_c(:,:)  ) * rdt
129         endif
130         if (jinorgben.eq.1) then
131            za_sed_si(:,:) = ( f_fbenin_si(:,:) - f_benout_si(:,:) ) * rdt
132            za_sed_ca(:,:) = ( f_fbenin_ca(:,:) - f_benout_ca(:,:) ) * rdt
133         endif
134         !!
135         !! Leap-frog scheme - only in explicit case, otherwise the
136         !! time stepping is already being done in trczdf
137         !! IF( l_trczdf_exp .AND. (ln_trcadv_cen2 .OR. ln_trcadv_tvd) ) THEN
138         !!    zfact = 2. * rdttra(jk) * FLOAT( ndttrc )
139         !!    IF( neuler == 0 .AND. kt == nittrc000 )  zfact = rdttra(jk) *
140         !!                                             FLOAT(ndttrc)
141         !!    if (jorgben.eq.1) then
142         !!       za_sed_n(:,:)  = zb_sed_n(:,:)  + ( zfact * za_sed_n(:,:)  )
143         !!      za_sed_fe(:,:) = zb_sed_fe(:,:) + ( zfact * za_sed_fe(:,:) )
144         !!       za_sed_c(:,:)  = zb_sed_c(:,:)  + ( zfact * za_sed_c(:,:)  )
145         !!    endif
146         !!    if (jinorgben.eq.1) then
147         !!       za_sed_si(:,:) = zb_sed_si(:,:) + ( zfact * za_sed_si(:,:) )
148         !!       za_sed_ca(:,:) = zb_sed_ca(:,:) + ( zfact * za_sed_ca(:,:) )
149         !!    endif
150         !! ENDIF
151         !!
152         !! Time filter and swap of arrays
153         IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd  ) THEN ! centred or tvd scheme
154            IF( neuler == 0 .AND. kt == nittrc000 ) THEN
155               if (jorgben.eq.1) then
156                  zb_sed_n(:,:)  = zn_sed_n(:,:)
157                  zn_sed_n(:,:)  = za_sed_n(:,:)
158                  za_sed_n(:,:)  = 0.0
159                  !!
160                  zb_sed_fe(:,:) = zn_sed_fe(:,:)
161                  zn_sed_fe(:,:) = za_sed_fe(:,:)
162                  za_sed_fe(:,:) = 0.0
163                  !!
164                  zb_sed_c(:,:)  = zn_sed_c(:,:)
165                  zn_sed_c(:,:)  = za_sed_c(:,:)
166                  za_sed_c(:,:)  = 0.0
167               endif
168               if (jinorgben.eq.1) then
169                  zb_sed_si(:,:) = zn_sed_si(:,:)
170                  zn_sed_si(:,:) = za_sed_si(:,:)
171                  za_sed_si(:,:) = 0.0
172                  !!
173                  zb_sed_ca(:,:) = zn_sed_ca(:,:)
174                  zn_sed_ca(:,:) = za_sed_ca(:,:)
175                  za_sed_ca(:,:) = 0.0
176               endif
177            ELSE
178               if (jorgben.eq.1) then
179                  zb_sed_n(:,:)  = (atfp  *                                 &
180                                    ( zb_sed_n(:,:)  + za_sed_n(:,:)  )) +  &
181                                      (atfp1 * zn_sed_n(:,:) )
182                  zn_sed_n(:,:)  = za_sed_n(:,:)
183                  za_sed_n(:,:)  = 0.0
184                  !!
185                  zb_sed_fe(:,:) = (atfp  *                                 &
186                                    ( zb_sed_fe(:,:) + za_sed_fe(:,:) )) +  &
187                                      (atfp1 * zn_sed_fe(:,:))
188                  zn_sed_fe(:,:) = za_sed_fe(:,:)
189                  za_sed_fe(:,:) = 0.0
190                  !!
191                  zb_sed_c(:,:)  = (atfp  *                                 &
192                                    ( zb_sed_c(:,:)  + za_sed_c(:,:)  )) +  &
193                                      (atfp1 * zn_sed_c(:,:) )
194                  zn_sed_c(:,:)  = za_sed_c(:,:)
195                  za_sed_c(:,:)  = 0.0
196               endif
197               if (jinorgben.eq.1) then
198                  zb_sed_si(:,:) = (atfp  *                                 &
199                                    ( zb_sed_si(:,:) + za_sed_si(:,:) )) +  &
200                                      (atfp1 * zn_sed_si(:,:))
201                  zn_sed_si(:,:) = za_sed_si(:,:)
202                  za_sed_si(:,:) = 0.0
203                  !!
204                  zb_sed_ca(:,:) = (atfp  *                                 &
205                                    ( zb_sed_ca(:,:) + za_sed_ca(:,:) )) +  &
206                                      (atfp1 * zn_sed_ca(:,:))
207                  zn_sed_ca(:,:) = za_sed_ca(:,:)
208                  za_sed_ca(:,:) = 0.0
209               endif
210            ENDIF
211         ELSE                   !  case of smolar scheme or muscl
212            if (jorgben.eq.1) then
213               zb_sed_n(:,:)  = za_sed_n(:,:)
214               zn_sed_n(:,:)  = za_sed_n(:,:)
215               za_sed_n(:,:)  = 0.0
216               !!
217               zb_sed_fe(:,:) = za_sed_fe(:,:)
218               zn_sed_fe(:,:) = za_sed_fe(:,:)
219               za_sed_fe(:,:) = 0.0
220               !!
221               zb_sed_c(:,:)  = za_sed_c(:,:)
222               zn_sed_c(:,:)  = za_sed_c(:,:)
223               za_sed_c(:,:)  = 0.0
224            endif
225            if (jinorgben.eq.1) then
226               zb_sed_si(:,:) = za_sed_si(:,:)
227               zn_sed_si(:,:) = za_sed_si(:,:)
228               za_sed_si(:,:) = 0.0
229               !!
230               zb_sed_ca(:,:) = za_sed_ca(:,:)
231               zn_sed_ca(:,:) = za_sed_ca(:,:)
232               za_sed_ca(:,:) = 0.0
233            endif
234         ENDIF
235      endif
236     
237      IF( ln_diatrc ) THEN
238         !!-----------------------------------------------------------------
239         !! Output several accumulated diagnostics
240         !!   - biomass-average phytoplankton limitation terms
241         !!   - integrated tendency terms
242         !!-----------------------------------------------------------------
243         !!
244         DO jj = 2,jpjm1
245            DO ji = 2,jpim1
246               !! non-diatom phytoplankton limitations
247               trc2d(ji,jj,25)  = trc2d(ji,jj,25) / MAX(ftot_pn(ji,jj), rsmall)
248               trc2d(ji,jj,26)  = trc2d(ji,jj,26) / MAX(ftot_pn(ji,jj), rsmall)
249               trc2d(ji,jj,27)  = trc2d(ji,jj,27) / MAX(ftot_pn(ji,jj), rsmall)
250               !! diatom phytoplankton limitations
251               trc2d(ji,jj,28)  = trc2d(ji,jj,28) / MAX(ftot_pd(ji,jj), rsmall)
252               trc2d(ji,jj,29)  = trc2d(ji,jj,29) / MAX(ftot_pd(ji,jj), rsmall)
253               trc2d(ji,jj,30)  = trc2d(ji,jj,30) / MAX(ftot_pd(ji,jj), rsmall)
254               trc2d(ji,jj,31)  = trc2d(ji,jj,31) / MAX(ftot_pd(ji,jj), rsmall)
255               trc2d(ji,jj,32)  = trc2d(ji,jj,32) / MAX(ftot_pd(ji,jj), rsmall)
256               !! tendency terms
257               trc2d(ji,jj,76)  = fflx_n(ji,jj)
258               trc2d(ji,jj,77)  = fflx_si(ji,jj)
259               trc2d(ji,jj,78)  = fflx_fe(ji,jj)
260               !! Integrated biomass.
261               !! integrated non-diatom phytoplankton
262               trc2d(ji,jj,79)  = ftot_pn(ji,jj)
263               !! integrated diatom phytoplankton
264               trc2d(ji,jj,80)  = ftot_pd(ji,jj)
265               !! Integrated microzooplankton
266               trc2d(ji,jj,217) = ftot_zmi(ji,jj)
267               !! Integrated mesozooplankton
268               trc2d(ji,jj,218) = ftot_zme(ji,jj)
269               !! Integrated slow detritus, nitrogen
270               trc2d(ji,jj,219) = ftot_det(ji,jj)
271               !! Integrated slow detritus, carbon
272               trc2d(ji,jj,220) = ftot_dtc(ji,jj)
273# if defined key_roam
274               !! The balance of nitrogen production/consumption.
275               !! integrated nitrogen production
276               trc2d(ji,jj,111) = fnit_prod(ji,jj)
277               !! integrated nitrogen consumption
278               trc2d(ji,jj,112) = fnit_cons(ji,jj)
279               !! The balance of carbon production/consumption.
280               !! integrated carbon production
281               trc2d(ji,jj,113) = fcar_prod(ji,jj)
282               !! integrated carbon consumption
283               trc2d(ji,jj,114) = fcar_cons(ji,jj)
284               !! The balance of oxygen production/consumption.
285               !! integrated oxygen production
286               trc2d(ji,jj,115) = foxy_prod(ji,jj)
287               !! integrated oxygen consumption
288               trc2d(ji,jj,116) = foxy_cons(ji,jj)
289               !! integrated unrealised oxygen consumption
290               trc2d(ji,jj,117) = foxy_anox(ji,jj)
291# endif
292            ENDDO
293         ENDDO
294         
295# if defined key_roam
296#  if defined key_axy_nancheck
297         !!---------------------------------------------------------------
298         !! Check for NaNs in diagnostic outputs
299         !!---------------------------------------------------------------
300         !!
301         !! 2D diagnostics
302         DO jn = 1,150
303            fq0 = SUM(trc2d(:,:,jn))
304            !! AXY (30/01/14): "isnan" problem on HECTOR
305            !! if (fq0 /= fq0 ) then
306            if ( ieee_is_nan( fq0 ) ) then
307               !! there's a NaN here
308               if (lwp) write(numout,*)                                     &
309                  'NAN detected in 2D diagnostic field', jn, 'at time',     &
310                   kt, 'at position:'
311               DO jj = 1,jpj
312                  DO ji = 1,jpi
313                     if ( ieee_is_nan( trc2d(ji,jj,jn) ) ) then
314                        if (lwp) write (numout,'(a,3i6)') 'NAN-CHECK',      &
315                                 ji, jj, jn
316                     endif
317                  ENDDO
318               ENDDO
319          CALL ctl_stop( 'trcbio_medusa, NAN in 2D diagnostic field' )
320            endif
321         ENDDO
322         !!
323         !! 3D diagnostics
324         DO jn = 1,5
325            fq0 = SUM(trc3d(:,:,:,jn))
326            !! AXY (30/01/14): "isnan" problem on HECTOR
327            !! if (fq0 /= fq0 ) then
328            if ( ieee_is_nan( fq0 ) ) then
329               !! there's a NaN here
330               if (lwp) write(numout,*)                                     &
331                  'NAN detected in 3D diagnostic field', jn, 'at time',     &
332                  kt, 'at position:'
333               DO jk = 1,jpk
334                  DO jj = 1,jpj
335                     DO ji = 1,jpi
336                        if ( ieee_is_nan( trc3d(ji,jj,jk,jn) ) ) then
337                           if (lwp) write (numout,'(a,4i6)') 'NAN-CHECK',   &
338                                    ji, jj, jk, jn
339                        endif
340                     ENDDO
341                  ENDDO
342               ENDDO
343          CALL ctl_stop( 'trcbio_medusa, NAN in 3D diagnostic field' )
344            endif
345         ENDDO
346    CALL flush(numout)
347#  endif
348# endif
349
350         !!----------------------------------------------------------------
351         !! Don't know what this does; belongs to someone else ...
352         !!----------------------------------------------------------------
353         !!
354         !! Lateral boundary conditions on trc2d
355         DO jn=1,jp_medusa_2d
356             CALL lbc_lnk(trc2d(:,:,jn),'T',1. )
357         ENDDO 
358
359         !! Lateral boundary conditions on trc3d
360         DO jn=1,jp_medusa_3d
361             CALL lbc_lnk(trc3d(:,:,1,jn),'T',1. )
362         ENDDO 
363
364
365# if defined key_axy_nodiag
366         !!----------------------------------------------------------------
367         !! Blank diagnostics as a NaN-trap
368         !!----------------------------------------------------------------
369         !!
370         !! blank 2D diagnostic array
371         trc2d(:,:,:) = 0.e0
372         !!
373         !! blank 3D diagnostic array
374         trc3d(:,:,:,:) = 0.e0
375# endif
376
377
378         !!----------------------------------------------------------------
379         !! Add in XML diagnostics stuff
380         !!----------------------------------------------------------------
381         !!
382         !! ** 2D diagnostics
383         DO jn=1,jp_medusa_2d
384            CALL iom_put(TRIM(ctrc2d(jn)), trc2d(:,:,jn))
385         END DO
386!! AXY (17/02/14): don't think I need this if I modify the above for
387!! all diagnostics
388!! #  if defined key_roam
389!!          DO jn=91,jp_medusa_2d
390!!             CALL iom_put(TRIM(ctrc2d(jn)), trc2d(:,:,jn))
391!!          END DO     
392!! #  endif
393         !!
394         !! ** 3D diagnostics
395         DO jn=1,jp_medusa_3d
396            CALL iom_put(TRIM(ctrc3d(jn)), trc3d(:,:,:,jn))
397         END DO
398!! AXY (17/02/14): don't think I need this if I modify the above for
399!! all diagnostics
400!! #  if defined key_roam
401!!          CALL iom_put(TRIM(ctrc3d(5)), trc3d(:,:,:,5))
402!! #  endif
403
404
405      ELSE IF( lk_iomput .AND. .NOT. ln_diatrc ) THEN
406         !!!---------------------------------------------------------------
407         !! Add very last diag calculations
408         !!!---------------------------------------------------------------
409         DO jj = 2,jpjm1
410            DO ji = 2,jpim1
411               !!         
412               IF( med_diag%PN_JLIM%dgsave ) THEN
413                  fjln2d(ji,jj) = fjln2d(ji,jj)   / MAX(ftot_pn(ji,jj), rsmall)
414               ENDIF
415               IF( med_diag%PN_NLIM%dgsave ) THEN
416                  fnln2d(ji,jj) = fnln2d(ji,jj)   / MAX(ftot_pn(ji,jj), rsmall)
417               ENDIF
418               IF( med_diag%PN_FELIM%dgsave ) THEN
419                  ffln2d(ji,jj) = ffln2d(ji,jj)   / MAX(ftot_pn(ji,jj), rsmall)
420               ENDIF
421               IF( med_diag%PD_JLIM%dgsave ) THEN
422                  fjld2d(ji,jj) = fjld2d(ji,jj)   / MAX(ftot_pd(ji,jj), rsmall)
423               ENDIF
424               IF( med_diag%PD_NLIM%dgsave ) THEN
425                  fnld2d(ji,jj) = fnld2d(ji,jj)   / MAX(ftot_pd(ji,jj), rsmall)
426               ENDIF
427               IF( med_diag%PD_FELIM%dgsave ) THEN
428                  ffld2d(ji,jj) = ffld2d(ji,jj)   / MAX(ftot_pd(ji,jj), rsmall)
429               ENDIF
430               IF( med_diag%PD_SILIM%dgsave ) THEN
431                  fsld2d2(ji,jj) = fsld2d2(ji,jj) / MAX(ftot_pd(ji,jj), rsmall)
432               ENDIF
433               IF( med_diag%PDSILIM2%dgsave ) THEN
434                  fsld2d(ji,jj) = fsld2d(ji,jj)   / MAX(ftot_pd(ji,jj), rsmall)
435               ENDIF
436            ENDDO
437         ENDDO
438         !!----------------------------------------------------------------
439         !! Add in XML diagnostics stuff
440         !!----------------------------------------------------------------
441         !!
442         !! ** 2D diagnostics
443#   if defined key_debug_medusa
444         IF (lwp) write (numout,*) 'trc_bio_medusa: export all diag.'
445         CALL flush(numout)
446#   endif
447         IF ( med_diag%INVTN%dgsave ) THEN
448            CALL iom_put( "INVTN"  , ftot_n )
449         ENDIF
450         IF ( med_diag%INVTSI%dgsave ) THEN
451            CALL iom_put( "INVTSI"  , ftot_si )
452         ENDIF
453         IF ( med_diag%INVTFE%dgsave ) THEN
454            CALL iom_put( "INVTFE"  , ftot_fe )
455         ENDIF                           
456         IF ( med_diag%ML_PRN%dgsave ) THEN
457            CALL iom_put( "ML_PRN"  , fprn_ml )
458         ENDIF
459         IF ( med_diag%ML_PRD%dgsave ) THEN
460            CALL iom_put( "ML_PRD"  , fprd_ml )
461         ENDIF
462         IF ( med_diag%OCAL_LVL%dgsave ) THEN
463            CALL iom_put( "OCAL_LVL"  , fccd )
464         ENDIF
465         IF ( med_diag%PN_JLIM%dgsave ) THEN
466            CALL iom_put( "PN_JLIM"  , fjln2d )
467            CALL wrk_dealloc( jpi, jpj,   fjln2d   )
468         ENDIF
469         IF ( med_diag%PN_NLIM%dgsave ) THEN
470            CALL iom_put( "PN_NLIM"  , fnln2d )
471            CALL wrk_dealloc( jpi, jpj,   fnln2d   )
472         ENDIF
473         IF ( med_diag%PN_FELIM%dgsave ) THEN
474            CALL iom_put( "PN_FELIM"  , ffln2d )
475            CALL wrk_dealloc( jpi, jpj,   ffln2d   )
476         ENDIF
477         IF ( med_diag%PD_JLIM%dgsave ) THEN
478            CALL iom_put( "PD_JLIM"  , fjld2d )
479            CALL wrk_dealloc( jpi, jpj,  fjld2d    )
480         ENDIF
481         IF ( med_diag%PD_NLIM%dgsave ) THEN
482            CALL iom_put( "PD_NLIM"  , fnld2d )
483            CALL wrk_dealloc( jpi, jpj,   fnld2d  )
484         ENDIF
485         IF ( med_diag%PD_FELIM%dgsave ) THEN
486            CALL iom_put( "PD_FELIM"  , ffld2d )
487            CALL wrk_dealloc( jpi, jpj,  ffld2d    )
488         ENDIF
489         IF ( med_diag%PD_SILIM%dgsave ) THEN
490            CALL iom_put( "PD_SILIM"  , fsld2d2 )
491            CALL wrk_dealloc( jpi, jpj,   fsld2d2   )
492         ENDIF
493         IF ( med_diag%PDSILIM2%dgsave ) THEN
494            CALL iom_put( "PDSILIM2"  , fsld2d )
495            CALL wrk_dealloc( jpi, jpj,   fsld2d   )
496         ENDIF
497         IF ( med_diag%INTFLX_N%dgsave ) THEN
498            CALL iom_put( "INTFLX_N"  , fflx_n )
499         ENDIF
500         IF ( med_diag%INTFLX_SI%dgsave ) THEN
501            CALL iom_put( "INTFLX_SI"  , fflx_si )
502         ENDIF
503         IF ( med_diag%INTFLX_FE%dgsave ) THEN
504            CALL iom_put( "INTFLX_FE"  , fflx_fe )
505         ENDIF       
506         IF ( med_diag%INT_PN%dgsave ) THEN
507            CALL iom_put( "INT_PN"  , ftot_pn )
508         ENDIF
509         IF ( med_diag%INT_PD%dgsave ) THEN
510            CALL iom_put( "INT_PD"  , ftot_pd )
511         ENDIF         
512         IF ( med_diag%INT_ZMI%dgsave ) THEN
513            CALL iom_put( "INT_ZMI"  , ftot_zmi )
514         ENDIF
515         IF ( med_diag%INT_ZME%dgsave ) THEN
516            CALL iom_put( "INT_ZME"  , ftot_zme )
517         ENDIF
518         IF ( med_diag%INT_DET%dgsave ) THEN
519            CALL iom_put( "INT_DET"  , ftot_det )
520         ENDIF
521         IF ( med_diag%INT_DTC%dgsave ) THEN
522            CALL iom_put( "INT_DTC"  , ftot_dtc )
523         ENDIF
524         IF ( med_diag%BEN_N%dgsave ) THEN
525            CALL iom_put( "BEN_N"  , za_sed_n )
526         ENDIF
527         IF ( med_diag%BEN_FE%dgsave ) THEN
528            CALL iom_put( "BEN_FE"  , za_sed_fe )
529         ENDIF
530         IF ( med_diag%BEN_C%dgsave ) THEN
531            CALL iom_put( "BEN_C"  , za_sed_c )
532         ENDIF
533         IF ( med_diag%BEN_SI%dgsave ) THEN
534            CALL iom_put( "BEN_SI"  , za_sed_si )
535         ENDIF
536         IF ( med_diag%BEN_CA%dgsave ) THEN
537            CALL iom_put( "BEN_CA"  , za_sed_ca )
538         ENDIF
539         IF ( med_diag%RUNOFF%dgsave ) THEN
540            CALL iom_put( "RUNOFF"  , f_runoff )
541         ENDIF 
542# if defined key_roam       
543         IF ( med_diag%N_PROD%dgsave ) THEN
544            CALL iom_put( "N_PROD"  , fnit_prod )
545         ENDIF
546         IF ( med_diag%N_CONS%dgsave ) THEN
547            CALL iom_put( "N_CONS"  , fnit_cons )
548         ENDIF
549         IF ( med_diag%C_PROD%dgsave ) THEN
550            CALL iom_put( "C_PROD"  , fcar_prod )
551         ENDIF
552         IF ( med_diag%C_CONS%dgsave ) THEN
553            CALL iom_put( "C_CONS"  , fcar_cons )
554         ENDIF
555         IF ( med_diag%O2_PROD%dgsave ) THEN
556            CALL iom_put( "O2_PROD"  , foxy_prod )
557         ENDIF
558         IF ( med_diag%O2_CONS%dgsave ) THEN
559            CALL iom_put( "O2_CONS"  , foxy_cons )
560         ENDIF
561         IF ( med_diag%O2_ANOX%dgsave ) THEN
562            CALL iom_put( "O2_ANOX"  , foxy_anox )
563         ENDIF
564         IF ( med_diag%INVTC%dgsave ) THEN
565            CALL iom_put( "INVTC"  , ftot_c )
566         ENDIF
567         IF ( med_diag%INVTALK%dgsave ) THEN
568            CALL iom_put( "INVTALK"  , ftot_a )
569         ENDIF
570         IF ( med_diag%INVTO2%dgsave ) THEN
571            CALL iom_put( "INVTO2"  , ftot_o2 )
572         ENDIF
573         IF ( med_diag%COM_RESP%dgsave ) THEN
574            CALL iom_put( "COM_RESP"  , fcomm_resp )
575         ENDIF         
576# endif     
577         !!
578         !! diagnostic filled in the i-j-k main loop
579         !!--------------------------------------------
580         IF ( med_diag%PRN%dgsave ) THEN
581            CALL iom_put( "PRN"  , fprn2d )
582            CALL wrk_dealloc( jpi, jpj,   fprn2d   )
583         ENDIF
584         IF ( med_diag%MPN%dgsave ) THEN
585            CALL iom_put( "MPN"  ,fdpn2d  )
586            CALL wrk_dealloc( jpi, jpj,    fdpn2d  )
587         ENDIF
588         IF ( med_diag%PRD%dgsave ) THEN
589            CALL iom_put( "PRD"  ,fprd2d  )
590            CALL wrk_dealloc( jpi, jpj,   fprd2d  )
591         ENDIF
592         IF( med_diag%MPD%dgsave ) THEN
593            CALL iom_put( "MPD"  , fdpd2d )
594            CALL wrk_dealloc( jpi, jpj,    fdpd2d )
595         ENDIF
596         !  IF( med_diag%DSED%dgsave ) THEN
597         !      CALL iom_put( "DSED"  , ftot_n )
598         !  ENDIF
599         IF( med_diag%OPAL%dgsave ) THEN
600            CALL iom_put( "OPAL"  , fprds2d )
601            CALL wrk_dealloc( jpi, jpj,   fprds2d  )
602         ENDIF
603         IF( med_diag%OPALDISS%dgsave ) THEN
604            CALL iom_put( "OPALDISS"  , fsdiss2d )
605            CALL wrk_dealloc( jpi, jpj,   fsdiss2d  )
606         ENDIF
607         IF( med_diag%GMIPn%dgsave ) THEN
608            CALL iom_put( "GMIPn"  , fgmipn2d )
609            CALL wrk_dealloc( jpi, jpj,   fgmipn2d  )
610         ENDIF
611         IF( med_diag%GMID%dgsave ) THEN
612            CALL iom_put( "GMID"  , fgmid2d )
613            CALL wrk_dealloc( jpi, jpj,  fgmid2d  )
614         ENDIF
615         IF( med_diag%MZMI%dgsave ) THEN
616            CALL iom_put( "MZMI"  , fdzmi2d )
617            CALL wrk_dealloc( jpi, jpj,   fdzmi2d   )
618         ENDIF
619         IF( med_diag%GMEPN%dgsave ) THEN
620            CALL iom_put( "GMEPN"  , fgmepn2d )
621            CALL wrk_dealloc( jpi, jpj,   fgmepn2d  )
622         ENDIF
623         IF( med_diag%GMEPD%dgsave ) THEN
624            CALL iom_put( "GMEPD"  , fgmepd2d )
625            CALL wrk_dealloc( jpi, jpj,   fgmepd2d   )
626         ENDIF
627         IF( med_diag%GMEZMI%dgsave ) THEN
628            CALL iom_put( "GMEZMI"  , fgmezmi2d )
629            CALL wrk_dealloc( jpi, jpj,   fgmezmi2d   )
630         ENDIF
631         IF( med_diag%GMED%dgsave ) THEN
632            CALL iom_put( "GMED"  , fgmed2d )
633            CALL wrk_dealloc( jpi, jpj,    fgmed2d  )
634         ENDIF
635         IF( med_diag%MZME%dgsave ) THEN
636            CALL iom_put( "MZME"  , fdzme2d )
637            CALL wrk_dealloc( jpi, jpj,  fdzme2d    )
638         ENDIF
639         !  IF( med_diag%DEXP%dgsave ) THEN
640         !      CALL iom_put( "DEXP"  , ftot_n )
641         !  ENDIF
642         IF( med_diag%DETN%dgsave ) THEN
643            CALL iom_put( "DETN"  , fslown2d )
644            CALL wrk_dealloc( jpi, jpj,  fslown2d    )
645         ENDIF
646         IF( med_diag%MDET%dgsave ) THEN
647            CALL iom_put( "MDET"  , fdd2d )
648            CALL wrk_dealloc( jpi, jpj,   fdd2d   )
649         ENDIF
650         IF( med_diag%AEOLIAN%dgsave ) THEN
651            CALL iom_put( "AEOLIAN"  , ffetop2d )
652            CALL wrk_dealloc( jpi, jpj,   ffetop2d   )
653         ENDIF
654         IF( med_diag%BENTHIC%dgsave ) THEN
655            CALL iom_put( "BENTHIC"  , ffebot2d )
656            CALL wrk_dealloc( jpi, jpj,   ffebot2d   )
657         ENDIF
658         IF( med_diag%SCAVENGE%dgsave ) THEN
659            CALL iom_put( "SCAVENGE"  , ffescav2d )
660            CALL wrk_dealloc( jpi, jpj,   ffescav2d  )
661         ENDIF
662         !!
663         IF( med_diag%TOTREG_N%dgsave ) THEN
664            CALL iom_put( "TOTREG_N"  , fregen2d )
665            CALL wrk_dealloc( jpi, jpj,   fregen2d   )
666         ENDIF
667         IF( med_diag%TOTRG_SI%dgsave ) THEN
668            CALL iom_put( "TOTRG_SI"  , fregensi2d )
669            CALL wrk_dealloc( jpi, jpj,    fregensi2d  )
670         ENDIF
671         !!
672         IF( med_diag%FASTN%dgsave ) THEN
673            CALL iom_put( "FASTN"  , ftempn2d )
674            CALL wrk_dealloc( jpi, jpj,   ftempn2d   )
675         ENDIF
676         IF( med_diag%FASTSI%dgsave ) THEN
677            CALL iom_put( "FASTSI"  , ftempsi2d )
678            CALL wrk_dealloc( jpi, jpj,   ftempsi2d   )
679         ENDIF
680         IF( med_diag%FASTFE%dgsave ) THEN
681            CALL iom_put( "FASTFE"  , ftempfe2d )
682            CALL wrk_dealloc( jpi, jpj,    ftempfe2d  )
683         ENDIF
684         IF( med_diag%FASTC%dgsave ) THEN
685            CALL iom_put( "FASTC"  , ftempc2d )
686            CALL wrk_dealloc( jpi, jpj,  ftempc2d    )
687         ENDIF
688         IF( med_diag%FASTCA%dgsave ) THEN
689            CALL iom_put( "FASTCA"  , ftempca2d )
690            CALL wrk_dealloc( jpi, jpj,  ftempca2d   )
691         ENDIF
692         !!
693         IF( med_diag%REMINN%dgsave ) THEN
694            CALL iom_put( "REMINN"  , freminn2d )
695            CALL wrk_dealloc( jpi, jpj,   freminn2d   )
696         ENDIF
697         IF( med_diag%REMINSI%dgsave ) THEN
698            CALL iom_put( "REMINSI"  , freminsi2d )
699            CALL wrk_dealloc( jpi, jpj,   freminsi2d   )
700         ENDIF
701         IF( med_diag%REMINFE%dgsave ) THEN
702            CALL iom_put( "REMINFE"  , freminfe2d )
703            CALL wrk_dealloc( jpi, jpj,  freminfe2d    )
704         ENDIF
705         IF( med_diag%REMINC%dgsave ) THEN
706            CALL iom_put( "REMINC"  , freminc2d )
707            CALL wrk_dealloc( jpi, jpj,    freminc2d  )
708         ENDIF
709         IF( med_diag%REMINCA%dgsave ) THEN
710            CALL iom_put( "REMINCA"  , freminca2d )
711            CALL wrk_dealloc( jpi, jpj,   freminca2d  )
712         ENDIF
713         IF( med_diag%SEAFLRN%dgsave ) THEN
714            CALL iom_put( "SEAFLRN"  , fsedn )
715         ENDIF
716         IF( med_diag%SEAFLRSI%dgsave ) THEN
717            CALL iom_put( "SEAFLRSI"  , fsedsi )
718         ENDIF
719         IF( med_diag%SEAFLRFE%dgsave ) THEN
720            CALL iom_put( "SEAFLRFE"  , fsedfe )
721         ENDIF
722         IF( med_diag%SEAFLRC%dgsave ) THEN
723            CALL iom_put( "SEAFLRC"  , fsedc )
724         ENDIF
725         IF( med_diag%SEAFLRCA%dgsave ) THEN
726            CALL iom_put( "SEAFLRCA"  , fsedca )
727         ENDIF
728         !!
729# if defined key_roam           
730         !!
731         IF( med_diag%RIV_N%dgsave ) THEN
732            CALL iom_put( "RIV_N"  , rivn2d )
733            CALL wrk_dealloc( jpi, jpj,    rivn2d  )
734         ENDIF
735         IF( med_diag%RIV_SI%dgsave ) THEN
736            CALL iom_put( "RIV_SI"  , rivsi2d )
737            CALL wrk_dealloc( jpi, jpj,   rivsi2d   )
738         ENDIF
739         IF( med_diag%RIV_C%dgsave ) THEN
740            CALL iom_put( "RIV_C"  , rivc2d )
741            CALL wrk_dealloc( jpi, jpj,    rivc2d  )
742         ENDIF
743         IF( med_diag%RIV_ALK%dgsave ) THEN
744            CALL iom_put( "RIV_ALK"  , rivalk2d )
745            CALL wrk_dealloc( jpi, jpj,  rivalk2d    )
746         ENDIF
747         IF( med_diag%DETC%dgsave ) THEN
748            CALL iom_put( "DETC"  , fslowc2d )
749            CALL wrk_dealloc( jpi, jpj,   fslowc2d   )
750         ENDIF
751         !!
752         IF( med_diag%PN_LLOSS%dgsave ) THEN
753            CALL iom_put( "PN_LLOSS"  , fdpn22d )
754            CALL wrk_dealloc( jpi, jpj,   fdpn22d   )
755         ENDIF
756         IF( med_diag%PD_LLOSS%dgsave ) THEN
757            CALL iom_put( "PD_LLOSS"  , fdpd22d )
758            CALL wrk_dealloc( jpi, jpj,   fdpd22d   )
759         ENDIF
760         IF( med_diag%ZI_LLOSS%dgsave ) THEN
761            CALL iom_put( "ZI_LLOSS"  , fdzmi22d )
762             CALL wrk_dealloc( jpi, jpj,    fdzmi22d  )
763          ENDIF
764          IF( med_diag%ZE_LLOSS%dgsave ) THEN
765             CALL iom_put( "ZE_LLOSS"  , fdzme22d )
766             CALL wrk_dealloc( jpi, jpj,   fdzme22d   )
767          ENDIF
768          IF( med_diag%ZI_MES_N%dgsave ) THEN
769             CALL iom_put( "ZI_MES_N"  , zimesn2d )
770             CALL wrk_dealloc( jpi, jpj,    zimesn2d  )
771          ENDIF
772          IF( med_diag%ZI_MES_D%dgsave ) THEN
773             CALL iom_put( "ZI_MES_D"  , zimesd2d )
774             CALL wrk_dealloc( jpi, jpj,    zimesd2d  )
775          ENDIF
776          IF( med_diag%ZI_MES_C%dgsave ) THEN
777             CALL iom_put( "ZI_MES_C"  , zimesc2d )
778             CALL wrk_dealloc( jpi, jpj,    zimesc2d  )
779          ENDIF
780          IF( med_diag%ZI_MESDC%dgsave ) THEN
781             CALL iom_put( "ZI_MESDC"  ,zimesdc2d  )
782             CALL wrk_dealloc( jpi, jpj,    zimesdc2d  )
783          ENDIF
784          IF( med_diag%ZI_EXCR%dgsave ) THEN
785             CALL iom_put( "ZI_EXCR"  , ziexcr2d )
786             CALL wrk_dealloc( jpi, jpj,    ziexcr2d )
787          ENDIF
788          IF( med_diag%ZI_RESP%dgsave ) THEN
789             CALL iom_put( "ZI_RESP"  , ziresp2d )
790             CALL wrk_dealloc( jpi, jpj,   ziresp2d   )
791          ENDIF
792          IF( med_diag%ZI_GROW%dgsave ) THEN
793             CALL iom_put( "ZI_GROW"  , zigrow2d )
794             CALL wrk_dealloc( jpi, jpj,   zigrow2d   )
795          ENDIF
796          IF( med_diag%ZE_MES_N%dgsave ) THEN
797             CALL iom_put( "ZE_MES_N"  , zemesn2d )
798             CALL wrk_dealloc( jpi, jpj,    zemesn2d  )
799          ENDIF
800          IF( med_diag%ZE_MES_D%dgsave ) THEN
801             CALL iom_put( "ZE_MES_D"  , zemesd2d )
802             CALL wrk_dealloc( jpi, jpj,    zemesd2d  )
803          ENDIF
804          IF( med_diag%ZE_MES_C%dgsave ) THEN
805             CALL iom_put( "ZE_MES_C"  , zemesc2d )
806             CALL wrk_dealloc( jpi, jpj,   zemesc2d   )
807          ENDIF
808          IF( med_diag%ZE_MESDC%dgsave ) THEN
809             CALL iom_put( "ZE_MESDC"  , zemesdc2d )
810             CALL wrk_dealloc( jpi, jpj,   zemesdc2d   )
811          ENDIF
812          IF( med_diag%ZE_EXCR%dgsave ) THEN
813             CALL iom_put( "ZE_EXCR"  , zeexcr2d )
814             CALL wrk_dealloc( jpi, jpj,   zeexcr2d   )
815          ENDIF
816          IF( med_diag%ZE_RESP%dgsave ) THEN
817             CALL iom_put( "ZE_RESP"  , zeresp2d )
818             CALL wrk_dealloc( jpi, jpj,    zeresp2d  )
819          ENDIF
820          IF( med_diag%ZE_GROW%dgsave ) THEN
821             CALL iom_put( "ZE_GROW"  , zegrow2d )
822             CALL wrk_dealloc( jpi, jpj,   zegrow2d   )
823          ENDIF
824          IF( med_diag%MDETC%dgsave ) THEN
825             CALL iom_put( "MDETC"  , mdetc2d )
826             CALL wrk_dealloc( jpi, jpj,   mdetc2d   )
827          ENDIF
828          IF( med_diag%GMIDC%dgsave ) THEN
829             CALL iom_put( "GMIDC"  , gmidc2d )
830             CALL wrk_dealloc( jpi, jpj,    gmidc2d  )
831          ENDIF
832          IF( med_diag%GMEDC%dgsave ) THEN
833             CALL iom_put( "GMEDC"  , gmedc2d )
834             CALL wrk_dealloc( jpi, jpj,    gmedc2d  )
835          ENDIF
836          IF( med_diag%IBEN_N%dgsave ) THEN
837             CALL iom_put( "IBEN_N"  , iben_n2d )
838             CALL wrk_dealloc( jpi, jpj,    iben_n2d  )
839          ENDIF
840          IF( med_diag%IBEN_FE%dgsave ) THEN
841             CALL iom_put( "IBEN_FE"  , iben_fe2d )
842             CALL wrk_dealloc( jpi, jpj,   iben_fe2d   )
843          ENDIF
844          IF( med_diag%IBEN_C%dgsave ) THEN
845             CALL iom_put( "IBEN_C"  , iben_c2d )
846             CALL wrk_dealloc( jpi, jpj,   iben_c2d   )
847          ENDIF
848          IF( med_diag%IBEN_SI%dgsave ) THEN
849             CALL iom_put( "IBEN_SI"  , iben_si2d )
850             CALL wrk_dealloc( jpi, jpj,   iben_si2d   )
851          ENDIF
852          IF( med_diag%IBEN_CA%dgsave ) THEN
853             CALL iom_put( "IBEN_CA"  , iben_ca2d )
854             CALL wrk_dealloc( jpi, jpj,   iben_ca2d   )
855          ENDIF
856          IF( med_diag%OBEN_N%dgsave ) THEN
857             CALL iom_put( "OBEN_N"  , oben_n2d )
858             CALL wrk_dealloc( jpi, jpj,    oben_n2d  )
859          ENDIF
860          IF( med_diag%OBEN_FE%dgsave ) THEN
861             CALL iom_put( "OBEN_FE"  , oben_fe2d )
862             CALL wrk_dealloc( jpi, jpj,    oben_fe2d  )
863          ENDIF
864          IF( med_diag%OBEN_C%dgsave ) THEN
865             CALL iom_put( "OBEN_C"  , oben_c2d )
866             CALL wrk_dealloc( jpi, jpj,    oben_c2d  )
867          ENDIF
868          IF( med_diag%OBEN_SI%dgsave ) THEN
869             CALL iom_put( "OBEN_SI"  , oben_si2d )
870             CALL wrk_dealloc( jpi, jpj,    oben_si2d  )
871          ENDIF
872          IF( med_diag%OBEN_CA%dgsave ) THEN
873             CALL iom_put( "OBEN_CA"  , oben_ca2d )
874             CALL wrk_dealloc( jpi, jpj, oben_ca2d     )
875          ENDIF
876          IF( med_diag%SFR_OCAL%dgsave ) THEN
877             CALL iom_put( "SFR_OCAL"  , sfr_ocal2d )
878             CALL wrk_dealloc( jpi, jpj,    sfr_ocal2d  )
879          ENDIF
880          IF( med_diag%SFR_OARG%dgsave ) THEN
881             CALL iom_put( "SFR_OARG"  , sfr_oarg2d )
882             CALL wrk_dealloc( jpi, jpj,    sfr_oarg2d  )
883          ENDIF
884          IF( med_diag%LYSO_CA%dgsave ) THEN
885             CALL iom_put( "LYSO_CA"  , lyso_ca2d )
886             CALL wrk_dealloc( jpi, jpj,    lyso_ca2d  )
887          ENDIF
888# endif                   
889          !!
890          !! ** 3D diagnostics
891          IF( med_diag%TPP3%dgsave ) THEN
892             CALL iom_put( "TPP3"  , tpp3d )
893             CALL wrk_dealloc( jpi, jpj, jpk,   tpp3d  )
894          ENDIF
895          IF( med_diag%DETFLUX3%dgsave ) THEN
896             CALL iom_put( "DETFLUX3"  , detflux3d )
897             CALL wrk_dealloc( jpi, jpj, jpk,    detflux3d )
898          ENDIF
899          IF( med_diag%REMIN3N%dgsave ) THEN
900             CALL iom_put( "REMIN3N"  , remin3dn )
901             CALL wrk_dealloc( jpi, jpj, jpk,   remin3dn  )
902          ENDIF
903# if defined key_roam         
904          IF( med_diag%PH3%dgsave ) THEN
905             CALL iom_put( "PH3"  , f3_pH )
906          ENDIF
907          IF( med_diag%OM_CAL3%dgsave ) THEN
908             CALL iom_put( "OM_CAL3"  , f3_omcal )
909          ENDIF
910          !!
911          !! AXY (09/11/16): 2D CMIP6 diagnostics
912          IF( med_diag%INTDISSIC%dgsave ) THEN
913             CALL iom_put( "INTDISSIC"  , intdissic )
914             CALL wrk_dealloc( jpi, jpj, intdissic   )
915          ENDIF         
916          IF( med_diag%INTDISSIN%dgsave ) THEN
917             CALL iom_put( "INTDISSIN"  , intdissin )
918             CALL wrk_dealloc( jpi, jpj, intdissin   )
919          ENDIF         
920          IF( med_diag%INTDISSISI%dgsave ) THEN
921             CALL iom_put( "INTDISSISI"  , intdissisi )
922             CALL wrk_dealloc( jpi, jpj, intdissisi  )
923          ENDIF         
924          IF( med_diag%INTTALK%dgsave ) THEN
925             CALL iom_put( "INTTALK"  , inttalk )
926             CALL wrk_dealloc( jpi, jpj, inttalk     )
927          ENDIF         
928          IF( med_diag%O2min%dgsave ) THEN
929             CALL iom_put( "O2min"  , o2min )
930             CALL wrk_dealloc( jpi, jpj, o2min       )
931          ENDIF         
932          IF( med_diag%ZO2min%dgsave ) THEN
933             CALL iom_put( "ZO2min"  , zo2min )
934             CALL wrk_dealloc( jpi, jpj, zo2min      )
935          ENDIF         
936          IF( med_diag%FBDDTALK%dgsave ) THEN
937             CALL iom_put( "FBDDTALK"  , fbddtalk   )
938             CALL wrk_dealloc( jpi, jpj, fbddtalk   )
939          ENDIF         
940          IF( med_diag%FBDDTDIC%dgsave ) THEN
941             CALL iom_put( "FBDDTDIC"  , fbddtdic   )
942             CALL wrk_dealloc( jpi, jpj, fbddtdic   )
943          ENDIF         
944          IF( med_diag%FBDDTDIFE%dgsave ) THEN
945             CALL iom_put( "FBDDTDIFE" , fbddtdife  )
946             CALL wrk_dealloc( jpi, jpj, fbddtdife  )
947          ENDIF         
948          IF( med_diag%FBDDTDIN%dgsave ) THEN
949             CALL iom_put( "FBDDTDIN"  , fbddtdin   )
950             CALL wrk_dealloc( jpi, jpj, fbddtdin   )
951          ENDIF         
952          IF( med_diag%FBDDTDISI%dgsave ) THEN
953             CALL iom_put( "FBDDTDISI" , fbddtdisi  )
954             CALL wrk_dealloc( jpi, jpj, fbddtdisi  )
955          ENDIF   
956          !!
957          !! AXY (09/11/16): 3D CMIP6 diagnostics
958          IF( med_diag%TPPD3%dgsave ) THEN
959             CALL iom_put( "TPPD3"     , tppd3 )
960             CALL wrk_dealloc( jpi, jpj, jpk, tppd3      )
961          ENDIF         
962          IF( med_diag%BDDTALK3%dgsave ) THEN
963             CALL iom_put( "BDDTALK3"  , bddtalk3 )
964             CALL wrk_dealloc( jpi, jpj, jpk, bddtalk3   )
965          ENDIF         
966          IF( med_diag%BDDTDIC3%dgsave ) THEN
967             CALL iom_put( "BDDTDIC3"  , bddtdic3 )
968             CALL wrk_dealloc( jpi, jpj, jpk, bddtdic3   )
969          ENDIF         
970          IF( med_diag%BDDTDIFE3%dgsave ) THEN
971             CALL iom_put( "BDDTDIFE3" , bddtdife3 )
972             CALL wrk_dealloc( jpi, jpj, jpk, bddtdife3  )
973          ENDIF         
974          IF( med_diag%BDDTDIN3%dgsave ) THEN
975             CALL iom_put( "BDDTDIN3"  , bddtdin3 )
976             CALL wrk_dealloc( jpi, jpj, jpk, bddtdin3   )
977          ENDIF         
978          IF( med_diag%BDDTDISI3%dgsave ) THEN
979             CALL iom_put( "BDDTDISI3" , bddtdisi3 )
980             CALL wrk_dealloc( jpi, jpj, jpk, bddtdisi3  )
981          ENDIF   
982          IF( med_diag%FD_NIT3%dgsave ) THEN
983             CALL iom_put( "FD_NIT3"  , fd_nit3 )
984             CALL wrk_dealloc( jpi, jpj, jpk,   fd_nit3  )
985          ENDIF
986          IF( med_diag%FD_SIL3%dgsave ) THEN
987             CALL iom_put( "FD_SIL3"  , fd_sil3 )
988             CALL wrk_dealloc( jpi, jpj, jpk,   fd_sil3  )
989          ENDIF
990          IF( med_diag%FD_CAL3%dgsave ) THEN
991             CALL iom_put( "FD_CAL3"  , fd_cal3 )
992             CALL wrk_dealloc( jpi, jpj, jpk,   fd_cal3  )
993          ENDIF
994          IF( med_diag%FD_CAR3%dgsave ) THEN
995             CALL iom_put( "FD_CAR3"  , fd_car3 )
996             CALL wrk_dealloc( jpi, jpj, jpk,   fd_car3  )
997          ENDIF
998          IF( med_diag%CO33%dgsave ) THEN
999             CALL iom_put( "CO33"  , f3_co3 )
1000          ENDIF                   
1001          IF( med_diag%CO3SATARAG3%dgsave ) THEN
1002             CALL iom_put( "CO3SATARAG3"  , f3_omarg )
1003          ENDIF                   
1004          IF( med_diag%CO3SATCALC3%dgsave ) THEN
1005             CALL iom_put( "CO3SATCALC3"  , f3_omcal )
1006          ENDIF                   
1007          IF( med_diag%EXPC3%dgsave ) THEN
1008             CALL iom_put( "EXPC3"  , expc3 )
1009             CALL wrk_dealloc( jpi, jpj, jpk, expc3  )
1010          ENDIF                   
1011          IF( med_diag%EXPN3%dgsave ) THEN
1012             CALL iom_put( "EXPN3"  , expn3 )
1013             CALL wrk_dealloc( jpi, jpj, jpk, expn3  )
1014          ENDIF                   
1015          IF( med_diag%DCALC3%dgsave ) THEN
1016             CALL iom_put( "DCALC3"  , dcalc3 )
1017             CALL wrk_dealloc( jpi, jpj, jpk, dcalc3  )
1018          ENDIF                   
1019          IF( med_diag%FEDISS3%dgsave ) THEN
1020             CALL iom_put( "FEDISS3"  , fediss3 )
1021             CALL wrk_dealloc( jpi, jpj, jpk, fediss3  )
1022          ENDIF                   
1023          IF( med_diag%FESCAV3%dgsave ) THEN
1024             CALL iom_put( "FESCAV3"  , fescav3 )
1025             CALL wrk_dealloc( jpi, jpj, jpk, fescav3  )
1026          ENDIF                   
1027          IF( med_diag%MIGRAZP3%dgsave ) THEN
1028             CALL iom_put( "MIGRAZP3"  , migrazp3 )
1029             CALL wrk_dealloc( jpi, jpj, jpk, migrazp3  )
1030          ENDIF                   
1031          IF( med_diag%MIGRAZD3%dgsave ) THEN
1032             CALL iom_put( "MIGRAZD3"  , migrazd3 )
1033             CALL wrk_dealloc( jpi, jpj, jpk, migrazd3  )
1034          ENDIF                   
1035          IF( med_diag%MEGRAZP3%dgsave ) THEN
1036             CALL iom_put( "MEGRAZP3"  , megrazp3 )
1037             CALL wrk_dealloc( jpi, jpj, jpk, megrazp3  )
1038          ENDIF                   
1039          IF( med_diag%MEGRAZD3%dgsave ) THEN
1040             CALL iom_put( "MEGRAZD3"  , megrazd3 )
1041             CALL wrk_dealloc( jpi, jpj, jpk, megrazd3  )
1042          ENDIF                   
1043          IF( med_diag%MEGRAZZ3%dgsave ) THEN
1044             CALL iom_put( "MEGRAZZ3"  , megrazz3 )
1045             CALL wrk_dealloc( jpi, jpj, jpk, megrazz3  )
1046          ENDIF                   
1047          IF( med_diag%O2SAT3%dgsave ) THEN
1048             CALL iom_put( "O2SAT3"  , o2sat3 )
1049             CALL wrk_dealloc( jpi, jpj, jpk, o2sat3 )
1050          ENDIF                   
1051          IF( med_diag%PBSI3%dgsave ) THEN
1052             CALL iom_put( "PBSI3"  , pbsi3 )
1053             CALL wrk_dealloc( jpi, jpj, jpk, pbsi3  )
1054          ENDIF                   
1055          IF( med_diag%PCAL3%dgsave ) THEN
1056             CALL iom_put( "PCAL3"  , pcal3 )
1057             CALL wrk_dealloc( jpi, jpj, jpk, pcal3  )
1058          ENDIF                   
1059          IF( med_diag%REMOC3%dgsave ) THEN
1060             CALL iom_put( "REMOC3"  , remoc3 )
1061             CALL wrk_dealloc( jpi, jpj, jpk, remoc3 )
1062          ENDIF                   
1063          IF( med_diag%PNLIMJ3%dgsave ) THEN
1064             CALL iom_put( "PNLIMJ3" , pnlimj3 )
1065             CALL wrk_dealloc( jpi, jpj, jpk, pnlimj3  )
1066          ENDIF                   
1067          IF( med_diag%PNLIMN3%dgsave ) THEN
1068             CALL iom_put( "PNLIMN3" , pnlimn3 )
1069             CALL wrk_dealloc( jpi, jpj, jpk, pnlimn3  )
1070          ENDIF                   
1071          IF( med_diag%PNLIMFE3%dgsave ) THEN
1072             CALL iom_put( "PNLIMFE3" , pnlimfe3 )
1073             CALL wrk_dealloc( jpi, jpj, jpk, pnlimfe3 )
1074          ENDIF                   
1075          IF( med_diag%PDLIMJ3%dgsave ) THEN
1076             CALL iom_put( "PDLIMJ3" , pdlimj3 )
1077             CALL wrk_dealloc( jpi, jpj, jpk, pdlimj3  )
1078          ENDIF                   
1079          IF( med_diag%PDLIMN3%dgsave ) THEN
1080             CALL iom_put( "PDLIMN3" , pdlimn3 )
1081             CALL wrk_dealloc( jpi, jpj, jpk, pdlimn3  )
1082          ENDIF                   
1083          IF( med_diag%PDLIMFE3%dgsave ) THEN
1084             CALL iom_put( "PDLIMFE3" , pdlimfe3 )
1085             CALL wrk_dealloc( jpi, jpj, jpk, pdlimfe3 )
1086          ENDIF                   
1087          IF( med_diag%PDLIMSI3%dgsave ) THEN
1088             CALL iom_put( "PDLIMSI3" , pdlimsi3 )
1089             CALL wrk_dealloc( jpi, jpj, jpk, pdlimsi3 )
1090          ENDIF                   
1091         
1092# endif         
1093
1094          CALL wrk_dealloc( jpi, jpj,   zw2d   )
1095
1096       ENDIF                    ! end of ln_diatrc option
1097
1098   END SUBROUTINE bio_medusa_fin
1099
1100#else
1101   !!======================================================================
1102   !!  Dummy module :                                   No MEDUSA bio-model
1103   !!======================================================================
1104CONTAINS
1105   SUBROUTINE bio_medusa_fin( )                    ! Empty routine
1106      WRITE(*,*) 'bio_medusa_fin: You should not have seen this print! error?'
1107   END SUBROUTINE bio_medusa_fin
1108#endif 
1109
1110   !!======================================================================
1111END MODULE bio_medusa_fin_mod
Note: See TracBrowser for help on using the repository browser.