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_diag_slice.F90 in branches/UKMO/dev_r5518_GO6_under_ice_relax_dr_hook/NEMOGCM/NEMO/TOP_SRC/MEDUSA – NEMO

source: branches/UKMO/dev_r5518_GO6_under_ice_relax_dr_hook/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_diag_slice.F90 @ 11738

Last change on this file since 11738 was 11738, checked in by marc, 4 years ago

The Dr Hook changes from my perl code.

File size: 19.8 KB
Line 
1MODULE bio_medusa_diag_slice_mod
2   !!======================================================================
3   !!                         ***  MODULE bio_medusa_diag_slice_mod  ***
4   !! Diagnostic calculations at different levels
5   !!======================================================================
6   !! History :
7   !!   -   ! 2017-04 (M. Stringer)        Code taken from trcbio_medusa.F90
8   !!   -   ! 2018-08 (A. Yool)            add OMIP preindustrial DIC
9   !!   -   ! 2018-10 (A. Yool)            Add air-sea DMS flux
10   !!----------------------------------------------------------------------
11#if defined key_medusa
12   !!----------------------------------------------------------------------
13   !!                                                   MEDUSA bio-model
14   !!----------------------------------------------------------------------
15
16   USE yomhook, ONLY: lhook, dr_hook
17   USE parkind1, ONLY: jprb, jpim
18
19   IMPLICIT NONE
20   PRIVATE
21     
22   PUBLIC   bio_medusa_diag_slice     ! Called in trcbio_medusa.F90
23
24   !!----------------------------------------------------------------------
25   !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007)
26   !! $Id$
27   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
28   !!----------------------------------------------------------------------
29
30CONTAINS
31
32   SUBROUTINE bio_medusa_diag_slice( jk )
33      !!---------------------------------------------------------------------
34      !!                     ***  ROUTINE bio_medusa_diag_slice  ***
35      !! This called from TRC_BIO_MEDUSA and
36      !!  - ...
37      !!----------------------------------------------------------------------
38      USE bio_medusa_mod
39      USE par_medusa,        ONLY: jpchd, jpchn     
40      USE dom_oce,           ONLY: tmask
41      USE in_out_manager,    ONLY: lwp, numout
42      USE iom,               ONLY: iom_put
43      USE lbclnk,            ONLY: lbc_lnk
44      USE oce,               ONLY: CO2Flux_out_cpl, DMS_out_cpl
45      USE par_oce,           ONLY: jpi, jpj
46      USE sbc_oce,           ONLY: lk_oasis, qsr, wndm
47      USE sms_medusa,        ONLY: i0100, i0150, i0200, i0500, i1000,      &
48                                   f2_ccd_arg, f2_ccd_cal,                 &
49                                   f3_co3, f3_h2co3, f3_hco3, f3_pH,       &
50                                   jdms, ocal_ccd, xpar, xze,              &
51                                   zb_co2_flx, zb_dms_srf,                 &
52                                   zn_co2_flx, zn_dms_srf
53      USE trc,               ONLY: med_diag
54
55      !! The vertical level
56      INTEGER, INTENT( in ) ::    jk
57      INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0
58      INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1
59      REAL(KIND=jprb)               :: zhook_handle
60
61      CHARACTER(LEN=*), PARAMETER :: RoutineName='BIO_MEDUSA_DIAG_SLICE'
62
63      IF (lhook) CALL dr_hook(RoutineName,zhook_in,zhook_handle)
64
65      !!----------------------------------------------------------------------
66
67      !!-----------------------------------------
68      !!
69      !! 2d specific k level diags
70      !!
71      !!-----------------------------------------
72#   if defined key_debug_medusa
73         IF (lwp) write (numout,*) 'bio_medusa_diag_slice: start jk = ', jk
74         CALL flush(numout)
75#   endif
76      !!
77      IF (jk.eq.1) THEN
78         IF( med_diag%MED_QSR%dgsave ) THEN
79            CALL iom_put( "MED_QSR"  , qsr ) !
80         ENDIF
81         IF( med_diag%MED_XPAR%dgsave ) THEN
82            CALL iom_put( "MED_XPAR"  , xpar(:,:,jk) ) !
83         ENDIF       
84         IF( med_diag%OCAL_CCD%dgsave ) THEN
85            CALL iom_put( "OCAL_CCD"  , ocal_ccd ) !
86         ENDIF
87         IF( med_diag%FE_0000%dgsave ) THEN
88            CALL iom_put( "FE_0000"  , xFree ) !
89         ENDIF                     
90         IF( med_diag%MED_XZE%dgsave ) THEN
91            CALL iom_put( "MED_XZE"  , xze ) !
92         ENDIF 
93# if defined key_roam                     
94         IF( med_diag%WIND%dgsave ) THEN
95            CALL iom_put( "WIND"  , wndm )
96         ENDIF
97         IF( med_diag%ATM_PCO2%dgsave ) THEN
98            CALL iom_put( "ATM_PCO2"  , f_pco2a2d )
99            DEALLOCATE( f_pco2a2d )
100         ENDIF
101         IF( med_diag%OCN_PH%dgsave ) THEN
102            zw2d(:,:) = f3_pH(:,:,jk)
103            CALL iom_put( "OCN_PH"  , zw2d )
104         ENDIF
105         IF( med_diag%OCN_PCO2%dgsave ) THEN
106            CALL iom_put( "OCN_PCO2"  , f_pco2w2d )
107            DEALLOCATE( f_pco2w2d )
108         ENDIF
109         IF( med_diag%OCNH2CO3%dgsave ) THEN
110            zw2d(:,:) = f3_h2co3(:,:,jk)
111            CALL iom_put( "OCNH2CO3"  , zw2d )
112         ENDIF
113         IF( med_diag%OCN_HCO3%dgsave ) THEN
114            zw2d(:,:) = f3_hco3(:,:,jk)
115            CALL iom_put( "OCN_HCO3"  , zw2d )
116         ENDIF
117         IF( med_diag%OCN_CO3%dgsave ) THEN
118            zw2d(:,:) = f3_co3(:,:,jk)
119            CALL iom_put( "OCN_CO3"  , zw2d )
120         ENDIF
121         IF( med_diag%CO2FLUX%dgsave ) THEN
122            CALL iom_put( "CO2FLUX"  , f_co2flux2d )
123            DEALLOCATE( f_co2flux2d )
124         ENDIF
125         !!
126         !! AXY (10/11/16): repeat CO2 flux diagnostic in UKMO/CMIP6 units;
127         !!                 this both outputs the CO2 flux in specified units
128         !!                 and sends the resulting field to the coupler
129         !! JPALM (17/11/16): put CO2 flux (fgco2) alloc/unalloc/pass to zn
130         !!                   out of diag list request
131         CALL lbc_lnk( fgco2(:,:),'T',1. )
132         IF( med_diag%FGCO2%dgsave ) THEN
133            CALL iom_put( "FGCO2"  , fgco2 )
134         ENDIF
135         !! JPALM (17/11/16): should mv this fgco2 part
136         !!                   out of lk_iomput loop
137         zb_co2_flx = zn_co2_flx
138         zn_co2_flx = fgco2
139         IF (lk_oasis) THEN
140            CO2Flux_out_cpl = zn_co2_flx
141         ENDIF
142         DEALLOCATE( fgco2 )
143         !! ---
144         IF( med_diag%OM_CAL%dgsave ) THEN
145            CALL iom_put( "OM_CAL"  , f_omcal )
146         ENDIF
147         IF( med_diag%OM_ARG%dgsave ) THEN
148            CALL iom_put( "OM_ARG"  , f_omarg )
149         ENDIF
150         IF( med_diag%TCO2%dgsave ) THEN
151            CALL iom_put( "TCO2"  , f_TDIC2d )
152            DEALLOCATE( f_TDIC2d )
153         ENDIF
154         IF( med_diag%TALK%dgsave ) THEN
155            CALL iom_put( "TALK"  , f_TALK2d )
156            DEALLOCATE( f_TALK2d )
157         ENDIF
158         IF( med_diag%KW660%dgsave ) THEN
159            CALL iom_put( "KW660"  , f_kw6602d )
160            DEALLOCATE( f_kw6602d )
161         ENDIF
162         IF( med_diag%ATM_PP0%dgsave ) THEN
163            CALL iom_put( "ATM_PP0"  , f_pp02d )
164            DEALLOCATE( f_pp02d )
165         ENDIF
166         IF( med_diag%O2FLUX%dgsave ) THEN
167            CALL iom_put( "O2FLUX"  , f_o2flux2d )
168            DEALLOCATE( f_o2flux2d )
169         ENDIF
170         IF( med_diag%O2SAT%dgsave ) THEN
171            CALL iom_put( "O2SAT"  , f_o2sat2d )
172            DEALLOCATE( f_o2sat2d )
173         ENDIF
174         IF( med_diag%CAL_CCD%dgsave ) THEN
175            CALL iom_put( "CAL_CCD"  , f2_ccd_cal )
176         ENDIF
177         IF( med_diag%ARG_CCD%dgsave ) THEN
178            CALL iom_put( "ARG_CCD"  , f2_ccd_arg )
179         ENDIF
180         IF (jdms .eq. 1) THEN
181            IF( med_diag%DMS_SURF%dgsave ) THEN
182               CALL lbc_lnk(dms_surf2d(:,:),'T',1. )
183               CALL iom_put( "DMS_SURF"  , dms_surf2d )
184               zb_dms_srf = zn_dms_srf
185               zn_dms_srf = dms_surf2d
186               IF (lk_oasis) THEN
187                  DMS_out_cpl = zn_dms_srf
188               ENDIF
189               DEALLOCATE( dms_surf2d ) 
190            ENDIF
191            IF( med_diag%DMS_ANDR%dgsave ) THEN
192               CALL iom_put( "DMS_ANDR"  , dms_andr2d )
193               DEALLOCATE( dms_andr2d )
194            ENDIF
195            IF( med_diag%DMS_SIMO%dgsave ) THEN
196               CALL iom_put( "DMS_SIMO"  , dms_simo2d )
197               DEALLOCATE( dms_simo2d )
198            ENDIF
199            IF( med_diag%DMS_ARAN%dgsave ) THEN
200               CALL iom_put( "DMS_ARAN"  , dms_aran2d )
201               DEALLOCATE( dms_aran2d )
202            ENDIF
203            IF( med_diag%DMS_HALL%dgsave ) THEN
204               CALL iom_put( "DMS_HALL"  , dms_hall2d )
205               DEALLOCATE( dms_hall2d )
206            ENDIF
207            IF( med_diag%DMS_ANDM%dgsave ) THEN
208               CALL iom_put( "DMS_ANDM"  , dms_andm2d )
209               DEALLOCATE( dms_andm2d )
210            ENDIF
211            IF( med_diag%DMS_FLUX%dgsave ) THEN
212               CALL iom_put( "DMS_FLUX"  , dms_flux2d )
213               DEALLOCATE( dms_flux2d )
214            ENDIF
215         ENDIF
216         !! AXY (24/11/16): extra MOCSY diagnostics
217         IF( med_diag%ATM_XCO2%dgsave ) THEN
218            CALL iom_put( "ATM_XCO2"  ,   f_xco2a_2d      )
219            DEALLOCATE( f_xco2a_2d )
220         ENDIF
221         IF( med_diag%OCN_FCO2%dgsave ) THEN
222            CALL iom_put( "OCN_FCO2"  ,   f_fco2w_2d      )
223            DEALLOCATE( f_fco2w_2d )
224         ENDIF
225         IF( med_diag%ATM_FCO2%dgsave ) THEN
226            CALL iom_put( "ATM_FCO2"  ,   f_fco2a_2d      )
227            DEALLOCATE( f_fco2a_2d )
228         ENDIF
229         IF( med_diag%OCN_RHOSW%dgsave ) THEN
230            CALL iom_put( "OCN_RHOSW"  ,  f_ocnrhosw_2d   )
231            DEALLOCATE( f_ocnrhosw_2d )
232         ENDIF
233         IF( med_diag%OCN_SCHCO2%dgsave ) THEN
234            CALL iom_put( "OCN_SCHCO2"  , f_ocnschco2_2d  )
235            DEALLOCATE( f_ocnschco2_2d )
236         ENDIF
237         IF( med_diag%OCN_KWCO2%dgsave ) THEN
238            CALL iom_put( "OCN_KWCO2"  ,  f_ocnkwco2_2d   )
239            DEALLOCATE( f_ocnkwco2_2d )
240         ENDIF
241         IF( med_diag%OCN_K0%dgsave ) THEN
242            CALL iom_put( "OCN_K0"  ,     f_ocnk0_2d      )
243            DEALLOCATE( f_ocnk0_2d )
244         ENDIF
245         IF( med_diag%CO2STARAIR%dgsave ) THEN
246            CALL iom_put( "CO2STARAIR"  , f_co2starair_2d )
247            DEALLOCATE( f_co2starair_2d )
248         ENDIF
249         IF( med_diag%OCN_DPCO2%dgsave ) THEN
250            CALL iom_put( "OCN_DPCO2"  ,  f_ocndpco2_2d   )
251            DEALLOCATE( f_ocndpco2_2d )
252         ENDIF
253#  if defined key_omip_dic
254      !!----------------------------------------------------------------------
255      !! AXY (03/08/18): additional diagnostics for OMIP preindustrial DIC;
256      !!                 basically a subset of the normal diagnostics with
257      !!                 "PI_" stuck on the front; only includes those CO2
258      !!                 diagnostics that should differ under PI conditions
259      !!----------------------------------------------------------------------
260         IF( med_diag%PI_ATM_PCO2%dgsave ) THEN
261            CALL iom_put( "PI_ATM_PCO2"  , f_pi_pco2a_2d )
262            DEALLOCATE( f_pi_pco2a_2d )
263         ENDIF
264         IF( med_diag%PI_OCN_PH%dgsave ) THEN
265            CALL iom_put( "PI_OCN_PH"  , f_pi_ph_2d )
266            DEALLOCATE( f_pi_ph_2d )
267         ENDIF
268         IF( med_diag%PI_OCN_PCO2%dgsave ) THEN
269            CALL iom_put( "PI_OCN_PCO2"  , f_pi_pco2w_2d )
270            DEALLOCATE( f_pi_pco2w_2d )
271         ENDIF
272         IF( med_diag%PI_OCNH2CO3%dgsave ) THEN
273            CALL iom_put( "PI_OCNH2CO3"  , f_pi_h2co3_2d )
274            DEALLOCATE( f_pi_h2co3_2d )
275         ENDIF
276         IF( med_diag%PI_OCN_HCO3%dgsave ) THEN
277            CALL iom_put( "PI_OCN_HCO3"  , f_pi_hco3_2d )
278            DEALLOCATE( f_pi_hco3_2d )
279         ENDIF
280         IF( med_diag%PI_OCN_CO3%dgsave ) THEN
281            CALL iom_put( "PI_OCN_CO3"  , f_pi_co3_2d )
282            DEALLOCATE( f_pi_co3_2d )
283         ENDIF
284         IF( med_diag%PI_CO2FLUX%dgsave ) THEN
285            CALL iom_put( "PI_CO2FLUX"  , f_pi_co2flux_2d )
286            DEALLOCATE( f_pi_co2flux_2d )
287         ENDIF
288         IF( med_diag%PI_FGCO2%dgsave ) THEN
289            CALL iom_put( "PI_FGCO2"  , pi_fgco2 )
290            DEALLOCATE( pi_fgco2 )
291         ENDIF
292         IF( med_diag%PI_OM_CAL%dgsave ) THEN
293            CALL iom_put( "PI_OM_CAL"  , f_pi_omcal_2d )
294       DEALLOCATE( f_pi_omcal_2d )
295         ENDIF
296         IF( med_diag%PI_OM_ARG%dgsave ) THEN
297            CALL iom_put( "PI_OM_ARG"  , f_pi_omarg_2d )
298       DEALLOCATE( f_pi_omarg_2d )
299         ENDIF
300         IF( med_diag%PI_TCO2%dgsave ) THEN
301            CALL iom_put( "PI_TCO2"  , f_pi_TDIC_2d )
302            DEALLOCATE( f_pi_TDIC_2d )
303         ENDIF
304         IF( med_diag%PI_ATM_XCO2%dgsave ) THEN
305            CALL iom_put( "PI_ATM_XCO2"  ,   f_pi_xco2a_2d )
306            DEALLOCATE( f_pi_xco2a_2d )
307         ENDIF
308         IF( med_diag%PI_OCN_FCO2%dgsave ) THEN
309            CALL iom_put( "PI_OCN_FCO2"  ,   f_pi_fco2w_2d )
310            DEALLOCATE( f_pi_fco2w_2d )
311         ENDIF
312         IF( med_diag%PI_ATM_FCO2%dgsave ) THEN
313            CALL iom_put( "PI_ATM_FCO2"  ,   f_pi_fco2a_2d )
314            DEALLOCATE( f_pi_fco2a_2d )
315         ENDIF
316         IF( med_diag%PI_CO2STARAIR%dgsave ) THEN
317            CALL iom_put( "PI_CO2STARAIR"  , f_pi_co2starair_2d )
318            DEALLOCATE( f_pi_co2starair_2d )
319         ENDIF
320         IF( med_diag%PI_OCN_DPCO2%dgsave ) THEN
321            CALL iom_put( "PI_OCN_DPCO2"  ,  f_pi_ocndpco2_2d   )
322            DEALLOCATE( f_pi_ocndpco2_2d )
323         ENDIF
324#  endif
325         
326# endif                     
327      ELSE IF (jk.eq.i0100) THEN
328         IF( med_diag%SDT__100%dgsave ) THEN
329            zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk)
330            CALL iom_put( "SDT__100"  , zw2d )
331         ENDIF
332         IF( med_diag%REG__100%dgsave ) THEN
333            CALL iom_put( "REG__100"  , fregen2d )
334         ENDIF
335         IF( med_diag%FDT__100%dgsave ) THEN
336            CALL iom_put( "FDT__100"  , ffastn )
337         ENDIF           
338         IF( med_diag%RG__100F%dgsave ) THEN
339            CALL iom_put( "RG__100F"  , fregenfast )
340         ENDIF
341         IF( med_diag%FDS__100%dgsave ) THEN
342            CALL iom_put( "FDS__100"  , ffastsi )
343         ENDIF         
344         IF( med_diag%RGS_100F%dgsave ) THEN
345            CALL iom_put( "RGS_100F"  , fregenfastsi )
346         ENDIF
347         IF( med_diag%FE_0100%dgsave ) THEN
348            CALL iom_put( "FE_0100"  , xFree )
349         ENDIF
350# if defined key_roam                     
351         IF( med_diag%RR_0100%dgsave ) THEN
352            CALL iom_put( "RR_0100"  , ffastca2d )
353         ENDIF                     
354         IF( med_diag%SDC__100%dgsave ) THEN
355            zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk)
356            CALL iom_put( "SDC__100"  , zw2d )
357         ENDIF                 
358         IF( med_diag%epC100%dgsave    ) THEN
359            zw2d(:,:) = (fslowcflux + ffastc) * tmask(:,:,jk)
360            CALL iom_put( "epC100"    , zw2d )
361         ENDIF         
362         IF( med_diag%epCALC100%dgsave ) THEN
363            CALL iom_put( "epCALC100" , ffastca )
364         ENDIF         
365         IF( med_diag%epN100%dgsave    ) THEN
366            zw2d(:,:) = (fslownflux + ffastn) * tmask(:,:,jk)
367            CALL iom_put( "epN100"    , zw2d )
368         ENDIF         
369         IF( med_diag%epSI100%dgsave   ) THEN
370            CALL iom_put( "epSI100"   , ffastsi )
371         ENDIF         
372# endif                     
373      ELSE IF (jk.eq.i0200) THEN
374         IF( med_diag%SDT__200%dgsave ) THEN
375            zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk)
376            CALL iom_put( "SDT__200"  , zw2d )
377         ENDIF
378         IF( med_diag%REG__200%dgsave ) THEN
379            CALL iom_put( "REG__200"  , fregen2d )
380         ENDIF
381         IF( med_diag%FDT__200%dgsave ) THEN
382            CALL iom_put( "FDT__200"  , ffastn )
383         ENDIF
384         IF( med_diag%RG__200F%dgsave ) THEN
385            CALL iom_put( "RG__200F"  , fregenfast )
386         ENDIF
387         IF( med_diag%FDS__200%dgsave ) THEN
388            CALL iom_put( "FDS__200"  , ffastsi )
389         ENDIF
390         IF( med_diag%RGS_200F%dgsave ) THEN
391            CALL iom_put( "RGS_200F"  , fregenfastsi )
392         ENDIF
393         IF( med_diag%FE_0200%dgsave ) THEN
394            CALL iom_put( "FE_0200"   , xFree )
395         ENDIF
396# if defined key_roam                     
397         IF( med_diag%SDC__200%dgsave ) THEN
398            zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk)
399            CALL iom_put( "SDC__200"  , zw2d )
400         ENDIF
401# endif                     
402      ELSE IF (jk.eq.i0500) THEN
403         IF( med_diag%SDT__500%dgsave ) THEN
404            zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk)
405            CALL iom_put( "SDT__500"  , zw2d )
406         ENDIF
407         IF( med_diag%REG__500%dgsave ) THEN
408            CALL iom_put( "REG__500"  , fregen2d )
409         ENDIF     
410         IF( med_diag%FDT__500%dgsave ) THEN
411            CALL iom_put( "FDT__500"  , ffastn )
412         ENDIF
413         IF( med_diag%RG__500F%dgsave ) THEN
414            CALL iom_put( "RG__500F"  , fregenfast )
415         ENDIF
416         IF( med_diag%FDS__500%dgsave ) THEN
417            CALL iom_put( "FDS__500"  , ffastsi )
418         ENDIF
419         IF( med_diag%RGS_500F%dgsave ) THEN
420            CALL iom_put( "RGS_500F"  , fregenfastsi )
421         ENDIF
422         IF( med_diag%FE_0500%dgsave ) THEN
423            CALL iom_put( "FE_0500"  , xFree )
424         ENDIF
425# if defined key_roam                     
426         IF( med_diag%RR_0500%dgsave ) THEN
427            CALL iom_put( "RR_0500"  , ffastca2d )
428         ENDIF
429         IF( med_diag%SDC__500%dgsave ) THEN
430            zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk)
431            CALL iom_put( "SDC__500"  , zw2d )
432         ENDIF 
433# endif                     
434      ELSE IF (jk.eq.i1000) THEN
435         IF( med_diag%SDT_1000%dgsave ) THEN
436            zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk)
437            CALL iom_put( "SDT_1000"  , zw2d )
438         ENDIF
439         IF( med_diag%REG_1000%dgsave ) THEN
440            CALL iom_put( "REG_1000"  , fregen2d )
441         ENDIF 
442         IF( med_diag%FDT_1000%dgsave ) THEN
443            CALL iom_put( "FDT_1000"  , ffastn )
444         ENDIF
445         IF( med_diag%RG_1000F%dgsave ) THEN
446            CALL iom_put( "RG_1000F"  , fregenfast )
447         ENDIF
448         IF( med_diag%FDS_1000%dgsave ) THEN
449            CALL iom_put( "FDS_1000"  , ffastsi )
450         ENDIF
451         IF( med_diag%RGS1000F%dgsave ) THEN
452            CALL iom_put( "RGS1000F"  , fregenfastsi )
453         ENDIF
454         IF( med_diag%FE_1000%dgsave ) THEN
455            CALL iom_put( "FE_1000"  , xFree )
456         ENDIF
457# if defined key_roam                     
458         IF( med_diag%RR_1000%dgsave ) THEN
459            CALL iom_put( "RR_1000"  , ffastca2d )
460            DEALLOCATE( ffastca2d )
461         ENDIF
462         IF( med_diag%SDC_1000%dgsave ) THEN
463            zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk)
464            CALL iom_put( "SDC_1000"  , zw2d )
465         ENDIF 
466# endif                     
467      ENDIF
468      !! to do on every k loop :
469      IF( med_diag%DETFLUX3%dgsave ) THEN
470         !! detrital flux
471         detflux3d(:,:,jk) = (fslownflux(:,:) + ffastn(:,:)) * tmask(:,:,jk)
472         !CALL iom_put( "DETFLUX3"  , ftot_n )
473      ENDIF
474# if defined key_roam                     
475      IF( med_diag%EXPC3%dgsave ) THEN
476         expc3(:,:,jk) = (fslowcflux(:,:) + ffastc(:,:)) * tmask(:,:,jk)
477      ENDIF         
478      IF( med_diag%EXPN3%dgsave ) THEN
479         expn3(:,:,jk) = (fslownflux(:,:) + ffastn(:,:)) * tmask(:,:,jk)
480      ENDIF         
481# endif         
482#   if defined key_debug_medusa
483         IF (lwp) write (numout,*) 'bio_medusa_diag_slice: end jk = ', jk
484         CALL flush(numout)
485#   endif
486
487      IF (lhook) CALL dr_hook(RoutineName,zhook_out,zhook_handle)
488   END SUBROUTINE bio_medusa_diag_slice
489
490#else
491   !!======================================================================
492   !!  Dummy module :                                   No MEDUSA bio-model
493   !!======================================================================
494CONTAINS
495   SUBROUTINE bio_medusa_diag_slice( )                  ! Empty routine
496   INTEGER(KIND=jpim), PARAMETER :: zhook_in = 0
497   INTEGER(KIND=jpim), PARAMETER :: zhook_out = 1
498   REAL(KIND=jprb)               :: zhook_handle
499
500   CHARACTER(LEN=*), PARAMETER :: RoutineName='BIO_MEDUSA_DIAG_SLICE'
501
502   IF (lhook) CALL dr_hook(RoutineName,zhook_in,zhook_handle)
503
504      WRITE(*,*) 'bio_medusa_diag_slice: You should not have seen this print! error?'
505   IF (lhook) CALL dr_hook(RoutineName,zhook_out,zhook_handle)
506   END SUBROUTINE bio_medusa_diag_slice
507#endif 
508
509   !!======================================================================
510END MODULE bio_medusa_diag_slice_mod
Note: See TracBrowser for help on using the repository browser.