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.
dynvor.F90 in trunk/NEMO/OPA_SRC/DYN – NEMO

source: trunk/NEMO/OPA_SRC/DYN/dynvor.F90 @ 78

Last change on this file since 78 was 52, checked in by opalod, 20 years ago

CT : BUGFIX026 : # Change all tests on the logical keys ln_dynvor_xxx to be able to run in mpp case

# Now the vorticity scheme control is done directly in step.F90

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 21.1 KB
Line 
1MODULE dynvor
2   !!======================================================================
3   !!                       ***  MODULE  dynvor  ***
4   !! Ocean dynamics: Update the momentum trend with the relative and
5   !!                 planetary vorticity trends
6   !!======================================================================
7
8   !!----------------------------------------------------------------------
9   !!   dyn_vor_enstrophy: enstrophy conserving scheme       (ln_dynvor_ens=T)
10   !!   dyn_vor_energy   : energy conserving scheme          (ln_dynvor_ene=T)
11   !!   dyn_vor_mixed    : mixed enstrophy/energy conserving (ln_dynvor_mix=T)
12   !!   dyn_vor_ctl      : control of the different vorticity option
13   !!----------------------------------------------------------------------
14   !! * Modules used
15   USE oce            ! ocean dynamics and tracers
16   USE dom_oce        ! ocean space and time domain
17   USE in_out_manager ! I/O manager
18   USE trddyn_oce     ! ocean momentum trends
19
20   IMPLICIT NONE
21   PRIVATE
22
23   !! * Routine accessibility
24   PUBLIC dyn_vor_enstrophy      ! routine called by step.F90
25   PUBLIC dyn_vor_energy         ! routine called by step.F90
26   PUBLIC dyn_vor_mixed          ! routine called by step.F90
27   PUBLIC dyn_vor_ctl            ! routine called by step.F90
28
29   !! * Shared module variables
30   LOGICAL, PUBLIC ::   ln_dynvor_ene = .FALSE.   !: energy conserving scheme
31   LOGICAL, PUBLIC ::   ln_dynvor_ens = .TRUE.    !: enstrophy conserving scheme
32   LOGICAL, PUBLIC ::   ln_dynvor_mix = .FALSE.   !: mixed scheme
33
34   !! * Substitutions
35#  include "domzgr_substitute.h90"
36#  include "vectopt_loop_substitute.h90"
37   !!----------------------------------------------------------------------
38   !!   OPA 9.0 , LODYC-IPSL  (2003)
39   !!----------------------------------------------------------------------
40
41CONTAINS
42
43   SUBROUTINE dyn_vor_energy( kt )
44      !!----------------------------------------------------------------------
45      !!                  ***  ROUTINE dyn_vor_energy  ***
46      !!
47      !! ** Purpose :   Compute the now total vorticity trend and add it to
48      !!      the general trend of the momentum equation.
49      !!
50      !! ** Method  :   Trend evaluated using now fields (centered in time)
51      !!      and the Sadourny (1975) flux form formulation : conserves the
52      !!      horizontal kinetic energy.
53      !!      The trend of the vorticity term is given by:
54      !!       * s-coordinate (lk_sco=T), the e3. are inside the derivatives:
55      !!          voru = 1/e1u  mj-1[ (rotn+f)/e3f  mi(e1v*e3v vn) ]
56      !!          vorv = 1/e2v  mi-1[ (rotn+f)/e3f  mj(e2u*e3u un) ]
57      !!       * z-coordinate (default key), e3t=e3u=e3v, the trend becomes:
58      !!          voru = 1/e1u  mj-1[ (rotn+f)  mi(e1v vn) ]
59      !!          vorv = 1/e2v  mi-1[ (rotn+f)  mj(e2u un) ]
60      !!      Add this trend to the general momentum trend (ua,va):
61      !!          (ua,va) = (ua,va) + ( voru , vorv )
62      !!
63      !! ** Action : - Update (ua,va) with the now vorticity term trend
64      !!             - save the trends in (utrd,vtrd) in 2 parts (relative
65      !!               and planetary vorticity trends) ('key_trddyn')
66      !!
67      !! References :
68      !!      Sadourny, r., 1975, j. atmos. sciences, 32, 680-689.
69      !! History :
70      !!   5.0  !  91-11  (G. Madec)  Original code
71      !!   6.0  !  96-01  (G. Madec)  s-coord, suppress work arrays
72      !!   8.5  !  02-08  (G. Madec)  F90: Free form and module
73      !!----------------------------------------------------------------------
74      !! * Arguments
75      INTEGER, INTENT( in ) ::   kt         ! ocean time-step index
76
77      !! * Local declarations
78      INTEGER ::   ji, jj, jk               ! dummy loop indices
79      REAL(wp) ::   &
80         zfact2, zua, zva,               &  ! temporary scalars
81         zx1, zx2, zy1, zy2                 !    "         "
82      REAL(wp), DIMENSION(jpi,jpj) ::   &
83         zwx, zwy, zwz                      ! temporary workspace
84#if defined key_trddyn
85      REAL(wp) ::   &
86         zcu, zcv, zce3                     !    "         "
87#endif
88      !!----------------------------------------------------------------------
89
90      IF( kt == nit000 ) THEN
91         IF(lwp) WRITE(numout,*)
92         IF(lwp) WRITE(numout,*) 'dyn_vor_energy : vorticity term: energy conserving scheme'
93         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~'
94      ENDIF
95
96      ! Local constant initialization
97      zfact2 = 0.5 * 0.5
98     
99      !                                                ! ===============
100      DO jk = 1, jpkm1                                 ! Horizontal slab
101         !                                             ! ===============
102         
103         ! Potential vorticity and horizontal fluxes
104         ! -----------------------------------------
105         IF( lk_sco ) THEN
106            zwz(:,:) = ( rotn(:,:,jk) + ff(:,:) ) / fse3f(:,:,jk)
107            zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk)
108            zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk)
109         ELSE
110            zwz(:,:) = rotn(:,:,jk) + ff(:,:)
111            zwx(:,:) = e2u(:,:) * un(:,:,jk)
112            zwy(:,:) = e1v(:,:) * vn(:,:,jk)
113         ENDIF
114
115         ! Compute and add the vorticity term trend
116         ! ----------------------------------------
117         DO jj = 2, jpjm1
118            DO ji = fs_2, fs_jpim1   ! vector opt.
119               zy1 = zwy(ji,jj-1) + zwy(ji+1,jj-1)
120               zy2 = zwy(ji,jj  ) + zwy(ji+1,jj  )
121               zx1 = zwx(ji-1,jj) + zwx(ji-1,jj+1)
122               zx2 = zwx(ji  ,jj) + zwx(ji  ,jj+1)
123               zua = zfact2 / e1u(ji,jj) * ( zwz(ji  ,jj-1) * zy1 + zwz(ji,jj) * zy2 )
124               zva =-zfact2 / e2v(ji,jj) * ( zwz(ji-1,jj  ) * zx1 + zwz(ji,jj) * zx2 )
125               ua(ji,jj,jk) = ua(ji,jj,jk) + zua
126               va(ji,jj,jk) = va(ji,jj,jk) + zva
127#   if defined key_trddyn
128#      if defined key_s_coord
129               zce3= ff(ji,jj) / fse3f(ji,jj,jk)
130               zcu = zfact2 / e1u(ji,jj) * ( ff(ji  ,jj-1) / fse3f(ji,jj-1,jk) * zy1 + zce3 * zy2 )
131               zcv =-zfact2 / e2v(ji,jj) * ( ff(ji-1,jj  ) / fse3f(ji-1,jj,jk) * zx1 + zce3 * zx2 )
132#      else
133               zcu = zfact2 / e1u(ji,jj) * ( ff(ji  ,jj-1) * zy1 + ff(ji,jj) * zy2 )
134               zcv =-zfact2 / e2v(ji,jj) * ( ff(ji-1,jj  ) * zx1 + ff(ji,jj) * zx2 )
135#      endif
136               utrd(ji,jj,jk,3) = zua - zcu
137               vtrd(ji,jj,jk,3) = zva - zcv
138               utrd(ji,jj,jk,4) = zcu
139               vtrd(ji,jj,jk,4) = zcv
140#   endif
141            END DO 
142         END DO 
143         !                                             ! ===============
144      END DO                                           !   End of slab
145      !                                                ! ===============
146
147      IF(l_ctl) THEN         ! print sum trends (used for debugging)
148         zua = SUM( ua(2:jpim1,2:jpjm1,1:jpkm1) * umask(2:jpim1,2:jpjm1,1:jpkm1) )
149         zva = SUM( va(2:jpim1,2:jpjm1,1:jpkm1) * vmask(2:jpim1,2:jpjm1,1:jpkm1) )
150         WRITE(numout,*) ' vor  - Ua: ', zua-u_ctl, ' Va: ', zva-v_ctl
151         u_ctl = zua   ;   v_ctl = zva
152      ENDIF
153
154   END SUBROUTINE dyn_vor_energy
155
156
157   SUBROUTINE dyn_vor_mixed( kt )
158      !!----------------------------------------------------------------------
159      !!                 ***  ROUTINE dyn_vor_mixed  ***
160      !!
161      !! ** Purpose :   Compute the now total vorticity trend and add it to
162      !!      the general trend of the momentum equation.
163      !!
164      !! ** Method  :   Trend evaluated using now fields (centered in time)
165      !!      Mixte formulation : conserves the potential enstrophy of a hori-
166      !!      zontally non-divergent flow for (rotzu x uh), the relative vor-
167      !!      ticity term and the horizontal kinetic energy for (f x uh), the
168      !!      coriolis term. the now trend of the vorticity term is given by:
169      !!       * s-coordinate (lk_sco=T), the e3. are inside the derivatives:
170      !!          voru = 1/e1u  mj-1(rotn/e3f) mj-1[ mi(e1v*e3v vn) ]
171      !!              +1/e1u  mj-1[ f/e3f          mi(e1v*e3v vn) ]
172      !!          vorv = 1/e2v  mi-1(rotn/e3f) mi-1[ mj(e2u*e3u un) ]
173      !!              +1/e2v  mi-1[ f/e3f          mj(e2u*e3u un) ]
174      !!       * z-coordinate (default key), e3t=e3u=e3v, the trend becomes:
175      !!          voru = 1/e1u  mj-1(rotn) mj-1[ mi(e1v vn) ]
176      !!              +1/e1u  mj-1[ f          mi(e1v vn) ]
177      !!          vorv = 1/e2v  mi-1(rotn) mi-1[ mj(e2u un) ]
178      !!              +1/e2v  mi-1[ f          mj(e2u un) ]
179      !!      Add this now trend to the general momentum trend (ua,va):
180      !!          (ua,va) = (ua,va) + ( voru , vorv )
181      !!
182      !! ** Action : - Update (ua,va) arrays with the now vorticity term trend
183      !!             - Save the trends in (utrd,vtrd) in 2 parts (relative
184      !!               and planetary vorticity trends) ('key_trddyn')
185      !!
186      !! References :
187      !!      Sadourny, r., 1975, j. atmos. sciences, 32, 680-689.
188      !! History :
189      !!   5.0  !  91-11  (G. Madec) Original code, enstrophy-energy-combined schemes
190      !!   6.0  !  96-01  (G. Madec) s-coord, suppress work arrays
191      !!   8.5  !  02-08  (G. Madec)  F90: Free form and module
192      !!----------------------------------------------------------------------
193      !! * Arguments
194      INTEGER, INTENT( in ) ::   kt         ! ocean timestep index
195
196      !! * Local declarations
197      INTEGER ::   ji, jj, jk               ! dummy loop indices
198      REAL(wp) ::   &
199         zfact1, zfact2, zua, zva,       &  ! temporary scalars
200         zcua, zcva, zx1, zx2, zy1, zy2
201      REAL(wp), DIMENSION(jpi,jpj) ::   &
202         zwx, zwy, zwz, zww                 ! temporary workspace
203      !!----------------------------------------------------------------------
204
205      IF( kt == nit000 ) THEN
206         IF(lwp) WRITE(numout,*)
207         IF(lwp) WRITE(numout,*) 'dyn_vor_mixed : vorticity term: mixed energy/enstrophy conserving scheme'
208         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~'
209      ENDIF
210
211      ! Local constant initialization
212      zfact1 = 0.5 * 0.25
213      zfact2 = 0.5 * 0.5
214
215      !                                                ! ===============
216      DO jk = 1, jpkm1                                 ! Horizontal slab
217         !                                             ! ===============
218
219         ! Relative and planetary potential vorticity and horizontal fluxes
220         ! ----------------------------------------------------------------
221         IF( lk_sco ) THEN       
222            zwz(:,:) = ff  (:,:)    / fse3f(:,:,jk)
223            zww(:,:) = rotn(:,:,jk) / fse3f(:,:,jk)
224            zwx(:,:) = e2u(:,:) * fse3u(:,:,jk) * un(:,:,jk)
225            zwy(:,:) = e1v(:,:) * fse3v(:,:,jk) * vn(:,:,jk)
226         ELSE
227            zwz(:,:) = ff(:,:)
228            zww(:,:) = rotn(:,:,jk)
229            zwx(:,:) = e2u(:,:) * un(:,:,jk)
230            zwy(:,:) = e1v(:,:) * vn(:,:,jk)
231         ENDIF
232
233         ! Compute and add the vorticity term trend
234         ! ----------------------------------------
235         DO jj = 2, jpjm1
236            DO ji = fs_2, fs_jpim1   ! vector opt.
237               zy1 = ( zwy(ji,jj-1) + zwy(ji+1,jj-1) ) / e1u(ji,jj)
238               zy2 = ( zwy(ji,jj  ) + zwy(ji+1,jj  ) ) / e1u(ji,jj)
239               zx1 = ( zwx(ji-1,jj) + zwx(ji-1,jj+1) ) / e2v(ji,jj)
240               zx2 = ( zwx(ji  ,jj) + zwx(ji  ,jj+1) ) / e2v(ji,jj)
241               ! enstrophy conserving formulation for relative vorticity term
242               zua = zfact1 * ( zww(ji  ,jj-1) + zww(ji,jj) ) * ( zy1 + zy2 )
243               zva =-zfact1 * ( zww(ji-1,jj  ) + zww(ji,jj) ) * ( zx1 + zx2 )
244               ! energy conserving formulation for planetary vorticity term
245               zcua = zfact2 * ( zwz(ji  ,jj-1) * zy1 + zwz(ji,jj) * zy2 )
246               zcva =-zfact2 * ( zwz(ji-1,jj  ) * zx1 + zwz(ji,jj) * zx2 )
247
248               ua(ji,jj,jk) = ua(ji,jj,jk) + zcua + zua
249               va(ji,jj,jk) = va(ji,jj,jk) + zcva + zva
250#   if defined key_trddyn
251               utrd(ji,jj,jk,3) = zua
252               vtrd(ji,jj,jk,3) = zva
253               utrd(ji,jj,jk,4) = zcua
254               vtrd(ji,jj,jk,4) = zcva
255#   endif
256            END DO 
257         END DO 
258         !                                             ! ===============
259      END DO                                           !   End of slab
260      !                                                ! ===============
261
262      IF(l_ctl) THEN         ! print sum trends (used for debugging)
263         zua = SUM( ua(2:jpim1,2:jpjm1,1:jpkm1) * umask(2:jpim1,2:jpjm1,1:jpkm1) )
264         zva = SUM( va(2:jpim1,2:jpjm1,1:jpkm1) * vmask(2:jpim1,2:jpjm1,1:jpkm1) )
265         WRITE(numout,*) ' vor  - Ua: ', zua-u_ctl, ' Va: ', zva-v_ctl
266         u_ctl = zua   ;   v_ctl = zva
267      ENDIF
268
269   END SUBROUTINE dyn_vor_mixed
270
271
272   SUBROUTINE dyn_vor_enstrophy( kt )
273      !!----------------------------------------------------------------------
274      !!                ***  ROUTINE dyn_vor_enstrophy  ***
275      !!
276      !! ** Purpose :   Compute the now total vorticity trend and add it to
277      !!      the general trend of the momentum equation.
278      !!
279      !! ** Method  :   Trend evaluated using now fields (centered in time)
280      !!      and the Sadourny (1975) flux FORM formulation : conserves the
281      !!      potential enstrophy of a horizontally non-divergent flow. the
282      !!      trend of the vorticity term is given by:
283      !!       * s-coordinate (lk_sco=T), the e3. are inside the derivative:
284      !!          voru = 1/e1u  mj-1[ (rotn+f)/e3f ]  mj-1[ mi(e1v*e3v vn) ]
285      !!          vorv = 1/e2v  mi-1[ (rotn+f)/e3f ]  mi-1[ mj(e2u*e3u un) ]
286      !!       * z-coordinate (default key), e3t=e3u=e3v, the trend becomes:
287      !!          voru = 1/e1u  mj-1[ rotn+f ]  mj-1[ mi(e1v vn) ]
288      !!          vorv = 1/e2v  mi-1[ rotn+f ]  mi-1[ mj(e2u un) ]
289      !!      Add this trend to the general momentum trend (ua,va):
290      !!          (ua,va) = (ua,va) + ( voru , vorv )
291      !!
292      !! ** Action : - Update (ua,va) arrays with the now vorticity term trend
293      !!             - Save the trends in (utrd,vtrd) in 2 parts (relative
294      !!               and planetary vorticity trends) ('key_trddyn')
295      !!
296      !! References :
297      !!      Sadourny, r., 1975, j. atmos. sciences, 32, 680-689.
298      !! History :
299      !!   5.0  !  91-11  (G. Madec)  Original code
300      !!   6.0  !  96-01  (G. Madec)  s-coord, suppress work arrays
301      !!   8.5  !  02-08  (G. Madec)  F90: Free form and module
302      !!----------------------------------------------------------------------
303      !! * modules used
304      USE oce, ONLY:   zwx  => ta,   & ! use ta as 3D workspace
305                       zwy  => sa      ! use sa as 3D workspace
306      !! * Arguments
307      INTEGER, INTENT( in ) ::   kt    ! ocean timestep
308
309      !! * Local declarations
310      INTEGER ::   ji, jj, jk          ! dummy loop indices
311      REAL(wp) ::   &
312         zfact1, zua, zva, zuav, zvau  ! temporary scalars
313      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   &
314         zwz                           ! temporary workspace
315#   if defined key_trddyn
316      REAL(wp) ::   &
317         zcu, zcv, zce3                ! temporary scalars
318#   endif
319      !!----------------------------------------------------------------------
320     
321      IF( kt == nit000 ) THEN
322         IF(lwp) WRITE(numout,*)
323         IF(lwp) WRITE(numout,*) 'dyn_vor_enstrophy : vorticity term: enstrophy conserving scheme'
324         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~~~'
325      ENDIF
326
327      ! Local constant initialization
328      zfact1 = 0.5 * 0.25
329
330      !                                                ! ===============
331      DO jk = 1, jpkm1                                 ! Horizontal slab
332         !                                             ! ===============
333
334         ! Potential vorticity and horizontal fluxes
335         ! -----------------------------------------
336         IF( lk_sco ) THEN
337            DO jj = 1, jpj                      ! caution: don't use (:,:) for this loop
338               DO ji = 1, jpi                   ! it causes optimization problems on NEC in auto-tasking
339                  zwz(ji,jj,jk) = ( rotn(ji,jj,jk) + ff(ji,jj) ) / fse3f(ji,jj,jk)
340                  zwx(ji,jj,jk) = e2u(ji,jj) * fse3u(ji,jj,jk) * un(ji,jj,jk)
341                  zwy(ji,jj,jk) = e1v(ji,jj) * fse3v(ji,jj,jk) * vn(ji,jj,jk)
342               END DO
343            END DO
344         ELSE
345            DO jj = 1, jpj                      ! caution: don't use (:,:) for this loop
346               DO ji = 1, jpi                   ! it causes optimization problems on NEC in auto-tasking
347                  zwz(ji,jj,jk) = rotn(ji,jj,jk) + ff(ji,jj)
348                  zwx(ji,jj,jk) = e2u(ji,jj) * un(ji,jj,jk)
349                  zwy(ji,jj,jk) = e1v(ji,jj) * vn(ji,jj,jk)
350               END DO
351            END DO
352         ENDIF
353
354
355         ! Compute and add the vorticity term trend
356         ! ----------------------------------------
357         DO jj = 2, jpjm1
358            DO ji = fs_2, fs_jpim1   ! vector opt.
359               zuav = zfact1 / e1u(ji,jj) * ( zwy(ji  ,jj-1,jk) + zwy(ji+1,jj-1,jk)   &
360                                            + zwy(ji  ,jj  ,jk) + zwy(ji+1,jj  ,jk) )
361               zvau =-zfact1 / e2v(ji,jj) * ( zwx(ji-1,jj  ,jk) + zwx(ji-1,jj+1,jk)   &
362                                            + zwx(ji  ,jj  ,jk) + zwx(ji  ,jj+1,jk) )
363
364               zua  = zuav * ( zwz(ji  ,jj-1,jk) + zwz(ji,jj,jk) )
365               zva  = zvau * ( zwz(ji-1,jj  ,jk) + zwz(ji,jj,jk) )
366
367               ua(ji,jj,jk) = ua(ji,jj,jk) + zua
368               va(ji,jj,jk) = va(ji,jj,jk) + zva
369
370#   if defined key_trddyn
371#      if defined key_s_coord
372               zce3 = ff(ji,jj) / fse3f(ji,jj,jk)
373               zcu  = zuav * ( ff(ji  ,jj-1) / fse3f(ji  ,jj-1,jk) + zce3 )
374               zcv  = zvau * ( ff(ji-1,jj  ) / fse3f(ji-1,jj  ,jk) + zce3 )
375#      else
376               zcu = zuav * ( ff(ji  ,jj-1) + ff(ji,jj) )
377               zcv = zvau * ( ff(ji-1,jj  ) + ff(ji,jj) )
378#      endif
379
380#      if defined key_trddyn_new
381               utrd(ji,jj,jk,2) = utrd(ji,jj,jk,2) + zua - zcu
382               vtrd(ji,jj,jk,3) = vtrd(ji,jj,jk,3) + zva - zcv
383#      else
384               utrd(ji,jj,jk,3) = zua - zcu
385               vtrd(ji,jj,jk,3) = zva - zcv
386#      endif
387               utrd(ji,jj,jk,4) = zcu
388               vtrd(ji,jj,jk,4) = zcv
389#   endif
390            END DO 
391         END DO 
392         !                                             ! ===============
393      END DO                                           !   End of slab
394      !                                                ! ===============
395
396      IF(l_ctl) THEN         ! print sum trends (used for debugging)
397         zua = SUM( ua(2:jpim1,2:jpjm1,1:jpkm1) * umask(2:jpim1,2:jpjm1,1:jpkm1) )
398         zva = SUM( va(2:jpim1,2:jpjm1,1:jpkm1) * vmask(2:jpim1,2:jpjm1,1:jpkm1) )
399         WRITE(numout,*) ' vor  - Ua: ', zua-u_ctl, ' Va: ', zva-v_ctl
400         u_ctl = zua   ;   v_ctl = zva
401      ENDIF
402
403   END SUBROUTINE dyn_vor_enstrophy
404
405
406   SUBROUTINE dyn_vor_ctl
407      !!---------------------------------------------------------------------
408      !!                  ***  ROUTINE dyn_vor_ctl  ***
409      !!
410      !! ** Purpose :   Control the consistency between cpp options for
411      !!      tracer advection schemes
412      !!
413      !! History :
414      !!   9.0  !  03-08  (G. Madec)  Original code
415      !!----------------------------------------------------------------------
416      !! * Local declarations
417      INTEGER ::   ioptio = 0      ! temporary integer
418
419      NAMELIST/nam_dynvor/ ln_dynvor_ens, ln_dynvor_ene, ln_dynvor_mix
420      !!----------------------------------------------------------------------
421
422      ! Read Namelist nam_dynvor : Vorticity scheme options
423      ! ------------------------
424      REWIND ( numnam )
425      READ   ( numnam, nam_dynvor )
426
427      ! Control of vorticity scheme options
428      ! -----------------------------------
429      ! Control print
430      IF(lwp) THEN
431         WRITE(numout,*)
432         WRITE(numout,*) 'dyn_vor_ctl : vorticity term : read namelist and control the consistency'
433         WRITE(numout,*) '~~~~~~~~~~~'
434         WRITE(numout,*) '              Namelist nam_dynvor : oice of the vorticity term scheme'
435         WRITE(numout,*) '                 enstrophy conserving scheme                ln_dynvor_ens = ', ln_dynvor_ens
436         WRITE(numout,*) '                 energy    conserving scheme                ln_dynvor_ene = ', ln_dynvor_ene
437         WRITE(numout,*) '                 mixed enstrophy/energy conserving scheme   ln_dynvor_mix = ', ln_dynvor_mix
438      ENDIF
439
440      IF( ln_dynvor_ens ) THEN
441         IF(lwp) WRITE(numout,*)
442         IF(lwp) WRITE(numout,*) '              vorticity term : enstrophy conserving scheme'
443         ioptio = ioptio + 1
444      ENDIF
445      IF( ln_dynvor_ene ) THEN
446         IF(lwp) WRITE(numout,*)
447         IF(lwp) WRITE(numout,*) '              vorticity term : energy conserving scheme'
448         ioptio = ioptio + 1
449      ENDIF
450      IF( ln_dynvor_mix ) THEN
451         IF(lwp) WRITE(numout,*)
452         IF(lwp) WRITE(numout,*) '              vorticity term : mixed enstrophy/energy conserving scheme'
453         ioptio = ioptio + 1
454      ENDIF
455      IF ( ioptio /= 1 .AND. .NOT. lk_esopa ) THEN
456          WRITE(numout,cform_err)
457          IF(lwp) WRITE(numout,*) ' use ONE and ONLY one vorticity scheme'
458          nstop = nstop + 1
459      ENDIF
460
461   END SUBROUTINE dyn_vor_ctl
462
463!!==============================================================================
464END MODULE dynvor
Note: See TracBrowser for help on using the repository browser.