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/NERC/dev_r5518_GO6_split_trcbiomedusa/NEMOGCM/NEMO/TOP_SRC/MEDUSA – NEMO

source: branches/NERC/dev_r5518_GO6_split_trcbiomedusa/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_fin.F90 @ 8423

Last change on this file since 8423 was 8423, checked in by jpalmier, 7 years ago

JPALM -- 08-08-2017 -- add conservation test - correct MEDUSA jn loop

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