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 @ 8023

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

Tidying up of headers for several files

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