source: branches/UKMO/dev_r5518_GO6_package_asm_surf_bgc_v2/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_fin.F90 @ 8495

Last change on this file since 8495 was 8495, checked in by dford, 3 years ago

Merge in changes from dev_r5518_GO6_package_asm_surf_bgc, and adapt to the updated MEDUSA structure.

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