New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
bio_medusa_fin.F90 in branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/MEDUSA – NEMO

source: branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_fin.F90 @ 9292

Last change on this file since 9292 was 9292, checked in by dford, 6 years ago

Merge in changes from dev_r5518_GO6_package_asm_surf_bgc_v2.

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