source: branches/2012/dev_r3309_LOCEAN12_Ediag/NEMOGCM/NEMO/OPA_SRC/TRD/trdglo.F90 @ 3318

Last change on this file since 3318 was 3318, checked in by gm, 9 years ago

Ediag branche: #927 split TRA/DYN trd computation

  • Property svn:keywords set to Id
File size: 28.4 KB
Line 
1MODULE trdglo
2   !!======================================================================
3   !!                       ***  MODULE  trdglo  ***
4   !! Ocean diagnostics:  global domain averaged tracer and momentum trends
5   !!=====================================================================
6   !! History :  1.0  !  2004-08 (C. Talandier) New trends organization
7   !!            3.5  !  2012-02 (G. Madec)  add 3D tracer zdf trend output using iom
8   !!----------------------------------------------------------------------
9
10   !!----------------------------------------------------------------------
11   !!   trd_glo      : domain averaged budget of trends (including kinetic energy and T^2 trends)
12   !!   glo_dyn_wri  : print dynamic trends in ocean.output file
13   !!   glo_tra_wri  : print global T & T^2 trends in ocean.output file
14   !!   trd_glo_init : initialization step
15   !!----------------------------------------------------------------------
16   USE oce             ! ocean dynamics and tracers variables
17   USE dom_oce         ! ocean space and time domain variables
18   USE sbc_oce         ! surface boundary condition: ocean
19   USE trd_oce         ! trends: ocean variables
20   USE phycst          ! physical constants
21   USE ldftra_oce      ! ocean active tracers: lateral physics
22   USE ldfdyn_oce      ! ocean dynamics: lateral physics
23   USE zdf_oce         ! ocean vertical physics
24   USE zdfbfr          ! bottom friction
25   USE zdfddm          ! ocean vertical physics: double diffusion
26   USE eosbn2          ! equation of state
27   USE phycst          ! physical constants
28   USE lib_mpp         ! distibuted memory computing library
29   USE in_out_manager  ! I/O manager
30   USE iom             ! I/O manager library
31   USE wrk_nemo        ! Memory allocation
32
33   IMPLICIT NONE
34   PRIVATE
35
36   PUBLIC   trd_glo       ! called by trdtra and trddyn modules
37   PUBLIC   trd_glo_init  ! called by trdini module
38
39   !                     !!! Variables used for diagnostics
40   REAL(wp) ::   tvolt    ! volume of the whole ocean computed at t-points
41   REAL(wp) ::   tvolu    ! volume of the whole ocean computed at u-points
42   REAL(wp) ::   tvolv    ! volume of the whole ocean computed at v-points
43   REAL(wp) ::   rpktrd   ! potential to kinetic energy conversion
44   REAL(wp) ::   peke     ! conversion potential energy - kinetic energy trend
45
46   !                     !!! domain averaged trends
47   REAL(wp), DIMENSION(jptot_tra) ::   tmo, smo   ! temperature and salinity trends
48   REAL(wp), DIMENSION(jptot_tra) ::   t2 , s2    ! T^2 and S^2 trends
49   REAL(wp), DIMENSION(jptot_dyn) ::   umo, vmo   ! momentum trends
50   REAL(wp), DIMENSION(jptot_dyn) ::   hke        ! kinetic energy trends (u^2+v^2)
51
52   !! * Substitutions
53#  include "domzgr_substitute.h90"
54#  include "vectopt_loop_substitute.h90"
55#  include "zdfddm_substitute.h90"
56   !!----------------------------------------------------------------------
57   !! NEMO/OPA 3.3 , NEMO Consortium (2010)
58   !! $Id$
59   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
60   !!----------------------------------------------------------------------
61CONTAINS
62
63   SUBROUTINE trd_glo( ptrdx, ptrdy, ktrd, ctype, kt )
64      !!---------------------------------------------------------------------
65      !!                  ***  ROUTINE trd_glo  ***
66      !!
67      !! ** Purpose :   compute and print global domain averaged trends for
68      !!              T, T^2, momentum, KE, and KE<->PE
69      !!
70      !!----------------------------------------------------------------------
71      REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   ptrdx   ! Temperature or U trend
72      REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   ptrdy   ! Salinity    or V trend
73      INTEGER                   , INTENT(in   ) ::   ktrd    ! tracer trend index
74      CHARACTER(len=3)          , INTENT(in   ) ::   ctype   ! momentum or tracers trends type (='DYN'/'TRA')
75      INTEGER                   , INTENT(in   ) ::   kt      ! time step
76      !!
77      INTEGER ::   ji, jj, jk      ! dummy loop indices
78      INTEGER ::   ikbu, ikbv      ! local integers
79      REAL(wp)::   zvm, zvt, zvs, z1_2rau0   ! local scalars
80      REAL(wp), POINTER, DIMENSION(:,:)  :: ztswu, ztswv, z2dx, z2dy   ! 2D workspace
81      !!----------------------------------------------------------------------
82
83      CALL wrk_alloc( jpi, jpj, ztswu, ztswv, z2dx, z2dy )
84
85      IF( MOD(kt,nn_trd) == 0 .OR. kt == nit000 .OR. kt == nitend ) THEN
86         !
87         SELECT CASE( ctype )
88         !
89         CASE( 'TRA' )          !==  Tracers (T & S)  ==!
90            DO jk = 1, jpkm1       ! global sum of mask volume trend and trend*T (including interior mask)
91               DO jj = 1, jpj
92                  DO ji = 1, jpi       
93                     zvm = e1e2t(ji,jj) * fse3t(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj)
94                     zvt = ptrdx(ji,jj,jk) * zvm
95                     zvs = ptrdy(ji,jj,jk) * zvm
96                     tmo(ktrd) = tmo(ktrd) + zvt   
97                     smo(ktrd) = smo(ktrd) + zvs
98                     t2 (ktrd) = t2(ktrd)  + zvt * tsn(ji,jj,jk,jp_tem)
99                     s2 (ktrd) = s2(ktrd)  + zvs * tsn(ji,jj,jk,jp_sal)
100                  END DO
101               END DO
102            END DO
103            !                       ! linear free surface: diagnose advective flux trough the fixed k=1 w-surface
104            IF( .NOT.lk_vvl .AND. ktrd == jptra_zad ) THEN 
105               tmo(jptra_sad) = SUM( wn(:,:,1) * tsn(:,:,1,jp_tem) * e1e2t(:,:) )
106               smo(jptra_sad) = SUM( wn(:,:,1) * tsn(:,:,1,jp_sal) * e1e2t(:,:)  )
107               t2 (jptra_sad) = SUM( wn(:,:,1) * tsn(:,:,1,jp_tem) * tsn(:,:,1,jp_tem) * e1e2t(:,:)  )
108               s2 (jptra_sad) = SUM( wn(:,:,1) * tsn(:,:,1,jp_sal) * tsn(:,:,1,jp_sal) * e1e2t(:,:)  )
109            ENDIF
110            !
111            IF( ktrd == jptra_atf ) THEN     ! last trend (asselin time filter)
112               !
113               CALL glo_tra_wri( kt )             ! print the results in ocean.output
114               !               
115               tmo(:) = 0._wp                     ! prepare the next time step (domain averaged array reset to zero)
116               smo(:) = 0._wp
117               t2 (:) = 0._wp
118               s2 (:) = 0._wp
119               !
120            ENDIF
121            !
122         CASE( 'DYN' )          !==  Momentum and KE  ==!       
123            DO jk = 1, jpkm1
124               DO jj = 1, jpjm1
125                  DO ji = 1, jpim1
126                     zvt = ptrdx(ji,jj,jk) * tmask_i(ji+1,jj  ) * tmask_i(ji,jj) * umask(ji,jj,jk)   &
127                        &                  * e1u    (ji  ,jj  ) * e2u    (ji,jj) * fse3u(ji,jj,jk)
128                     zvs = ptrdy(ji,jj,jk) * tmask_i(ji  ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk)   &
129                        &                  * e1v    (ji  ,jj  ) * e2v    (ji,jj) * fse3u(ji,jj,jk)
130                     umo(ktrd) = umo(ktrd) + zvt
131                     vmo(ktrd) = vmo(ktrd) + zvs
132                     hke(ktrd) = hke(ktrd) + un(ji,jj,jk) * zvt + vn(ji,jj,jk) * zvs
133                  END DO
134               END DO
135            END DO
136            !                 
137            IF( ktrd == jpdyn_zdf ) THEN      ! zdf trend: compute separately the surface forcing trend
138               z1_2rau0 = 0.5_wp / rau0
139               DO jj = 1, jpjm1
140                  DO ji = 1, jpim1
141                     zvt = ( utau_b(ji,jj) + utau(ji,jj) ) * tmask_i(ji+1,jj  ) * tmask_i(ji,jj) * umask(ji,jj,jk)   &
142                        &                       * z1_2rau0 * e1u    (ji  ,jj  ) * e2u    (ji,jj)
143                     zvs = ( vtau_b(ji,jj) + vtau(ji,jj) ) * tmask_i(ji  ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk)   &
144                        &                       * z1_2rau0 * e1v    (ji  ,jj  ) * e2v    (ji,jj) * fse3u(ji,jj,jk)
145                     umo(jpdyn_tau) = umo(jpdyn_tau) + zvt
146                     vmo(jpdyn_tau) = vmo(jpdyn_tau) + zvs
147                     hke(jpdyn_tau) = hke(jpdyn_tau) + un(ji,jj,1) * zvt + vn(ji,jj,1) * zvs
148                  END DO
149               END DO
150            ENDIF
151            !                       
152            IF( ktrd == jpdyn_atf ) THEN     ! last trend (asselin time filter)
153               !
154               IF( ln_bfrimp ) THEN                   ! implicit bfr case: compute separately the bottom friction
155                  z1_2rau0 = 0.5_wp / rau0
156                  DO jj = 1, jpjm1
157                     DO ji = 1, jpim1
158                        ikbu = mbku(ji,jj)                  ! deepest ocean u- & v-levels
159                        ikbv = mbkv(ji,jj)
160                        zvt = bfrua(ji,jj) * un(ji,jj,ikbu) * e1u(ji,jj) * e2v(ji,jj)
161                        zvs = bfrva(ji,jj) * vn(ji,jj,ikbv) * e1v(ji,jj) * e2v(ji,jj)
162                        umo(jpdyn_bfr) = umo(jpdyn_bfr) + zvt
163                        vmo(jpdyn_bfr) = vmo(jpdyn_bfr) + zvs
164                        hke(jpdyn_bfr) = hke(jpdyn_bfr) + un(ji,jj,ikbu) * zvt + vn(ji,jj,ikbv) * zvs
165                     END DO
166                  END DO
167               ENDIF
168               !
169               CALL glo_dyn_wri( kt )                 ! print the results in ocean.output
170               !               
171               umo(:) = 0._wp                         ! reset for the next time step
172               vmo(:) = 0._wp
173               hke(:) = 0._wp
174               !
175            ENDIF
176            !
177         END SELECT
178         !
179      ENDIF
180      !
181      CALL wrk_dealloc( jpi, jpj, ztswu, ztswv, z2dx, z2dy )
182      !
183   END SUBROUTINE trd_glo
184
185
186   SUBROUTINE trd_glo_init
187      !!---------------------------------------------------------------------
188      !!                  ***  ROUTINE trd_glo_init  ***
189      !!
190      !! ** Purpose :   Read the namtrd namelist
191      !!----------------------------------------------------------------------
192      INTEGER  ::   ji, jj, jk   ! dummy loop indices
193      !!----------------------------------------------------------------------
194
195      IF(lwp) THEN
196         WRITE(numout,*)
197         WRITE(numout,*) 'trd_glo_init : integral constraints properties trends'
198         WRITE(numout,*) '~~~~~~~~~~~~~'
199      ENDIF
200
201      ! Total volume at t-points:
202      tvolt = 0._wp
203      DO jk = 1, jpkm1
204         tvolt = SUM( e1e2t(:,:) * fse3t(:,:,jk) * tmask(:,:,jk) * tmask_i(:,:) )
205      END DO
206      IF( lk_mpp )   CALL mpp_sum( tvolt )   ! sum over the global domain
207
208      IF(lwp) WRITE(numout,*) '                total ocean volume at T-point   tvolt = ',tvolt
209
210      ! Initialization of potential to kinetic energy conversion
211      rpktrd = 0._wp
212
213      ! Total volume at u-, v- points:
214      tvolu = 0._wp
215      tvolv = 0._wp
216
217      DO jk = 1, jpk
218         DO jj = 2, jpjm1
219            DO ji = fs_2, fs_jpim1   ! vector opt.
220               tvolu = tvolu + e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) * tmask_i(ji+1,jj  ) * tmask_i(ji,jj) * umask(ji,jj,jk)
221               tvolv = tvolv + e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) * tmask_i(ji  ,jj+1) * tmask_i(ji,jj) * vmask(ji,jj,jk)
222            END DO
223         END DO
224      END DO
225      IF( lk_mpp )   CALL mpp_sum( tvolu )   ! sums over the global domain
226      IF( lk_mpp )   CALL mpp_sum( tvolv )
227
228      IF(lwp) THEN
229         WRITE(numout,*) '                total ocean volume at U-point   tvolu = ',tvolu
230         WRITE(numout,*) '                total ocean volume at V-point   tvolv = ',tvolv
231      ENDIF
232      !
233   END SUBROUTINE trd_glo_init
234
235
236   SUBROUTINE glo_dyn_wri( kt )
237      !!---------------------------------------------------------------------
238      !!                  ***  ROUTINE glo_dyn_wri  ***
239      !!
240      !! ** Purpose :  write global averaged U, KE, PE<->KE trends in ocean.output
241      !!----------------------------------------------------------------------
242      INTEGER, INTENT(in) ::   kt   ! ocean time-step index
243      !
244      INTEGER  ::   ji, jj, jk   ! dummy loop indices
245      REAL(wp) ::   zcof         ! local scalar
246      REAL(wp), POINTER, DIMENSION(:,:,:)  ::  zkx, zky, zkz, zkepe 
247      !!----------------------------------------------------------------------
248
249      CALL wrk_alloc( jpi, jpj, jpk, zkx, zky, zkz, zkepe )
250
251      ! I. Momentum trends
252      ! -------------------
253
254      IF( MOD( kt, nn_trd ) == 0 .OR. kt == nit000 .OR. kt == nitend ) THEN
255
256         ! I.1 Conversion potential energy - kinetic energy
257         ! --------------------------------------------------
258         ! c a u t i o n here, trends are computed at kt+1 (now , but after the swap)
259         zkx  (:,:,:) = 0._wp
260         zky  (:,:,:) = 0._wp
261         zkz  (:,:,:) = 0._wp
262         zkepe(:,:,:) = 0._wp
263   
264         CALL eos( tsn, rhd, rhop )       ! now potential and in situ densities
265
266         zcof = 0.5_wp / rau0             ! Density flux at w-point
267         zkz(:,:,1) = 0._wp
268         DO jk = 2, jpk
269            zkz(:,:,jk) = e1e2t(:,:) * wn(:,:,jk) * ( rhop(:,:,jk) + rhop(:,:,jk-1) ) * tmask_i(:,:)
270         END DO
271         
272         zcof   = 0.5_wp / rau0           ! Density flux at u and v-points
273         DO jk = 1, jpkm1
274            DO jj = 1, jpjm1
275               DO ji = 1, jpim1
276                  zkx(ji,jj,jk) = zcof * e2u(ji,jj) * fse3u(ji,jj,jk) * un(ji,jj,jk) * ( rhop(ji,jj,jk) + rhop(ji+1,jj,jk) )
277                  zky(ji,jj,jk) = zcof * e1v(ji,jj) * fse3v(ji,jj,jk) * vn(ji,jj,jk) * ( rhop(ji,jj,jk) + rhop(ji,jj+1,jk) )
278               END DO
279            END DO
280         END DO
281         
282         DO jk = 1, jpkm1                 ! Density flux divergence at t-point
283            DO jj = 2, jpjm1
284               DO ji = 2, jpim1
285                  zkepe(ji,jj,jk) = - (  zkz(ji,jj,jk) - zkz(ji  ,jj  ,jk+1)               &
286                     &                 + zkx(ji,jj,jk) - zkx(ji-1,jj  ,jk  )               &
287                     &                 + zky(ji,jj,jk) - zky(ji  ,jj-1,jk  )   )           &
288                     &              / ( e1e2t(ji,jj) * fse3t(ji,jj,jk) ) * tmask(ji,jj,jk) * tmask_i(ji,jj)
289               END DO
290            END DO
291         END DO
292
293         ! I.2 Basin averaged kinetic energy trend
294         ! ----------------------------------------
295         peke = 0._wp
296         DO jk = 1, jpkm1
297            peke = peke + SUM( zkepe(:,:,jk) * fsdept(:,:,jk) * e1e2t(:,:) * fse3t(:,:,jk) )
298         END DO
299         peke = grav * peke
300
301         ! I.3 Sums over the global domain
302         ! ---------------------------------
303         IF( lk_mpp ) THEN
304            CALL mpp_sum( peke )
305            CALL mpp_sum( umo , jptot_dyn )
306            CALL mpp_sum( vmo , jptot_dyn )
307            CALL mpp_sum( hke , jptot_dyn )
308         ENDIF
309
310         ! I.2 Print dynamic trends in the ocean.output file
311         ! --------------------------------------------------
312
313         IF(lwp) THEN
314            WRITE (numout,*)
315            WRITE (numout,*)
316            WRITE (numout,9500) kt
317            WRITE (numout,9501) umo(jpdyn_hpg) / tvolu, vmo(jpdyn_hpg) / tvolv
318            WRITE (numout,9509) umo(jpdyn_spg) / tvolu, vmo(jpdyn_spg) / tvolv
319            WRITE (numout,9502) umo(jpdyn_keg) / tvolu, vmo(jpdyn_keg) / tvolv
320            WRITE (numout,9503) umo(jpdyn_rvo) / tvolu, vmo(jpdyn_rvo) / tvolv
321            WRITE (numout,9504) umo(jpdyn_pvo) / tvolu, vmo(jpdyn_pvo) / tvolv
322            WRITE (numout,9507) umo(jpdyn_zad) / tvolu, vmo(jpdyn_zad) / tvolv
323            WRITE (numout,9505) umo(jpdyn_ldf) / tvolu, vmo(jpdyn_ldf) / tvolv
324            WRITE (numout,9508) umo(jpdyn_zdf) / tvolu, vmo(jpdyn_zdf) / tvolv
325            WRITE (numout,9510) umo(jpdyn_tau) / tvolu, vmo(jpdyn_tau) / tvolv
326            WRITE (numout,9511) umo(jpdyn_bfr) / tvolu, vmo(jpdyn_bfr) / tvolv
327            WRITE (numout,9512) umo(jpdyn_atf) / tvolu, vmo(jpdyn_atf) / tvolv
328            WRITE (numout,9513)
329            WRITE (numout,9514)                                                 &
330            &     (  umo(jpdyn_hpg) + umo(jpdyn_spg) + umo(jpdyn_keg) + umo(jpdyn_rvo)   &
331            &      + umo(jpdyn_pvo) + umo(jpdyn_zad) + umo(jpdyn_ldf) + umo(jpdyn_zdf)   &
332            &      + umo(jpdyn_tau) + umo(jpdyn_bfr) + umo(jpdyn_atf) ) / tvolu,   &
333            &     (  vmo(jpdyn_hpg) + vmo(jpdyn_spg) + vmo(jpdyn_keg) + vmo(jpdyn_rvo)   &
334            &      + vmo(jpdyn_pvo) + vmo(jpdyn_zad) + vmo(jpdyn_ldf) + vmo(jpdyn_zdf)   &
335            &      + vmo(jpdyn_tau) + vmo(jpdyn_bfr) + vmo(jpdyn_atf) ) / tvolv
336         ENDIF
337
338 9500    FORMAT(' momentum trend at it= ', i6, ' :', /' ==============================')
339 9501    FORMAT(' pressure gradient          u= ', e20.13, '    v= ', e20.13)
340 9502    FORMAT(' ke gradient                u= ', e20.13, '    v= ', e20.13)
341 9503    FORMAT(' relative vorticity term    u= ', e20.13, '    v= ', e20.13)
342 9504    FORMAT(' coriolis term              u= ', e20.13, '    v= ', e20.13)
343 9505    FORMAT(' horizontal diffusion       u= ', e20.13, '    v= ', e20.13)
344 9507    FORMAT(' vertical advection         u= ', e20.13, '    v= ', e20.13)
345 9508    FORMAT(' vertical diffusion         u= ', e20.13, '    v= ', e20.13)
346 9509    FORMAT(' surface pressure gradient  u= ', e20.13, '    v= ', e20.13)
347 9510    FORMAT(' surface wind stress        u= ', e20.13, '    v= ', e20.13)
348 9511    FORMAT(' bottom friction            u= ', e20.13, '    v= ', e20.13)
349 9512    FORMAT(' Asselin time filter        u= ', e20.13, '    v= ', e20.13)
350 9513    FORMAT(' -----------------------------------------------------------------------------')
351 9514    FORMAT(' total trend                u= ', e20.13, '    v= ', e20.13)
352
353         IF(lwp) THEN
354            WRITE (numout,*)
355            WRITE (numout,*)
356            WRITE (numout,9520) kt
357            WRITE (numout,9521) hke(jpdyn_hpg) / tvolt
358            WRITE (numout,9529) hke(jpdyn_spg) / tvolt
359            WRITE (numout,9522) hke(jpdyn_keg) / tvolt
360            WRITE (numout,9523) hke(jpdyn_rvo) / tvolt
361            WRITE (numout,9524) hke(jpdyn_pvo) / tvolt
362            WRITE (numout,9527) hke(jpdyn_zad) / tvolt
363            WRITE (numout,9525) hke(jpdyn_ldf) / tvolt
364            WRITE (numout,9528) hke(jpdyn_zdf) / tvolt
365            WRITE (numout,9530) hke(jpdyn_tau) / tvolt
366            WRITE (numout,9531) hke(jpdyn_bfr) / tvolt
367            WRITE (numout,9532) hke(jpdyn_atf) / tvolt
368            WRITE (numout,9533)
369            WRITE (numout,9534)   &
370            &     (  hke(jpdyn_hpg) + hke(jpdyn_spg) + hke(jpdyn_keg) + hke(jpdyn_rvo)   &
371            &      + hke(jpdyn_pvo) + hke(jpdyn_zad) + hke(jpdyn_ldf) + hke(jpdyn_zdf)   &
372            &      + hke(jpdyn_tau) + hke(jpdyn_bfr) + hke(jpdyn_atf)  ) / tvolt
373         ENDIF
374
375 9520    FORMAT(' kinetic energy trend at it= ', i6, ' :', /' ====================================')
376 9521    FORMAT(' pressure gradient         u2= ', e20.13)
377 9529    FORMAT(' surface pressure gradient u2= ', e20.13)
378 9522    FORMAT(' ke gradient               u2= ', e20.13)
379 9523    FORMAT(' relative vorticity term   u2= ', e20.13)
380 9524    FORMAT(' coriolis term             u2= ', e20.13)
381 9527    FORMAT(' vertical advection        u2= ', e20.13)
382 9525    FORMAT(' horizontal diffusion      u2= ', e20.13)
383 9528    FORMAT(' vertical diffusion        u2= ', e20.13)
384 9530    FORMAT(' surface wind stress       u2= ', e20.13)
385 9531    FORMAT(' bottom friction           u2= ', e20.13)
386 9532    FORMAT(' Asselin time filter       u2= ', e20.13)
387 9533    FORMAT(' --------------------------------------------------')
388 9534    FORMAT(' total trend               u2= ', e20.13)
389
390         IF(lwp) THEN
391            WRITE (numout,*)
392            WRITE (numout,*)
393            WRITE (numout,9540) kt
394            WRITE (numout,9541) ( hke(jpdyn_keg) + hke(jpdyn_rvo) + hke(jpdyn_zad) ) / tvolt
395            WRITE (numout,9542) ( hke(jpdyn_keg) + hke(jpdyn_zad) ) / tvolt
396            WRITE (numout,9543) ( hke(jpdyn_pvo) ) / tvolt
397            WRITE (numout,9544) ( hke(jpdyn_rvo) ) / tvolt
398            WRITE (numout,9545) ( hke(jpdyn_spg) ) / tvolt
399            WRITE (numout,9546) ( hke(jpdyn_ldf) ) / tvolt
400            WRITE (numout,9547) ( hke(jpdyn_zdf) ) / tvolt
401            WRITE (numout,9548) ( hke(jpdyn_hpg) ) / tvolt, rpktrd / tvolt
402            WRITE (numout,*)
403            WRITE (numout,*)
404         ENDIF
405
406 9540    FORMAT(' energetic consistency at it= ', i6, ' :', /' =========================================')
407 9541    FORMAT(' 0 = non linear term (true if KE conserved)                : ', e20.13)
408 9542    FORMAT(' 0 = ke gradient + vertical advection                      : ', e20.13)
409 9543    FORMAT(' 0 = coriolis term  (true if KE conserving scheme)         : ', e20.13)
410 9544    FORMAT(' 0 = vorticity term (true if KE conserving scheme)         : ', e20.13)
411 9545    FORMAT(' 0 = surface pressure gradient  ???                        : ', e20.13)
412 9546    FORMAT(' 0 < horizontal diffusion                                  : ', e20.13)
413 9547    FORMAT(' 0 < vertical diffusion                                    : ', e20.13)
414 9548    FORMAT(' pressure gradient u2 = - 1/rau0 u.dz(rhop)                : ', e20.13, '  u.dz(rhop) =', e20.13)
415         !
416         ! Save potential to kinetic energy conversion for next time step
417         rpktrd = peke
418         !
419      ENDIF
420      !
421      CALL wrk_dealloc( jpi, jpj, jpk, zkx, zky, zkz, zkepe )
422      !
423   END SUBROUTINE glo_dyn_wri
424
425
426   SUBROUTINE glo_tra_wri( kt )
427      !!---------------------------------------------------------------------
428      !!                  ***  ROUTINE glo_tra_wri  ***
429      !!
430      !! ** Purpose :  write global domain averaged of T and T^2 trends in ocean.output
431      !!----------------------------------------------------------------------
432      INTEGER, INTENT(in) ::   kt   ! ocean time-step index
433      !
434      INTEGER  ::   jk   ! loop indices
435      !!----------------------------------------------------------------------
436
437      ! I. Tracers trends
438      ! -----------------
439
440      IF( MOD(kt,nn_trd) == 0 .OR. kt == nit000 .OR. kt == nitend ) THEN
441
442         ! I.1 Sums over the global domain
443         ! -------------------------------
444         IF( lk_mpp ) THEN
445            CALL mpp_sum( tmo, jptot_tra )   
446            CALL mpp_sum( smo, jptot_tra )
447            CALL mpp_sum( t2 , jptot_tra )
448            CALL mpp_sum( s2 , jptot_tra )
449         ENDIF
450
451         ! I.2 Print tracers trends in the ocean.output file
452         ! --------------------------------------------------
453         
454         IF(lwp) THEN
455            WRITE (numout,*)
456            WRITE (numout,*)
457            WRITE (numout,9400) kt
458            WRITE (numout,9401)  tmo(jptra_xad) / tvolt, smo(jptra_xad) / tvolt
459            WRITE (numout,9411)  tmo(jptra_yad) / tvolt, smo(jptra_yad) / tvolt
460            WRITE (numout,9402)  tmo(jptra_zad) / tvolt, smo(jptra_zad) / tvolt
461            WRITE (numout,9403)  tmo(jptra_ldf) / tvolt, smo(jptra_ldf) / tvolt
462            WRITE (numout,9404)  tmo(jptra_zdf) / tvolt, smo(jptra_zdf) / tvolt
463            WRITE (numout,9405)  tmo(jptra_npc) / tvolt, smo(jptra_npc) / tvolt
464            WRITE (numout,9406)  tmo(jptra_dmp) / tvolt, smo(jptra_dmp) / tvolt
465            WRITE (numout,9407)  tmo(jptra_qsr) / tvolt
466            WRITE (numout,9408)  tmo(jptra_nsr) / tvolt, smo(jptra_nsr) / tvolt
467            WRITE (numout,9409) 
468            WRITE (numout,9410) (  tmo(jptra_xad) + tmo(jptra_yad) + tmo(jptra_zad) + tmo(jptra_ldf) + tmo(jptra_zdf)   &
469            &                    + tmo(jptra_npc) + tmo(jptra_dmp) + tmo(jptra_qsr) + tmo(jptra_nsr) ) / tvolt,   &
470            &                   (  smo(jptra_xad) + smo(jptra_yad) + smo(jptra_zad) + smo(jptra_ldf) + smo(jptra_zdf)   &
471            &                    + smo(jptra_npc) + smo(jptra_dmp)                   + smo(jptra_nsr) ) / tvolt
472         ENDIF
473
4749400     FORMAT(' tracer trend at it= ',i6,' :     temperature',   &
475              '              salinity',/' ============================')
4769401     FORMAT(' zonal      advection        ',e20.13,'     ',e20.13)
4779411     FORMAT(' meridional advection        ',e20.13,'     ',e20.13)
4789402     FORMAT(' vertical advection          ',e20.13,'     ',e20.13)
4799403     FORMAT(' horizontal diffusion        ',e20.13,'     ',e20.13)
4809404     FORMAT(' vertical diffusion          ',e20.13,'     ',e20.13)
4819405     FORMAT(' static instability mixing   ',e20.13,'     ',e20.13)
4829406     FORMAT(' damping term                ',e20.13,'     ',e20.13)
4839407     FORMAT(' penetrative qsr             ',e20.13)
4849408     FORMAT(' non solar radiation         ',e20.13,'     ',e20.13)
4859409     FORMAT(' -------------------------------------------------------------------------')
4869410     FORMAT(' total trend                 ',e20.13,'     ',e20.13)
487
488
489         IF(lwp) THEN
490            WRITE (numout,*)
491            WRITE (numout,*)
492            WRITE (numout,9420) kt
493            WRITE (numout,9421)   t2(jptra_xad) / tvolt, s2(jptra_xad) / tvolt
494            WRITE (numout,9431)   t2(jptra_yad) / tvolt, s2(jptra_yad) / tvolt
495            WRITE (numout,9422)   t2(jptra_zad) / tvolt, s2(jptra_zad) / tvolt
496            WRITE (numout,9423)   t2(jptra_ldf) / tvolt, s2(jptra_ldf) / tvolt
497            WRITE (numout,9424)   t2(jptra_zdf) / tvolt, s2(jptra_zdf) / tvolt
498            WRITE (numout,9425)   t2(jptra_npc) / tvolt, s2(jptra_npc) / tvolt
499            WRITE (numout,9426)   t2(jptra_dmp) / tvolt, s2(jptra_dmp) / tvolt
500            WRITE (numout,9427)   t2(jptra_qsr) / tvolt
501            WRITE (numout,9428)   t2(jptra_nsr) / tvolt, s2(jptra_nsr) / tvolt
502            WRITE (numout,9429)
503            WRITE (numout,9430) (  t2(jptra_xad) + t2(jptra_yad) + t2(jptra_zad) + t2(jptra_ldf) + t2(jptra_zdf)   &
504            &                    + t2(jptra_npc) + t2(jptra_dmp) + t2(jptra_qsr) + t2(jptra_nsr) ) / tvolt,   &
505            &                   (  s2(jptra_xad) + s2(jptra_yad) + s2(jptra_zad) + s2(jptra_ldf) + s2(jptra_zdf)   &
506            &                    + s2(jptra_npc) + s2(jptra_dmp)                  + s2(jptra_nsr) ) / tvolt
507         ENDIF
508
5099420     FORMAT(' tracer**2 trend at it= ', i6, ' :      temperature',   &
510            '               salinity', /, ' ===============================')
5119421     FORMAT(' zonal      advection      * t   ', e20.13, '     ', e20.13)
5129431     FORMAT(' meridional advection      * t   ', e20.13, '     ', e20.13)
5139422     FORMAT(' vertical advection        * t   ', e20.13, '     ', e20.13)
5149423     FORMAT(' horizontal diffusion      * t   ', e20.13, '     ', e20.13)
5159424     FORMAT(' vertical diffusion        * t   ', e20.13, '     ', e20.13)
5169425     FORMAT(' static instability mixing * t   ', e20.13, '     ', e20.13)
5179426     FORMAT(' damping term              * t   ', e20.13, '     ', e20.13)
5189427     FORMAT(' penetrative qsr           * t   ', e20.13)
5199428     FORMAT(' non solar radiation       * t   ', e20.13, '     ', e20.13)
5209429     FORMAT(' -----------------------------------------------------------------------------')
5219430     FORMAT(' total trend                *t = ', e20.13, '  *s = ', e20.13)
522
523
524         IF(lwp) THEN
525            WRITE (numout,*)
526            WRITE (numout,*)
527            WRITE (numout,9440) kt
528            WRITE (numout,9441) ( tmo(jptra_xad)+tmo(jptra_yad)+tmo(jptra_zad) )/tvolt,   &
529            &                   ( smo(jptra_xad)+smo(jptra_yad)+smo(jptra_zad) )/tvolt
530            WRITE (numout,9442)   tmo(jptra_sad)/tvolt,  smo(jptra_sad)/tvolt
531            WRITE (numout,9443)   tmo(jptra_ldf)/tvolt,  smo(jptra_ldf)/tvolt
532            WRITE (numout,9444)   tmo(jptra_zdf)/tvolt,  smo(jptra_zdf)/tvolt
533            WRITE (numout,9445)   tmo(jptra_npc)/tvolt,  smo(jptra_npc)/tvolt
534            WRITE (numout,9446) ( t2(jptra_xad)+t2(jptra_yad)+t2(jptra_zad) )/tvolt,    &
535            &                   ( s2(jptra_xad)+s2(jptra_yad)+s2(jptra_zad) )/tvolt
536            WRITE (numout,9447)   t2(jptra_ldf)/tvolt,   s2(jptra_ldf)/tvolt
537            WRITE (numout,9448)   t2(jptra_zdf)/tvolt,   s2(jptra_zdf)/tvolt
538            WRITE (numout,9449)   t2(jptra_npc)/tvolt,   s2(jptra_npc)/tvolt
539         ENDIF
540
5419440     FORMAT(' tracer consistency at it= ',i6,   &
542            ' :         temperature','                salinity',/,   &
543            ' ==================================')
5449441     FORMAT(' 0 = horizontal+vertical advection +    ',e20.13,'       ',e20.13)
5459442     FORMAT('     1st lev vertical advection         ',e20.13,'       ',e20.13)
5469443     FORMAT(' 0 = horizontal diffusion               ',e20.13,'       ',e20.13)
5479444     FORMAT(' 0 = vertical diffusion                 ',e20.13,'       ',e20.13)
5489445     FORMAT(' 0 = static instability mixing          ',e20.13,'       ',e20.13)
5499446     FORMAT(' 0 = horizontal+vertical advection * t  ',e20.13,'       ',e20.13)
5509447     FORMAT(' 0 > horizontal diffusion          * t  ',e20.13,'       ',e20.13)
5519448     FORMAT(' 0 > vertical diffusion            * t  ',e20.13,'       ',e20.13)
5529449     FORMAT(' 0 > static instability mixing     * t  ',e20.13,'       ',e20.13)
553         !
554      ENDIF
555      !
556   END SUBROUTINE glo_tra_wri
557
558   !!======================================================================
559END MODULE trdglo
Note: See TracBrowser for help on using the repository browser.