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

source: branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_fin.F90 @ 10020

Last change on this file since 10020 was 10020, checked in by marc, 6 years ago

GMED ticket 406. CPP key fixes.

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