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/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/BDY – NEMO

source: NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/OCE/BDY/bdydyn3d.F90 @ 14644

Last change on this file since 14644 was 14644, checked in by sparonuz, 3 years ago

Merge trunk -r14642:HEAD

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