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.
bdydta.F90 in branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC/BDY – NEMO

source: branches/2014/dev_r4621_NOC4_BDY_VERT_INTERP/NEMOGCM/NEMO/OPA_SRC/BDY/bdydta.F90 @ 4694

Last change on this file since 4694 was 4694, checked in by jamesharle, 10 years ago

Update of fldread to handle depth information in BDY files and addition of an interpolation routine. Updated BDY code to handle T/S BDY interpolation on the fly. Conservative remapping of U/V still to be coded. Not compiled or test yet.

  • Property svn:keywords set to Id
File size: 39.9 KB
Line 
1MODULE bdydta
2   !!======================================================================
3   !!                       ***  MODULE bdydta  ***
4   !! Open boundary data : read the data for the unstructured open boundaries.
5   !!======================================================================
6   !! History :  1.0  !  2005-01  (J. Chanut, A. Sellar)  Original code
7   !!             -   !  2007-01  (D. Storkey) Update to use IOM module
8   !!             -   !  2007-07  (D. Storkey) add bdy_dta_fla
9   !!            3.0  !  2008-04  (NEMO team)  add in the reference version
10   !!            3.3  !  2010-09  (E.O'Dea) modifications for Shelf configurations
11   !!            3.3  !  2010-09  (D.Storkey) add ice boundary conditions
12   !!            3.4  !  2011     (D. Storkey) rewrite in preparation for OBC-BDY merge
13   !!            3.6  !  2012-01  (C. Rousset) add ice boundary conditions for lim3
14   !!----------------------------------------------------------------------
15#if defined key_bdy
16   !!----------------------------------------------------------------------
17   !!   'key_bdy'                     Open Boundary Conditions
18   !!----------------------------------------------------------------------
19   !!    bdy_dta        : read external data along open boundaries from file
20   !!    bdy_dta_init   : initialise arrays etc for reading of external data
21   !!----------------------------------------------------------------------
22   USE timing          ! Timing
23   USE oce             ! ocean dynamics and tracers
24   USE dom_oce         ! ocean space and time domain
25   USE phycst          ! physical constants
26   USE bdy_oce         ! ocean open boundary conditions 
27   USE bdytides        ! tidal forcing at boundaries
28   USE fldread         ! read input fields
29   USE iom             ! IOM library
30   USE in_out_manager  ! I/O logical units
31   USE dynspg_oce, ONLY: lk_dynspg_ts ! Split-explicit free surface flag
32#if defined key_lim2
33   USE ice_2
34#elif defined key_lim3
35   USE par_ice
36   USE ice
37   USE limcat_1D          ! redistribute ice input into categories
38#endif
39   USE sbcapr
40
41   IMPLICIT NONE
42   PRIVATE
43
44   PUBLIC   bdy_dta          ! routine called by step.F90 and dynspg_ts.F90
45   PUBLIC   bdy_dta_init     ! routine called by nemogcm.F90
46
47   INTEGER, ALLOCATABLE, DIMENSION(:)   ::   nb_bdy_fld        ! Number of fields to update for each boundary set.
48   INTEGER                              ::   nb_bdy_fld_sum    ! Total number of fields to update for all boundary sets.
49
50   LOGICAL,           DIMENSION(jp_bdy) ::   ln_full_vel_array ! =T => full velocities in 3D boundary conditions
51                                                               ! =F => baroclinic velocities in 3D boundary conditions
52!$AGRIF_DO_NOT_TREAT
53   TYPE(FLD), PUBLIC, ALLOCATABLE, DIMENSION(:), TARGET ::   bf        ! structure of input fields (file informations, fields read)
54!$AGRIF_END_DO_NOT_TREAT
55   TYPE(MAP_POINTER), ALLOCATABLE, DIMENSION(:) :: nbmap_ptr   ! array of pointers to nbmap
56
57#if defined key_lim3
58   LOGICAL :: ll_bdylim3                  ! determine whether ice input is lim2 (F) or lim3 (T) type
59   INTEGER :: jfld_hti, jfld_hts, jfld_ai ! indices of ice thickness, snow thickness and concentration in bf structure
60#endif
61
62#  include "domzgr_substitute.h90"
63   !!----------------------------------------------------------------------
64   !! NEMO/OPA 3.3 , NEMO Consortium (2010)
65   !! $Id$
66   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
67   !!----------------------------------------------------------------------
68CONTAINS
69
70      SUBROUTINE bdy_dta( kt, jit, time_offset )
71      !!----------------------------------------------------------------------
72      !!                   ***  SUBROUTINE bdy_dta  ***
73      !!                   
74      !! ** Purpose :   Update external data for open boundary conditions
75      !!
76      !! ** Method  :   Use fldread.F90
77      !!               
78      !!----------------------------------------------------------------------
79      !!
80      INTEGER, INTENT( in )           ::   kt    ! ocean time-step index
81      INTEGER, INTENT( in ), OPTIONAL ::   jit   ! subcycle time-step index (for timesplitting option)
82      INTEGER, INTENT( in ), OPTIONAL ::   time_offset  ! time offset in units of timesteps. NB. if jit
83                                                        ! is present then units = subcycle timesteps.
84                                                        ! time_offset = 0 => get data at "now" time level
85                                                        ! time_offset = -1 => get data at "before" time level
86                                                        ! time_offset = +1 => get data at "after" time level
87                                                        ! etc.
88      !!
89      INTEGER     ::  ib_bdy, jfld, jstart, jend, ib, ii, ij, ik, igrd, jl  ! local indices
90      INTEGER,          DIMENSION(jpbgrd) ::   ilen1 
91      INTEGER, POINTER, DIMENSION(:)      ::   nblen, nblenrim  ! short cuts
92      TYPE(OBC_DATA), POINTER             ::   dta              ! short cut
93      !!
94      !!---------------------------------------------------------------------------
95      !!
96      IF( nn_timing == 1 ) CALL timing_start('bdy_dta')
97
98      ! Initialise data arrays once for all from initial conditions where required
99      !---------------------------------------------------------------------------
100      IF( kt .eq. nit000 .and. .not. PRESENT(jit) ) THEN
101
102         ! Calculate depth-mean currents
103         !-----------------------------
104         
105         DO ib_bdy = 1, nb_bdy
106
107            nblen => idx_bdy(ib_bdy)%nblen
108            nblenrim => idx_bdy(ib_bdy)%nblenrim
109            dta => dta_bdy(ib_bdy)
110
111            IF( nn_dyn2d_dta(ib_bdy) .eq. 0 ) THEN
112               ilen1(:) = nblen(:)
113               IF( dta%ll_ssh ) THEN
114                  igrd = 1
115                  DO ib = 1, ilen1(igrd)
116                     ii = idx_bdy(ib_bdy)%nbi(ib,igrd)
117                     ij = idx_bdy(ib_bdy)%nbj(ib,igrd)
118                     dta_bdy(ib_bdy)%ssh(ib) = sshn(ii,ij) * tmask(ii,ij,1)         
119                  END DO
120               END IF
121               IF( dta%ll_u2d ) THEN
122                  igrd = 2
123                  DO ib = 1, ilen1(igrd)
124                     ii = idx_bdy(ib_bdy)%nbi(ib,igrd)
125                     ij = idx_bdy(ib_bdy)%nbj(ib,igrd)
126                     dta_bdy(ib_bdy)%u2d(ib) = un_b(ii,ij) * umask(ii,ij,1)         
127                  END DO
128               END IF
129               IF( dta%ll_v2d ) THEN
130                  igrd = 3
131                  DO ib = 1, ilen1(igrd)
132                     ii = idx_bdy(ib_bdy)%nbi(ib,igrd)
133                     ij = idx_bdy(ib_bdy)%nbj(ib,igrd)
134                     dta_bdy(ib_bdy)%v2d(ib) = vn_b(ii,ij) * vmask(ii,ij,1)         
135                  END DO
136               END IF
137            ENDIF
138
139            IF( nn_dyn3d_dta(ib_bdy) .eq. 0 ) THEN
140               ilen1(:) = nblen(:)
141               IF( dta%ll_u3d ) THEN
142                  igrd = 2 
143                  DO ib = 1, ilen1(igrd)
144                     DO ik = 1, jpkm1
145                        ii = idx_bdy(ib_bdy)%nbi(ib,igrd)
146                        ij = idx_bdy(ib_bdy)%nbj(ib,igrd)
147                        dta_bdy(ib_bdy)%u3d(ib,ik) =  ( un(ii,ij,ik) - un_b(ii,ij) ) * umask(ii,ij,ik)         
148                     END DO
149                  END DO
150               END IF
151               IF( dta%ll_v3d ) THEN
152                  igrd = 3 
153                  DO ib = 1, ilen1(igrd)
154                     DO ik = 1, jpkm1
155                        ii = idx_bdy(ib_bdy)%nbi(ib,igrd)
156                        ij = idx_bdy(ib_bdy)%nbj(ib,igrd)
157                        dta_bdy(ib_bdy)%v3d(ib,ik) =  ( vn(ii,ij,ik) - vn_b(ii,ij) ) * vmask(ii,ij,ik)         
158                        END DO
159                  END DO
160               END IF
161            ENDIF
162
163            IF( nn_tra_dta(ib_bdy) .eq. 0 ) THEN
164               ilen1(:) = nblen(:)
165               IF( dta%ll_tem ) THEN
166                  igrd = 1 
167                  DO ib = 1, ilen1(igrd)
168                     DO ik = 1, jpkm1
169                        ii = idx_bdy(ib_bdy)%nbi(ib,igrd)
170                        ij = idx_bdy(ib_bdy)%nbj(ib,igrd)
171                        dta_bdy(ib_bdy)%tem(ib,ik) = tsn(ii,ij,ik,jp_tem) * tmask(ii,ij,ik)         
172                     END DO
173                  END DO
174               END IF
175               IF( dta%ll_sal ) THEN
176                  igrd = 1 
177                  DO ib = 1, ilen1(igrd)
178                     DO ik = 1, jpkm1
179                        ii = idx_bdy(ib_bdy)%nbi(ib,igrd)
180                        ij = idx_bdy(ib_bdy)%nbj(ib,igrd)
181                        dta_bdy(ib_bdy)%sal(ib,ik) = tsn(ii,ij,ik,jp_sal) * tmask(ii,ij,ik)         
182                     END DO
183                  END DO
184               END IF
185            ENDIF
186
187#if defined key_lim2
188            IF( nn_ice_lim_dta(ib_bdy) .eq. 0 ) THEN
189               ilen1(:) = nblen(:)
190               IF( dta%ll_frld ) THEN
191                  igrd = 1 
192                  DO ib = 1, ilen1(igrd)
193                     ii = idx_bdy(ib_bdy)%nbi(ib,igrd)
194                     ij = idx_bdy(ib_bdy)%nbj(ib,igrd)
195                     dta_bdy(ib_bdy)%frld(ib) = frld(ii,ij) * tmask(ii,ij,1)         
196                  END DO
197               END IF
198               IF( dta%ll_hicif ) THEN
199                  igrd = 1 
200                  DO ib = 1, ilen1(igrd)
201                     ii = idx_bdy(ib_bdy)%nbi(ib,igrd)
202                     ij = idx_bdy(ib_bdy)%nbj(ib,igrd)
203                     dta_bdy(ib_bdy)%hicif(ib) = hicif(ii,ij) * tmask(ii,ij,1)         
204                  END DO
205               END IF
206               IF( dta%ll_hsnif ) THEN
207                  igrd = 1 
208                  DO ib = 1, ilen1(igrd)
209                     ii = idx_bdy(ib_bdy)%nbi(ib,igrd)
210                     ij = idx_bdy(ib_bdy)%nbj(ib,igrd)
211                     dta_bdy(ib_bdy)%hsnif(ib) = hsnif(ii,ij) * tmask(ii,ij,1)         
212                  END DO
213               END IF
214            ENDIF
215#elif defined key_lim3
216            IF( nn_ice_lim_dta(ib_bdy) .eq. 0 ) THEN
217               ilen1(:) = nblen(:)
218               IF( dta%ll_a_i ) THEN
219                  igrd = 1   
220                  DO jl = 1, jpl
221                     DO ib = 1, ilen1(igrd)
222                        ii = idx_bdy(ib_bdy)%nbi(ib,igrd)
223                        ij = idx_bdy(ib_bdy)%nbj(ib,igrd)
224                        dta_bdy(ib_bdy)%a_i (ib,jl) =  a_i(ii,ij,jl) * tmask(ii,ij,1) 
225                     END DO
226                  END DO
227               ENDIF
228               IF( dta%ll_ht_i ) THEN
229                  igrd = 1   
230                  DO jl = 1, jpl
231                     DO ib = 1, ilen1(igrd)
232                        ii = idx_bdy(ib_bdy)%nbi(ib,igrd)
233                        ij = idx_bdy(ib_bdy)%nbj(ib,igrd)
234                        dta_bdy(ib_bdy)%ht_i (ib,jl) =  ht_i(ii,ij,jl) * tmask(ii,ij,1) 
235                     END DO
236                  END DO
237               ENDIF
238               IF( dta%ll_ht_s ) THEN
239                  igrd = 1   
240                  DO jl = 1, jpl
241                     DO ib = 1, ilen1(igrd)
242                        ii = idx_bdy(ib_bdy)%nbi(ib,igrd)
243                        ij = idx_bdy(ib_bdy)%nbj(ib,igrd)
244                        dta_bdy(ib_bdy)%ht_s (ib,jl) =  ht_s(ii,ij,jl) * tmask(ii,ij,1) 
245                     END DO
246                  END DO
247               ENDIF
248            ENDIF
249#endif
250
251         ENDDO ! ib_bdy
252
253
254      ENDIF ! kt .eq. nit000
255
256      ! update external data from files
257      !--------------------------------
258     
259      jstart = 1
260      DO ib_bdy = 1, nb_bdy   
261         dta => dta_bdy(ib_bdy)
262         IF( nn_dta(ib_bdy) .eq. 1 ) THEN ! skip this bit if no external data required
263     
264            IF( PRESENT(jit) ) THEN
265               ! Update barotropic boundary conditions only
266               ! jit is optional argument for fld_read and bdytide_update
267               IF( cn_dyn2d(ib_bdy) /= 'none' ) THEN
268                  IF( nn_dyn2d_dta(ib_bdy) .eq. 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays
269                     IF( dta%ll_ssh ) dta%ssh(:) = 0.0
270                     IF( dta%ll_u2d ) dta%u2d(:) = 0.0
271                     IF( dta%ll_u3d ) dta%v2d(:) = 0.0
272                  ENDIF
273                  IF (cn_tra(ib_bdy) /= 'runoff') THEN
274                     IF( nn_dyn2d_dta(ib_bdy) .EQ. 1 .OR. nn_dyn2d_dta(ib_bdy) .EQ. 3 ) THEN
275
276                        jend = jstart + dta%nread(2) - 1
277                        CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), map=nbmap_ptr(jstart:jend),  &
278                                     & kit=jit, kt_offset=time_offset )
279
280                        ! If full velocities in boundary data then extract barotropic velocities from 3D fields
281                        IF( ln_full_vel_array(ib_bdy) .AND.                                             &
282                          &    ( nn_dyn2d_dta(ib_bdy) .EQ. 1 .OR. nn_dyn2d_dta(ib_bdy) .EQ. 3 .OR.  &
283                          &      nn_dyn3d_dta(ib_bdy) .EQ. 1 ) )THEN
284
285                           igrd = 2                      ! zonal velocity
286                           dta%u2d(:) = 0.0
287                           DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd)
288                              ii   = idx_bdy(ib_bdy)%nbi(ib,igrd)
289                              ij   = idx_bdy(ib_bdy)%nbj(ib,igrd)
290                              DO ik = 1, jpkm1
291                                 dta%u2d(ib) = dta%u2d(ib) &
292                       &                          + fse3u(ii,ij,ik) * umask(ii,ij,ik) * dta%u3d(ib,ik)
293                              END DO
294                              dta%u2d(ib) =  dta%u2d(ib) * hur(ii,ij)
295                           END DO
296                           igrd = 3                      ! meridional velocity
297                           dta%v2d(:) = 0.0
298                           DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd)
299                              ii   = idx_bdy(ib_bdy)%nbi(ib,igrd)
300                              ij   = idx_bdy(ib_bdy)%nbj(ib,igrd)
301                              DO ik = 1, jpkm1
302                                 dta%v2d(ib) = dta%v2d(ib) &
303                       &                       + fse3v(ii,ij,ik) * vmask(ii,ij,ik) * dta%v3d(ib,ik)
304                              END DO
305                              dta%v2d(ib) =  dta%v2d(ib) * hvr(ii,ij)
306                           END DO
307                        ENDIF                   
308                     ENDIF
309                     IF( nn_dyn2d_dta(ib_bdy) .ge. 2 ) THEN ! update tidal harmonic forcing
310                        CALL bdytide_update( kt=kt, idx=idx_bdy(ib_bdy), dta=dta, td=tides(ib_bdy),   & 
311                          &                 jit=jit, time_offset=time_offset )
312                     ENDIF
313                  ENDIF
314               ENDIF
315            ELSE
316               IF (cn_tra(ib_bdy) == 'runoff') then      ! runoff condition
317                  jend = nb_bdy_fld(ib_bdy)
318                  CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend),  &
319                               & map=nbmap_ptr(jstart:jend), kt_offset=time_offset )
320                  !
321                  igrd = 2                      ! zonal velocity
322                  DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd)
323                     ii   = idx_bdy(ib_bdy)%nbi(ib,igrd)
324                     ij   = idx_bdy(ib_bdy)%nbj(ib,igrd)
325                     dta%u2d(ib) = dta%u2d(ib) / ( e2u(ii,ij) * hu_0(ii,ij) )
326                  END DO
327                  !
328                  igrd = 3                      ! meridional velocity
329                  DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd)
330                     ii   = idx_bdy(ib_bdy)%nbi(ib,igrd)
331                     ij   = idx_bdy(ib_bdy)%nbj(ib,igrd)
332                     dta%v2d(ib) = dta%v2d(ib) / ( e1v(ii,ij) * hv_0(ii,ij) )
333                  END DO
334               ELSE
335                  IF( nn_dyn2d_dta(ib_bdy) .eq. 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays
336                     IF( dta%ll_ssh ) dta%ssh(:) = 0.0
337                     IF( dta%ll_u2d ) dta%u2d(:) = 0.0
338                     IF( dta%ll_v2d ) dta%v2d(:) = 0.0
339                  ENDIF
340                  IF( dta%nread(1) .gt. 0 ) THEN ! update external data
341                     jend = jstart + dta%nread(1) - 1
342                     CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), &
343                                  & map=nbmap_ptr(jstart:jend), kt_offset=time_offset, jpk_bdy=nb_jpk_bdy )
344                  ENDIF
345                  ! If full velocities in boundary data then split into barotropic and baroclinic data
346                  IF( ln_full_vel_array(ib_bdy) .and.                                             &
347                    & ( nn_dyn2d_dta(ib_bdy) .EQ. 1 .OR. nn_dyn2d_dta(ib_bdy) .EQ. 3 .OR. &
348                    &   nn_dyn3d_dta(ib_bdy) .EQ. 1 ) ) THEN
349                     igrd = 2                      ! zonal velocity
350                     dta%u2d(:) = 0.0
351                     DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd)
352                        ii   = idx_bdy(ib_bdy)%nbi(ib,igrd)
353                        ij   = idx_bdy(ib_bdy)%nbj(ib,igrd)
354                        DO ik = 1, jpkm1
355                           dta%u2d(ib) = dta%u2d(ib) &
356                 &                       + fse3u(ii,ij,ik) * umask(ii,ij,ik) * dta%u3d(ib,ik)
357                        END DO
358                        dta%u2d(ib) =  dta%u2d(ib) * hur(ii,ij)
359                        DO ik = 1, jpkm1
360                           dta%u3d(ib,ik) = dta%u3d(ib,ik) - dta%u2d(ib)
361                        END DO
362                     END DO
363                     igrd = 3                      ! meridional velocity
364                     dta%v2d(:) = 0.0
365                     DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd)
366                        ii   = idx_bdy(ib_bdy)%nbi(ib,igrd)
367                        ij   = idx_bdy(ib_bdy)%nbj(ib,igrd)
368                        DO ik = 1, jpkm1
369                           dta%v2d(ib) = dta%v2d(ib) &
370                 &                       + fse3v(ii,ij,ik) * vmask(ii,ij,ik) * dta%v3d(ib,ik)
371                        END DO
372                        dta%v2d(ib) =  dta%v2d(ib) * hvr(ii,ij)
373                        DO ik = 1, jpkm1
374                           dta%v3d(ib,ik) = dta%v3d(ib,ik) - dta%v2d(ib)
375                        END DO
376                     END DO
377                  ENDIF
378
379               ENDIF
380#if defined key_lim3
381               IF( .NOT. ll_bdylim3 .AND. cn_ice_lim(ib_bdy) /= 'none' .AND. nn_ice_lim_dta(ib_bdy) == 1 ) THEN ! bdy ice input (case input is lim2 type)
382                CALL lim_cat_1D ( bf(jfld_hti)%fnow(:,1,1), bf(jfld_hts)%fnow(:,1,1), bf(jfld_ai)%fnow(:,1,1), &
383                                  & dta_bdy(ib_bdy)%ht_i,     dta_bdy(ib_bdy)%ht_s,     dta_bdy(ib_bdy)%a_i     )
384               ENDIF
385#endif
386            ENDIF
387            jstart = jstart + dta%nread(1)
388         END IF ! nn_dta(ib_bdy) = 1
389      END DO  ! ib_bdy
390
391      ! bg jchanut tschanges
392#if defined key_tide
393      ! Add tides if not split-explicit free surface else this is done in ts loop
394      IF (.NOT.lk_dynspg_ts) CALL bdy_dta_tides( kt=kt, time_offset=time_offset )
395#endif
396      ! end jchanut tschanges
397
398      IF ( ln_apr_obc ) THEN
399         DO ib_bdy = 1, nb_bdy
400            IF (cn_tra(ib_bdy) /= 'runoff')THEN
401               igrd = 1                      ! meridional velocity
402               DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd)
403                  ii   = idx_bdy(ib_bdy)%nbi(ib,igrd)
404                  ij   = idx_bdy(ib_bdy)%nbj(ib,igrd)
405                  dta_bdy(ib_bdy)%ssh(ib) = dta_bdy(ib_bdy)%ssh(ib) + ssh_ib(ii,ij)
406               ENDDO
407            ENDIF
408         ENDDO
409      ENDIF
410
411      IF( nn_timing == 1 ) CALL timing_stop('bdy_dta')
412
413      END SUBROUTINE bdy_dta
414
415
416      SUBROUTINE bdy_dta_init
417      !!----------------------------------------------------------------------
418      !!                   ***  SUBROUTINE bdy_dta_init  ***
419      !!                   
420      !! ** Purpose :   Initialise arrays for reading of external data
421      !!                for open boundary conditions
422      !!
423      !! ** Method  :   
424      !!               
425      !!----------------------------------------------------------------------
426      USE dynspg_oce, ONLY: lk_dynspg_ts
427      !!
428      INTEGER     ::  ib_bdy, jfld, jstart, jend, ierror  ! local indices
429      INTEGER      ::   ios                               ! Local integer output status for namelist read
430      !!
431      CHARACTER(len=100)                     ::   cn_dir        ! Root directory for location of data files
432      CHARACTER(len=100), DIMENSION(nb_bdy)  ::   cn_dir_array  ! Root directory for location of data files
433      LOGICAL                                ::   ln_full_vel   ! =T => full velocities in 3D boundary data
434                                                                ! =F => baroclinic velocities in 3D boundary data
435      INTEGER                                ::   ilen_global   ! Max length required for global bdy dta arrays
436      INTEGER, ALLOCATABLE, DIMENSION(:)     ::   ilen1, ilen3  ! size of 1st and 3rd dimensions of local arrays
437      INTEGER, ALLOCATABLE, DIMENSION(:)     ::   ibdy           ! bdy set for a particular jfld
438      INTEGER, ALLOCATABLE, DIMENSION(:)     ::   igrid         ! index for grid type (1,2,3 = T,U,V)
439      INTEGER, POINTER, DIMENSION(:)         ::   nblen, nblenrim  ! short cuts
440      TYPE(OBC_DATA), POINTER                ::   dta           ! short cut
441#if defined key_lim3
442      INTEGER, DIMENSION(3) ::   zdimsz   ! number of elements in each of the 4 dimensions (i.e. i,j,t,ice-cat) for an array
443      INTEGER               ::   zndims   ! number of dimensions in an array (i.e. 3 = wo ice cat; 4 = w ice cat)
444      INTEGER               ::   inum,id1 ! local integer
445#endif
446      TYPE(FLD_N), ALLOCATABLE, DIMENSION(:) ::   blf_i         !  array of namelist information structures
447      TYPE(FLD_N) ::   bn_tem, bn_sal, bn_u3d, bn_v3d   !
448      TYPE(FLD_N) ::   bn_ssh, bn_u2d, bn_v2d           ! informations about the fields to be read
449#if defined key_lim2
450      TYPE(FLD_N) ::   bn_frld, bn_hicif, bn_hsnif      !
451#elif defined key_lim3
452      TYPE(FLD_N) ::   bn_a_i, bn_ht_i, bn_ht_s     
453#endif
454      NAMELIST/nambdy_dta/ cn_dir, bn_tem, bn_sal, bn_u3d, bn_v3d, bn_ssh, bn_u2d, bn_v2d 
455#if defined key_lim2
456      NAMELIST/nambdy_dta/ bn_frld, bn_hicif, bn_hsnif
457#elif defined key_lim3
458      NAMELIST/nambdy_dta/ bn_a_i, bn_ht_i, bn_ht_s
459#endif
460      NAMELIST/nambdy_dta/ ln_full_vel
461      !!---------------------------------------------------------------------------
462
463      IF( nn_timing == 1 ) CALL timing_start('bdy_dta_init')
464
465      IF(lwp) WRITE(numout,*)
466      IF(lwp) WRITE(numout,*) 'bdy_dta_ini : initialization of data at the open boundaries'
467      IF(lwp) WRITE(numout,*) '~~~~~~~~~~'
468      IF(lwp) WRITE(numout,*) ''
469
470      ! Set nn_dta
471      DO ib_bdy = 1, nb_bdy
472         nn_dta(ib_bdy) = MAX(  nn_dyn2d_dta(ib_bdy)       &
473                               ,nn_dyn3d_dta(ib_bdy)       &
474                               ,nn_tra_dta(ib_bdy)         &
475#if ( defined key_lim2 || defined key_lim3 )
476                              ,nn_ice_lim_dta(ib_bdy)    &
477#endif
478                              )
479         IF(nn_dta(ib_bdy) .gt. 1) nn_dta(ib_bdy) = 1
480      END DO
481
482      ! Work out upper bound of how many fields there are to read in and allocate arrays
483      ! ---------------------------------------------------------------------------
484      ALLOCATE( nb_bdy_fld(nb_bdy) )
485      nb_bdy_fld(:) = 0
486      DO ib_bdy = 1, nb_bdy         
487         IF( cn_dyn2d(ib_bdy) /= 'none' .and. ( nn_dyn2d_dta(ib_bdy) .eq. 1 .or. nn_dyn2d_dta(ib_bdy) .eq. 3 ) ) THEN
488            nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 3
489         ENDIF
490         IF( cn_dyn3d(ib_bdy) /= 'none' .and. nn_dyn3d_dta(ib_bdy) .eq. 1 ) THEN
491            nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 2
492         ENDIF
493         IF( cn_tra(ib_bdy) /= 'none' .and. nn_tra_dta(ib_bdy) .eq. 1  ) THEN
494            nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 2
495         ENDIF
496#if ( defined key_lim2 || defined key_lim3 )
497         IF( cn_ice_lim(ib_bdy) /= 'none' .and. nn_ice_lim_dta(ib_bdy) .eq. 1  ) THEN
498            nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 3
499         ENDIF
500#endif               
501         IF(lwp) WRITE(numout,*) 'Maximum number of files to open =',nb_bdy_fld(ib_bdy)
502      ENDDO           
503
504      nb_bdy_fld_sum = SUM( nb_bdy_fld )
505
506      ALLOCATE( bf(nb_bdy_fld_sum), STAT=ierror )
507      IF( ierror > 0 ) THEN   
508         CALL ctl_stop( 'bdy_dta: unable to allocate bf structure' )   ;   RETURN 
509      ENDIF
510      ALLOCATE( blf_i(nb_bdy_fld_sum), STAT=ierror )
511      IF( ierror > 0 ) THEN   
512         CALL ctl_stop( 'bdy_dta: unable to allocate blf_i structure' )   ;   RETURN 
513      ENDIF
514      ALLOCATE( nbmap_ptr(nb_bdy_fld_sum), STAT=ierror )
515      IF( ierror > 0 ) THEN   
516         CALL ctl_stop( 'bdy_dta: unable to allocate nbmap_ptr structure' )   ;   RETURN 
517      ENDIF
518      ALLOCATE( ilen1(nb_bdy_fld_sum), ilen3(nb_bdy_fld_sum) ) 
519      ALLOCATE( ibdy(nb_bdy_fld_sum) ) 
520      ALLOCATE( igrid(nb_bdy_fld_sum) ) 
521
522      ! Read namelists
523      ! --------------
524      REWIND(numnam_ref)
525      REWIND(numnam_cfg)
526      jfld = 0 
527      DO ib_bdy = 1, nb_bdy         
528         IF( nn_dta(ib_bdy) .eq. 1 ) THEN
529            READ  ( numnam_ref, nambdy_dta, IOSTAT = ios, ERR = 901)
530901         IF( ios /= 0 ) CALL ctl_nam ( ios , 'nambdy_dta in reference namelist', lwp )
531
532            READ  ( numnam_cfg, nambdy_dta, IOSTAT = ios, ERR = 902 )
533902         IF( ios /= 0 ) CALL ctl_nam ( ios , 'nambdy_dta in configuration namelist', lwp )
534            WRITE ( numond, nambdy_dta )
535
536            cn_dir_array(ib_bdy) = cn_dir
537            ln_full_vel_array(ib_bdy) = ln_full_vel
538
539            nblen => idx_bdy(ib_bdy)%nblen
540            nblenrim => idx_bdy(ib_bdy)%nblenrim
541            dta => dta_bdy(ib_bdy)
542            dta%nread(2) = 0
543
544            ! Only read in necessary fields for this set.
545            ! Important that barotropic variables come first.
546            IF( nn_dyn2d_dta(ib_bdy) .eq. 1 .or. nn_dyn2d_dta(ib_bdy) .eq. 3 ) THEN
547
548               IF( dta%ll_ssh ) THEN
549                  if(lwp) write(numout,*) '++++++ reading in ssh field'
550                  jfld = jfld + 1
551                  blf_i(jfld) = bn_ssh
552                  ibdy(jfld) = ib_bdy
553                  igrid(jfld) = 1
554                  ilen1(jfld) = nblen(igrid(jfld))
555                  ilen3(jfld) = 1
556                  dta%nread(2) = dta%nread(2) + 1
557               ENDIF
558
559               IF( dta%ll_u2d .and. .not. ln_full_vel_array(ib_bdy) ) THEN
560                  if(lwp) write(numout,*) '++++++ reading in u2d field'
561                  jfld = jfld + 1
562                  blf_i(jfld) = bn_u2d
563                  ibdy(jfld) = ib_bdy
564                  igrid(jfld) = 2
565                  ilen1(jfld) = nblen(igrid(jfld))
566                  ilen3(jfld) = 1
567                  dta%nread(2) = dta%nread(2) + 1
568               ENDIF
569
570               IF( dta%ll_v2d .and. .not. ln_full_vel_array(ib_bdy) ) THEN
571                  if(lwp) write(numout,*) '++++++ reading in v2d field'
572                  jfld = jfld + 1
573                  blf_i(jfld) = bn_v2d
574                  ibdy(jfld) = ib_bdy
575                  igrid(jfld) = 3
576                  ilen1(jfld) = nblen(igrid(jfld))
577                  ilen3(jfld) = 1
578                  dta%nread(2) = dta%nread(2) + 1
579               ENDIF
580
581            ENDIF
582
583            ! read 3D velocities if baroclinic velocities require OR if
584            ! barotropic velocities required and ln_full_vel set to .true.
585            IF( nn_dyn3d_dta(ib_bdy) .eq. 1 .or. &
586           &  ( ln_full_vel_array(ib_bdy) .and. ( nn_dyn2d_dta(ib_bdy) .eq. 1 .or. nn_dyn2d_dta(ib_bdy) .eq. 3 ) ) ) THEN
587
588               IF( dta%ll_u3d .or. ( ln_full_vel_array(ib_bdy) .and. dta%ll_u2d ) ) THEN
589                  if(lwp) write(numout,*) '++++++ reading in u3d field'
590                  jfld = jfld + 1
591                  blf_i(jfld) = bn_u3d
592                  ibdy(jfld) = ib_bdy
593                  igrid(jfld) = 2
594                  ilen1(jfld) = nblen(igrid(jfld))
595                  ilen3(jfld) = jpk
596                  IF( ln_full_vel_array(ib_bdy) .and. dta%ll_u2d ) dta%nread(2) = dta%nread(2) + 1
597               ENDIF
598
599               IF( dta%ll_v3d .or. ( ln_full_vel_array(ib_bdy) .and. dta%ll_v2d ) ) THEN
600                  if(lwp) write(numout,*) '++++++ reading in v3d field'
601                  jfld = jfld + 1
602                  blf_i(jfld) = bn_v3d
603                  ibdy(jfld) = ib_bdy
604                  igrid(jfld) = 3
605                  ilen1(jfld) = nblen(igrid(jfld))
606                  ilen3(jfld) = jpk
607                  IF( ln_full_vel_array(ib_bdy) .and. dta%ll_v2d ) dta%nread(2) = dta%nread(2) + 1
608               ENDIF
609
610            ENDIF
611
612            ! temperature and salinity
613            IF( nn_tra_dta(ib_bdy) .eq. 1 ) THEN
614
615               IF( dta%ll_tem ) THEN
616                  if(lwp) write(numout,*) '++++++ reading in tem field'
617                  jfld = jfld + 1
618                  blf_i(jfld) = bn_tem
619                  ibdy(jfld) = ib_bdy
620                  igrid(jfld) = 1
621                  ilen1(jfld) = nblen(igrid(jfld))
622                  ilen3(jfld) = jpk
623               ENDIF
624
625               IF( dta%ll_sal ) THEN
626                  if(lwp) write(numout,*) '++++++ reading in sal field'
627                  jfld = jfld + 1
628                  blf_i(jfld) = bn_sal
629                  ibdy(jfld) = ib_bdy
630                  igrid(jfld) = 1
631                  ilen1(jfld) = nblen(igrid(jfld))
632                  ilen3(jfld) = jpk
633               ENDIF
634
635            ENDIF
636
637#if defined key_lim2
638            ! sea ice
639            IF( nn_ice_lim_dta(ib_bdy) .eq. 1 ) THEN
640
641               IF( dta%ll_frld ) THEN
642                  jfld = jfld + 1
643                  blf_i(jfld) = bn_frld
644                  ibdy(jfld) = ib_bdy
645                  igrid(jfld) = 1
646                  ilen1(jfld) = nblen(igrid(jfld))
647                  ilen3(jfld) = 1
648               ENDIF
649
650               IF( dta%ll_hicif ) THEN
651                  jfld = jfld + 1
652                  blf_i(jfld) = bn_hicif
653                  ibdy(jfld) = ib_bdy
654                  igrid(jfld) = 1
655                  ilen1(jfld) = nblen(igrid(jfld))
656                  ilen3(jfld) = 1
657               ENDIF
658
659               IF( dta%ll_hsnif ) THEN
660                  jfld = jfld + 1
661                  blf_i(jfld) = bn_hsnif
662                  ibdy(jfld) = ib_bdy
663                  igrid(jfld) = 1
664                  ilen1(jfld) = nblen(igrid(jfld))
665                  ilen3(jfld) = 1
666               ENDIF
667
668            ENDIF
669#elif defined key_lim3
670            ! sea ice
671            IF( nn_ice_lim_dta(ib_bdy) .eq. 1 ) THEN
672
673               ! Test for types of ice input (lim2 or lim3)
674               CALL iom_open ( bn_a_i%clname, inum )
675               id1 = iom_varid ( inum, bn_a_i%clvar, kdimsz=zdimsz, kndims=zndims, ldstop = .FALSE. )
676               CALL iom_close ( inum )
677               !CALL fld_clopn ( bn_a_i, nyear, nmonth, nday, ldstop=.TRUE. )
678               !CALL iom_open ( bn_a_i %clname, inum )
679               !id1 = iom_varid ( bn_a_i%num, bn_a_i%clvar, kdimsz=zdimsz, kndims=zndims, ldstop = .FALSE. )
680                IF ( zndims == 4 ) THEN
681                 ll_bdylim3 = .TRUE.   ! lim3 input
682               ELSE
683                 ll_bdylim3 = .FALSE.  ! lim2 input     
684               ENDIF
685               ! End test
686
687               IF( dta%ll_a_i ) THEN
688                  jfld = jfld + 1
689                  blf_i(jfld) = bn_a_i
690                  ibdy(jfld) = ib_bdy
691                  igrid(jfld) = 1
692                  ilen1(jfld) = nblen(igrid(jfld))
693                  IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF
694               ENDIF
695
696               IF( dta%ll_ht_i ) THEN
697                  jfld = jfld + 1
698                  blf_i(jfld) = bn_ht_i
699                  ibdy(jfld) = ib_bdy
700                  igrid(jfld) = 1
701                  ilen1(jfld) = nblen(igrid(jfld))
702                  IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF
703               ENDIF
704
705               IF( dta%ll_ht_s ) THEN
706                  jfld = jfld + 1
707                   blf_i(jfld) = bn_ht_s
708                  ibdy(jfld) = ib_bdy
709                  igrid(jfld) = 1
710                  ilen1(jfld) = nblen(igrid(jfld))
711                  IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF
712               ENDIF
713
714            ENDIF
715#endif
716            ! Recalculate field counts
717            !-------------------------
718            IF( ib_bdy .eq. 1 ) THEN
719               nb_bdy_fld_sum = 0
720               nb_bdy_fld(ib_bdy) = jfld
721               nb_bdy_fld_sum     = jfld             
722            ELSE
723               nb_bdy_fld(ib_bdy) = jfld - nb_bdy_fld_sum
724               nb_bdy_fld_sum = nb_bdy_fld_sum + nb_bdy_fld(ib_bdy)
725            ENDIF
726
727            dta%nread(1) = nb_bdy_fld(ib_bdy)
728
729         ENDIF ! nn_dta .eq. 1
730      ENDDO ! ib_bdy
731
732      DO jfld = 1, nb_bdy_fld_sum
733         ALLOCATE( bf(jfld)%fnow(ilen1(jfld),1,ilen3(jfld)) )
734         IF( blf_i(jfld)%ln_tint ) ALLOCATE( bf(jfld)%fdta(ilen1(jfld),1,ilen3(jfld),2) )
735         nbmap_ptr(jfld)%ptr => idx_bdy(ibdy(jfld))%nbmap(:,igrid(jfld))
736      ENDDO
737
738      ! fill bf with blf_i and control print
739      !-------------------------------------
740      jstart = 1
741      DO ib_bdy = 1, nb_bdy
742         jend = nb_bdy_fld(ib_bdy) 
743         CALL fld_fill( bf(jstart:jend), blf_i(jstart:jend), cn_dir_array(ib_bdy), 'bdy_dta',   &
744         &              'open boundary conditions', 'nambdy_dta' )
745         jstart = jend + 1
746      ENDDO
747
748      DO jfld = 1, nb_bdy_fld_sum
749               bf(jfld)%igrd = igrid(jfld) 
750               bf(jfld)%ibdy = ibdy(jfld) 
751      ENDDO
752
753      ! Initialise local boundary data arrays
754      ! nn_xxx_dta=0 : allocate space - will be filled from initial conditions later
755      ! nn_xxx_dta=1 : point to "fnow" arrays
756      !-------------------------------------
757
758      jfld = 0
759      DO ib_bdy=1, nb_bdy
760
761         nblen => idx_bdy(ib_bdy)%nblen
762         dta => dta_bdy(ib_bdy)
763
764         if(lwp) then
765            write(numout,*) '++++++ dta%ll_ssh = ',dta%ll_ssh
766            write(numout,*) '++++++ dta%ll_u2d = ',dta%ll_u2d
767            write(numout,*) '++++++ dta%ll_v2d = ',dta%ll_v2d
768            write(numout,*) '++++++ dta%ll_u3d = ',dta%ll_u3d
769            write(numout,*) '++++++ dta%ll_v3d = ',dta%ll_v3d
770            write(numout,*) '++++++ dta%ll_tem = ',dta%ll_tem
771            write(numout,*) '++++++ dta%ll_sal = ',dta%ll_sal
772         endif
773
774         IF ( nn_dyn2d_dta(ib_bdy) .eq. 0 .or. nn_dyn2d_dta(ib_bdy) .eq. 2 ) THEN
775            if(lwp) write(numout,*) '++++++ dta%ssh/u2d/u3d allocated space'
776            IF( dta%ll_ssh ) ALLOCATE( dta%ssh(nblen(1)) )
777            IF( dta%ll_u2d ) ALLOCATE( dta%u2d(nblen(2)) )
778            IF( dta%ll_v2d ) ALLOCATE( dta%v2d(nblen(3)) )
779         ENDIF
780         IF ( nn_dyn2d_dta(ib_bdy) .eq. 1 .or. nn_dyn2d_dta(ib_bdy) .eq. 3 ) THEN
781            IF( dta%ll_ssh ) THEN
782               if(lwp) write(numout,*) '++++++ dta%ssh pointing to fnow'
783               jfld = jfld + 1
784               dta%ssh => bf(jfld)%fnow(:,1,1)
785            ENDIF
786            IF ( dta%ll_u2d ) THEN
787               IF ( ln_full_vel_array(ib_bdy) ) THEN
788                  if(lwp) write(numout,*) '++++++ dta%u2d allocated space'
789                  ALLOCATE( dta%u2d(nblen(2)) )
790               ELSE
791                  if(lwp) write(numout,*) '++++++ dta%u2d pointing to fnow'
792                  jfld = jfld + 1
793                  dta%u2d => bf(jfld)%fnow(:,1,1)
794               ENDIF
795            ENDIF
796            IF ( dta%ll_v2d ) THEN
797               IF ( ln_full_vel_array(ib_bdy) ) THEN
798                  if(lwp) write(numout,*) '++++++ dta%v2d allocated space'
799                  ALLOCATE( dta%v2d(nblen(3)) )
800               ELSE
801                  if(lwp) write(numout,*) '++++++ dta%v2d pointing to fnow'
802                  jfld = jfld + 1
803                  dta%v2d => bf(jfld)%fnow(:,1,1)
804               ENDIF
805            ENDIF
806         ENDIF
807
808         IF ( nn_dyn3d_dta(ib_bdy) .eq. 0 ) THEN
809            if(lwp) write(numout,*) '++++++ dta%u3d/v3d allocated space'
810            IF( dta%ll_u3d ) ALLOCATE( dta_bdy(ib_bdy)%u3d(nblen(2),jpk) )
811            IF( dta%ll_v3d ) ALLOCATE( dta_bdy(ib_bdy)%v3d(nblen(3),jpk) )
812         ENDIF
813         IF ( nn_dyn3d_dta(ib_bdy) .eq. 1 .or. &
814           &  ( ln_full_vel_array(ib_bdy) .and. ( nn_dyn2d_dta(ib_bdy) .eq. 1 .or. nn_dyn2d_dta(ib_bdy) .eq. 3 ) ) ) THEN
815            IF ( dta%ll_u3d .or. ( ln_full_vel_array(ib_bdy) .and. dta%ll_u2d ) ) THEN
816               if(lwp) write(numout,*) '++++++ dta%u3d pointing to fnow'
817               jfld = jfld + 1
818               dta_bdy(ib_bdy)%u3d => bf(jfld)%fnow(:,1,:)
819            ENDIF
820            IF ( dta%ll_v3d .or. ( ln_full_vel_array(ib_bdy) .and. dta%ll_v2d ) ) THEN
821               if(lwp) write(numout,*) '++++++ dta%v3d pointing to fnow'
822               jfld = jfld + 1
823               dta_bdy(ib_bdy)%v3d => bf(jfld)%fnow(:,1,:)
824            ENDIF
825         ENDIF
826
827         IF( nn_tra_dta(ib_bdy) .eq. 0 ) THEN
828            if(lwp) write(numout,*) '++++++ dta%tem/sal allocated space'
829            IF( dta%ll_tem ) ALLOCATE( dta_bdy(ib_bdy)%tem(nblen(1),jpk) )
830            IF( dta%ll_sal ) ALLOCATE( dta_bdy(ib_bdy)%sal(nblen(1),jpk) )
831         ELSE
832            IF( dta%ll_tem ) THEN
833               if(lwp) write(numout,*) '++++++ dta%tem pointing to fnow'
834               jfld = jfld + 1
835               dta_bdy(ib_bdy)%tem => bf(jfld)%fnow(:,1,:)
836            ENDIF
837            IF( dta%ll_sal ) THEN
838               if(lwp) write(numout,*) '++++++ dta%sal pointing to fnow'
839               jfld = jfld + 1
840               dta_bdy(ib_bdy)%sal => bf(jfld)%fnow(:,1,:)
841            ENDIF
842         ENDIF
843
844#if defined key_lim2
845         IF (cn_ice_lim(ib_bdy) /= 'none') THEN
846            IF( nn_ice_lim_dta(ib_bdy) .eq. 0 ) THEN
847               ALLOCATE( dta_bdy(ib_bdy)%frld(nblen(1)) )
848               ALLOCATE( dta_bdy(ib_bdy)%hicif(nblen(1)) )
849               ALLOCATE( dta_bdy(ib_bdy)%hsnif(nblen(1)) )
850            ELSE
851               jfld = jfld + 1
852               dta_bdy(ib_bdy)%frld  => bf(jfld)%fnow(:,1,1)
853               jfld = jfld + 1
854               dta_bdy(ib_bdy)%hicif => bf(jfld)%fnow(:,1,1)
855               jfld = jfld + 1
856               dta_bdy(ib_bdy)%hsnif => bf(jfld)%fnow(:,1,1)
857            ENDIF
858         ENDIF
859#elif defined key_lim3
860         IF (cn_ice_lim(ib_bdy) /= 'none') THEN
861            IF( nn_ice_lim_dta(ib_bdy) .eq. 0 ) THEN
862               ALLOCATE( dta_bdy(ib_bdy)%a_i (nblen(1),jpl) )
863               ALLOCATE( dta_bdy(ib_bdy)%ht_i(nblen(1),jpl) )
864               ALLOCATE( dta_bdy(ib_bdy)%ht_s(nblen(1),jpl) )
865            ELSE
866               IF ( ll_bdylim3 ) THEN ! case input is lim3 type
867                  jfld = jfld + 1
868                  dta_bdy(ib_bdy)%a_i  => bf(jfld)%fnow(:,1,:)
869                  jfld = jfld + 1
870                  dta_bdy(ib_bdy)%ht_i => bf(jfld)%fnow(:,1,:)
871                  jfld = jfld + 1
872                  dta_bdy(ib_bdy)%ht_s => bf(jfld)%fnow(:,1,:)
873               ELSE ! case input is lim2 type
874                  jfld_ai  = jfld + 1
875                  jfld_hti = jfld + 2
876                  jfld_hts = jfld + 3
877                  jfld     = jfld + 3
878                  ALLOCATE( dta_bdy(ib_bdy)%a_i (nblen(1),jpl) )
879                  ALLOCATE( dta_bdy(ib_bdy)%ht_i(nblen(1),jpl) )
880                  ALLOCATE( dta_bdy(ib_bdy)%ht_s(nblen(1),jpl) )
881                  dta_bdy(ib_bdy)%a_i (:,:) = 0.0
882                  dta_bdy(ib_bdy)%ht_i(:,:) = 0.0
883                  dta_bdy(ib_bdy)%ht_s(:,:) = 0.0
884               ENDIF
885
886            ENDIF
887         ENDIF
888#endif
889
890      ENDDO ! ib_bdy
891
892      IF( nn_timing == 1 ) CALL timing_stop('bdy_dta_init')
893
894      END SUBROUTINE bdy_dta_init
895
896#else
897   !!----------------------------------------------------------------------
898   !!   Dummy module                   NO Open Boundary Conditions
899   !!----------------------------------------------------------------------
900CONTAINS
901   SUBROUTINE bdy_dta( kt, jit, time_offset ) ! Empty routine
902      INTEGER, INTENT( in )           ::   kt   
903      INTEGER, INTENT( in ), OPTIONAL ::   jit   
904      INTEGER, INTENT( in ), OPTIONAL ::   time_offset
905      WRITE(*,*) 'bdy_dta: You should not have seen this print! error?', kt
906   END SUBROUTINE bdy_dta
907   SUBROUTINE bdy_dta_init()                  ! Empty routine
908      WRITE(*,*) 'bdy_dta_init: You should not have seen this print! error?'
909   END SUBROUTINE bdy_dta_init
910#endif
911
912   !!==============================================================================
913END MODULE bdydta
914
915
Note: See TracBrowser for help on using the repository browser.