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.
trddyn.F90 in NEMO/branches/UKMO/NEMO_4.0.2_momentum_trends/src/OCE/TRD – NEMO

source: NEMO/branches/UKMO/NEMO_4.0.2_momentum_trends/src/OCE/TRD/trddyn.F90 @ 13652

Last change on this file since 13652 was 13652, checked in by cguiavarch, 4 years ago

UKMO/NEMO_4.0.2_momentum_trends : code changes (equivalent to rev 13500 of NEMO 4.0.1 branch).

File size: 18.7 KB
Line 
1MODULE trddyn
2   !!======================================================================
3   !!                       ***  MODULE  trddyn  ***
4   !! Ocean diagnostics:  ocean dynamic trends
5   !!=====================================================================
6   !! History :  3.5  !  2012-02  (G. Madec) creation from trdmod: split DYN and TRA trends
7   !!                                        and manage  3D trends output for U, V, and KE
8   !!----------------------------------------------------------------------
9
10   !!----------------------------------------------------------------------
11   !!   trd_dyn       : manage the type of momentum trend diagnostics (3D I/O, domain averaged, KE)
12   !!   trd_dyn_iom   : output 3D momentum and/or tracer trends using IOM
13   !!   trd_dyn_init  : initialization step
14   !!----------------------------------------------------------------------
15   USE oce            ! ocean dynamics and tracers variables
16   USE dom_oce        ! ocean space and time domain variables
17   USE phycst         ! physical constants
18   USE sbc_oce        ! surface boundary condition: ocean
19   USE zdf_oce        ! ocean vertical physics: variables
20   USE trd_oce        ! trends: ocean variables
21   USE trdken         ! trends: Kinetic ENergy
22   USE trdglo         ! trends: global domain averaged
23   USE trdvor         ! trends: vertical averaged vorticity
24   USE trdmxl         ! trends: mixed layer averaged
25   !
26   USE in_out_manager ! I/O manager
27   USE lbclnk         ! lateral boundary condition
28   USE iom            ! I/O manager library
29   USE lib_mpp        ! MPP library
30
31   IMPLICIT NONE
32   PRIVATE
33
34   PUBLIC trd_dyn        ! called by all dynXXX modules
35
36   INTERFACE trd_dyn
37      module procedure trd_dyn_3d, trd_dyn_2d
38   END INTERFACE
39
40   REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), SAVE :: zutrd_hpg, zvtrd_hpg
41   REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), SAVE :: zutrd_pvo, zvtrd_pvo
42   REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), SAVE :: zutrd_bfr, zvtrd_bfr
43   REAL(wp), ALLOCATABLE, DIMENSION(:,:)  , SAVE :: zutrd_tau, zvtrd_tau
44
45   !! * Substitutions
46#  include "vectopt_loop_substitute.h90"
47   !!----------------------------------------------------------------------
48   !! NEMO/OCE 4.0 , NEMO Consortium (2018)
49   !! $Id$
50   !! Software governed by the CeCILL license (see ./LICENSE)
51   !!----------------------------------------------------------------------
52CONTAINS
53
54   SUBROUTINE trd_dyn_3d( putrd, pvtrd, ktrd, kt )
55      !!---------------------------------------------------------------------
56      !!                  ***  ROUTINE trd_dyn_3d  ***
57      !!
58      !! ** Purpose :   Dispatch momentum trend computation, e.g. 3D output,
59      !!              integral constraints, barotropic vorticity, kinetic enrgy,
60      !!              and/or mixed layer budget.
61      !!----------------------------------------------------------------------
62      REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   putrd, pvtrd   ! U and V trends
63      INTEGER                   , INTENT(in   ) ::   ktrd           ! trend index
64      INTEGER                   , INTENT(in   ) ::   kt             ! time step
65      REAL(wp), ALLOCATABLE, DIMENSION(:,:)     ::   zue, zve       ! temporary 2D arrays
66      INTEGER                                   ::   jk
67      !!----------------------------------------------------------------------
68      !
69      putrd(:,:,:) = putrd(:,:,:) * umask(:,:,:)                       ! mask the trends
70      pvtrd(:,:,:) = pvtrd(:,:,:) * vmask(:,:,:)
71      !
72
73!!gm NB : here a lbc_lnk should probably be added
74
75      SELECT CASE( ktrd )
76      CASE( jpdyn_hpg_save ) 
77         !
78         ! save 3D HPG trends to possibly have barotropic part corrected later before writing out
79         ALLOCATE( zutrd_hpg(jpi,jpj,jpk), zvtrd_hpg(jpi,jpj,jpk) )
80         zutrd_hpg(:,:,:) = putrd(:,:,:)
81         zvtrd_hpg(:,:,:) = pvtrd(:,:,:)
82
83      CASE( jpdyn_pvo_save ) 
84         !
85         ! save 3D coriolis trends to possibly have barotropic part corrected later before writing out
86         ALLOCATE( zutrd_pvo(jpi,jpj,jpk), zvtrd_pvo(jpi,jpj,jpk) )
87         zutrd_pvo(:,:,:) = putrd(:,:,:)
88         zvtrd_pvo(:,:,:) = pvtrd(:,:,:)
89
90      CASE( jpdyn_spg ) 
91         ! For explicit scheme SPG trends come here as 3D fields
92         ! Add SPG trend to 3D HPG trend and also output as 2D diagnostic in own right.
93         CALL trd_dyn_iom_2d( putrd(:,:,1), pvtrd(:,:,1), jpdyn_spg, kt ) 
94         putrd(:,:,:) = putrd(:,:,:) + zutrd_hpg(:,:,:) 
95         pvtrd(:,:,:) = pvtrd(:,:,:) + zvtrd_hpg(:,:,:) 
96         DEALLOCATE( zutrd_hpg, zvtrd_hpg )
97
98      CASE( jpdyn_bfr )
99         !
100         ! Add 3D part of BFR trend minus its depth-mean part to depth-mean trend already saved.
101         ALLOCATE( zue(jpi,jpj), zve(jpi,jpj) )
102         zue(:,:) = e3u_a(:,:,1) * putrd(:,:,1) * umask(:,:,1)
103         zve(:,:) = e3v_a(:,:,1) * pvtrd(:,:,1) * vmask(:,:,1)
104         DO jk = 2, jpkm1
105            zue(:,:) = zue(:,:) + e3u_a(:,:,jk) * putrd(:,:,jk) * umask(:,:,jk)
106            zve(:,:) = zve(:,:) + e3v_a(:,:,jk) * pvtrd(:,:,jk) * vmask(:,:,jk)
107         END DO
108         DO jk = 1, jpkm1
109            putrd(:,:,jk) = zutrd_bfr(:,:,jk) + putrd(:,:,jk) - zue(:,:) * r1_hu_a(:,:)
110            pvtrd(:,:,jk) = zvtrd_bfr(:,:,jk) + pvtrd(:,:,jk) - zve(:,:) * r1_hv_a(:,:)
111         END DO
112         ! Update locally saved BFR trends to add to ZDF trend.
113         zutrd_bfr(:,:,:) = putrd(:,:,:) 
114         zvtrd_bfr(:,:,:) = pvtrd(:,:,:)
115
116      CASE( jpdyn_zdf ) 
117         ! ZDF trend: Remove barotropic component and add wind stress and bottom friction
118         !            trends from dynspg_ts. Also adding on the bottom stress for the
119         !            baroclinic solution in the case of explicit bottom friction.
120         ALLOCATE( zue(jpi,jpj), zve(jpi,jpj) )
121         zue(:,:) = e3u_a(:,:,1) * putrd(:,:,1) * umask(:,:,1)
122         zve(:,:) = e3v_a(:,:,1) * pvtrd(:,:,1) * vmask(:,:,1)
123         DO jk = 2, jpkm1
124            zue(:,:) = zue(:,:) + e3u_a(:,:,jk) * putrd(:,:,jk) * umask(:,:,jk)
125            zve(:,:) = zve(:,:) + e3v_a(:,:,jk) * pvtrd(:,:,jk) * vmask(:,:,jk)
126         END DO
127         DO jk = 1, jpkm1
128            putrd(:,:,jk) = zutrd_tau(:,:) + zutrd_bfr(:,:,jk) + putrd(:,:,jk) - zue(:,:) * r1_hu_a(:,:)
129            pvtrd(:,:,jk) = zvtrd_tau(:,:) + zvtrd_bfr(:,:,jk) + pvtrd(:,:,jk) - zve(:,:) * r1_hv_a(:,:)
130         END DO
131         DEALLOCATE( zue, zve, zutrd_tau, zvtrd_tau, zutrd_bfr, zvtrd_bfr )
132
133      END SELECT
134
135      IF ( ktrd /= jpdyn_hpg_save .AND. ktrd /= jpdyn_pvo_save ) THEN
136         !
137         !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
138         !   3D output of momentum and/or tracers trends using IOM interface
139         !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
140         IF( ln_dyn_trd )   CALL trd_dyn_iom_3d( putrd, pvtrd, ktrd, kt )
141
142         !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
143         !  Integral Constraints Properties for momentum and/or tracers trends
144         !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
145         IF( ln_glo_trd )   CALL trd_glo( putrd, pvtrd, ktrd, 'DYN', kt )
146
147         !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
148         !  Kinetic Energy trends
149         !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
150         IF( ln_KE_trd  )   CALL trd_ken( putrd, pvtrd, ktrd, kt )
151
152         !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
153         !  Vorticity trends
154         !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
155         IF( ln_vor_trd )   CALL trd_vor( putrd, pvtrd, ktrd, kt )
156
157         !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
158         !  Mixed layer trends for active tracers
159         !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
160         !!gm      IF( ln_dyn_mxl )   CALL trd_mxl_dyn   
161         !
162      ENDIF
163      !
164   END SUBROUTINE trd_dyn_3d
165
166
167   SUBROUTINE trd_dyn_2d( putrd, pvtrd, ktrd, kt )
168      !!---------------------------------------------------------------------
169      !!                  ***  ROUTINE trd_mod  ***
170      !!
171      !! ** Purpose :   Dispatch momentum trend computation, e.g. 2D output,
172      !!              integral constraints, barotropic vorticity, kinetic enrgy,
173      !!              and/or mixed layer budget.
174      !!----------------------------------------------------------------------
175      REAL(wp), DIMENSION(:,:), INTENT(inout) ::   putrd, pvtrd   ! U and V trends
176      INTEGER                 , INTENT(in   ) ::   ktrd           ! trend index
177      INTEGER                 , INTENT(in   ) ::   kt             ! time step
178      INTEGER                                 ::   jk
179      !!----------------------------------------------------------------------
180      !
181      putrd(:,:) = putrd(:,:) * umask(:,:,1)                       ! mask the trends
182      pvtrd(:,:) = pvtrd(:,:) * vmask(:,:,1)
183      !
184
185!!gm NB : here a lbc_lnk should probably be added
186
187      SELECT CASE(ktrd)
188
189      CASE ( jpdyn_hpg_corr )
190         !
191         ! Remove "first-guess" SPG trend from 3D HPG trend.
192         DO jk = 1, jpkm1
193            zutrd_hpg(:,:,jk) = zutrd_hpg(:,:,jk) - putrd(:,:)
194            zvtrd_hpg(:,:,jk) = zvtrd_hpg(:,:,jk) - pvtrd(:,:)
195         ENDDO
196
197      CASE( jpdyn_pvo_corr )
198         !
199         ! Remove "first-guess" barotropic coriolis trend from 3D PVO trend.
200         DO jk = 1, jpkm1
201            zutrd_pvo(:,:,jk) = zutrd_pvo(:,:,jk) - putrd(:,:)
202            zvtrd_pvo(:,:,jk) = zvtrd_pvo(:,:,jk) - pvtrd(:,:)
203         ENDDO
204
205      CASE( jpdyn_spg )
206          !
207          ! For split-explicit scheme SPG trends come here as 2D fields
208          ! Add SPG trend to 3D HPG trend and also output as 2D diagnostic in own right.
209          DO jk = 1, jpkm1
210             zutrd_hpg(:,:,jk) = zutrd_hpg(:,:,jk) + putrd(:,:)
211             zvtrd_hpg(:,:,jk) = zvtrd_hpg(:,:,jk) + pvtrd(:,:)
212          ENDDO
213          CALL trd_dyn_3d( zutrd_hpg, zvtrd_hpg, jpdyn_hpg, kt )
214          DEALLOCATE( zutrd_hpg, zvtrd_hpg )
215
216      CASE( jpdyn_pvo )
217          !
218          ! Add 2D PVO trend to 3D PVO trend and also output as diagnostic in own right.
219          DO jk = 1, jpkm1
220             zutrd_pvo(:,:,jk) = zutrd_pvo(:,:,jk) + putrd(:,:)
221             zvtrd_pvo(:,:,jk) = zvtrd_pvo(:,:,jk) + pvtrd(:,:)
222          ENDDO
223          CALL trd_dyn_3d( zutrd_pvo, zvtrd_pvo, jpdyn_pvo, kt )
224          DEALLOCATE( zutrd_pvo, zvtrd_pvo )
225
226      CASE( jpdyn_tau )
227          !
228          ! Save 2D wind forcing trend locally (to be added to ZDF trend)
229          ! and output as a trend in its own right.
230          ALLOCATE( zutrd_tau(jpi,jpj), zvtrd_tau(jpi,jpj) )
231          zutrd_tau(:,:) = putrd(:,:)
232          zvtrd_tau(:,:) = pvtrd(:,:)
233
234      CASE( jpdyn_bfr )
235          !
236          ! Create 3D BFR trend from 2D field and also output 2D field as diagnostic in own right.
237          ALLOCATE( zutrd_bfr(jpi,jpj,jpk), zvtrd_bfr(jpi,jpj,jpk) )
238          zutrd_bfr(:,:,:) = 0.0
239          zvtrd_bfr(:,:,:) = 0.0
240          DO jk = 1, jpkm1
241             zutrd_bfr(:,:,jk) = putrd(:,:) * umask(:,:,jk)
242             zvtrd_bfr(:,:,jk) = pvtrd(:,:) * vmask(:,:,jk)
243          ENDDO
244
245      END SELECT
246
247      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
248      !   2D output of momentum and/or tracers trends using IOM interface
249      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
250      IF( ln_dyn_trd )   CALL trd_dyn_iom_2d( putrd, pvtrd, ktrd, kt )
251         
252
253!!$   CALLS TO THESE ROUTINES FOR 2D DIAGOSTICS NOT CODED YET
254!!$      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
255!!$      !  Integral Constraints Properties for momentum and/or tracers trends
256!!$      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
257!!$      IF( ln_glo_trd )   CALL trd_glo( putrd, pvtrd, ktrd, 'DYN', kt )
258!!$
259!!$      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
260!!$      !  Kinetic Energy trends
261!!$      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
262!!$      IF( ln_KE_trd  )   CALL trd_ken( putrd, pvtrd, ktrd, kt )
263!!$
264!!$      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
265!!$      !  Vorticity trends
266!!$      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
267!!$      IF( ln_vor_trd )   CALL trd_vor( putrd, pvtrd, ktrd, kt )
268
269      !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
270      !  Mixed layer trends for active tracers
271      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
272!!gm      IF( ln_dyn_mxl )   CALL trd_mxl_dyn   
273      !
274   END SUBROUTINE trd_dyn_2d
275
276
277   SUBROUTINE trd_dyn_iom_3d( putrd, pvtrd, ktrd, kt )
278      !!---------------------------------------------------------------------
279      !!                  ***  ROUTINE trd_dyn_iom  ***
280      !!
281      !! ** Purpose :   output 3D trends using IOM
282      !!----------------------------------------------------------------------
283      REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   putrd, pvtrd   ! U and V trends
284      INTEGER                   , INTENT(in   ) ::   ktrd           ! trend index
285      INTEGER                   , INTENT(in   ) ::   kt             ! time step
286      !
287      INTEGER ::   ji, jj, jk   ! dummy loop indices
288      INTEGER ::   ikbu, ikbv   ! local integers
289      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   z2dx, z2dy   ! 2D workspace
290      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   z3dx, z3dy   ! 3D workspace
291      !!----------------------------------------------------------------------
292      !
293      SELECT CASE( ktrd )
294      CASE( jpdyn_hpg )   ;   CALL iom_put( "utrd_hpg", putrd )    ! hydrostatic pressure gradient
295                              CALL iom_put( "vtrd_hpg", pvtrd )
296      CASE( jpdyn_pvo )   ;   CALL iom_put( "utrd_pvo", putrd )    ! planetary vorticity
297                              CALL iom_put( "vtrd_pvo", pvtrd )
298      CASE( jpdyn_rvo )   ;   CALL iom_put( "utrd_rvo", putrd )    ! relative  vorticity     (or metric term)
299                              CALL iom_put( "vtrd_rvo", pvtrd )
300      CASE( jpdyn_keg )   ;   CALL iom_put( "utrd_keg", putrd )    ! Kinetic Energy gradient (or had)
301                              CALL iom_put( "vtrd_keg", pvtrd )
302                              ALLOCATE( z3dx(jpi,jpj,jpk) , z3dy(jpi,jpj,jpk) )
303                              z3dx(:,:,:) = 0._wp                  ! U.dxU & V.dyV (approximation)
304                              z3dy(:,:,:) = 0._wp
305                              DO jk = 1, jpkm1   ! no mask as un,vn are masked
306                                 DO jj = 2, jpjm1
307                                    DO ji = 2, jpim1
308                                       z3dx(ji,jj,jk) = un(ji,jj,jk) * ( un(ji+1,jj,jk) - un(ji-1,jj,jk) ) / ( 2._wp * e1u(ji,jj) )
309                                       z3dy(ji,jj,jk) = vn(ji,jj,jk) * ( vn(ji,jj+1,jk) - vn(ji,jj-1,jk) ) / ( 2._wp * e2v(ji,jj) )
310                                    END DO
311                                 END DO
312                              END DO
313                              CALL lbc_lnk_multi( 'trddyn', z3dx, 'U', -1., z3dy, 'V', -1. )
314                              CALL iom_put( "utrd_udx", z3dx  )
315                              CALL iom_put( "vtrd_vdy", z3dy  )
316                              DEALLOCATE( z3dx , z3dy )
317      CASE( jpdyn_zad )   ;   CALL iom_put( "utrd_zad", putrd )    ! vertical advection
318                              CALL iom_put( "vtrd_zad", pvtrd )
319      CASE( jpdyn_ldf )   ;   CALL iom_put( "utrd_ldf", putrd )    ! lateral  diffusion
320                              CALL iom_put( "vtrd_ldf", pvtrd )
321      CASE( jpdyn_zdf )   ;   CALL iom_put( "utrd_zdf", putrd )    ! vertical diffusion
322                              CALL iom_put( "vtrd_zdf", pvtrd )
323                              !
324                              !                                    ! wind stress trends
325                              ALLOCATE( z2dx(jpi,jpj) , z2dy(jpi,jpj) )
326                              z2dx(:,:) = ( utau_b(:,:) + utau(:,:) ) / ( e3u_n(:,:,1) * rau0 )
327                              z2dy(:,:) = ( vtau_b(:,:) + vtau(:,:) ) / ( e3v_n(:,:,1) * rau0 )
328                              CALL iom_put( "utrd_tau", z2dx )
329                              CALL iom_put( "vtrd_tau", z2dy )
330                              DEALLOCATE( z2dx , z2dy )
331      CASE( jpdyn_bfr )   ;   CALL iom_put( "utrd_bfr", putrd )    ! bottom friction (explicit case)
332                              CALL iom_put( "vtrd_bfr", pvtrd )
333      CASE( jpdyn_bfri)   ;   CALL iom_put( "utrd_bfri", putrd )    ! bottom friction (implicit case)
334                              CALL iom_put( "vtrd_bfri", pvtrd )
335      CASE( jpdyn_atf )   ;   CALL iom_put( "utrd_atf", putrd )        ! asselin filter trends
336                              CALL iom_put( "vtrd_atf", pvtrd )
337      END SELECT
338      !
339   END SUBROUTINE trd_dyn_iom_3d
340
341
342   SUBROUTINE trd_dyn_iom_2d( putrd, pvtrd, ktrd, kt )
343      !!---------------------------------------------------------------------
344      !!                  ***  ROUTINE trd_dyn_iom  ***
345      !!
346      !! ** Purpose :   output 2D trends using IOM
347      !!----------------------------------------------------------------------
348      REAL(wp), DIMENSION(:,:), INTENT(inout) ::   putrd, pvtrd   ! U and V trends
349      INTEGER                 , INTENT(in   ) ::   ktrd           ! trend index
350      INTEGER                 , INTENT(in   ) ::   kt             ! time step
351      !
352      INTEGER ::   ji, jj, jk   ! dummy loop indices
353      INTEGER ::   ikbu, ikbv   ! local integers
354      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   z2dx, z2dy   ! 2D workspace
355      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   z3dx, z3dy   ! 3D workspace
356      !!----------------------------------------------------------------------
357      !
358      SELECT CASE( ktrd )
359      CASE( jpdyn_spg )      ;   CALL iom_put( "utrd_spg2d", putrd )      ! surface pressure gradient
360                                 CALL iom_put( "vtrd_spg2d", pvtrd )
361      CASE( jpdyn_pvo )      ;   CALL iom_put( "utrd_pvo2d", putrd )      ! planetary vorticity (barotropic part)
362                                 CALL iom_put( "vtrd_pvo2d", pvtrd )
363      CASE( jpdyn_hpg_corr ) ;   CALL iom_put( "utrd_hpg_corr", putrd )   ! horizontal pressure gradient correction
364                                 CALL iom_put( "vtrd_hpg_corr", pvtrd )
365      CASE( jpdyn_pvo_corr ) ;   CALL iom_put( "utrd_pvo_corr", putrd )   ! planetary vorticity correction
366                                 CALL iom_put( "vtrd_pvo_corr", pvtrd )
367      CASE( jpdyn_bfr )      ;   CALL iom_put( "utrd_bfr2d", putrd )      ! bottom friction due to barotropic currents
368                                 CALL iom_put( "vtrd_bfr2d", pvtrd )
369      END SELECT
370      !
371   END SUBROUTINE trd_dyn_iom_2d
372
373   !!======================================================================
374END MODULE trddyn
Note: See TracBrowser for help on using the repository browser.