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.
bdydyn3d.F90 in NEMO/trunk/src/OCE/BDY – NEMO

source: NEMO/trunk/src/OCE/BDY/bdydyn3d.F90 @ 15363

Last change on this file since 15363 was 15363, checked in by smasson, 12 months ago

trunk: continuing with ticket #2731

  • Property svn:keywords set to Id
File size: 20.6 KB
Line 
1MODULE bdydyn3d
2   !!======================================================================
3   !!                       ***  MODULE  bdydyn3d  ***
4   !! Unstructured Open Boundary Cond. :   Flow relaxation scheme on baroclinic velocities
5   !!======================================================================
6   !! History :  3.4  !  2011     (D. Storkey) new module as part of BDY rewrite
7   !!            3.5  !  2012     (S. Mocavero, I. Epicoco) Optimization of BDY communications
8   !!----------------------------------------------------------------------
9   !!   bdy_dyn3d        : apply open boundary conditions to baroclinic velocities
10   !!   bdy_dyn3d_frs    : apply Flow Relaxation Scheme
11   !!----------------------------------------------------------------------
12   USE timing          ! Timing
13   USE oce             ! ocean dynamics and tracers
14   USE dom_oce         ! ocean space and time domain
15   USE bdy_oce         ! ocean open boundary conditions
16   USE bdylib          ! for orlanski library routines
17   USE lib_mpp
18   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
19   USE in_out_manager  !
20   Use phycst
21
22   IMPLICIT NONE
23   PRIVATE
24
25   PUBLIC   bdy_dyn3d     ! routine called by bdy_dyn
26   PUBLIC   bdy_dyn3d_dmp ! routine called by step
27
28   !!----------------------------------------------------------------------
29   !! NEMO/OCE 4.0 , NEMO Consortium (2018)
30   !! $Id$
31   !! Software governed by the CeCILL license (see ./LICENSE)
32   !!----------------------------------------------------------------------
33CONTAINS
34
35   SUBROUTINE bdy_dyn3d( kt, Kbb, puu, pvv, Kaa )
36      !!----------------------------------------------------------------------
37      !!                  ***  SUBROUTINE bdy_dyn3d  ***
38      !!
39      !! ** Purpose : - Apply open boundary conditions for baroclinic velocities
40      !!
41      !!----------------------------------------------------------------------
42      INTEGER                             , INTENT( in    ) ::   kt        ! Main time step counter
43      INTEGER                             , INTENT( in    ) ::   Kbb, Kaa  ! Time level indices
44      REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) ::   puu, pvv  ! Ocean velocities (to be updated at open boundaries)
45      !
46      INTEGER               ::   ib_bdy, ir     ! BDY set index, rim index
47      LOGICAL               ::   llrim0         ! indicate if rim 0 is treated
48      LOGICAL, DIMENSION(8) ::   llsend2, llrecv2, llsend3, llrecv3  ! indicate how communications are to be carried out
49      !!----------------------------------------------------------------------
50     
51      llsend2(:) = .false.   ;   llrecv2(:) = .false.
52      llsend3(:) = .false.   ;   llrecv3(:) = .false.
53      DO ir = 1, 0, -1   ! treat rim 1 before rim 0
54         IF( ir == 0 ) THEN   ;   llrim0 = .TRUE.
55         ELSE                 ;   llrim0 = .FALSE.
56         END IF
57         DO ib_bdy=1, nb_bdy
58            !
59            SELECT CASE( cn_dyn3d(ib_bdy) )
60            CASE('none')        ;   CYCLE
61            CASE('frs' )        ! treat the whole boundary at once
62                       IF( ir == 0) CALL bdy_dyn3d_frs( puu, pvv, Kaa, idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt, ib_bdy )
63            CASE('specified')   ! treat the whole rim      at once
64                       IF( ir == 0) CALL bdy_dyn3d_spe( puu, pvv, Kaa, idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt, ib_bdy )
65            CASE('zero')        ! treat the whole rim      at once
66                       IF( ir == 0) CALL bdy_dyn3d_zro( puu, pvv, Kaa, idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt, ib_bdy )
67            CASE('orlanski' )   ;   CALL bdy_dyn3d_orlanski( Kbb, puu, pvv, Kaa, idx_bdy(ib_bdy), dta_bdy(ib_bdy), ib_bdy, llrim0, ll_npo=.false. )
68            CASE('orlanski_npo');   CALL bdy_dyn3d_orlanski( Kbb, puu, pvv, Kaa, idx_bdy(ib_bdy), dta_bdy(ib_bdy), ib_bdy, llrim0, ll_npo=.true.  )
69            CASE('zerograd')    ;   CALL bdy_dyn3d_zgrad( puu, pvv, Kaa, idx_bdy(ib_bdy), dta_bdy(ib_bdy), kt, ib_bdy, llrim0 )
70            CASE('neumann')     ;   CALL bdy_dyn3d_nmn( puu, pvv, Kaa, idx_bdy(ib_bdy), ib_bdy, llrim0 )
71            CASE DEFAULT        ;   CALL ctl_stop( 'bdy_dyn3d : unrecognised option for open boundaries for baroclinic velocities' )
72            END SELECT
73         END DO
74         !
75         IF( nn_hls > 1 .AND. ir == 1 ) CYCLE   ! at least 2 halos will be corrected -> no need to correct rim 1 before rim 0
76         IF( nn_hls == 1 ) THEN
77            llsend2(:) = .false.   ;   llrecv2(:) = .false.
78            llsend3(:) = .false.   ;   llrecv3(:) = .false.
79         END IF
80         DO ib_bdy=1, nb_bdy
81            SELECT CASE( cn_dyn3d(ib_bdy) )
82            CASE('orlanski', 'orlanski_npo')
83               llsend2(:) = llsend2(:) .OR. lsend_bdyolr(ib_bdy,2,:,ir)   ! possibly every direction, U points
84               llrecv2(:) = llrecv2(:) .OR. lrecv_bdyolr(ib_bdy,2,:,ir)   ! possibly every direction, U points
85               llsend3(:) = llsend3(:) .OR. lsend_bdyolr(ib_bdy,3,:,ir)   ! possibly every direction, V points
86               llrecv3(:) = llrecv3(:) .OR. lrecv_bdyolr(ib_bdy,3,:,ir)   ! possibly every direction, V points
87            CASE('zerograd', 'neumann')
88               llsend2(:) = llsend2(:) .OR. lsend_bdyint(ib_bdy,2,:,ir)
89               llrecv2(:) = llrecv2(:) .OR. lrecv_bdyint(ib_bdy,2,:,ir)
90               llsend3(:) = llsend3(:) .OR. lsend_bdyint(ib_bdy,3,:,ir)
91               llrecv3(:) = llrecv3(:) .OR. lrecv_bdyint(ib_bdy,3,:,ir)
92            END SELECT
93         END DO
94         !
95         IF( ANY(llsend2) .OR. ANY(llrecv2) ) THEN   ! if need to send/recv in at least one direction
96            CALL lbc_lnk( 'bdydyn2d', puu(:,:,:,Kaa), 'U', -1.0_wp, kfillmode=jpfillnothing ,lsend=llsend2, lrecv=llrecv2 )
97         END IF
98         IF( ANY(llsend3) .OR. ANY(llrecv3) ) THEN   ! if need to send/recv in at least one direction
99            CALL lbc_lnk( 'bdydyn2d', pvv(:,:,:,Kaa), 'V', -1.0_wp, kfillmode=jpfillnothing ,lsend=llsend3, lrecv=llrecv3 )
100         END IF
101      END DO   ! ir
102      !
103   END SUBROUTINE bdy_dyn3d
104
105
106   SUBROUTINE bdy_dyn3d_spe( puu, pvv, Kaa, idx, dta, kt, ib_bdy )
107      !!----------------------------------------------------------------------
108      !!                  ***  SUBROUTINE bdy_dyn3d_spe  ***
109      !!
110      !! ** Purpose : - Apply a specified value for baroclinic velocities
111      !!                at open boundaries.
112      !!
113      !!----------------------------------------------------------------------
114      INTEGER                             , INTENT( in    ) ::   Kaa       ! Time level index
115      REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) ::   puu, pvv  ! Ocean velocities (to be updated at open boundaries)
116      TYPE(OBC_INDEX)                     , INTENT( in    ) ::   idx       ! OBC indices
117      TYPE(OBC_DATA)                      , INTENT( in    ) ::   dta       ! OBC external data
118      INTEGER                             , INTENT( in    ) ::   kt        ! Time step
119      INTEGER                             , INTENT( in    ) ::   ib_bdy    ! BDY set index
120      !
121      INTEGER  ::   jb, jk         ! dummy loop indices
122      INTEGER  ::   ii, ij, igrd   ! local integers
123      !!----------------------------------------------------------------------
124      !
125      igrd = 2                      ! Relaxation of zonal velocity
126      DO jb = 1, idx%nblenrim(igrd)
127         DO jk = 1, jpkm1
128            ii   = idx%nbi(jb,igrd)
129            ij   = idx%nbj(jb,igrd)
130            puu(ii,ij,jk,Kaa) = dta%u3d(jb,jk) * umask(ii,ij,jk)
131         END DO
132      END DO
133      !
134      igrd = 3                      ! Relaxation of meridional velocity
135      DO jb = 1, idx%nblenrim(igrd)
136         DO jk = 1, jpkm1
137            ii   = idx%nbi(jb,igrd)
138            ij   = idx%nbj(jb,igrd)
139            pvv(ii,ij,jk,Kaa) = dta%v3d(jb,jk) * vmask(ii,ij,jk)
140         END DO
141      END DO
142      !
143   END SUBROUTINE bdy_dyn3d_spe
144
145
146   SUBROUTINE bdy_dyn3d_zgrad( puu, pvv, Kaa, idx, dta, kt, ib_bdy, llrim0 )
147      !!----------------------------------------------------------------------
148      !!                  ***  SUBROUTINE bdy_dyn3d_zgrad  ***
149      !!
150      !! ** Purpose : - Enforce a zero gradient of normal velocity
151      !!
152      !!----------------------------------------------------------------------
153      INTEGER                             , INTENT( in    ) ::   Kaa       ! Time level index
154      REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) ::   puu, pvv  ! Ocean velocities (to be updated at open boundaries)
155      TYPE(OBC_INDEX)                     , INTENT( in    ) ::   idx       ! OBC indices
156      TYPE(OBC_DATA)                      , INTENT( in    ) ::   dta       ! OBC external data
157      INTEGER                             , INTENT( in    ) ::   kt
158      INTEGER                             , INTENT( in    ) ::   ib_bdy    ! BDY set index
159      LOGICAL                             , INTENT( in    ) ::   llrim0   ! indicate if rim 0 is treated
160      !!
161      INTEGER  ::   jb, jk         ! dummy loop indices
162      INTEGER  ::   ii, ij, igrd   ! local integers
163      INTEGER  ::   flagu, flagv           ! short cuts
164      INTEGER  ::   ibeg, iend     ! length of rim to be treated (rim 0 or rim 1 or both)
165      !!----------------------------------------------------------------------
166      !
167      igrd = 2                      ! Copying tangential velocity into bdy points
168      IF( llrim0 ) THEN   ;   ibeg = 1                       ;   iend = idx%nblenrim0(igrd)
169      ELSE                ;   ibeg = idx%nblenrim0(igrd)+1   ;   iend = idx%nblenrim(igrd)
170      ENDIF
171      DO jb = ibeg, iend
172         ii    = idx%nbi(jb,igrd)
173         ij    = idx%nbj(jb,igrd)
174         flagu = NINT(idx%flagu(jb,igrd))
175         flagv = NINT(idx%flagv(jb,igrd))
176         !
177         IF( flagu == 0 )   THEN              ! north/south bdy
178            IF( ij+flagv > jpj .OR. ij+flagv < 1 )   CYCLE     
179            !
180            DO jk = 1, jpkm1
181               puu(ii,ij,jk,Kaa) = puu(ii,ij+flagv,jk,Kaa) * umask(ii,ij+flagv,jk)
182            END DO
183            !
184         END IF
185      END DO
186      !
187      igrd = 3                      ! Copying tangential velocity into bdy points
188      IF( llrim0 ) THEN   ;   ibeg = 1                       ;   iend = idx%nblenrim0(igrd)
189      ELSE                ;   ibeg = idx%nblenrim0(igrd)+1   ;   iend = idx%nblenrim(igrd)
190      ENDIF
191      DO jb = ibeg, iend
192         ii    = idx%nbi(jb,igrd)
193         ij    = idx%nbj(jb,igrd)
194         flagu = NINT(idx%flagu(jb,igrd))
195         flagv = NINT(idx%flagv(jb,igrd))
196         !
197         IF( flagv == 0 )   THEN              !  west/east  bdy
198            IF( ii+flagu > jpi .OR. ii+flagu < 1 )   CYCLE     
199            !
200            DO jk = 1, jpkm1
201               pvv(ii,ij,jk,Kaa) = pvv(ii+flagu,ij,jk,Kaa) * vmask(ii+flagu,ij,jk)
202            END DO
203            !
204         END IF
205      END DO
206      !
207   END SUBROUTINE bdy_dyn3d_zgrad
208
209
210   SUBROUTINE bdy_dyn3d_zro( puu, pvv, Kaa, idx, dta, kt, ib_bdy )
211      !!----------------------------------------------------------------------
212      !!                  ***  SUBROUTINE bdy_dyn3d_zro  ***
213      !!
214      !! ** Purpose : - baroclinic velocities = 0. at open boundaries.
215      !!
216      !!----------------------------------------------------------------------
217      INTEGER                             , INTENT( in    ) ::   kt        ! time step index
218      INTEGER                             , INTENT( in    ) ::   Kaa       ! Time level index
219      REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) ::   puu, pvv  ! Ocean velocities (to be updated at open boundaries)
220      TYPE(OBC_INDEX)                     , INTENT( in    ) ::   idx       ! OBC indices
221      TYPE(OBC_DATA)                      , INTENT( in    ) ::   dta       ! OBC external data
222      INTEGER                             , INTENT( in    ) ::   ib_bdy    ! BDY set index
223      !
224      INTEGER  ::   ib, ik         ! dummy loop indices
225      INTEGER  ::   ii, ij, igrd   ! local integers
226      !!----------------------------------------------------------------------
227      !
228      igrd = 2                       ! Everything is at T-points here
229      DO ib = 1, idx%nblenrim(igrd)
230         ii = idx%nbi(ib,igrd)
231         ij = idx%nbj(ib,igrd)
232         DO ik = 1, jpkm1
233            puu(ii,ij,ik,Kaa) = 0._wp
234         END DO
235      END DO
236      !
237      igrd = 3                       ! Everything is at T-points here
238      DO ib = 1, idx%nblenrim(igrd)
239         ii = idx%nbi(ib,igrd)
240         ij = idx%nbj(ib,igrd)
241         DO ik = 1, jpkm1
242            pvv(ii,ij,ik,Kaa) = 0._wp
243         END DO
244      END DO
245      !
246   END SUBROUTINE bdy_dyn3d_zro
247
248
249   SUBROUTINE bdy_dyn3d_frs( puu, pvv, Kaa, idx, dta, kt, ib_bdy )
250      !!----------------------------------------------------------------------
251      !!                  ***  SUBROUTINE bdy_dyn3d_frs  ***
252      !!
253      !! ** Purpose : - Apply the Flow Relaxation Scheme for baroclinic velocities
254      !!                at open boundaries.
255      !!
256      !! References :- Engedahl H., 1995: Use of the flow relaxation scheme in
257      !!               a three-dimensional baroclinic ocean model with realistic
258      !!               topography. Tellus, 365-382.
259      !!----------------------------------------------------------------------
260      INTEGER                             , INTENT( in    ) ::   kt        ! time step index
261      INTEGER                             , INTENT( in    ) ::   Kaa       ! Time level index
262      REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) ::   puu, pvv  ! Ocean velocities (to be updated at open boundaries)
263      TYPE(OBC_INDEX)                     , INTENT( in    ) ::   idx       ! OBC indices
264      TYPE(OBC_DATA)                      , INTENT( in    ) ::   dta       ! OBC external data
265      INTEGER                             , INTENT( in    ) ::   ib_bdy    ! BDY set index
266      !
267      INTEGER  ::   jb, jk         ! dummy loop indices
268      INTEGER  ::   ii, ij, igrd   ! local integers
269      REAL(wp) ::   zwgt           ! boundary weight
270      !!----------------------------------------------------------------------
271      !
272      igrd = 2                      ! Relaxation of zonal velocity
273      DO jb = 1, idx%nblen(igrd)
274         DO jk = 1, jpkm1
275            ii   = idx%nbi(jb,igrd)
276            ij   = idx%nbj(jb,igrd)
277            zwgt = idx%nbw(jb,igrd)
278            puu(ii,ij,jk,Kaa) = ( puu(ii,ij,jk,Kaa) + zwgt * ( dta%u3d(jb,jk) - puu(ii,ij,jk,Kaa) ) ) * umask(ii,ij,jk)
279         END DO
280      END DO
281      !
282      igrd = 3                      ! Relaxation of meridional velocity
283      DO jb = 1, idx%nblen(igrd)
284         DO jk = 1, jpkm1
285            ii   = idx%nbi(jb,igrd)
286            ij   = idx%nbj(jb,igrd)
287            zwgt = idx%nbw(jb,igrd)
288            pvv(ii,ij,jk,Kaa) = ( pvv(ii,ij,jk,Kaa) + zwgt * ( dta%v3d(jb,jk) - pvv(ii,ij,jk,Kaa) ) ) * vmask(ii,ij,jk)
289         END DO
290      END DO   
291      !
292   END SUBROUTINE bdy_dyn3d_frs
293
294
295   SUBROUTINE bdy_dyn3d_orlanski( Kbb, puu, pvv, Kaa, idx, dta, ib_bdy, llrim0, ll_npo )
296      !!----------------------------------------------------------------------
297      !!                 ***  SUBROUTINE bdy_dyn3d_orlanski  ***
298      !!             
299      !!              - Apply Orlanski radiation to baroclinic velocities.
300      !!              - Wrapper routine for bdy_orlanski_3d
301      !!
302      !!
303      !! References:  Marchesiello, McWilliams and Shchepetkin, Ocean Modelling vol. 3 (2001)   
304      !!----------------------------------------------------------------------
305      INTEGER                             , INTENT( in    ) ::   Kbb, Kaa  ! Time level indices
306      REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) ::   puu, pvv  ! Ocean velocities (to be updated at open boundaries)
307      TYPE(OBC_INDEX)                     , INTENT( in    ) ::   idx       ! OBC indices
308      TYPE(OBC_DATA)                      , INTENT( in    ) ::   dta       ! OBC external data
309      INTEGER                             , INTENT( in    ) ::   ib_bdy    ! BDY set index
310      LOGICAL                             , INTENT( in    ) ::   llrim0    ! indicate if rim 0 is treated
311      LOGICAL                             , INTENT( in    ) ::   ll_npo    ! switch for NPO version
312
313      INTEGER  ::   jb, igrd                               ! dummy loop indices
314      !!----------------------------------------------------------------------
315      !
316      !! Note that at this stage the puu(:,:,:,Kbb) and puu(:,:,:,Kaa) arrays contain the baroclinic velocities.
317      !
318      igrd = 2      ! Orlanski bc on u-velocity;
319      !           
320      CALL bdy_orlanski_3d( idx, igrd, puu(:,:,:,Kbb), puu(:,:,:,Kaa), dta%u3d, ll_npo, llrim0 )
321
322      igrd = 3      ! Orlanski bc on v-velocity
323     
324      CALL bdy_orlanski_3d( idx, igrd, pvv(:,:,:,Kbb), pvv(:,:,:,Kaa), dta%v3d, ll_npo, llrim0 )
325      !
326   END SUBROUTINE bdy_dyn3d_orlanski
327
328
329   SUBROUTINE bdy_dyn3d_dmp( kt, Kbb, puu, pvv, Krhs )
330      !!----------------------------------------------------------------------
331      !!                  ***  SUBROUTINE bdy_dyn3d_dmp  ***
332      !!
333      !! ** Purpose : Apply damping for baroclinic velocities at open boundaries.
334      !!
335      !!----------------------------------------------------------------------
336      INTEGER                             , INTENT( in    ) ::   kt        ! time step
337      INTEGER                             , INTENT( in    ) ::   Kbb, Krhs ! Time level indices
338      REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) ::   puu, pvv  ! Ocean velocities and trends (to be updated at open boundaries)
339      !
340      INTEGER  ::   jb, jk         ! dummy loop indices
341      INTEGER  ::   ib_bdy         ! loop index
342      INTEGER  ::   ii, ij, igrd   ! local integers
343      REAL(wp) ::   zwgt           ! boundary weight
344      !!----------------------------------------------------------------------
345      IF( l_istiled .AND. ntile /= 1 ) RETURN                        ! Do only for the full domain
346      !
347      IF( ln_timing )   CALL timing_start('bdy_dyn3d_dmp')
348      !
349      DO ib_bdy=1, nb_bdy
350         IF ( ln_dyn3d_dmp(ib_bdy) .and. cn_dyn3d(ib_bdy) /= 'none' ) THEN
351            igrd = 2                      ! Relaxation of zonal velocity
352            DO jb = 1, idx_bdy(ib_bdy)%nblen(igrd)
353               ii   = idx_bdy(ib_bdy)%nbi(jb,igrd)
354               ij   = idx_bdy(ib_bdy)%nbj(jb,igrd)
355               zwgt = idx_bdy(ib_bdy)%nbd(jb,igrd)
356               DO jk = 1, jpkm1
357                  puu(ii,ij,jk,Krhs) = ( puu(ii,ij,jk,Krhs) + zwgt * ( dta_bdy(ib_bdy)%u3d(jb,jk) - &
358                                   puu(ii,ij,jk,Kbb) + uu_b(ii,ij,Kbb)) ) * umask(ii,ij,jk)
359               END DO
360            END DO
361            !
362            igrd = 3                      ! Relaxation of meridional velocity
363            DO jb = 1, idx_bdy(ib_bdy)%nblen(igrd)
364               ii   = idx_bdy(ib_bdy)%nbi(jb,igrd)
365               ij   = idx_bdy(ib_bdy)%nbj(jb,igrd)
366               zwgt = idx_bdy(ib_bdy)%nbd(jb,igrd)
367               DO jk = 1, jpkm1
368                  pvv(ii,ij,jk,Krhs) = ( pvv(ii,ij,jk,Krhs) + zwgt * ( dta_bdy(ib_bdy)%v3d(jb,jk) -  &
369                                   pvv(ii,ij,jk,Kbb) + vv_b(ii,ij,Kbb)) ) * vmask(ii,ij,jk)
370               END DO
371            END DO
372         ENDIF
373      END DO
374      !
375      IF( ln_timing )   CALL timing_stop('bdy_dyn3d_dmp')
376      !
377   END SUBROUTINE bdy_dyn3d_dmp
378
379
380   SUBROUTINE bdy_dyn3d_nmn( puu, pvv, Kaa, idx, ib_bdy, llrim0 )
381      !!----------------------------------------------------------------------
382      !!                 ***  SUBROUTINE bdy_dyn3d_nmn  ***
383      !!             
384      !!              - Apply Neumann condition to baroclinic velocities.
385      !!              - Wrapper routine for bdy_nmn
386      !!
387      !!
388      !!----------------------------------------------------------------------
389      INTEGER                             , INTENT( in    ) ::   Kaa       ! Time level index
390      REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT( inout ) ::   puu, pvv  ! Ocean velocities (to be updated at open boundaries)
391      TYPE(OBC_INDEX)                     , INTENT( in    ) ::   idx       ! OBC indices
392      INTEGER                             , INTENT( in    ) ::   ib_bdy    ! BDY set index
393      LOGICAL                             , INTENT( in    ) ::   llrim0    ! indicate if rim 0 is treated
394      INTEGER  ::   igrd                        ! dummy indice
395      !!----------------------------------------------------------------------
396      !
397      !! Note that at this stage the puu(:,:,:,Kbb) and puu(:,:,:,Kaa) arrays contain the baroclinic velocities.
398      !
399      igrd = 2      ! Neumann bc on u-velocity;
400      !           
401      CALL bdy_nmn( idx, igrd, puu(:,:,:,Kaa), llrim0 )
402
403      igrd = 3      ! Neumann bc on v-velocity
404     
405      CALL bdy_nmn( idx, igrd, pvv(:,:,:,Kaa), llrim0 )
406      !
407   END SUBROUTINE bdy_dyn3d_nmn
408
409   !!======================================================================
410END MODULE bdydyn3d
Note: See TracBrowser for help on using the repository browser.