source: branches/UKMO/CO6_KD490_amm7_oper_fabm/NEMOGCM/NEMO/OPA_SRC/DIA/dia25h.F90 @ 8173

Last change on this file since 8173 was 8173, checked in by dford, 3 years ago

Add 25 hour mean zooplankton diagnostic.

File size: 22.0 KB
Line 
1MODULE dia25h 
2   !!======================================================================
3   !!                       ***  MODULE  diaharm  ***
4   !! Harmonic analysis of tidal constituents
5   !!======================================================================
6   !! History :  3.6  !  2014  (E O'Dea)  Original code
7   !!----------------------------------------------------------------------
8   USE oce             ! ocean dynamics and tracers variables
9   USE dom_oce         ! ocean space and time domain
10   USE diainsitutem, ONLY: rinsitu_t, theta2t
11   USE in_out_manager  ! I/O units
12   USE iom             ! I/0 library
13   USE wrk_nemo        ! working arrays
14#if defined key_zdftke 
15   USE zdftke, ONLY: en
16#endif
17   USE zdf_oce, ONLY: avt, avm
18#if defined key_zdfgls
19   USE zdfgls, ONLY: mxln
20   USE zdf_oce, ONLY: en
21#endif
22   USE diatmb
23#if defined key_fabm
24   USE trc, ONLY: trn
25   USE par_fabm
26   USE fabm, ONLY: fabm_get_bulk_diagnostic_data
27#endif
28
29   IMPLICIT NONE
30   PRIVATE
31
32   LOGICAL , PUBLIC ::   ln_dia25h     !:  25h mean output
33   PUBLIC   dia_25h_init               ! routine called by nemogcm.F90
34   PUBLIC   dia_25h                    ! routine called by diawri.F90
35
36  !! * variables for calculating 25-hourly means
37   REAL(wp),SAVE, ALLOCATABLE,   DIMENSION(:,:,:) ::   tn_25h  , sn_25h, rinsitu_t_25h 
38   REAL(wp),SAVE, ALLOCATABLE,   DIMENSION(:,:)   ::   sshn_25h, insitu_bot_25h, temp_bot_25h 
39   REAL(wp),SAVE, ALLOCATABLE,   DIMENSION(:,:,:) ::   un_25h  , vn_25h  , wn_25h
40   REAL(wp),SAVE, ALLOCATABLE,   DIMENSION(:,:,:) ::   avt_25h , avm_25h
41#if defined key_zdfgls || key_zdftke
42   REAL(wp),SAVE, ALLOCATABLE,   DIMENSION(:,:,:) ::   en_25h
43#endif
44#if defined key_zdfgls 
45   REAL(wp),SAVE, ALLOCATABLE,   DIMENSION(:,:,:) ::   rmxln_25h
46#endif
47#if defined key_fabm
48   REAL(wp),SAVE, ALLOCATABLE,   DIMENSION(:,:,:,:) :: fabm3d_25h
49#endif
50   INTEGER, SAVE :: cnt_25h     ! Counter for 25 hour means
51
52
53
54   !!----------------------------------------------------------------------
55   !! NEMO/OPA 3.6 , NEMO Consortium (2014)
56   !! $Id$
57   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
58   !!----------------------------------------------------------------------
59CONTAINS
60
61   SUBROUTINE dia_25h_init 
62      !!---------------------------------------------------------------------------
63      !!                  ***  ROUTINE dia_25h_init  ***
64      !!     
65      !! ** Purpose: Initialization of 25h mean namelist
66      !!       
67      !! ** Method : Read namelist
68      !!   History
69      !!   3.6  !  08-14  (E. O'Dea) Routine to initialize dia_25h
70      !!---------------------------------------------------------------------------
71      !!
72      INTEGER ::   ios                 ! Local integer output status for namelist read
73      INTEGER ::   ierror              ! Local integer for memory allocation
74      REAL(wp), DIMENSION(jpi,jpj,3)   ::   zwtmb                                 ! temporary workspace
75      !
76      NAMELIST/nam_dia25h/ ln_dia25h
77      !!----------------------------------------------------------------------
78      !
79      REWIND ( numnam_ref )              ! Read Namelist nam_dia25h in reference namelist : 25hour mean diagnostics
80      READ   ( numnam_ref, nam_dia25h, IOSTAT=ios, ERR= 901 )
81901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_dia25h in reference namelist', lwp )
82
83      REWIND( numnam_cfg )              ! Namelist nam_dia25h in configuration namelist  25hour diagnostics
84      READ  ( numnam_cfg, nam_dia25h, IOSTAT = ios, ERR = 902 )
85902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_dia25h in configuration namelist', lwp )
86      IF(lwm) WRITE ( numond, nam_dia25h )
87
88      IF(lwp) THEN                   ! Control print
89         WRITE(numout,*)
90         WRITE(numout,*) 'dia_25h_init : Output 25 hour mean diagnostics'
91         WRITE(numout,*) '~~~~~~~~~~~~'
92         WRITE(numout,*) 'Namelist nam_dia25h : set 25h outputs '
93         WRITE(numout,*) 'Switch for 25h diagnostics (T) or not (F)  ln_dia25h  = ', ln_dia25h
94      ENDIF
95      IF( .NOT. ln_dia25h )   RETURN
96      ! ------------------- !
97      ! 1 - Allocate memory !
98      ! ------------------- !
99      ALLOCATE( tn_25h(jpi,jpj,jpk), STAT=ierror )
100      IF( ierror > 0 ) THEN
101         CALL ctl_stop( 'dia_25h: unable to allocate tn_25h' )   ;   RETURN
102      ENDIF
103      ALLOCATE( sn_25h(jpi,jpj,jpk), STAT=ierror )
104      IF( ierror > 0 ) THEN
105         CALL ctl_stop( 'dia_25h: unable to allocate sn_25h' )   ;   RETURN
106      ENDIF
107      ALLOCATE( rinsitu_t_25h(jpi,jpj,jpk), STAT=ierror )
108      IF( ierror > 0 ) THEN
109         CALL ctl_stop( 'dia_25h: unable to allocate rinsitu_t_25h' )   ;   RETURN
110      ENDIF
111      ALLOCATE( insitu_bot_25h(jpi,jpj), STAT=ierror )
112      IF( ierror > 0 ) THEN
113         CALL ctl_stop( 'dia_tide: unable to allocate insitu_bot_25h' )   ;   RETURN
114      ENDIF     
115      ALLOCATE( temp_bot_25h(jpi,jpj), STAT=ierror )
116      IF( ierror > 0 ) THEN
117         CALL ctl_stop( 'dia_tide: unable to allocate temp_bot_25h' )   ;   RETURN
118      ENDIF
119      ALLOCATE( un_25h(jpi,jpj,jpk), STAT=ierror )
120      IF( ierror > 0 ) THEN
121         CALL ctl_stop( 'dia_25h: unable to allocate un_25h' )   ;   RETURN
122      ENDIF
123      ALLOCATE( vn_25h(jpi,jpj,jpk), STAT=ierror )
124      IF( ierror > 0 ) THEN
125         CALL ctl_stop( 'dia_25h: unable to allocate vn_25h' )   ;   RETURN
126      ENDIF
127      ALLOCATE( wn_25h(jpi,jpj,jpk), STAT=ierror )
128      IF( ierror > 0 ) THEN
129         CALL ctl_stop( 'dia_25h: unable to allocate wn_25h' )   ;   RETURN
130      ENDIF
131      ALLOCATE( avt_25h(jpi,jpj,jpk), STAT=ierror )
132      IF( ierror > 0 ) THEN
133         CALL ctl_stop( 'dia_25h: unable to allocate avt_25h' )   ;   RETURN
134      ENDIF
135      ALLOCATE( avm_25h(jpi,jpj,jpk), STAT=ierror )
136      IF( ierror > 0 ) THEN
137         CALL ctl_stop( 'dia_25h: unable to allocate avm_25h' )   ;   RETURN
138      ENDIF
139# if defined key_zdfgls || defined key_zdftke
140      ALLOCATE( en_25h(jpi,jpj,jpk), STAT=ierror )
141      IF( ierror > 0 ) THEN
142         CALL ctl_stop( 'dia_25h: unable to allocate en_25h' )   ;   RETURN
143      ENDIF
144#endif
145# if defined key_zdfgls 
146      ALLOCATE( rmxln_25h(jpi,jpj,jpk), STAT=ierror )
147      IF( ierror > 0 ) THEN
148         CALL ctl_stop( 'dia_25h: unable to allocate rmxln_25h' )   ;   RETURN
149      ENDIF
150#endif
151      ALLOCATE( sshn_25h(jpi,jpj), STAT=ierror )
152      IF( ierror > 0 ) THEN
153         CALL ctl_stop( 'dia_25h: unable to allocate sshn_25h' )   ;   RETURN
154      ENDIF
155#if defined key_fabm
156      ALLOCATE( fabm3d_25h(jpi,jpj,jpk,jp_fabmdia_3dout), STAT=ierror )
157      IF( ierror > 0 ) THEN
158         CALL ctl_stop( 'dia_tide: unable to allocate fabm3d_25h' )   ;   RETURN
159      ENDIF
160#endif 
161      ! ------------------------- !
162      ! 2 - Assign Initial Values !
163      ! ------------------------- !
164      cnt_25h = 1  ! sets the first value of sum at timestep 1 (note - should strictly be at timestep zero so before values used where possible)
165      tn_25h(:,:,:) = tsb(:,:,:,jp_tem)
166      sn_25h(:,:,:) = tsb(:,:,:,jp_sal)
167      CALL theta2t
168      rinsitu_t_25h(:,:,:) = rinsitu_t(:,:,:)
169      CALL dia_calctmb( rinsitu_t(:,:,:),zwtmb )
170      insitu_bot_25h(:,:) = zwtmb(:,:,3)
171      CALL dia_calctmb( tn_25h(:,:,:),zwtmb )
172      temp_bot_25h(:,:) = zwtmb(:,:,3)
173      sshn_25h(:,:) = sshb(:,:)
174      un_25h(:,:,:) = ub(:,:,:)
175      vn_25h(:,:,:) = vb(:,:,:)
176      wn_25h(:,:,:) = wn(:,:,:)
177      avt_25h(:,:,:) = avt(:,:,:)
178      avm_25h(:,:,:) = avm(:,:,:)
179# if defined key_zdfgls || defined key_zdftke
180         en_25h(:,:,:) = en(:,:,:)
181#endif
182# if defined key_zdfgls
183         rmxln_25h(:,:,:) = mxln(:,:,:)
184#endif
185#if defined key_fabm
186      fabm3d_25h(:,:,:,1) = trn(:,:,:,jp_fabm_m1+jp_fabm_n1p)
187      fabm3d_25h(:,:,:,2) = trn(:,:,:,jp_fabm_m1+jp_fabm_n3n)
188      fabm3d_25h(:,:,:,3) = trn(:,:,:,jp_fabm_m1+jp_fabm_n4n)
189      fabm3d_25h(:,:,:,4) = trn(:,:,:,jp_fabm_m1+jp_fabm_n5s)
190      fabm3d_25h(:,:,:,5) = trn(:,:,:,jp_fabm_m1+jp_fabm_o2o)
191      fabm3d_25h(:,:,:,6)= fabm_get_bulk_diagnostic_data(model, jp_fabm_o3ph) 
192      fabm3d_25h(:,:,:,7)= fabm_get_bulk_diagnostic_data(model, jp_fabm_o3pc)
193      fabm3d_25h(:,:,:,8)= fabm_get_bulk_diagnostic_data(model, jp_fabmdia_chltot) 
194      fabm3d_25h(:,:,:,9)= fabm_get_bulk_diagnostic_data(model, jp_fabmdia_netpp) 
195      fabm3d_25h(:,:,:,10)= fabm_get_bulk_diagnostic_data(model, jp_fabm_xeps) 
196      fabm3d_25h(:,:,:,11)= fabm_get_bulk_diagnostic_data(model, jp_fabmdia_phytot) 
197      fabm3d_25h(:,:,:,12)= trn(:,:,:,jp_fabm_m1+jp_fabm_z4c) + &
198         &                  trn(:,:,:,jp_fabm_m1+jp_fabm_z5c) + &
199         &                  trn(:,:,:,jp_fabm_m1+jp_fabm_z6c)
200#endif
201#if defined key_lim3 || defined key_lim2
202         CALL ctl_stop('STOP', 'dia_25h not setup yet to do tidemean ice')
203#endif 
204
205      ! -------------------------- !
206      ! 3 - Return to dia_wri      !
207      ! -------------------------- !
208
209
210   END SUBROUTINE dia_25h_init
211
212
213   SUBROUTINE dia_25h( kt ) 
214      !!----------------------------------------------------------------------
215      !!                 ***  ROUTINE dia_25h  ***
216      !!         
217      !!
218      !!--------------------------------------------------------------------
219      !!                   
220      !! ** Purpose :   Write diagnostics with M2/S2 tide removed
221      !!
222      !! ** Method  :   
223      !!      25hr mean outputs for shelf seas
224      !!
225      !! History :
226      !!   ?.0  !  07-04  (A. Hines) New routine, developed from dia_wri_foam
227      !!   3.4  !  02-13  (J. Siddorn) Routine taken from old dia_wri_foam
228      !!   3.6  !  08-14  (E. O'Dea) adapted for VN3.6
229      !!----------------------------------------------------------------------
230      !! * Modules used
231
232      IMPLICIT NONE
233
234      !! * Arguments
235      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index
236
237
238      !! * Local declarations
239      INTEGER ::   ji, jj, jk
240
241      LOGICAL ::   ll_print = .FALSE.    ! =T print and flush numout
242      REAL(wp)                         ::   zsto, zout, zmax, zjulian, zdt, zmdi  ! temporary reals
243      INTEGER                          ::   i_steps                               ! no of timesteps per hour
244      REAL(wp), DIMENSION(jpi,jpj    ) ::   zw2d, un_dm, vn_dm                    ! temporary workspace
245      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zw3d                                  ! temporary workspace
246      REAL(wp), DIMENSION(jpi,jpj,3)   ::   zwtmb                                 ! temporary workspace
247      INTEGER                          ::   iyear0, nimonth0,iday0                ! start year,imonth,day
248
249      !!----------------------------------------------------------------------
250
251      ! 0. Initialisation
252      ! -----------------
253      ! Define frequency of summing to create 25 h mean
254      zdt = rdt
255      IF( nacc == 1 ) zdt = rdtmin
256
257      IF( MOD( 3600,INT(zdt) ) == 0 ) THEN
258         i_steps = 3600/INT(zdt)
259      ELSE
260         CALL ctl_stop('STOP', 'dia_wri_tide: timestep must give MOD(3600,rdt) = 0 otherwise no hourly values are possible')
261      ENDIF
262
263#if defined key_lim3 || defined key_lim2
264      CALL ctl_stop('STOP', 'dia_wri_tide not setup yet to do tidemean ice')
265#endif
266
267      ! local variable for debugging
268      ll_print = ll_print .AND. lwp
269
270      ! Sum of 25 hourly instantaneous values to give a 25h mean from 24hours
271      ! every day
272      IF( MOD( kt, i_steps ) == 0  .and. kt .ne. nn_it000 ) THEN
273
274         IF (lwp) THEN
275              WRITE(numout,*) 'dia_wri_tide : Summing instantaneous hourly diagnostics at timestep ',kt
276              WRITE(numout,*) '~~~~~~~~~~~~ '
277         ENDIF
278
279         tn_25h(:,:,:)        = tn_25h(:,:,:) + tsn(:,:,:,jp_tem)
280         sn_25h(:,:,:)        = sn_25h(:,:,:) + tsn(:,:,:,jp_sal)
281         CALL theta2t
282         rinsitu_t_25h(:,:,:)  = rinsitu_t_25h(:,:,:) + rinsitu_t(:,:,:)
283         CALL dia_calctmb( rinsitu_t(:,:,:),zwtmb )
284         insitu_bot_25h(:,:)  = insitu_bot_25h(:,:) + zwtmb(:,:,3)
285         zw3d(:,:,:)          = tsn(:,:,:,jp_tem)
286         CALL dia_calctmb( zw3d,zwtmb )
287         temp_bot_25h(:,:)    = temp_bot_25h(:,:) + zwtmb(:,:,3)
288         sshn_25h(:,:)        = sshn_25h(:,:) + sshn (:,:)
289         un_25h(:,:,:)        = un_25h(:,:,:) + un(:,:,:)
290         vn_25h(:,:,:)        = vn_25h(:,:,:) + vn(:,:,:)
291         wn_25h(:,:,:)        = wn_25h(:,:,:) + wn(:,:,:)
292         avt_25h(:,:,:)       = avt_25h(:,:,:) + avt(:,:,:)
293         avm_25h(:,:,:)       = avm_25h(:,:,:) + avm(:,:,:)
294# if defined key_zdfgls || defined key_zdftke
295         en_25h(:,:,:)        = en_25h(:,:,:) + en(:,:,:)
296#endif
297# if defined key_zdfgls
298         rmxln_25h(:,:,:)      = rmxln_25h(:,:,:) + mxln(:,:,:)
299#endif
300#if defined key_fabm
301         fabm3d_25h(:,:,:,1) = fabm3d_25h(:,:,:,1) + trn(:,:,:,jp_fabm_m1+jp_fabm_n1p)   ! phosphate
302         fabm3d_25h(:,:,:,2) = fabm3d_25h(:,:,:,2) + trn(:,:,:,jp_fabm_m1+jp_fabm_n3n)   ! nitrate
303         fabm3d_25h(:,:,:,3) = fabm3d_25h(:,:,:,3) + trn(:,:,:,jp_fabm_m1+jp_fabm_n4n)   ! ammonium
304         fabm3d_25h(:,:,:,4) = fabm3d_25h(:,:,:,4) + trn(:,:,:,jp_fabm_m1+jp_fabm_n5s)   ! silicate
305         fabm3d_25h(:,:,:,5) = fabm3d_25h(:,:,:,5) + trn(:,:,:,jp_fabm_m1+jp_fabm_o2o)   ! oxygen
306         fabm3d_25h(:,:,:,6)= fabm3d_25h(:,:,:,6) + fabm_get_bulk_diagnostic_data(model, jp_fabm_o3ph) ! pH
307         fabm3d_25h(:,:,:,7)= fabm3d_25h(:,:,:,7) + fabm_get_bulk_diagnostic_data(model, jp_fabm_o3pc) ! pCO2
308         fabm3d_25h(:,:,:,8)= fabm3d_25h(:,:,:,8) + fabm_get_bulk_diagnostic_data(model, jp_fabmdia_chltot) ! total Chl
309         fabm3d_25h(:,:,:,9)= fabm3d_25h(:,:,:,9) + fabm_get_bulk_diagnostic_data(model, jp_fabmdia_netpp) ! netPP
310         fabm3d_25h(:,:,:,10)= fabm3d_25h(:,:,:,10) + fabm_get_bulk_diagnostic_data(model, jp_fabm_xeps) ! light attenuation
311         fabm3d_25h(:,:,:,11)= fabm3d_25h(:,:,:,11) + fabm_get_bulk_diagnostic_data(model, jp_fabmdia_phytot) ! total phytoplankton
312         fabm3d_25h(:,:,:,12)= fabm3d_25h(:,:,:,12) + trn(:,:,:,jp_fabm_m1+jp_fabm_z4c) + &
313            &                                         trn(:,:,:,jp_fabm_m1+jp_fabm_z5c) + &
314            &                                         trn(:,:,:,jp_fabm_m1+jp_fabm_z6c)      ! total zooplankton
315#endif
316         cnt_25h = cnt_25h + 1
317
318         IF (lwp) THEN
319            WRITE(numout,*) 'dia_tide : Summed the following number of hourly values so far',cnt_25h
320         ENDIF
321
322      ENDIF ! MOD( kt, i_steps ) == 0
323
324         ! Write data for 25 hour mean output streams
325      IF( cnt_25h .EQ. 25 .AND.  MOD( kt, i_steps*24) == 0 .AND. kt .NE. nn_it000 ) THEN
326
327            IF(lwp) THEN
328               WRITE(numout,*) 'dia_wri_tide : Writing 25 hour mean tide diagnostics at timestep', kt
329               WRITE(numout,*) '~~~~~~~~~~~~ '
330            ENDIF
331
332            tn_25h(:,:,:)        = tn_25h(:,:,:) / 25.0_wp
333            sn_25h(:,:,:)        = sn_25h(:,:,:) / 25.0_wp
334            rinsitu_t_25h(:,:,:)  = rinsitu_t_25h(:,:,:) / 25.0_wp
335            insitu_bot_25h(:,:)  = insitu_bot_25h(:,:) / 25.0_wp 
336            temp_bot_25h(:,:)    = temp_bot_25h(:,:) /25.0_wp
337            sshn_25h(:,:)        = sshn_25h(:,:) / 25.0_wp
338            un_25h(:,:,:)        = un_25h(:,:,:) / 25.0_wp
339            vn_25h(:,:,:)        = vn_25h(:,:,:) / 25.0_wp
340            wn_25h(:,:,:)        = wn_25h(:,:,:) / 25.0_wp
341            avt_25h(:,:,:)       = avt_25h(:,:,:) / 25.0_wp
342            avm_25h(:,:,:)       = avm_25h(:,:,:) / 25.0_wp
343# if defined key_zdfgls || defined key_zdftke
344            en_25h(:,:,:)        = en_25h(:,:,:) / 25.0_wp
345#endif
346# if defined key_zdfgls
347            rmxln_25h(:,:,:)       = rmxln_25h(:,:,:) / 25.0_wp
348#endif
349#if defined key_fabm
350            fabm3d_25h(:,:,:,:) = fabm3d_25h(:,:,:,:) / 25.0_wp
351#endif
352
353            IF (lwp)  WRITE(numout,*) 'dia_wri_tide : Mean calculated by dividing 25 hour sums and writing output'
354            zmdi=1.e+20 !missing data indicator for masking
355            ! write tracers (instantaneous)
356            zw3d(:,:,:) = tn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
357            CALL iom_put("temper25h", zw3d)   ! potential temperature
358            CALL theta2t                                                                    ! calculate insitu temp
359            zw3d(:,:,:) = rinsitu_t_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
360            CALL iom_put("tempis25h", zw3d)   ! in-situ temperature
361            zw2d(:,:) = insitu_bot_25h(:,:)*tmask(:,:,1) + zmdi*(1.0-tmask(:,:,1))
362            CALL iom_put("tempisbot25h", zw2d) ! bottom in-situ temperature
363            zw2d(:,:) = temp_bot_25h(:,:)*tmask(:,:,1) + zmdi*(1.0-tmask(:,:,1))
364            CALL iom_put("temperbot25h",zw2d) ! bottom potential temperature
365            zw3d(:,:,:) = sn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
366            CALL iom_put( "salin25h", zw3d  )   ! salinity
367            zw2d(:,:) = sshn_25h(:,:)*tmask(:,:,1) + zmdi*(1.0-tmask(:,:,1))
368            CALL iom_put( "ssh25h", zw2d )   ! sea surface
369
370#if defined key_fabm
371            ! Write ERSEM variables
372            zw3d(:,:,:) = fabm3d_25h(:,:,:,1)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
373            CALL iom_put( "N1p25h", zw3d  )   ! phosphate
374            zw3d(:,:,:) = fabm3d_25h(:,:,:,2)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
375            CALL iom_put( "N3n25h", zw3d  )   ! nitrate
376            zw3d(:,:,:) = fabm3d_25h(:,:,:,3)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
377            CALL iom_put( "N4n25h", zw3d  )   ! ammonium
378            zw3d(:,:,:) = fabm3d_25h(:,:,:,4)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
379            CALL iom_put( "N5s25h", zw3d  )   ! silicate
380            zw3d(:,:,:) = fabm3d_25h(:,:,:,5)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
381            CALL iom_put( "O2o25h", zw3d  )   ! oxygen
382            zw3d(:,:,:) = fabm3d_25h(:,:,:,6)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
383            CALL iom_put( "pH25h", zw3d  )   ! pH
384            zw3d(:,:,:) = fabm3d_25h(:,:,:,7)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
385            CALL iom_put( "pCO2_25h", zw3d  )   ! pCO2
386            zw3d(:,:,:) = fabm3d_25h(:,:,:,8)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
387            CALL iom_put( "CHL25h", zw3d  )   ! total Chl
388            zw3d(:,:,:) = fabm3d_25h(:,:,:,9)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
389            CALL iom_put( "netPP25h", zw3d  ) ! netPP
390            zw3d(:,:,:) = (1.7/fabm3d_25h(:,:,:,10))*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
391            CALL iom_put( "visib25h", zw3d  ) ! light attenuation convert to visibility
392            zw3d(:,:,:) = fabm3d_25h(:,:,:,11)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
393            CALL iom_put( "PhytoC25h", zw3d  )   ! total phytoplankton
394            zw3d(:,:,:) = fabm3d_25h(:,:,:,11)*tmask(:,:,:)*0.0832590939745 + zmdi*(1.0-tmask(:,:,:))
395            CALL iom_put( "PhyCMol25h", zw3d  )   ! total phytoplankton in mmol
396            zw3d(:,:,:) = fabm3d_25h(:,:,:,12)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
397            CALL iom_put( "ZooC25h", zw3d  )   ! total zooplankton
398            zw3d(:,:,:) = fabm3d_25h(:,:,:,12)*tmask(:,:,:)*0.0832590939745 + zmdi*(1.0-tmask(:,:,:))
399            CALL iom_put( "ZooCMol25h", zw3d  )   ! total zooplankton in mmol
400#endif
401
402            ! Write velocities (instantaneous)
403            zw3d(:,:,:) = un_25h(:,:,:)*umask(:,:,:) + zmdi*(1.0-umask(:,:,:))
404            CALL iom_put("vozocrtx25h", zw3d)    ! i-current
405            zw3d(:,:,:) = vn_25h(:,:,:)*vmask(:,:,:) + zmdi*(1.0-vmask(:,:,:))
406            CALL iom_put("vomecrty25h", zw3d  )   ! j-current
407
408            zw3d(:,:,:) = wn_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
409            CALL iom_put("vomecrtz25h", zw3d )   ! k-current
410            zw3d(:,:,:) = avt_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
411            CALL iom_put("avt25h", zw3d )   ! diffusivity
412            zw3d(:,:,:) = avm_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
413            CALL iom_put("avm25h", zw3d)   ! viscosity
414#if defined key_zdftke || defined key_zdfgls 
415!           zw3d(:,:,:) = en_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
416!           CALL iom_put("tke25h", zw3d)   ! tke
417#endif
418#if defined key_zdfgls 
419!           zw3d(:,:,:) = rmxln_25h(:,:,:)*tmask(:,:,:) + zmdi*(1.0-tmask(:,:,:))
420!           CALL iom_put( "mxln25h",zw3d)
421#endif
422
423            ! After the write reset the values to cnt=1 and sum values equal current value
424            tn_25h(:,:,:) = tsn(:,:,:,jp_tem)
425            sn_25h(:,:,:) = tsn(:,:,:,jp_sal)
426            CALL theta2t
427            rinsitu_t_25h(:,:,:) = rinsitu_t(:,:,:)
428            CALL dia_calctmb( rinsitu_t(:,:,:),zwtmb )
429            insitu_bot_25h(:,:) = zwtmb(:,:,3)
430            CALL dia_calctmb( tn_25h(:,:,:),zwtmb)
431            temp_bot_25h(:,:) = zwtmb(:,:,3)
432            sshn_25h(:,:) = sshn (:,:)
433            un_25h(:,:,:) = un(:,:,:)
434            vn_25h(:,:,:) = vn(:,:,:)
435            wn_25h(:,:,:) = wn(:,:,:)
436            avt_25h(:,:,:) = avt(:,:,:)
437            avm_25h(:,:,:) = avm(:,:,:)
438# if defined key_zdfgls || defined key_zdftke
439            en_25h(:,:,:) = en(:,:,:)
440#endif
441# if defined key_zdfgls
442            rmxln_25h(:,:,:) = mxln(:,:,:)
443#endif
444#if defined key_fabm
445            fabm3d_25h(:,:,:,1) = trn(:,:,:,jp_fabm_m1+jp_fabm_n1p)
446            fabm3d_25h(:,:,:,2) = trn(:,:,:,jp_fabm_m1+jp_fabm_n3n)
447            fabm3d_25h(:,:,:,3) = trn(:,:,:,jp_fabm_m1+jp_fabm_n4n)
448            fabm3d_25h(:,:,:,4) = trn(:,:,:,jp_fabm_m1+jp_fabm_n5s)
449            fabm3d_25h(:,:,:,5) = trn(:,:,:,jp_fabm_m1+jp_fabm_o2o)
450            fabm3d_25h(:,:,:,6)= fabm_get_bulk_diagnostic_data(model, jp_fabm_o3ph)
451            fabm3d_25h(:,:,:,7)= fabm_get_bulk_diagnostic_data(model, jp_fabm_o3pc) 
452            fabm3d_25h(:,:,:,8)= fabm_get_bulk_diagnostic_data(model, jp_fabmdia_chltot)
453            fabm3d_25h(:,:,:,9)= fabm_get_bulk_diagnostic_data(model, jp_fabmdia_netpp)
454            fabm3d_25h(:,:,:,10)= fabm_get_bulk_diagnostic_data(model, jp_fabm_xeps)
455            fabm3d_25h(:,:,:,11)= fabm_get_bulk_diagnostic_data(model, jp_fabmdia_phytot)
456            fabm3d_25h(:,:,:,12)= trn(:,:,:,jp_fabm_m1+jp_fabm_z4c) + &
457               &                  trn(:,:,:,jp_fabm_m1+jp_fabm_z5c) + &
458               &                  trn(:,:,:,jp_fabm_m1+jp_fabm_z6c)
459#endif
460            cnt_25h = 1
461            IF (lwp)  WRITE(numout,*) 'dia_wri_tide : After 25hr mean write, reset sum to current value and cnt_25h to one for overlapping average',cnt_25h
462
463      ENDIF !  cnt_25h .EQ. 25 .AND.  MOD( kt, i_steps * 24) == 0 .AND. kt .NE. nn_it000
464
465
466   END SUBROUTINE dia_25h 
467
468   !!======================================================================
469END MODULE dia25h
Note: See TracBrowser for help on using the repository browser.