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.
trdtra.F90 in branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/OPA_SRC/TRD – NEMO

source: branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/OPA_SRC/TRD/trdtra.F90 @ 7179

Last change on this file since 7179 was 7179, checked in by timgraham, 7 years ago

Manually merge in changes from v3.6_extra_CMIP6_diagnostics branch.
This change also includes a change of the domain_def.xml file so XIOS2 must be used from this revision onwards

File size: 21.3 KB
RevLine 
[2026]1MODULE trdtra
2   !!======================================================================
3   !!                       ***  MODULE  trdtra  ***
[4990]4   !! Ocean diagnostics:  ocean tracers trends pre-processing
[2026]5   !!=====================================================================
[4990]6   !! History :  3.3  !  2010-06  (C. Ethe) creation for the TRA/TRC merge
7   !!            3.5  !  2012-02  (G. Madec) update the comments
[2026]8   !!----------------------------------------------------------------------
[4990]9
[2026]10   !!----------------------------------------------------------------------
[4990]11   !!   trd_tra       : pre-process the tracer trends
12   !!   trd_tra_adv   : transform a div(U.T) trend into a U.grad(T) trend
13   !!   trd_tra_mng   : tracer trend manager: dispatch to the diagnostic modules
14   !!   trd_tra_iom   : output 3D tracer trends using IOM
[2026]15   !!----------------------------------------------------------------------
[4990]16   USE oce            ! ocean dynamics and tracers variables
17   USE dom_oce        ! ocean domain
18   USE sbc_oce        ! surface boundary condition: ocean
19   USE zdf_oce        ! ocean vertical physics
20   USE trd_oce        ! trends: ocean variables
21   USE trdtrc         ! ocean passive mixed layer tracers trends
22   USE trdglo         ! trends: global domain averaged
23   USE trdpen         ! trends: Potential ENergy
24   USE trdmxl         ! ocean active mixed layer tracers trends
25   USE ldftra_oce     ! ocean active tracers lateral physics
26   USE zdfddm         ! vertical physics: double diffusion
27   USE phycst         ! physical constants
28   USE in_out_manager ! I/O manager
29   USE iom            ! I/O manager library
30   USE lib_mpp        ! MPP library
31   USE wrk_nemo       ! Memory allocation
[2026]32
33   IMPLICIT NONE
34   PRIVATE
35
[4990]36   PUBLIC   trd_tra   ! called by all tra_... modules
[2026]37
[4990]38   REAL(wp) ::   r2dt   ! time-step, = 2 rdttra except at nit000 (=rdttra) if neuler=0
39
[7061]40   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   trdtx, trdty, trdt  ! use to store the temperature trends
41   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   avt_evd  ! store avt_evd to calculate EVD trend
[4990]42
[2026]43   !! * Substitutions
44#  include "domzgr_substitute.h90"
[4990]45#  include "zdfddm_substitute.h90"
[2026]46#  include "vectopt_loop_substitute.h90"
47   !!----------------------------------------------------------------------
[4990]48   !! NEMO/OPA 3.3 , NEMO Consortium (2010)
[2281]49   !! $Id$
[2715]50   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
[2026]51   !!----------------------------------------------------------------------
52CONTAINS
53
[2715]54   INTEGER FUNCTION trd_tra_alloc()
[4990]55      !!---------------------------------------------------------------------
[2715]56      !!                  ***  FUNCTION trd_tra_alloc  ***
[4990]57      !!---------------------------------------------------------------------
[7061]58      ALLOCATE( trdtx(jpi,jpj,jpk) , trdty(jpi,jpj,jpk) , trdt(jpi,jpj,jpk) , avt_evd(jpi,jpj,jpk), STAT= trd_tra_alloc )
[2715]59      !
60      IF( lk_mpp             )   CALL mpp_sum ( trd_tra_alloc )
61      IF( trd_tra_alloc /= 0 )   CALL ctl_warn('trd_tra_alloc: failed to allocate arrays')
62   END FUNCTION trd_tra_alloc
63
64
[2026]65   SUBROUTINE trd_tra( kt, ctype, ktra, ktrd, ptrd, pun, ptra )
66      !!---------------------------------------------------------------------
67      !!                  ***  ROUTINE trd_tra  ***
68      !!
[4990]69      !! ** Purpose : pre-process tracer trends
[2026]70      !!
[4990]71      !! ** Method  : - mask the trend
72      !!              - advection (ptra present) converte the incoming flux (U.T)
73      !!              into trend (U.T => -U.grat(T)=div(U.T)-T.div(U)) through a
74      !!              call to trd_tra_adv
75      !!              - 'TRA' case : regroup T & S trends
76      !!              - send the trends to trd_tra_mng (trdtrc) for further processing
[2026]77      !!----------------------------------------------------------------------
[4990]78      INTEGER                         , INTENT(in)           ::   kt      ! time step
79      CHARACTER(len=3)                , INTENT(in)           ::   ctype   ! tracers trends type 'TRA'/'TRC'
80      INTEGER                         , INTENT(in)           ::   ktra    ! tracer index
81      INTEGER                         , INTENT(in)           ::   ktrd    ! tracer trend index
82      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in)           ::   ptrd    ! tracer trend  or flux
83      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL ::   pun     ! now velocity
84      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL ::   ptra    ! now tracer variable
[2715]85      !
[4990]86      INTEGER  ::   jk   ! loop indices
87      REAL(wp), POINTER, DIMENSION(:,:,:)  ::   zwt, zws, ztrdt, ztrds   ! 3D workspace
88      !!----------------------------------------------------------------------
[3294]89      !
90      CALL wrk_alloc( jpi, jpj, jpk, ztrds )
[4990]91      !     
92      IF( .NOT. ALLOCATED( trdtx ) ) THEN      ! allocate trdtra arrays
[2715]93         IF( trd_tra_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'trd_tra : unable to allocate arrays' )
94      ENDIF
[2026]95
[4990]96      IF( ctype == 'TRA' .AND. ktra == jp_tem ) THEN   !==  Temperature trend  ==!
97         !
98         SELECT CASE( ktrd )
99         !                            ! advection: transform the advective flux into a trend
100         CASE( jptra_xad )   ;   CALL trd_tra_adv( ptrd, pun, ptra, 'X', trdtx ) 
101         CASE( jptra_yad )   ;   CALL trd_tra_adv( ptrd, pun, ptra, 'Y', trdty ) 
102         CASE( jptra_zad )   ;   CALL trd_tra_adv( ptrd, pun, ptra, 'Z', trdt  ) 
103         CASE( jptra_bbc,    &        ! qsr, bbc: on temperature only, send to trd_tra_mng
104            &  jptra_qsr )   ;   trdt(:,:,:) = ptrd(:,:,:) * tmask(:,:,:)
105                                 ztrds(:,:,:) = 0._wp
106                                 CALL trd_tra_mng( trdt, ztrds, ktrd, kt )
[7061]107         CASE( jptra_evd )   ;   avt_evd(:,:,:) = ptrd(:,:,:) * tmask(:,:,:)
[4990]108         CASE DEFAULT                 ! other trends: masked trends
109            trdt(:,:,:) = ptrd(:,:,:) * tmask(:,:,:)              ! mask & store
110         END SELECT
111         !
112      ENDIF
[2026]113
[4990]114      IF( ctype == 'TRA' .AND. ktra == jp_sal ) THEN      !==  Salinity trends  ==!
[2026]115         !
[4990]116         SELECT CASE( ktrd )
117         !                            ! advection: transform the advective flux into a trend
118         !                            !            and send T & S trends to trd_tra_mng
119         CASE( jptra_xad  )   ;   CALL trd_tra_adv( ptrd , pun  , ptra, 'X'  , ztrds ) 
120                                  CALL trd_tra_mng( trdtx, ztrds, ktrd, kt   )
121         CASE( jptra_yad  )   ;   CALL trd_tra_adv( ptrd , pun  , ptra, 'Y'  , ztrds ) 
122                                  CALL trd_tra_mng( trdty, ztrds, ktrd, kt   )
123         CASE( jptra_zad  )   ;   CALL trd_tra_adv( ptrd , pun  , ptra, 'Z'  , ztrds ) 
124                                  CALL trd_tra_mng( trdt , ztrds, ktrd, kt   )
125         CASE( jptra_zdfp )           ! diagnose the "PURE" Kz trend (here: just before the swap)
126            !                         ! iso-neutral diffusion case otherwise jptra_zdf is "PURE"
127            CALL wrk_alloc( jpi, jpj, jpk, zwt, zws, ztrdt )
128            !
129            zwt(:,:, 1 ) = 0._wp   ;   zws(:,:, 1 ) = 0._wp            ! vertical diffusive fluxes
130            zwt(:,:,jpk) = 0._wp   ;   zws(:,:,jpk) = 0._wp
131            DO jk = 2, jpk
[7179]132               zwt(:,:,jk) = avt_k(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / fse3w(:,:,jk) * tmask(:,:,jk)
[4990]133               zws(:,:,jk) = fsavs(:,:,jk) * ( tsa(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / fse3w(:,:,jk) * tmask(:,:,jk)
134            END DO
135            !
136            ztrdt(:,:,jpk) = 0._wp   ;   ztrds(:,:,jpk) = 0._wp
137            DO jk = 1, jpkm1
138               ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / fse3t(:,:,jk)
139               ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / fse3t(:,:,jk) 
140            END DO
141            CALL trd_tra_mng( ztrdt, ztrds, jptra_zdfp, kt ) 
142            !
[7061]143            !                         ! Also calculate EVD trend at this point.
144            zwt(:,:,:) = 0._wp   ;   zws(:,:,:) = 0._wp            ! vertical diffusive fluxes
145            DO jk = 2, jpk
146               zwt(:,:,jk) = avt_evd(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / fse3w(:,:,jk) * tmask(:,:,jk)
147               zws(:,:,jk) = avt_evd(:,:,jk) * ( tsa(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / fse3w(:,:,jk) * tmask(:,:,jk)
148            END DO
149            !
150            ztrdt(:,:,jpk) = 0._wp   ;   ztrds(:,:,jpk) = 0._wp
151            DO jk = 1, jpkm1
152               ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / fse3t(:,:,jk)
153               ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / fse3t(:,:,jk) 
154            END DO
155            CALL trd_tra_mng( ztrdt, ztrds, jptra_evd, kt ) 
156            !
[4990]157            CALL wrk_dealloc( jpi, jpj, jpk, zwt, zws, ztrdt )
158            !
159         CASE DEFAULT                 ! other trends: mask and send T & S trends to trd_tra_mng
160            ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:)
161            CALL trd_tra_mng( trdt, ztrds, ktrd, kt ) 
162         END SELECT
163      ENDIF
164
165      IF( ctype == 'TRC' ) THEN                           !==  passive tracer trend  ==!
[2026]166         !
[4990]167         SELECT CASE( ktrd )
168         !                            ! advection: transform the advective flux into a masked trend
169         CASE( jptra_xad )   ;   CALL trd_tra_adv( ptrd , pun , ptra, 'X', ztrds ) 
170         CASE( jptra_yad )   ;   CALL trd_tra_adv( ptrd , pun , ptra, 'Y', ztrds ) 
171         CASE( jptra_zad )   ;   CALL trd_tra_adv( ptrd , pun , ptra, 'Z', ztrds ) 
172         CASE DEFAULT                 ! other trends: just masked
173                                 ztrds(:,:,:) = ptrd(:,:,:) * tmask(:,:,:)
174         END SELECT
175         !                            ! send trend to trd_trc
176         CALL trd_trc( ztrds, ktra, ktrd, kt ) 
177         !
[2026]178      ENDIF
179      !
[3294]180      CALL wrk_dealloc( jpi, jpj, jpk, ztrds )
[2715]181      !
[2026]182   END SUBROUTINE trd_tra
183
[2715]184
[2026]185   SUBROUTINE trd_tra_adv( pf, pun, ptn, cdir, ptrd )
186      !!---------------------------------------------------------------------
187      !!                  ***  ROUTINE trd_tra_adv  ***
188      !!
[4990]189      !! ** Purpose :   transformed a advective flux into a masked advective trends
190      !!
191      !! ** Method  :   use the following transformation: -div(U.T) = - U grad(T) + T.div(U)
192      !!       i-advective trends = -un. di-1[T] = -( di-1[fi] - tn di-1[un] )
193      !!       j-advective trends = -un. di-1[T] = -( dj-1[fi] - tn dj-1[un] )
194      !!       k-advective trends = -un. di+1[T] = -( dk+1[fi] - tn dk+1[un] )
195      !!                where fi is the incoming advective flux.
[2026]196      !!----------------------------------------------------------------------
[4990]197      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in   ) ::   pf      ! advective flux in one direction
198      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in   ) ::   pun     ! now velocity   in one direction
199      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in   ) ::   ptn     ! now or before tracer
200      CHARACTER(len=1)                , INTENT(in   ) ::   cdir    ! X/Y/Z direction
201      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(  out) ::   ptrd    ! advective trend in one direction
[2715]202      !
203      INTEGER  ::   ji, jj, jk   ! dummy loop indices
[4990]204      INTEGER  ::   ii, ij, ik   ! index shift as function of the direction
[2026]205      !!----------------------------------------------------------------------
[4990]206      !
207      SELECT CASE( cdir )      ! shift depending on the direction
208      CASE( 'X' )   ;   ii = 1   ;   ij = 0   ;   ik = 0      ! i-trend
209      CASE( 'Y' )   ;   ii = 0   ;   ij = 1   ;   ik = 0      ! j-trend
210      CASE( 'Z' )   ;   ii = 0   ;   ij = 0   ;   ik =-1      ! k-trend
[2026]211      END SELECT
212      !
[4990]213      !                        ! set to zero uncomputed values
214      ptrd(jpi,:,:) = 0._wp   ;   ptrd(1,:,:) = 0._wp
215      ptrd(:,jpj,:) = 0._wp   ;   ptrd(:,1,:) = 0._wp
216      ptrd(:,:,jpk) = 0._wp
[2026]217      !
[4990]218      DO jk = 1, jpkm1         ! advective trend
[2026]219         DO jj = 2, jpjm1
220            DO ji = fs_2, fs_jpim1   ! vector opt.
[4990]221               ptrd(ji,jj,jk) = - (     pf (ji,jj,jk) - pf (ji-ii,jj-ij,jk-ik)                        &
222                 &                  - ( pun(ji,jj,jk) - pun(ji-ii,jj-ij,jk-ik) ) * ptn(ji,jj,jk)  )   &
223                 &              / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) )  * tmask(ji,jj,jk)
[2026]224            END DO
225         END DO
226      END DO
227      !
228   END SUBROUTINE trd_tra_adv
229
[4990]230
231   SUBROUTINE trd_tra_mng( ptrdx, ptrdy, ktrd, kt )
232      !!---------------------------------------------------------------------
233      !!                  ***  ROUTINE trd_tra_mng  ***
234      !!
235      !! ** Purpose :   Dispatch all tracer trends computation, e.g. 3D output,
236      !!                integral constraints, potential energy, and/or
237      !!                mixed layer budget.
[2026]238      !!----------------------------------------------------------------------
[4990]239      REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   ptrdx   ! Temperature or U trend
240      REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   ptrdy   ! Salinity    or V trend
241      INTEGER                   , INTENT(in   ) ::   ktrd    ! tracer trend index
242      INTEGER                   , INTENT(in   ) ::   kt      ! time step
243      !!----------------------------------------------------------------------
244
245      IF( neuler == 0 .AND. kt == nit000    ) THEN   ;   r2dt =      rdt      ! = rdtra (restart with Euler time stepping)
246      ELSEIF(               kt <= nit000 + 1) THEN   ;   r2dt = 2. * rdt      ! = 2 rdttra (leapfrog)
247      ENDIF
248
249      !                   ! 3D output of tracers trends using IOM interface
250      IF( ln_tra_trd )   CALL trd_tra_iom ( ptrdx, ptrdy, ktrd, kt )
251
252      !                   ! Integral Constraints Properties for tracers trends                                       !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
253      IF( ln_glo_trd )   CALL trd_glo( ptrdx, ptrdy, ktrd, 'TRA', kt )
254
255      !                   ! Potential ENergy trends
256      IF( ln_PE_trd  )   CALL trd_pen( ptrdx, ptrdy, ktrd, kt, r2dt )
257
258      !                   ! Mixed layer trends for active tracers
259      IF( ln_tra_mxl )   THEN   
260         !-----------------------------------------------------------------------------------------------
261         ! W.A.R.N.I.N.G :
262         ! jptra_ldf : called by traldf.F90
263         !                 at this stage we store:
264         !                  - the lateral geopotential diffusion (here, lateral = horizontal)
265         !                  - and the iso-neutral diffusion if activated
266         ! jptra_zdf : called by trazdf.F90
267         !                 * in case of iso-neutral diffusion we store the vertical diffusion component in the
268         !                   lateral trend including the K_z contrib, which will be removed later (see trd_mxl)
269         !-----------------------------------------------------------------------------------------------
270
271         SELECT CASE ( ktrd )
272         CASE ( jptra_xad )        ;   CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_xad, '3D' )   ! zonal    advection
273         CASE ( jptra_yad )        ;   CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_yad, '3D' )   ! merid.   advection
274         CASE ( jptra_zad )        ;   CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_zad, '3D' )   ! vertical advection
275         CASE ( jptra_ldf )        ;   CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_ldf, '3D' )   ! lateral  diffusion
276         CASE ( jptra_bbl )        ;   CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_bbl, '3D' )   ! bottom boundary layer
277         CASE ( jptra_zdf )
278            IF( ln_traldf_iso ) THEN ; CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_ldf, '3D' )   ! lateral  diffusion (K_z)
279            ELSE                   ;   CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_zdf, '3D' )   ! vertical diffusion (K_z)
280            ENDIF
281         CASE ( jptra_dmp )        ;   CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_dmp, '3D' )   ! internal 3D restoring (tradmp)
282         CASE ( jptra_qsr )        ;   CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_for, '3D' )   ! air-sea : penetrative sol radiat
283         CASE ( jptra_nsr )        ;   ptrdx(:,:,2:jpk) = 0._wp   ;   ptrdy(:,:,2:jpk) = 0._wp
284                                       CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_for, '2D' )   ! air-sea : non penetr sol radiation
285         CASE ( jptra_bbc )        ;   CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_bbc, '3D' )   ! bottom bound cond (geoth flux)
286         CASE ( jptra_npc )        ;   CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_npc, '3D' )   ! non penetr convect adjustment
287         CASE ( jptra_atf )        ;   CALL trd_mxl_zint( ptrdx, ptrdy, jpmxl_atf, '3D' )   ! asselin time filter (last trend)
288                                   !
289                                       CALL trd_mxl( kt, r2dt )                             ! trends: Mixed-layer (output)
290         END SELECT
291         !
292      ENDIF
293      !
294   END SUBROUTINE trd_tra_mng
295
296
297   SUBROUTINE trd_tra_iom( ptrdx, ptrdy, ktrd, kt )
298      !!---------------------------------------------------------------------
299      !!                  ***  ROUTINE trd_tra_iom  ***
300      !!
301      !! ** Purpose :   output 3D tracer trends using IOM
302      !!----------------------------------------------------------------------
303      REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   ptrdx   ! Temperature or U trend
304      REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   ptrdy   ! Salinity    or V trend
305      INTEGER                   , INTENT(in   ) ::   ktrd    ! tracer trend index
306      INTEGER                   , INTENT(in   ) ::   kt      ! time step
307      !!
308      INTEGER ::   ji, jj, jk   ! dummy loop indices
309      INTEGER ::   ikbu, ikbv   ! local integers
310      REAL(wp), POINTER, DIMENSION(:,:)   ::   z2dx, z2dy   ! 2D workspace
311      !!----------------------------------------------------------------------
312      !
313!!gm Rq: mask the trends already masked in trd_tra, but lbc_lnk should probably be added
314      !
315      SELECT CASE( ktrd )
316      CASE( jptra_xad  )   ;   CALL iom_put( "ttrd_xad" , ptrdx )        ! x- horizontal advection
317                               CALL iom_put( "strd_xad" , ptrdy )
318      CASE( jptra_yad  )   ;   CALL iom_put( "ttrd_yad" , ptrdx )        ! y- horizontal advection
319                               CALL iom_put( "strd_yad" , ptrdy )
320      CASE( jptra_zad  )   ;   CALL iom_put( "ttrd_zad" , ptrdx )        ! z- vertical   advection
321                               CALL iom_put( "strd_zad" , ptrdy )
322                               IF( .NOT. lk_vvl ) THEN                   ! cst volume : adv flux through z=0 surface
323                                  CALL wrk_alloc( jpi, jpj, z2dx, z2dy )
324                                  z2dx(:,:) = wn(:,:,1) * tsn(:,:,1,jp_tem) / fse3t(:,:,1)
325                                  z2dy(:,:) = wn(:,:,1) * tsn(:,:,1,jp_sal) / fse3t(:,:,1)
326                                  CALL iom_put( "ttrd_sad", z2dx )
327                                  CALL iom_put( "strd_sad", z2dy )
328                                  CALL wrk_dealloc( jpi, jpj, z2dx, z2dy )
329                               ENDIF
[7061]330      CASE( jptra_totad  ) ;   CALL iom_put( "ttrd_totad" , ptrdx )        ! total   advection
331                               CALL iom_put( "strd_totad" , ptrdy )
[4990]332      CASE( jptra_ldf  )   ;   CALL iom_put( "ttrd_ldf" , ptrdx )        ! lateral diffusion
333                               CALL iom_put( "strd_ldf" , ptrdy )
334      CASE( jptra_zdf  )   ;   CALL iom_put( "ttrd_zdf" , ptrdx )        ! vertical diffusion (including Kz contribution)
335                               CALL iom_put( "strd_zdf" , ptrdy )
336      CASE( jptra_zdfp )   ;   CALL iom_put( "ttrd_zdfp", ptrdx )        ! PURE vertical diffusion (no isoneutral contribution)
337                               CALL iom_put( "strd_zdfp", ptrdy )
[7061]338      CASE( jptra_evd )    ;   CALL iom_put( "ttrd_evd", ptrdx )         ! EVD trend (convection)
339                               CALL iom_put( "strd_evd", ptrdy )
340      CASE( jptra_iso_x )  ;   CALL iom_put( "ttrd_iso_x", ptrdx )       ! x-component of isopycnal mixing
341                               CALL iom_put( "strd_iso_x", ptrdy )
342      CASE( jptra_iso_y )  ;   CALL iom_put( "ttrd_iso_y", ptrdx )       ! y-component of isopycnal mixing
343                               CALL iom_put( "strd_iso_y", ptrdy )
344      CASE( jptra_iso_z1 ) ;   CALL iom_put( "ttrd_iso_z1", ptrdx )      ! first part of z-component of isopycnal mixing
345                               CALL iom_put( "strd_iso_z1", ptrdy )
[4990]346      CASE( jptra_dmp  )   ;   CALL iom_put( "ttrd_dmp" , ptrdx )        ! internal restoring (damping)
347                               CALL iom_put( "strd_dmp" , ptrdy )
348      CASE( jptra_bbl  )   ;   CALL iom_put( "ttrd_bbl" , ptrdx )        ! bottom boundary layer
349                               CALL iom_put( "strd_bbl" , ptrdy )
350      CASE( jptra_npc  )   ;   CALL iom_put( "ttrd_npc" , ptrdx )        ! static instability mixing
351                               CALL iom_put( "strd_npc" , ptrdy )
352      CASE( jptra_nsr  )   ;   CALL iom_put( "ttrd_qns" , ptrdx )        ! surface forcing + runoff (ln_rnf=T)
353                               CALL iom_put( "strd_cdt" , ptrdy )
354      CASE( jptra_qsr  )   ;   CALL iom_put( "ttrd_qsr" , ptrdx )        ! penetrative solar radiat. (only on temperature)
355      CASE( jptra_bbc  )   ;   CALL iom_put( "ttrd_bbc" , ptrdx )        ! geothermal heating   (only on temperature)
356      CASE( jptra_atf  )   ;   CALL iom_put( "ttrd_atf" , ptrdx )        ! asselin time Filter
357                               CALL iom_put( "strd_atf" , ptrdy )
[7061]358      CASE( jptra_tot  )   ;   CALL iom_put( "ttrd_tot" , ptrdx )        ! model total trend
359                               CALL iom_put( "strd_tot" , ptrdy )
[4990]360      END SELECT
361      !
362   END SUBROUTINE trd_tra_iom
363
[2026]364   !!======================================================================
365END MODULE trdtra
Note: See TracBrowser for help on using the repository browser.