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

source: branches/NERC/dev_r5518_GO6_CleanMedusa/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_fin.F90 @ 8352

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

jpalm -- debug plus add conservation test print statement in debug mode

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