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.
Changeset 11223 for NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/OCE/BDY/bdydta.F90 – NEMO

Ignore:
Timestamp:
2019-07-05T20:53:14+02:00 (5 years ago)
Author:
smasson
Message:

dev_r10984_HPC-13 : cleaning of rewriting of bdydta, see #2285

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10984_HPC-13_IRRMANN_BDY_optimization/src/OCE/BDY/bdydta.F90

    r10951 r11223  
    4343   PUBLIC   bdy_dta_init     ! routine called by nemogcm.F90 
    4444 
    45    INTEGER, ALLOCATABLE, DIMENSION(:)   ::   nb_bdy_fld        ! Number of fields to update for each boundary set. 
    46    INTEGER                              ::   nb_bdy_fld_sum    ! Total number of fields to update for all boundary sets. 
    47    LOGICAL,           DIMENSION(jp_bdy) ::   ln_full_vel_array ! =T => full velocities in 3D boundary conditions 
    48                                                                ! =F => baroclinic velocities in 3D boundary conditions 
     45   INTEGER , PARAMETER ::   jpbdyfld  = 10    ! maximum number of files to read  
     46   INTEGER , PARAMETER ::   jp_bdyssh = 1     !  
     47   INTEGER , PARAMETER ::   jp_bdyu2d = 2     !  
     48   INTEGER , PARAMETER ::   jp_bdyv2d = 3     ! 
     49   INTEGER , PARAMETER ::   jp_bdyu3d = 4     ! 
     50   INTEGER , PARAMETER ::   jp_bdyv3d = 5     ! 
     51   INTEGER , PARAMETER ::   jp_bdytem = 6     !  
     52   INTEGER , PARAMETER ::   jp_bdysal = 7     !  
     53   INTEGER , PARAMETER ::   jp_bdya_i = 8     !  
     54   INTEGER , PARAMETER ::   jp_bdyh_i = 9     !  
     55   INTEGER , PARAMETER ::   jp_bdyh_S = 10    !  
     56                                                              ! =F => baroclinic velocities in 3D boundary conditions 
    4957!$AGRIF_DO_NOT_TREAT 
    50    TYPE(FLD), PUBLIC, ALLOCATABLE, DIMENSION(:), TARGET ::   bf        ! structure of input fields (file informations, fields read) 
     58   TYPE(FLD), PUBLIC, ALLOCATABLE, DIMENSION(:,:), TARGET ::   bf   ! structure of input fields (file informations, fields read) 
    5159!$AGRIF_END_DO_NOT_TREAT 
    52    TYPE(MAP_POINTER), ALLOCATABLE, DIMENSION(:) :: nbmap_ptr   ! array of pointers to nbmap 
    53  
    54 #if defined key_si3 
    55    INTEGER ::   nice_cat                      ! number of categories in the input file 
    56    INTEGER ::   jfld_hti, jfld_hts, jfld_ai   ! indices of ice thickness, snow thickness and concentration in bf structure 
    57    INTEGER, DIMENSION(jp_bdy) :: jfld_htit, jfld_htst, jfld_ait 
    58 #endif 
    5960 
    6061   !!---------------------------------------------------------------------- 
     
    6566CONTAINS 
    6667 
    67       SUBROUTINE bdy_dta( kt, jit, time_offset ) 
     68   SUBROUTINE bdy_dta( kt, kit, kt_offset ) 
    6869      !!---------------------------------------------------------------------- 
    6970      !!                   ***  SUBROUTINE bdy_dta  *** 
     
    7576      !!---------------------------------------------------------------------- 
    7677      INTEGER, INTENT(in)           ::   kt           ! ocean time-step index  
    77       INTEGER, INTENT(in), OPTIONAL ::   jit          ! subcycle time-step index (for timesplitting option) 
    78       INTEGER, INTENT(in), OPTIONAL ::   time_offset  ! time offset in units of timesteps. NB. if jit 
     78      INTEGER, INTENT(in), OPTIONAL ::   kit          ! subcycle time-step index (for timesplitting option) 
     79      INTEGER, INTENT(in), OPTIONAL ::   kt_offset    ! time offset in units of timesteps. NB. if kit 
    7980      !                                               ! is present then units = subcycle timesteps. 
    80       !                                               ! time_offset = 0 => get data at "now" time level 
    81       !                                               ! time_offset = -1 => get data at "before" time level 
    82       !                                               ! time_offset = +1 => get data at "after" time level 
     81      !                                               ! kt_offset = 0 => get data at "now" time level 
     82      !                                               ! kt_offset = -1 => get data at "before" time level 
     83      !                                               ! kt_offset = +1 => get data at "after" time level 
    8384      !                                               ! etc. 
    8485      ! 
    85       INTEGER ::  jbdy, jfld, jstart, jend, ib, jl  ! dummy loop indices 
    86       INTEGER ::  ii, ij, ik, igrd                  ! local integers 
    87       INTEGER,          DIMENSION(jpbgrd) ::   ilen1  
    88       INTEGER, POINTER, DIMENSION(:)      ::   nblen, nblenrim  ! short cuts 
    89       TYPE(OBC_DATA), POINTER             ::   dta              ! short cut 
     86      INTEGER ::  jbdy, jfld, jstart, jend, ib, jl    ! dummy loop indices 
     87      INTEGER ::  ii, ij, ik, igrd, ipl               ! local integers 
     88      INTEGER,   DIMENSION(jpbgrd)     ::   ilen1  
     89      INTEGER,   DIMENSION(:), POINTER ::   nblen, nblenrim  ! short cuts 
     90      TYPE(OBC_DATA)         , POINTER ::   dta_alias        ! short cut 
     91      TYPE(FLD), DIMENSION(:), POINTER ::   bf_alias 
    9092      !!--------------------------------------------------------------------------- 
    9193      ! 
     
    9496      ! Initialise data arrays once for all from initial conditions where required 
    9597      !--------------------------------------------------------------------------- 
    96       IF( kt == nit000 .AND. .NOT.PRESENT(jit) ) THEN 
     98      IF( kt == nit000 .AND. .NOT.PRESENT(kit) ) THEN 
    9799 
    98100         ! Calculate depth-mean currents 
    99101         !----------------------------- 
    100           
     102 
    101103         DO jbdy = 1, nb_bdy 
    102104            ! 
    103105            nblen    => idx_bdy(jbdy)%nblen 
    104106            nblenrim => idx_bdy(jbdy)%nblenrim 
    105             dta      => dta_bdy(jbdy) 
    106107            ! 
    107108            IF( nn_dyn2d_dta(jbdy) == 0 ) THEN  
    108109               ilen1(:) = nblen(:) 
    109                IF( dta%ll_ssh ) THEN  
     110               IF( dta_bdy(jbdy)%lneed_ssh ) THEN  
    110111                  igrd = 1 
    111112                  DO ib = 1, ilen1(igrd) 
     
    113114                     ij = idx_bdy(jbdy)%nbj(ib,igrd) 
    114115                     dta_bdy(jbdy)%ssh(ib) = sshn(ii,ij) * tmask(ii,ij,1)          
    115                   END DO  
    116                ENDIF 
    117                IF( dta%ll_u2d ) THEN  
     116                  END DO 
     117               ENDIF 
     118               IF( dta_bdy(jbdy)%lneed_dyn2d) THEN  
    118119                  igrd = 2 
    119120                  DO ib = 1, ilen1(igrd) 
     
    121122                     ij = idx_bdy(jbdy)%nbj(ib,igrd) 
    122123                     dta_bdy(jbdy)%u2d(ib) = un_b(ii,ij) * umask(ii,ij,1)          
    123                   END DO  
    124                ENDIF 
    125                IF( dta%ll_v2d ) THEN  
     124                  END DO 
    126125                  igrd = 3 
    127126                  DO ib = 1, ilen1(igrd) 
     
    129128                     ij = idx_bdy(jbdy)%nbj(ib,igrd) 
    130129                     dta_bdy(jbdy)%v2d(ib) = vn_b(ii,ij) * vmask(ii,ij,1)          
    131                   END DO  
     130                  END DO 
    132131               ENDIF 
    133132            ENDIF 
     
    135134            IF( nn_dyn3d_dta(jbdy) == 0 ) THEN  
    136135               ilen1(:) = nblen(:) 
    137                IF( dta%ll_u3d ) THEN  
     136               IF( dta_bdy(jbdy)%lneed_dyn3d ) THEN  
    138137                  igrd = 2  
    139138                  DO ib = 1, ilen1(igrd) 
     
    143142                        dta_bdy(jbdy)%u3d(ib,ik) =  ( un(ii,ij,ik) - un_b(ii,ij) ) * umask(ii,ij,ik)          
    144143                     END DO 
    145                   END DO  
    146                ENDIF 
    147                IF( dta%ll_v3d ) THEN  
     144                  END DO 
    148145                  igrd = 3  
    149146                  DO ib = 1, ilen1(igrd) 
     
    152149                        ij = idx_bdy(jbdy)%nbj(ib,igrd) 
    153150                        dta_bdy(jbdy)%v3d(ib,ik) =  ( vn(ii,ij,ik) - vn_b(ii,ij) ) * vmask(ii,ij,ik)          
    154                         END DO 
    155                   END DO  
     151                     END DO 
     152                  END DO 
    156153               ENDIF 
    157154            ENDIF 
     
    159156            IF( nn_tra_dta(jbdy) == 0 ) THEN  
    160157               ilen1(:) = nblen(:) 
    161                IF( dta%ll_tem ) THEN 
     158               IF( dta_bdy(jbdy)%lneed_tra ) THEN 
    162159                  igrd = 1  
    163160                  DO ib = 1, ilen1(igrd) 
     
    165162                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
    166163                        ij = idx_bdy(jbdy)%nbj(ib,igrd) 
    167                         dta_bdy(jbdy)%tem(ib,ik) = tsn(ii,ij,ik,jp_tem) * tmask(ii,ij,ik)          
     164                        dta_bdy(jbdy)%tem(ib,ik) = tsn(ii,ij,ik,jp_bdytem) * tmask(ii,ij,ik)          
     165                        dta_bdy(jbdy)%sal(ib,ik) = tsn(ii,ij,ik,jp_bdysal) * tmask(ii,ij,ik)          
    168166                     END DO 
    169                   END DO  
    170                ENDIF 
    171                IF( dta%ll_sal ) THEN 
    172                   igrd = 1  
    173                   DO ib = 1, ilen1(igrd) 
    174                      DO ik = 1, jpkm1 
    175                         ii = idx_bdy(jbdy)%nbi(ib,igrd) 
    176                         ij = idx_bdy(jbdy)%nbj(ib,igrd) 
    177                         dta_bdy(jbdy)%sal(ib,ik) = tsn(ii,ij,ik,jp_sal) * tmask(ii,ij,ik)          
    178                      END DO 
    179                   END DO  
     167                  END DO 
    180168               ENDIF 
    181169            ENDIF 
     
    184172            IF( nn_ice_dta(jbdy) == 0 ) THEN    ! set ice to initial values 
    185173               ilen1(:) = nblen(:) 
    186                IF( dta%ll_a_i ) THEN 
     174               IF( dta_bdy(jbdy)%lneed_ice ) THEN 
    187175                  igrd = 1    
    188176                  DO jl = 1, jpl 
     
    191179                        ij = idx_bdy(jbdy)%nbj(ib,igrd) 
    192180                        dta_bdy(jbdy)%a_i (ib,jl) =  a_i(ii,ij,jl) * tmask(ii,ij,1)  
    193                      END DO 
    194                   END DO 
    195                ENDIF 
    196                IF( dta%ll_h_i ) THEN 
    197                   igrd = 1    
    198                   DO jl = 1, jpl 
    199                      DO ib = 1, ilen1(igrd) 
    200                         ii = idx_bdy(jbdy)%nbi(ib,igrd) 
    201                         ij = idx_bdy(jbdy)%nbj(ib,igrd) 
    202181                        dta_bdy(jbdy)%h_i (ib,jl) =  h_i(ii,ij,jl) * tmask(ii,ij,1)  
    203                      END DO 
    204                   END DO 
    205                ENDIF 
    206                IF( dta%ll_h_s ) THEN 
    207                   igrd = 1    
    208                   DO jl = 1, jpl 
    209                      DO ib = 1, ilen1(igrd) 
    210                         ii = idx_bdy(jbdy)%nbi(ib,igrd) 
    211                         ij = idx_bdy(jbdy)%nbj(ib,igrd) 
    212182                        dta_bdy(jbdy)%h_s (ib,jl) =  h_s(ii,ij,jl) * tmask(ii,ij,1)  
    213183                     END DO 
     
    222192      ! update external data from files 
    223193      !-------------------------------- 
    224       
    225       jstart = 1 
    226       DO jbdy = 1, nb_bdy    
    227          dta => dta_bdy(jbdy) 
    228          IF( nn_dta(jbdy) == 1 ) THEN ! skip this bit if no external data required 
    229        
    230             IF( PRESENT(jit) ) THEN 
    231                ! Update barotropic boundary conditions only 
    232                ! jit is optional argument for fld_read and bdytide_update 
    233                IF( cn_dyn2d(jbdy) /= 'none' ) THEN 
    234                   IF( nn_dyn2d_dta(jbdy) == 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays 
    235                      IF( dta%ll_ssh ) dta%ssh(:) = 0._wp 
    236                      IF( dta%ll_u2d ) dta%u2d(:) = 0._wp 
    237                      IF( dta%ll_u3d ) dta%v2d(:) = 0._wp 
    238                   ENDIF 
    239                   IF (cn_tra(jbdy) /= 'runoff') THEN 
    240                      IF( nn_dyn2d_dta(jbdy) == 1 .OR. nn_dyn2d_dta(jbdy) == 3 ) THEN 
    241  
    242                         jend = jstart + dta%nread(2) - 1 
    243                         IF( ln_full_vel_array(jbdy) ) THEN 
    244                            CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), map=nbmap_ptr(jstart:jend),  & 
    245                                      & kit=jit, kt_offset=time_offset , jpk_bdy=nb_jpk_bdy(jbdy),   & 
    246                                      & fvl=ln_full_vel_array(jbdy)  ) 
    247                         ELSE 
    248                            CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), map=nbmap_ptr(jstart:jend),  & 
    249                                      & kit=jit, kt_offset=time_offset  ) 
    250                         ENDIF 
    251  
    252                         ! If full velocities in boundary data then extract barotropic velocities from 3D fields 
    253                         IF( ln_full_vel_array(jbdy) .AND.                                             & 
    254                           &    ( nn_dyn2d_dta(jbdy) == 1 .OR. nn_dyn2d_dta(jbdy) == 3 .OR.  & 
    255                           &      nn_dyn3d_dta(jbdy) == 1 ) )THEN 
    256  
    257                            igrd = 2                      ! zonal velocity 
    258                            dta%u2d(:) = 0._wp 
    259                            DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    260                               ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
    261                               ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
    262                               DO ik = 1, jpkm1 
    263                                  dta%u2d(ib) = dta%u2d(ib) & 
    264                        &                          + e3u_n(ii,ij,ik) * umask(ii,ij,ik) * dta%u3d(ib,ik) 
    265                               END DO 
    266                               dta%u2d(ib) =  dta%u2d(ib) * r1_hu_n(ii,ij) 
    267                            END DO 
    268                            igrd = 3                      ! meridional velocity 
    269                            dta%v2d(:) = 0._wp 
    270                            DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    271                               ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
    272                               ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
    273                               DO ik = 1, jpkm1 
    274                                  dta%v2d(ib) = dta%v2d(ib) & 
    275                        &                       + e3v_n(ii,ij,ik) * vmask(ii,ij,ik) * dta%v3d(ib,ik) 
    276                               END DO 
    277                               dta%v2d(ib) =  dta%v2d(ib) * r1_hv_n(ii,ij) 
    278                            END DO 
    279                         ENDIF                     
    280                      ENDIF 
    281                      IF( nn_dyn2d_dta(jbdy) .ge. 2 ) THEN ! update tidal harmonic forcing 
    282                         CALL bdytide_update( kt=kt, idx=idx_bdy(jbdy), dta=dta, td=tides(jbdy),   &  
    283                           &                 jit=jit, time_offset=time_offset ) 
    284                      ENDIF 
    285                   ENDIF 
    286                ENDIF 
    287             ELSE 
    288                IF (cn_tra(jbdy) == 'runoff') then      ! runoff condition 
    289                   jend = nb_bdy_fld(jbdy) 
    290                   CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend),  & 
    291                                & map=nbmap_ptr(jstart:jend), kt_offset=time_offset ) 
    292                   ! 
    293                   igrd = 2                      ! zonal velocity 
    294                   DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    295                      ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
    296                      ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
    297                      dta%u2d(ib) = dta%u2d(ib) / ( e2u(ii,ij) * hu_0(ii,ij) ) 
    298                   END DO 
    299                   ! 
    300                   igrd = 3                      ! meridional velocity 
    301                   DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    302                      ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
    303                      ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
    304                      dta%v2d(ib) = dta%v2d(ib) / ( e1v(ii,ij) * hv_0(ii,ij) ) 
    305                   END DO 
    306                ELSE 
    307                   IF( nn_dyn2d_dta(jbdy) == 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays 
    308                      IF( dta%ll_ssh ) dta%ssh(:) = 0._wp 
    309                      IF( dta%ll_u2d ) dta%u2d(:) = 0._wp 
    310                      IF( dta%ll_v2d ) dta%v2d(:) = 0._wp 
    311                   ENDIF 
    312                   IF( dta%nread(1) .gt. 0 ) THEN ! update external data 
    313                      jend = jstart + dta%nread(1) - 1 
    314                      CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), & 
    315                                   & map=nbmap_ptr(jstart:jend), kt_offset=time_offset, jpk_bdy=nb_jpk_bdy(jbdy),   & 
    316                                   & fvl=ln_full_vel_array(jbdy) ) 
    317                   ENDIF 
    318                   ! If full velocities in boundary data then split into barotropic and baroclinic data 
    319                   IF( ln_full_vel_array(jbdy) .and.                                             & 
    320                     & ( nn_dyn2d_dta(jbdy) == 1 .OR. nn_dyn2d_dta(jbdy) == 3 .OR. & 
    321                     &   nn_dyn3d_dta(jbdy) == 1 ) ) THEN 
    322                      igrd = 2                      ! zonal velocity 
    323                      dta%u2d(:) = 0._wp 
    324                      DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    325                         ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
    326                         ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
    327                         DO ik = 1, jpkm1 
    328                            dta%u2d(ib) = dta%u2d(ib) & 
    329                  &                       + e3u_n(ii,ij,ik) * umask(ii,ij,ik) * dta%u3d(ib,ik) 
    330                         END DO 
    331                         dta%u2d(ib) =  dta%u2d(ib) * r1_hu_n(ii,ij) 
    332                         DO ik = 1, jpkm1 
    333                            dta%u3d(ib,ik) = dta%u3d(ib,ik) - dta%u2d(ib) 
    334                         END DO 
    335                      END DO 
    336                      igrd = 3                      ! meridional velocity 
    337                      dta%v2d(:) = 0._wp 
    338                      DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    339                         ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
    340                         ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
    341                         DO ik = 1, jpkm1 
    342                            dta%v2d(ib) = dta%v2d(ib) & 
    343                  &                       + e3v_n(ii,ij,ik) * vmask(ii,ij,ik) * dta%v3d(ib,ik) 
    344                         END DO 
    345                         dta%v2d(ib) =  dta%v2d(ib) * r1_hv_n(ii,ij) 
    346                         DO ik = 1, jpkm1 
    347                            dta%v3d(ib,ik) = dta%v3d(ib,ik) - dta%v2d(ib) 
    348                         END DO 
    349                      END DO 
    350                   ENDIF 
    351  
    352                ENDIF 
     194 
     195      DO jbdy = 1, nb_bdy 
     196 
     197         dta_alias => dta_bdy(jbdy) 
     198         bf_alias  => bf(:,jbdy) 
     199 
     200         ! read/update all bdy data 
     201         ! ------------------------ 
     202         CALL fld_read( kt, 1, bf_alias, kit = kit, kt_offset = kt_offset ) 
     203 
     204         ! apply some corrections in some specific cases... 
     205         ! -------------------------------------------------- 
     206         ! 
     207         ! if runoff condition: change river flow we read (in m3/s) into barotropic velocity (m/s) 
     208         IF( cn_tra(jbdy) == 'runoff' .AND. TRIM(bf_alias(jp_bdyu2d)%clrootname) /= 'NOT USED' ) THEN   ! runoff and we read u/v2d 
     209            ! 
     210            igrd = 2                      ! zonal flow (m3/s) to barotropic zonal velocity (m/s) 
     211            DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
     212               ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
     213               ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
     214               dta_alias%u2d(ib) = dta_alias%u2d(ib) / ( e2u(ii,ij) * hu_0(ii,ij) ) 
     215            END DO 
     216            igrd = 3                      ! meridional flow (m3/s) to barotropic meridional velocity (m/s) 
     217            DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
     218               ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
     219               ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
     220               dta_alias%v2d(ib) = dta_alias%v2d(ib) / ( e1v(ii,ij) * hv_0(ii,ij) ) 
     221            END DO 
     222         ENDIF 
     223 
     224         ! tidal harmonic forcing ONLY: initialise arrays 
     225         IF( nn_dyn2d_dta(jbdy) == 2 ) THEN   ! we did not read ssh, u/v2d  
     226            IF( dta_alias%lneed_ssh   ) dta_alias%ssh(:) = 0._wp 
     227            IF( dta_alias%lneed_dyn2d ) dta_alias%u2d(:) = 0._wp 
     228            IF( dta_alias%lneed_dyn2d ) dta_alias%v2d(:) = 0._wp 
     229         ENDIF 
     230 
     231         ! If full velocities in boundary data, then split it into barotropic and baroclinic component 
     232         IF( bf_alias(jp_bdyu3d)%ltotvel ) THEN     ! if we read 3D total velocity (can be true only if u3d was read) 
     233            ! 
     234            igrd = 2                       ! zonal velocity 
     235            dta_alias%u2d(:) = 0._wp       ! compute barotrope zonal velocity and put it in u2d 
     236            DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
     237               ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
     238               ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
     239               DO ik = 1, jpkm1 
     240                  dta_alias%u2d(ib) = dta_alias%u2d(ib) + e3u_n(ii,ij,ik) * umask(ii,ij,ik) * dta_alias%u3d(ib,ik) 
     241               END DO 
     242               dta_alias%u2d(ib) =  dta_alias%u2d(ib) * r1_hu_n(ii,ij) 
     243               DO ik = 1, jpkm1            ! compute barocline zonal velocity and put it in u3d 
     244                  dta_alias%u3d(ib,ik) = dta_alias%u3d(ib,ik) - dta_alias%u2d(ib) 
     245               END DO 
     246            END DO 
     247            igrd = 3                       ! meridional velocity 
     248            dta_alias%v2d(:) = 0._wp       ! compute barotrope meridional velocity and put it in v2d 
     249            DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
     250               ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
     251               ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
     252               DO ik = 1, jpkm1 
     253                  dta_alias%v2d(ib) = dta_alias%v2d(ib) + e3v_n(ii,ij,ik) * vmask(ii,ij,ik) * dta_alias%v3d(ib,ik) 
     254               END DO 
     255               dta_alias%v2d(ib) =  dta_alias%v2d(ib) * r1_hv_n(ii,ij) 
     256               DO ik = 1, jpkm1            ! compute barocline meridional velocity and put it in v3d 
     257                  dta_alias%v3d(ib,ik) = dta_alias%v3d(ib,ik) - dta_alias%v2d(ib) 
     258               END DO 
     259            END DO 
     260         ENDIF   ! ltotvel 
     261 
     262         ! update tidal harmonic forcing 
     263         IF( PRESENT(kit) .AND. nn_dyn2d_dta(jbdy) .GE. 2 ) THEN 
     264            CALL bdytide_update( kt = kt, idx = idx_bdy(jbdy), dta = dta_alias, td = tides(jbdy),   &  
     265               &                 kit = kit, kt_offset = kt_offset ) 
     266         ENDIF 
     267 
     268         !  atm surface pressure : add inverted barometer effect to ssh if it was read 
     269         IF ( ln_apr_obc .AND. TRIM(bf_alias(jp_bdyssh)%clrootname) /= 'NOT USED' ) THEN 
     270            igrd = 1 
     271            DO ib = 1, idx_bdy(jbdy)%nblenrim(igrd)   ! ssh is used only on the rim 
     272               ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
     273               ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
     274               dta_alias%ssh(ib) = dta_alias%ssh(ib) + ssh_ib(ii,ij) 
     275            END DO 
     276         ENDIF 
     277 
    353278#if defined key_si3 
    354                ! convert N-cat fields (input) into jpl-cat (output) 
    355                IF( cn_ice(jbdy) /= 'none' .AND. nn_ice_dta(jbdy) == 1 ) THEN 
    356                   jfld_hti = jfld_htit(jbdy) 
    357                   jfld_hts = jfld_htst(jbdy) 
    358                   jfld_ai  = jfld_ait(jbdy) 
    359                   IF    ( jpl /= 1 .AND. nice_cat == 1 ) THEN                       ! case input cat = 1 
    360                      CALL ice_var_itd ( bf(jfld_hti)%fnow(:,1,1), bf(jfld_hts)%fnow(:,1,1), bf(jfld_ai)%fnow(:,1,1), & 
    361                         &               dta_bdy(jbdy)%h_i     , dta_bdy(jbdy)%h_s     , dta_bdy(jbdy)%a_i    ) 
    362                   ELSEIF( jpl /= 1 .AND. nice_cat /= 1 .AND. nice_cat /= jpl ) THEN ! case input cat /=1 and /=jpl 
    363                      CALL ice_var_itd2( bf(jfld_hti)%fnow(:,1,:), bf(jfld_hts)%fnow(:,1,:), bf(jfld_ai)%fnow(:,1,:), & 
    364                         &               dta_bdy(jbdy)%h_i     , dta_bdy(jbdy)%h_s     , dta_bdy(jbdy)%a_i    ) 
    365                   ENDIF 
    366                ENDIF 
     279         ! ice: convert N-cat fields (input) into jpl-cat (output) 
     280         IF( dta_alias%lneed_ice ) THEN 
     281            ipl = SIZE(bf_alias(jp_bdya_i)%fnow, 3) 
     282            IF( ipl /= jpl ) THEN      ! ice: convert N-cat fields (input) into jpl-cat (output) 
     283               CALL ice_var_itd(bf_alias(jp_bdyh_i)%fnow(:,1,:), bf_alias(jp_bdyh_s)%fnow(:,1,:), bf_alias(jp_bdya_i)%fnow(:,1,:), & 
     284                  &              dta_alias%h_i               , dta_alias%h_s               , dta_alias%a_i                 ) 
     285            ENDIF 
     286         ENDIF 
    367287#endif 
    368             ENDIF 
    369             jstart = jstart + dta%nread(1) 
    370          ENDIF    ! nn_dta(jbdy) = 1 
    371288      END DO  ! jbdy 
    372  
    373       IF ( ln_apr_obc ) THEN 
    374          DO jbdy = 1, nb_bdy 
    375             IF (cn_tra(jbdy) /= 'runoff')THEN 
    376                igrd = 1                      ! meridional velocity 
    377                DO ib = 1, idx_bdy(jbdy)%nblenrim(igrd) 
    378                   ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
    379                   ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
    380                   dta_bdy(jbdy)%ssh(ib) = dta_bdy(jbdy)%ssh(ib) + ssh_ib(ii,ij) 
    381                END DO 
    382             ENDIF 
    383          END DO 
    384       ENDIF 
    385289 
    386290      IF ( ln_tide ) THEN 
    387291         IF (ln_dynspg_ts) THEN      ! Fill temporary arrays with slow-varying bdy data                            
    388             DO jbdy = 1, nb_bdy    ! Tidal component added in ts loop 
    389                IF ( nn_dyn2d_dta(jbdy) .ge. 2 ) THEN 
     292            DO jbdy = 1, nb_bdy      ! Tidal component added in ts loop 
     293               IF ( nn_dyn2d_dta(jbdy) .GE. 2 ) THEN 
    390294                  nblen => idx_bdy(jbdy)%nblen 
    391295                  nblenrim => idx_bdy(jbdy)%nblenrim 
    392                   IF( cn_dyn2d(jbdy) == 'frs' ) THEN; ilen1(:)=nblen(:) ; ELSE ; ilen1(:)=nblenrim(:) ; ENDIF  
    393                   IF ( dta_bdy(jbdy)%ll_ssh ) dta_bdy_s(jbdy)%ssh(1:ilen1(1)) = dta_bdy(jbdy)%ssh(1:ilen1(1)) 
    394                   IF ( dta_bdy(jbdy)%ll_u2d ) dta_bdy_s(jbdy)%u2d(1:ilen1(2)) = dta_bdy(jbdy)%u2d(1:ilen1(2)) 
    395                   IF ( dta_bdy(jbdy)%ll_v2d ) dta_bdy_s(jbdy)%v2d(1:ilen1(3)) = dta_bdy(jbdy)%v2d(1:ilen1(3)) 
    396                ENDIF 
    397             END DO 
    398          ELSE ! Add tides if not split-explicit free surface else this is done in ts loop 
    399             ! 
    400             CALL bdy_dta_tides( kt=kt, time_offset=time_offset ) 
    401          ENDIF 
    402       ENDIF 
    403  
    404       ! 
    405       IF( ln_timing )   CALL timing_stop('bdy_dta') 
    406       ! 
    407    END SUBROUTINE bdy_dta 
     296                  IF( cn_dyn2d(jbdy) == 'frs' ) THEN ; ilen1(:)=nblen(:) ; ELSE ; ilen1(:)=nblenrim(:) ; ENDIF  
     297                     IF ( dta_bdy(jbdy)%lneed_ssh   ) dta_bdy_s(jbdy)%ssh(1:ilen1(1)) = dta_bdy(jbdy)%ssh(1:ilen1(1)) 
     298                     IF ( dta_bdy(jbdy)%lneed_dyn2d ) dta_bdy_s(jbdy)%u2d(1:ilen1(2)) = dta_bdy(jbdy)%u2d(1:ilen1(2)) 
     299                     IF ( dta_bdy(jbdy)%lneed_dyn2d ) dta_bdy_s(jbdy)%v2d(1:ilen1(3)) = dta_bdy(jbdy)%v2d(1:ilen1(3)) 
     300                  ENDIF 
     301               END DO 
     302            ELSE ! Add tides if not split-explicit free surface else this is done in ts loop 
     303               ! 
     304               CALL bdy_dta_tides( kt=kt, kt_offset=kt_offset ) 
     305            ENDIF 
     306         ENDIF 
     307         ! 
     308         IF( ln_timing )   CALL timing_stop('bdy_dta') 
     309         ! 
     310      END SUBROUTINE bdy_dta 
    408311 
    409312 
     
    418321      !!                 
    419322      !!---------------------------------------------------------------------- 
    420       INTEGER ::   jbdy, jfld, jstart, jend, ierror, ios     ! Local integers 
    421       ! 
     323      INTEGER ::   jbdy, jfld    ! Local integers 
     324      INTEGER ::   ierror, ios     !  
     325      ! 
     326      CHARACTER(len=3)                       ::   cl3           !  
    422327      CHARACTER(len=100)                     ::   cn_dir        ! Root directory for location of data files 
    423       CHARACTER(len=100), DIMENSION(nb_bdy)  ::   cn_dir_array  ! Root directory for location of data files 
    424       CHARACTER(len = 256)::   clname                           ! temporary file name 
    425328      LOGICAL                                ::   ln_full_vel   ! =T => full velocities in 3D boundary data 
    426329      !                                                         ! =F => baroclinic velocities in 3D boundary data 
    427       INTEGER                                ::   ilen_global   ! Max length required for global bdy dta arrays 
    428       INTEGER, ALLOCATABLE, DIMENSION(:)     ::   ilen1, ilen3  ! size of 1st and 3rd dimensions of local arrays 
    429       INTEGER, ALLOCATABLE, DIMENSION(:)     ::   ibdy           ! bdy set for a particular jfld 
    430       INTEGER, ALLOCATABLE, DIMENSION(:)     ::   igrid         ! index for grid type (1,2,3 = T,U,V) 
    431       INTEGER, POINTER, DIMENSION(:)         ::   nblen, nblenrim  ! short cuts 
    432       TYPE(OBC_DATA), POINTER                ::   dta           ! short cut 
    433 #if defined key_si3 
    434       INTEGER               ::   kndims   ! number of dimensions in an array (i.e. 3 = wo ice cat; 4 = w ice cat) 
    435       INTEGER, DIMENSION(4) ::   kdimsz   ! size   of dimensions 
    436       INTEGER               ::   inum,id1 ! local integer 
    437 #endif 
    438       TYPE(FLD_N), ALLOCATABLE, DIMENSION(:) ::   blf_i         !  array of namelist information structures 
    439       TYPE(FLD_N) ::   bn_tem, bn_sal, bn_u3d, bn_v3d   !  
    440       TYPE(FLD_N) ::   bn_ssh, bn_u2d, bn_v2d           ! informations about the fields to be read 
    441 #if defined key_si3 
    442       TYPE(FLD_N) ::   bn_a_i, bn_h_i, bn_h_s       
    443 #endif 
     330      INTEGER                                ::   ipk,ipl           ! 
     331      INTEGER                                ::   idvar         ! variable ID 
     332      INTEGER                                ::   indims        ! number of dimensions of the variable 
     333      INTEGER                                ::   iszdim        ! number of dimensions of the variable 
     334      INTEGER, DIMENSION(4)                  ::   i4dimsz       ! size of variable dimensions  
     335      INTEGER                                ::   igrd          ! index for grid type (1,2,3 = T,U,V) 
     336      LOGICAL                                ::   lluld         ! is the variable using the unlimited dimension 
     337      LOGICAL                                ::   llneed        ! 
     338      LOGICAL                                ::   llread        ! 
     339      TYPE(FLD_N), DIMENSION(1), TARGET ::   bn_tem, bn_sal, bn_u3d, bn_v3d   ! must be an array to be used with fld_fill 
     340      TYPE(FLD_N), DIMENSION(1), TARGET ::   bn_ssh, bn_u2d, bn_v2d           ! informations about the fields to be read 
     341      TYPE(FLD_N), DIMENSION(1), TARGET ::   bn_a_i, bn_h_i, bn_h_s       
     342      TYPE(FLD_N), DIMENSION(:), POINTER ::   bn_alias                        ! must be an array to be used with fld_fill 
     343      TYPE(FLD  ), DIMENSION(:), POINTER ::   bf_alias 
     344      ! 
    444345      NAMELIST/nambdy_dta/ cn_dir, bn_tem, bn_sal, bn_u3d, bn_v3d, bn_ssh, bn_u2d, bn_v2d  
    445 #if defined key_si3 
    446346      NAMELIST/nambdy_dta/ bn_a_i, bn_h_i, bn_h_s 
    447 #endif 
    448347      NAMELIST/nambdy_dta/ ln_full_vel 
    449348      !!--------------------------------------------------------------------------- 
     
    454353      IF(lwp) WRITE(numout,*) '' 
    455354 
    456       ! Set nn_dta 
    457       DO jbdy = 1, nb_bdy 
    458          nn_dta(jbdy) = MAX(   nn_dyn2d_dta  (jbdy)    & 
    459             &                , nn_dyn3d_dta  (jbdy)    & 
    460             &                , nn_tra_dta    (jbdy)    & 
    461 #if defined key_si3 
    462             &                , nn_ice_dta    (jbdy)    & 
    463 #endif 
    464                               ) 
    465          IF(nn_dta(jbdy) > 1)   nn_dta(jbdy) = 1 
    466       END DO 
    467  
    468       ! Work out upper bound of how many fields there are to read in and allocate arrays 
    469       ! --------------------------------------------------------------------------- 
    470       ALLOCATE( nb_bdy_fld(nb_bdy) ) 
    471       nb_bdy_fld(:) = 0 
    472       DO jbdy = 1, nb_bdy          
    473          IF( cn_dyn2d(jbdy) /= 'none' .AND. ( nn_dyn2d_dta(jbdy) == 1 .or. nn_dyn2d_dta(jbdy) == 3 ) ) THEN 
    474             nb_bdy_fld(jbdy) = nb_bdy_fld(jbdy) + 3 
    475          ENDIF 
    476          IF( cn_dyn3d(jbdy) /= 'none' .AND. nn_dyn3d_dta(jbdy) == 1 ) THEN 
    477             nb_bdy_fld(jbdy) = nb_bdy_fld(jbdy) + 2 
    478          ENDIF 
    479          IF( cn_tra(jbdy) /= 'none' .AND. nn_tra_dta(jbdy) == 1  ) THEN 
    480             nb_bdy_fld(jbdy) = nb_bdy_fld(jbdy) + 2 
    481          ENDIF 
    482 #if defined key_si3 
    483          IF( cn_ice(jbdy) /= 'none' .AND. nn_ice_dta(jbdy) == 1  ) THEN 
    484             nb_bdy_fld(jbdy) = nb_bdy_fld(jbdy) + 3 
    485          ENDIF 
    486 #endif                
    487          IF(lwp) WRITE(numout,*) 'Maximum number of files to open =', nb_bdy_fld(jbdy) 
    488       END DO             
    489  
    490       nb_bdy_fld_sum = SUM( nb_bdy_fld ) 
    491  
    492       ALLOCATE( bf(nb_bdy_fld_sum), STAT=ierror ) 
     355      ALLOCATE( bf(jpbdyfld,nb_bdy), STAT=ierror ) 
    493356      IF( ierror > 0 ) THEN    
    494357         CALL ctl_stop( 'bdy_dta: unable to allocate bf structure' )   ;   RETURN   
    495358      ENDIF 
    496       ALLOCATE( blf_i(nb_bdy_fld_sum), STAT=ierror ) 
    497       IF( ierror > 0 ) THEN    
    498          CALL ctl_stop( 'bdy_dta: unable to allocate blf_i structure' )   ;   RETURN   
    499       ENDIF 
    500       ALLOCATE( nbmap_ptr(nb_bdy_fld_sum), STAT=ierror ) 
    501       IF( ierror > 0 ) THEN    
    502          CALL ctl_stop( 'bdy_dta: unable to allocate nbmap_ptr structure' )   ;   RETURN   
    503       ENDIF 
    504       ALLOCATE( ilen1(nb_bdy_fld_sum), ilen3(nb_bdy_fld_sum) )  
    505       ALLOCATE( ibdy(nb_bdy_fld_sum) )  
    506       ALLOCATE( igrid(nb_bdy_fld_sum) )  
    507  
     359      bf(:,:)%clrootname = 'NOT USED'   ! default definition used as a flag in fld_read to do nothing. 
     360      bf(:,:)%ltotvel = .FALSE.         ! default definition 
     361  
    508362      ! Read namelists 
    509363      ! -------------- 
    510364      REWIND(numnam_cfg) 
    511       jfld = 0  
    512       DO jbdy = 1, nb_bdy          
    513          IF( nn_dta(jbdy) == 1 ) THEN 
    514             REWIND(numnam_ref) 
    515             READ  ( numnam_ref, nambdy_dta, IOSTAT = ios, ERR = 901) 
    516 901         IF( ios /= 0 )   CALL ctl_nam ( ios , 'nambdy_dta in reference namelist', lwp ) 
     365      DO jbdy = 1, nb_bdy 
     366 
     367         WRITE(ctmp1, '(a,i2)') 'BDY number ', jbdy 
     368         WRITE(ctmp2, '(a,i2)') 'block nambdy_dta number ', jbdy 
     369 
     370         ! There is only one nambdy_dta block in namelist_ref -> use it for each bdy so we do a rewind  
     371         REWIND(numnam_ref) 
     372         READ  ( numnam_ref, nambdy_dta, IOSTAT = ios, ERR = 901) 
     373901      IF( ios /= 0 )   CALL ctl_nam ( ios , 'nambdy_dta in reference namelist', lwp ) 
     374 
     375         !   by-pass nambdy_dta reading if no input data used in this bdy    
     376         IF(       ( dta_bdy(jbdy)%lneed_dyn2d .AND. MOD(nn_dyn2d_dta(jbdy),2) == 1 )   & 
     377            & .OR. ( dta_bdy(jbdy)%lneed_dyn3d .AND.     nn_dyn3d_dta(jbdy)    == 1 )   & 
     378            & .OR. ( dta_bdy(jbdy)%lneed_tra   .AND.       nn_tra_dta(jbdy)    == 1 )   & 
     379            & .OR. ( dta_bdy(jbdy)%lneed_ice   .AND.       nn_ice_dta(jbdy)    == 1 )   )   THEN 
     380            ! WARNING: we don't do a rewind here, each bdy reads its own nambdy_dta block one after another 
    517381            READ  ( numnam_cfg, nambdy_dta, IOSTAT = ios, ERR = 902 ) 
    518382902         IF( ios >  0 )   CALL ctl_nam ( ios , 'nambdy_dta in configuration namelist', lwp ) 
    519             IF(lwm) WRITE( numond, nambdy_dta ) 
    520  
    521             cn_dir_array(jbdy) = cn_dir 
    522             ln_full_vel_array(jbdy) = ln_full_vel 
    523  
    524             nblen => idx_bdy(jbdy)%nblen 
    525             nblenrim => idx_bdy(jbdy)%nblenrim 
    526             dta => dta_bdy(jbdy) 
    527             dta%nread(2) = 0 
    528  
    529             ! Only read in necessary fields for this set. 
    530             ! Important that barotropic variables come first. 
    531             IF( nn_dyn2d_dta(jbdy) == 1 .or. nn_dyn2d_dta(jbdy) == 3 ) THEN  
    532  
    533                IF( dta%ll_ssh ) THEN  
    534                   if(lwp) write(numout,*) '++++++ reading in ssh field' 
    535                   jfld = jfld + 1 
    536                   blf_i(jfld) = bn_ssh 
    537                   ibdy(jfld) = jbdy 
    538                   igrid(jfld) = 1 
    539                   ilen1(jfld) = nblen(igrid(jfld)) 
    540                   ilen3(jfld) = 1 
    541                   dta%nread(2) = dta%nread(2) + 1 
    542                ENDIF 
    543  
    544                IF( dta%ll_u2d .and. .not. ln_full_vel_array(jbdy) ) THEN 
    545                   if(lwp) write(numout,*) '++++++ reading in u2d field' 
    546                   jfld = jfld + 1 
    547                   blf_i(jfld) = bn_u2d 
    548                   ibdy(jfld) = jbdy 
    549                   igrid(jfld) = 2 
    550                   ilen1(jfld) = nblen(igrid(jfld)) 
    551                   ilen3(jfld) = 1 
    552                   dta%nread(2) = dta%nread(2) + 1 
    553                ENDIF 
    554  
    555                IF( dta%ll_v2d .and. .not. ln_full_vel_array(jbdy) ) THEN 
    556                   if(lwp) write(numout,*) '++++++ reading in v2d field' 
    557                   jfld = jfld + 1 
    558                   blf_i(jfld) = bn_v2d 
    559                   ibdy(jfld) = jbdy 
    560                   igrid(jfld) = 3 
    561                   ilen1(jfld) = nblen(igrid(jfld)) 
    562                   ilen3(jfld) = 1 
    563                   dta%nread(2) = dta%nread(2) + 1 
    564                ENDIF 
    565  
    566             ENDIF 
    567  
    568             ! read 3D velocities if baroclinic velocities require OR if 
    569             ! barotropic velocities required and ln_full_vel set to .true. 
    570             IF( nn_dyn3d_dta(jbdy) == 1 .OR. & 
    571            &  ( ln_full_vel_array(jbdy) .AND. ( nn_dyn2d_dta(jbdy) == 1 .OR. nn_dyn2d_dta(jbdy) == 3 ) ) ) THEN 
    572  
    573                IF( dta%ll_u3d .OR. ( ln_full_vel_array(jbdy) .and. dta%ll_u2d ) ) THEN 
    574                   if(lwp) write(numout,*) '++++++ reading in u3d field' 
    575                   jfld = jfld + 1 
    576                   blf_i(jfld) = bn_u3d 
    577                   ibdy(jfld) = jbdy 
    578                   igrid(jfld) = 2 
    579                   ilen1(jfld) = nblen(igrid(jfld)) 
    580                   ilen3(jfld) = jpk 
    581                   IF( ln_full_vel_array(jbdy) .and. dta%ll_u2d ) dta%nread(2) = dta%nread(2) + 1 
    582                ENDIF 
    583  
    584                IF( dta%ll_v3d .OR. ( ln_full_vel_array(jbdy) .and. dta%ll_v2d ) ) THEN 
    585                   if(lwp) write(numout,*) '++++++ reading in v3d field' 
    586                   jfld = jfld + 1 
    587                   blf_i(jfld) = bn_v3d 
    588                   ibdy(jfld) = jbdy 
    589                   igrid(jfld) = 3 
    590                   ilen1(jfld) = nblen(igrid(jfld)) 
    591                   ilen3(jfld) = jpk 
    592                   IF( ln_full_vel_array(jbdy) .and. dta%ll_v2d ) dta%nread(2) = dta%nread(2) + 1 
    593                ENDIF 
    594  
    595             ENDIF 
    596  
    597             ! temperature and salinity 
    598             IF( nn_tra_dta(jbdy) == 1 ) THEN 
    599  
    600                IF( dta%ll_tem ) THEN 
    601                   if(lwp) write(numout,*) '++++++ reading in tem field' 
    602                   jfld = jfld + 1 
    603                   blf_i(jfld) = bn_tem 
    604                   ibdy(jfld) = jbdy 
    605                   igrid(jfld) = 1 
    606                   ilen1(jfld) = nblen(igrid(jfld)) 
    607                   ilen3(jfld) = jpk 
    608                ENDIF 
    609  
    610                IF( dta%ll_sal ) THEN 
    611                   if(lwp) write(numout,*) '++++++ reading in sal field' 
    612                   jfld = jfld + 1 
    613                   blf_i(jfld) = bn_sal 
    614                   ibdy(jfld) = jbdy 
    615                   igrid(jfld) = 1 
    616                   ilen1(jfld) = nblen(igrid(jfld)) 
    617                   ilen3(jfld) = jpk 
    618                ENDIF 
    619  
    620             ENDIF 
    621  
    622 #if defined key_si3 
    623             ! sea ice 
    624             IF( nn_ice_dta(jbdy) == 1 ) THEN 
    625                ! Test for types of ice input (1cat or Xcat)  
    626                ! Build file name to find dimensions  
    627                clname=TRIM( cn_dir )//TRIM(bn_a_i%clname) 
    628                IF( .NOT. bn_a_i%ln_clim ) THEN    
    629                                                   WRITE(clname, '(a,"_y",i4.4)' ) TRIM( clname ), nyear    ! add year 
    630                   IF( bn_a_i%cltype /= 'yearly' ) WRITE(clname, '(a,"m" ,i2.2)' ) TRIM( clname ), nmonth   ! add month 
    631                ELSE 
    632                   IF( bn_a_i%cltype /= 'yearly' ) WRITE(clname, '(a,"_m",i2.2)' ) TRIM( clname ), nmonth   ! add month 
    633                ENDIF 
    634                IF( bn_a_i%cltype == 'daily' .OR. bn_a_i%cltype(1:4) == 'week' ) & 
    635                &                                  WRITE(clname, '(a,"d" ,i2.2)' ) TRIM( clname ), nday     ! add day 
     383            IF(lwm) WRITE( numond, nambdy_dta )            
     384         ENDIF 
     385 
     386         ! get the number of ice categories in bdy data file (use a_i information to do this) 
     387         ipl = jpl   ! default definition 
     388         IF( dta_bdy(jbdy)%lneed_ice ) THEN    ! if we need ice bdy data 
     389            IF( nn_ice_dta(jbdy) == 1 ) THEN   ! if we get ice bdy data from netcdf file 
     390               CALL fld_fill(  bf(jp_bdya_i,jbdy:jbdy), bn_a_i, cn_dir, 'bdy_dta', 'a_i'//' '//ctmp1, ctmp2 )   ! use namelist info 
     391               CALL fld_clopn( bf(jp_bdya_i,jbdy), nyear, nmonth, nday )   ! not a problem when we call it again after 
     392               idvar = iom_varid( bf(jp_bdya_i,jbdy)%num, bf(jp_bdya_i,jbdy)%clvar, kndims=indims, kdimsz=i4dimsz, lduld=lluld ) 
     393               IF( indims == 4 .OR. ( indims == 3 .AND. .NOT. lluld ) ) THEN   ;   ipl = i4dimsz(3)   ! xylt or xyl 
     394               ELSE                                                            ;   ipl = 1            ! xy or xyt 
     395               ENDIF 
     396            ENDIF 
     397         ENDIF 
     398 
     399         DO jfld = 1, jpbdyfld 
     400 
     401            ! ===================== 
     402            !          ssh  
     403            ! ===================== 
     404            IF( jfld == jp_bdyssh ) THEN 
     405               cl3 = 'ssh' 
     406               igrd = 1                                                    ! T point 
     407               ipk = 1                                                     ! surface data 
     408               llneed = dta_bdy(jbdy)%lneed_ssh                            ! dta_bdy(jbdy)%ssh will be needed 
     409               llread = MOD(nn_dyn2d_dta(jbdy),2) == 1                     ! get data from NetCDF file 
     410               bf_alias => bf(jp_bdyssh,jbdy:jbdy)                         ! alias for ssh structure of bdy number jbdy 
     411               bn_alias => bn_ssh                                          ! alias for ssh structure of nambdy_dta  
     412            ENDIF 
     413            ! ===================== 
     414            !         dyn2d 
     415            ! ===================== 
     416            IF( jfld == jp_bdyu2d ) THEN 
     417               cl3 = 'u2d' 
     418               igrd = 2                                                    ! U point 
     419               ipk = 1                                                     ! surface data 
     420               llneed = dta_bdy(jbdy)%lneed_dyn2d                          ! dta_bdy(jbdy)%ssh will be needed 
     421               llread = .NOT. ln_full_vel .AND. MOD(nn_dyn2d_dta(jbdy),2) == 1   ! don't get u2d from u3d and read NetCDF file 
     422               bf_alias => bf(jp_bdyu2d,jbdy:jbdy)                         ! alias for u2d structure of bdy number jbdy 
     423               bn_alias => bn_u2d                                          ! alias for u2d structure of nambdy_dta  
     424            ENDIF 
     425            IF( jfld == jp_bdyv2d ) THEN 
     426               cl3 = 'v2d' 
     427               igrd = 3                                                    ! V point 
     428               ipk = 1                                                     ! surface data 
     429               llneed = dta_bdy(jbdy)%lneed_dyn2d                          ! dta_bdy(jbdy)%ssh will be needed 
     430               llread = .NOT. ln_full_vel .AND. MOD(nn_dyn2d_dta(jbdy),2) == 1   ! don't get v2d from v3d and read NetCDF file 
     431               bf_alias => bf(jp_bdyv2d,jbdy:jbdy)                         ! alias for v2d structure of bdy number jbdy 
     432               bn_alias => bn_v2d                                          ! alias for v2d structure of nambdy_dta  
     433            ENDIF 
     434            ! ===================== 
     435            !         dyn3d 
     436            ! ===================== 
     437            IF( jfld == jp_bdyu3d ) THEN 
     438               cl3 = 'u3d' 
     439               igrd = 2                                                    ! U point 
     440               ipk = jpk                                                   ! 3d data 
     441               llneed = dta_bdy(jbdy)%lneed_dyn3d .OR.               &     ! dta_bdy(jbdy)%u3d will be needed 
     442                  &   ( dta_bdy(jbdy)%lneed_dyn2d .AND. ln_full_vel )      !   u3d needed to compute u2d 
     443               llread = nn_dyn3d_dta(jbdy) == 1                            ! get data from NetCDF file 
     444               bf_alias => bf(jp_bdyu3d,jbdy:jbdy)                         ! alias for u3d structure of bdy number jbdy 
     445               bn_alias => bn_u3d                                          ! alias for u3d structure of nambdy_dta  
     446            ENDIF 
     447            IF( jfld == jp_bdyv3d ) THEN 
     448               cl3 = 'v3d' 
     449               igrd = 3                                                    ! V point 
     450               ipk = jpk                                                   ! 3d data 
     451               llneed = dta_bdy(jbdy)%lneed_dyn3d .OR.               &     ! dta_bdy(jbdy)%v3d will be needed 
     452                  &   ( dta_bdy(jbdy)%lneed_dyn2d .AND. ln_full_vel )      !   v3d needed to compute v2d 
     453               llread = nn_dyn3d_dta(jbdy) == 1                            ! get data from NetCDF file 
     454               bf_alias => bf(jp_bdyv3d,jbdy:jbdy)                         ! alias for v3d structure of bdy number jbdy 
     455               bn_alias => bn_v3d                                          ! alias for v3d structure of nambdy_dta  
     456            ENDIF 
     457 
     458            ! ===================== 
     459            !          tra 
     460            ! ===================== 
     461            IF( jfld == jp_bdytem ) THEN 
     462               cl3 = 'tem' 
     463               igrd = 1                                                    ! T point 
     464               ipk = jpk                                                   ! 3d data 
     465               llneed = dta_bdy(jbdy)%lneed_tra                            ! dta_bdy(jbdy)%tem will be needed 
     466               llread = nn_tra_dta(jbdy) == 1                              ! get data from NetCDF file 
     467               bf_alias => bf(jp_bdytem,jbdy:jbdy)                         ! alias for ssh structure of bdy number jbdy 
     468               bn_alias => bn_tem                                          ! alias for ssh structure of nambdy_dta  
     469            ENDIF 
     470            IF( jfld == jp_bdysal ) THEN 
     471               cl3 = 'sal' 
     472               igrd = 1                                                    ! T point 
     473               ipk = jpk                                                   ! 3d data 
     474               llneed = dta_bdy(jbdy)%lneed_tra                            ! dta_bdy(jbdy)%sal will be needed 
     475               llread = nn_tra_dta(jbdy) == 1                              ! get data from NetCDF file 
     476               bf_alias => bf(jp_bdysal,jbdy:jbdy)                         ! alias for ssh structure of bdy number jbdy 
     477               bn_alias => bn_sal                                          ! alias for ssh structure of nambdy_dta  
     478            ENDIF 
     479 
     480            ! ===================== 
     481            !          ice 
     482            ! ===================== 
     483            IF( jfld == jp_bdya_i ) THEN 
     484               cl3 = 'a_i' 
     485               igrd = 1                                                    ! T point 
     486               ipk = ipl                                                   !  
     487               llneed = dta_bdy(jbdy)%lneed_ice                            ! dta_bdy(jbdy)%a_i will be needed 
     488               llread = nn_ice_dta(jbdy) == 1                              ! get data from NetCDF file 
     489               bf_alias => bf(jp_bdya_i,jbdy:jbdy)                         ! alias for ssh structure of bdy number jbdy 
     490               bn_alias => bn_a_i                                          ! alias for ssh structure of nambdy_dta  
     491            ENDIF 
     492            IF( jfld == jp_bdyh_i ) THEN 
     493               cl3 = 'h_i' 
     494               igrd = 1                                                    ! T point 
     495               ipk = ipl                                                   !  
     496               llneed = dta_bdy(jbdy)%lneed_ice                            ! dta_bdy(jbdy)%h_i will be needed 
     497               llread = nn_ice_dta(jbdy) == 1                              ! get data from NetCDF file 
     498               bf_alias => bf(jp_bdyh_i,jbdy:jbdy)                         ! alias for ssh structure of bdy number jbdy 
     499               bn_alias => bn_h_i                                          ! alias for ssh structure of nambdy_dta  
     500            ENDIF 
     501            IF( jfld == jp_bdyh_s ) THEN 
     502               cl3 = 'h_s' 
     503               igrd = 1                                                    ! T point 
     504               ipk = ipl                                                   !  
     505               llneed = dta_bdy(jbdy)%lneed_ice                            ! dta_bdy(jbdy)%h_s will be needed 
     506               llread = nn_ice_dta(jbdy) == 1                              ! get data from NetCDF file 
     507               bf_alias => bf(jp_bdyh_s,jbdy:jbdy)                         ! alias for ssh structure of bdy number jbdy 
     508               bn_alias => bn_h_s                                          ! alias for ssh structure of nambdy_dta  
     509            ENDIF 
     510 
     511 
     512            IF( llneed ) THEN                                              ! dta_bdy(jbdy)%xxx will be needed 
     513               !                                                           !   -> must be associated with an allocated target 
     514               iszdim = idx_bdy(jbdy)%nblen(igrd)                          ! length of this bdy on this MPI processus 
     515               ALLOCATE( bf_alias(1)%fnow( iszdim, 1, ipk ) )              ! allocate the target 
    636516               ! 
    637                CALL iom_open  ( clname, inum ) 
    638                id1 = iom_varid( inum, bn_a_i%clvar, kdimsz=kdimsz, kndims=kndims, ldstop = .FALSE. ) 
    639                CALL iom_close ( inum ) 
    640  
    641                 IF ( kndims == 4 ) THEN 
    642                  nice_cat = kdimsz(4)   ! Xcat input 
    643                ELSE 
    644                  nice_cat = 1           ! 1cat input       
    645                ENDIF 
    646                ! End test 
    647  
    648                IF( dta%ll_a_i ) THEN 
    649                   jfld = jfld + 1 
    650                   blf_i(jfld) = bn_a_i 
    651                   ibdy(jfld)  = jbdy 
    652                   igrid(jfld) = 1 
    653                   ilen1(jfld) = nblen(igrid(jfld)) 
    654                   ilen3(jfld) = nice_cat 
    655                ENDIF 
    656  
    657                IF( dta%ll_h_i ) THEN 
    658                   jfld = jfld + 1 
    659                   blf_i(jfld) = bn_h_i 
    660                   ibdy(jfld)  = jbdy 
    661                   igrid(jfld) = 1 
    662                   ilen1(jfld) = nblen(igrid(jfld)) 
    663                   ilen3(jfld) = nice_cat 
    664                ENDIF 
    665  
    666                IF( dta%ll_h_s ) THEN 
    667                   jfld = jfld + 1 
    668                   blf_i(jfld) = bn_h_s 
    669                   ibdy(jfld)  = jbdy 
    670                   igrid(jfld) = 1 
    671                   ilen1(jfld) = nblen(igrid(jfld)) 
    672                   ilen3(jfld) = nice_cat 
    673                ENDIF 
    674  
    675             ENDIF 
    676 #endif 
    677             ! Recalculate field counts 
    678             !------------------------- 
    679             IF( jbdy == 1 ) THEN  
    680                nb_bdy_fld_sum = 0 
    681                nb_bdy_fld(jbdy) = jfld 
    682                nb_bdy_fld_sum     = jfld               
    683             ELSE 
    684                nb_bdy_fld(jbdy) = jfld - nb_bdy_fld_sum 
    685                nb_bdy_fld_sum = nb_bdy_fld_sum + nb_bdy_fld(jbdy) 
    686             ENDIF 
    687  
    688             dta%nread(1) = nb_bdy_fld(jbdy) 
    689  
    690          ENDIF ! nn_dta == 1 
    691       ENDDO ! jbdy 
    692  
    693       DO jfld = 1, nb_bdy_fld_sum 
    694          ALLOCATE( bf(jfld)%fnow(ilen1(jfld),1,ilen3(jfld)) ) 
    695          IF( blf_i(jfld)%ln_tint ) ALLOCATE( bf(jfld)%fdta(ilen1(jfld),1,ilen3(jfld),2) ) 
    696          nbmap_ptr(jfld)%ptr => idx_bdy(ibdy(jfld))%nbmap(:,igrid(jfld)) 
    697          nbmap_ptr(jfld)%ll_unstruc = ln_coords_file(ibdy(jfld)) 
    698       ENDDO 
    699  
    700       ! fill bf with blf_i and control print 
    701       !------------------------------------- 
    702       jstart = 1 
    703       DO jbdy = 1, nb_bdy 
    704          jend = jstart - 1 + nb_bdy_fld(jbdy)  
    705          CALL fld_fill( bf(jstart:jend), blf_i(jstart:jend), cn_dir_array(jbdy), 'bdy_dta',   & 
    706          &              'open boundary conditions', 'nambdy_dta' ) 
    707          jstart = jend + 1 
    708       ENDDO 
    709  
    710       DO jfld = 1, nb_bdy_fld_sum 
    711          bf(jfld)%igrd = igrid(jfld) 
    712          bf(jfld)%ibdy = ibdy(jfld) 
    713       ENDDO 
    714  
    715       ! Initialise local boundary data arrays 
    716       ! nn_xxx_dta=0 : allocate space - will be filled from initial conditions later 
    717       ! nn_xxx_dta=1 : point to "fnow" arrays 
    718       !------------------------------------- 
    719  
    720       jfld = 0 
    721       DO jbdy=1, nb_bdy 
    722  
    723          nblen => idx_bdy(jbdy)%nblen 
    724          dta => dta_bdy(jbdy) 
    725  
    726          if(lwp) then 
    727             write(numout,*) '++++++ dta%ll_ssh = ',dta%ll_ssh 
    728             write(numout,*) '++++++ dta%ll_u2d = ',dta%ll_u2d 
    729             write(numout,*) '++++++ dta%ll_v2d = ',dta%ll_v2d 
    730             write(numout,*) '++++++ dta%ll_u3d = ',dta%ll_u3d 
    731             write(numout,*) '++++++ dta%ll_v3d = ',dta%ll_v3d 
    732             write(numout,*) '++++++ dta%ll_tem = ',dta%ll_tem 
    733             write(numout,*) '++++++ dta%ll_sal = ',dta%ll_sal 
    734          endif 
    735  
    736          IF ( nn_dyn2d_dta(jbdy) == 0 .or. nn_dyn2d_dta(jbdy) == 2 ) THEN 
    737             if(lwp) write(numout,*) '++++++ dta%ssh/u2d/u3d allocated space' 
    738             IF( dta%ll_ssh ) ALLOCATE( dta%ssh(nblen(1)) ) 
    739             IF( dta%ll_u2d ) ALLOCATE( dta%u2d(nblen(2)) ) 
    740             IF( dta%ll_v2d ) ALLOCATE( dta%v2d(nblen(3)) ) 
    741          ENDIF 
    742          IF ( nn_dyn2d_dta(jbdy) == 1 .or. nn_dyn2d_dta(jbdy) == 3 ) THEN 
    743             IF( dta%ll_ssh ) THEN 
    744                if(lwp) write(numout,*) '++++++ dta%ssh pointing to fnow' 
    745                jfld = jfld + 1 
    746                dta%ssh => bf(jfld)%fnow(:,1,1) 
    747             ENDIF 
    748             IF ( dta%ll_u2d ) THEN 
    749                IF ( ln_full_vel_array(jbdy) ) THEN 
    750                   if(lwp) write(numout,*) '++++++ dta%u2d allocated space' 
    751                   ALLOCATE( dta%u2d(nblen(2)) ) 
    752                ELSE 
    753                   if(lwp) write(numout,*) '++++++ dta%u2d pointing to fnow' 
    754                   jfld = jfld + 1 
    755                   dta%u2d => bf(jfld)%fnow(:,1,1) 
    756                ENDIF 
    757             ENDIF 
    758             IF ( dta%ll_v2d ) THEN 
    759                IF ( ln_full_vel_array(jbdy) ) THEN 
    760                   if(lwp) write(numout,*) '++++++ dta%v2d allocated space' 
    761                   ALLOCATE( dta%v2d(nblen(3)) ) 
    762                ELSE 
    763                   if(lwp) write(numout,*) '++++++ dta%v2d pointing to fnow' 
    764                   jfld = jfld + 1 
    765                   dta%v2d => bf(jfld)%fnow(:,1,1) 
    766                ENDIF 
    767             ENDIF 
    768          ENDIF 
    769  
    770          IF ( nn_dyn3d_dta(jbdy) == 0 ) THEN 
    771             if(lwp) write(numout,*) '++++++ dta%u3d/v3d allocated space' 
    772             IF( dta%ll_u3d ) ALLOCATE( dta_bdy(jbdy)%u3d(nblen(2),jpk) ) 
    773             IF( dta%ll_v3d ) ALLOCATE( dta_bdy(jbdy)%v3d(nblen(3),jpk) ) 
    774          ENDIF 
    775          IF ( nn_dyn3d_dta(jbdy) == 1 .or. & 
    776            &  ( ln_full_vel_array(jbdy) .and. ( nn_dyn2d_dta(jbdy) == 1 .or. nn_dyn2d_dta(jbdy) == 3 ) ) ) THEN 
    777             IF ( dta%ll_u3d .or. ( ln_full_vel_array(jbdy) .and. dta%ll_u2d ) ) THEN 
    778                if(lwp) write(numout,*) '++++++ dta%u3d pointing to fnow' 
    779                jfld = jfld + 1 
    780                dta_bdy(jbdy)%u3d => bf(jfld)%fnow(:,1,:) 
    781             ENDIF 
    782             IF ( dta%ll_v3d .or. ( ln_full_vel_array(jbdy) .and. dta%ll_v2d ) ) THEN 
    783                if(lwp) write(numout,*) '++++++ dta%v3d pointing to fnow' 
    784                jfld = jfld + 1 
    785                dta_bdy(jbdy)%v3d => bf(jfld)%fnow(:,1,:) 
    786             ENDIF 
    787          ENDIF 
    788  
    789          IF( nn_tra_dta(jbdy) == 0 ) THEN 
    790             if(lwp) write(numout,*) '++++++ dta%tem/sal allocated space' 
    791             IF( dta%ll_tem ) ALLOCATE( dta_bdy(jbdy)%tem(nblen(1),jpk) ) 
    792             IF( dta%ll_sal ) ALLOCATE( dta_bdy(jbdy)%sal(nblen(1),jpk) ) 
    793          ELSE 
    794             IF( dta%ll_tem ) THEN 
    795                if(lwp) write(numout,*) '++++++ dta%tem pointing to fnow' 
    796                jfld = jfld + 1 
    797                dta_bdy(jbdy)%tem => bf(jfld)%fnow(:,1,:) 
    798             ENDIF 
    799             IF( dta%ll_sal ) THEN  
    800                if(lwp) write(numout,*) '++++++ dta%sal pointing to fnow' 
    801                jfld = jfld + 1 
    802                dta_bdy(jbdy)%sal => bf(jfld)%fnow(:,1,:) 
    803             ENDIF 
    804          ENDIF 
    805  
    806 #if defined key_si3 
    807          IF (cn_ice(jbdy) /= 'none') THEN 
    808             IF( nn_ice_dta(jbdy) == 0 ) THEN 
    809                ALLOCATE( dta_bdy(jbdy)%a_i(nblen(1),jpl) ) 
    810                ALLOCATE( dta_bdy(jbdy)%h_i(nblen(1),jpl) ) 
    811                ALLOCATE( dta_bdy(jbdy)%h_s(nblen(1),jpl) ) 
    812             ELSE 
    813                IF ( nice_cat == jpl ) THEN ! case input cat = jpl 
    814                   jfld = jfld + 1 
    815                   dta_bdy(jbdy)%a_i => bf(jfld)%fnow(:,1,:) 
    816                   jfld = jfld + 1 
    817                   dta_bdy(jbdy)%h_i => bf(jfld)%fnow(:,1,:) 
    818                   jfld = jfld + 1 
    819                   dta_bdy(jbdy)%h_s => bf(jfld)%fnow(:,1,:) 
    820                ELSE                        ! case input cat = 1 OR (/=1 and /=jpl) 
    821                   jfld_ait(jbdy)  = jfld + 1 
    822                   jfld_htit(jbdy) = jfld + 2 
    823                   jfld_htst(jbdy) = jfld + 3 
    824                   jfld     = jfld + 3 
    825                   ALLOCATE( dta_bdy(jbdy)%a_i(nblen(1),jpl) ) 
    826                   ALLOCATE( dta_bdy(jbdy)%h_i(nblen(1),jpl) ) 
    827                   ALLOCATE( dta_bdy(jbdy)%h_s(nblen(1),jpl) ) 
    828                   dta_bdy(jbdy)%a_i(:,:) = 0._wp 
    829                   dta_bdy(jbdy)%h_i(:,:) = 0._wp 
    830                   dta_bdy(jbdy)%h_s(:,:) = 0._wp 
    831                ENDIF 
    832  
    833             ENDIF 
    834          ENDIF 
    835 #endif 
     517               IF( llread ) THEN                                           ! get data from NetCDF file 
     518                  CALL fld_fill( bf_alias, bn_alias, cn_dir, 'bdy_dta', cl3//' '//ctmp1, ctmp2 )   ! use namelist info 
     519                  IF( bf_alias(1)%ln_tint ) ALLOCATE( bf_alias(1)%fdta( iszdim, 1, ipk, 2 ) ) 
     520                  bf_alias(1)%imap => idx_bdy(jbdy)%nbmap(1:iszdim,igrd)      ! associate the mapping used for this bdy 
     521                  bf_alias(1)%igrd = igrd                                     ! used only for vertical integration of 3D arrays 
     522                  bf_alias(1)%ltotvel = ln_full_vel                           ! T if u3d is full velocity 
     523               ENDIF 
     524 
     525               ! associate the pointer and get rid of the dimensions with a size equal to 1 
     526               IF( jfld == jp_bdyssh           ) dta_bdy(jbdy)%ssh => bf_alias(1)%fnow(:,1,1) 
     527               IF( jfld == jp_bdyu2d           ) dta_bdy(jbdy)%u2d => bf_alias(1)%fnow(:,1,1) 
     528               IF( jfld == jp_bdyv2d           ) dta_bdy(jbdy)%v2d => bf_alias(1)%fnow(:,1,1) 
     529               IF( jfld == jp_bdyu3d           ) dta_bdy(jbdy)%u3d => bf_alias(1)%fnow(:,1,:) 
     530               IF( jfld == jp_bdyv3d           ) dta_bdy(jbdy)%v3d => bf_alias(1)%fnow(:,1,:) 
     531               IF( jfld == jp_bdytem           ) dta_bdy(jbdy)%tem => bf_alias(1)%fnow(:,1,:) 
     532               IF( jfld == jp_bdysal           ) dta_bdy(jbdy)%sal => bf_alias(1)%fnow(:,1,:) 
     533               IF( jfld == jp_bdya_i ) THEN 
     534                  IF( ipk == jpl ) THEN   ;   dta_bdy(jbdy)%a_i => bf_alias(1)%fnow(:,1,:) 
     535                  ELSE                    ;   ALLOCATE( dta_bdy(jbdy)%a_i(iszdim,jpl) ) 
     536                  ENDIF 
     537               ENDIF 
     538               IF( jfld == jp_bdyh_i ) THEN 
     539                  IF( ipk == jpl ) THEN   ;   dta_bdy(jbdy)%h_i => bf_alias(1)%fnow(:,1,:) 
     540                  ELSE                    ;   ALLOCATE( dta_bdy(jbdy)%h_i(iszdim,jpl) ) 
     541                  ENDIF 
     542               ENDIF 
     543               IF( jfld == jp_bdyh_s ) THEN 
     544                  IF( ipk == jpl ) THEN   ;   dta_bdy(jbdy)%h_s => bf_alias(1)%fnow(:,1,:) 
     545                  ELSE                    ;   ALLOCATE( dta_bdy(jbdy)%h_s(iszdim,jpl) ) 
     546                  ENDIF 
     547               ENDIF 
     548            ENDIF 
     549 
     550         END DO   ! jpbdyfld 
    836551         ! 
    837552      END DO ! jbdy  
    838553      ! 
    839554   END SUBROUTINE bdy_dta_init 
    840  
     555    
    841556   !!============================================================================== 
    842557END MODULE bdydta 
Note: See TracChangeset for help on using the changeset viewer.