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

source: branches/NERC/dev_r5518_GO6_fix_medusa_debug/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_fin.F90 @ 14864

Last change on this file since 14864 was 14864, checked in by jpalmier, 4 years ago

Fix debug key related bugs... -_-

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