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/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/BDY – NEMO

source: branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/BDY/bdydta.F90 @ 4333

Last change on this file since 4333 was 4333, checked in by clem, 10 years ago

remove remaining bugs in LIM3, so that it can run in both regional and global config

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