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 8813 for branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/BDY/bdydta.F90 – NEMO

Ignore:
Timestamp:
2017-11-24T17:56:51+01:00 (6 years ago)
Author:
gm
Message:

#1911 (ENHANCE-09): PART I.3 - phasing with updated branch dev_r8183_ICEMODEL revision 8787

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r7881_ENHANCE09_RK3/NEMOGCM/NEMO/OPA_SRC/BDY/bdydta.F90

    r8586 r8813  
    5151 
    5252#if defined key_lim3 
    53    LOGICAL :: ll_bdylim3                  ! determine whether ice input is 1cat (F) or Xcat (T) type 
    54    INTEGER :: jfld_hti, jfld_hts, jfld_ai ! indices of ice thickness, snow thickness and concentration in bf structure 
     53   INTEGER ::   nice_cat                      ! number of categories in the input file 
     54   INTEGER ::   jfld_hti, jfld_hts, jfld_ai  ! indices of ice thickness, snow thickness and concentration in bf structure 
    5555#endif 
    5656 
    5757   !!---------------------------------------------------------------------- 
    58    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     58   !! NEMO/OPA 4.0 , NEMO Consortium (2017) 
    5959   !! $Id$  
    6060   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
     
    8080      !                                               ! etc. 
    8181      ! 
    82       INTEGER ::  ib_bdy, jfld, jstart, jend, ib, ii, ij, ik, igrd, jl  ! local indices 
     82      INTEGER ::  jbdy, jfld, jstart, jend, ib, jl  ! dummy loop indices 
     83      INTEGER ::  ii, ij, ik, igrd                  ! local integers 
    8384      INTEGER,          DIMENSION(jpbgrd) ::   ilen1  
    8485      INTEGER, POINTER, DIMENSION(:)      ::   nblen, nblenrim  ! short cuts 
     
    9596         !----------------------------- 
    9697          
    97          DO ib_bdy = 1, nb_bdy 
     98         DO jbdy = 1, nb_bdy 
    9899            ! 
    99             nblen => idx_bdy(ib_bdy)%nblen 
    100             nblenrim => idx_bdy(ib_bdy)%nblenrim 
    101             dta => dta_bdy(ib_bdy) 
    102  
    103             IF( nn_dyn2d_dta(ib_bdy) == 0 ) THEN  
     100            nblen    => idx_bdy(jbdy)%nblen 
     101            nblenrim => idx_bdy(jbdy)%nblenrim 
     102            dta      => dta_bdy(jbdy) 
     103            ! 
     104            IF( nn_dyn2d_dta(jbdy) == 0 ) THEN  
    104105               ilen1(:) = nblen(:) 
    105106               IF( dta%ll_ssh ) THEN  
    106107                  igrd = 1 
    107108                  DO ib = 1, ilen1(igrd) 
    108                      ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    109                      ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 
    110                      dta_bdy(ib_bdy)%ssh(ib) = sshn(ii,ij) * tmask(ii,ij,1)          
     109                     ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     110                     ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     111                     dta_bdy(jbdy)%ssh(ib) = sshn(ii,ij) * tmask(ii,ij,1)          
    111112                  END DO  
    112                END IF 
     113               ENDIF 
    113114               IF( dta%ll_u2d ) THEN  
    114115                  igrd = 2 
    115116                  DO ib = 1, ilen1(igrd) 
    116                      ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    117                      ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 
    118                      dta_bdy(ib_bdy)%u2d(ib) = un_b(ii,ij) * umask(ii,ij,1)          
     117                     ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     118                     ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     119                     dta_bdy(jbdy)%u2d(ib) = un_b(ii,ij) * umask(ii,ij,1)          
    119120                  END DO  
    120                END IF 
     121               ENDIF 
    121122               IF( dta%ll_v2d ) THEN  
    122123                  igrd = 3 
    123124                  DO ib = 1, ilen1(igrd) 
    124                      ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    125                      ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 
    126                      dta_bdy(ib_bdy)%v2d(ib) = vn_b(ii,ij) * vmask(ii,ij,1)          
     125                     ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     126                     ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     127                     dta_bdy(jbdy)%v2d(ib) = vn_b(ii,ij) * vmask(ii,ij,1)          
    127128                  END DO  
    128                END IF 
    129             ENDIF 
    130  
    131             IF( nn_dyn3d_dta(ib_bdy) == 0 ) THEN  
     129               ENDIF 
     130            ENDIF 
     131            ! 
     132            IF( nn_dyn3d_dta(jbdy) == 0 ) THEN  
    132133               ilen1(:) = nblen(:) 
    133134               IF( dta%ll_u3d ) THEN  
     
    135136                  DO ib = 1, ilen1(igrd) 
    136137                     DO ik = 1, jpkm1 
    137                         ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    138                         ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 
    139                         dta_bdy(ib_bdy)%u3d(ib,ik) =  ( un(ii,ij,ik) - un_b(ii,ij) ) * umask(ii,ij,ik)          
     138                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     139                        ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     140                        dta_bdy(jbdy)%u3d(ib,ik) =  ( un(ii,ij,ik) - un_b(ii,ij) ) * umask(ii,ij,ik)          
    140141                     END DO 
    141142                  END DO  
    142                END IF 
     143               ENDIF 
    143144               IF( dta%ll_v3d ) THEN  
    144145                  igrd = 3  
    145146                  DO ib = 1, ilen1(igrd) 
    146147                     DO ik = 1, jpkm1 
    147                         ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    148                         ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 
    149                         dta_bdy(ib_bdy)%v3d(ib,ik) =  ( vn(ii,ij,ik) - vn_b(ii,ij) ) * vmask(ii,ij,ik)          
     148                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     149                        ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     150                        dta_bdy(jbdy)%v3d(ib,ik) =  ( vn(ii,ij,ik) - vn_b(ii,ij) ) * vmask(ii,ij,ik)          
    150151                        END DO 
    151152                  END DO  
    152                END IF 
    153             ENDIF 
    154  
    155             IF( nn_tra_dta(ib_bdy) == 0 ) THEN  
     153               ENDIF 
     154            ENDIF 
     155 
     156            IF( nn_tra_dta(jbdy) == 0 ) THEN  
    156157               ilen1(:) = nblen(:) 
    157158               IF( dta%ll_tem ) THEN 
     
    159160                  DO ib = 1, ilen1(igrd) 
    160161                     DO ik = 1, jpkm1 
    161                         ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    162                         ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 
    163                         dta_bdy(ib_bdy)%tem(ib,ik) = tsn(ii,ij,ik,jp_tem) * tmask(ii,ij,ik)          
     162                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     163                        ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     164                        dta_bdy(jbdy)%tem(ib,ik) = tsn(ii,ij,ik,jp_tem) * tmask(ii,ij,ik)          
    164165                     END DO 
    165166                  END DO  
    166                END IF 
     167               ENDIF 
    167168               IF( dta%ll_sal ) THEN 
    168169                  igrd = 1  
    169170                  DO ib = 1, ilen1(igrd) 
    170171                     DO ik = 1, jpkm1 
    171                         ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    172                         ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 
    173                         dta_bdy(ib_bdy)%sal(ib,ik) = tsn(ii,ij,ik,jp_sal) * tmask(ii,ij,ik)          
     172                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     173                        ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     174                        dta_bdy(jbdy)%sal(ib,ik) = tsn(ii,ij,ik,jp_sal) * tmask(ii,ij,ik)          
    174175                     END DO 
    175176                  END DO  
    176                END IF 
    177             ENDIF 
    178  
    179 #if defined key_lim3 
    180             IF( nn_ice_lim_dta(ib_bdy) == 0 ) THEN  
     177               ENDIF 
     178            ENDIF 
     179 
     180#if defined key_lim3 
     181            IF( nn_ice_lim_dta(jbdy) == 0 ) THEN    ! set ice to initial values 
    181182               ilen1(:) = nblen(:) 
    182183               IF( dta%ll_a_i ) THEN 
     
    184185                  DO jl = 1, jpl 
    185186                     DO ib = 1, ilen1(igrd) 
    186                         ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    187                         ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 
    188                         dta_bdy(ib_bdy)%a_i (ib,jl) =  a_i(ii,ij,jl) * tmask(ii,ij,1)  
     187                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     188                        ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     189                        dta_bdy(jbdy)%a_i (ib,jl) =  a_i(ii,ij,jl) * tmask(ii,ij,1)  
    189190                     END DO 
    190191                  END DO 
     
    194195                  DO jl = 1, jpl 
    195196                     DO ib = 1, ilen1(igrd) 
    196                         ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    197                         ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 
    198                         dta_bdy(ib_bdy)%h_i (ib,jl) =  h_i(ii,ij,jl) * tmask(ii,ij,1)  
     197                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     198                        ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     199                        dta_bdy(jbdy)%h_i (ib,jl) =  h_i(ii,ij,jl) * tmask(ii,ij,1)  
    199200                     END DO 
    200201                  END DO 
     
    204205                  DO jl = 1, jpl 
    205206                     DO ib = 1, ilen1(igrd) 
    206                         ii = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    207                         ij = idx_bdy(ib_bdy)%nbj(ib,igrd) 
    208                         dta_bdy(ib_bdy)%h_s (ib,jl) =  h_s(ii,ij,jl) * tmask(ii,ij,1)  
     207                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     208                        ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     209                        dta_bdy(jbdy)%h_s (ib,jl) =  h_s(ii,ij,jl) * tmask(ii,ij,1)  
    209210                     END DO 
    210211                  END DO 
     
    212213            ENDIF 
    213214#endif 
    214          END DO ! ib_bdy 
     215         END DO ! jbdy 
    215216         ! 
    216217      ENDIF ! kt == nit000 
     
    220221      
    221222      jstart = 1 
    222       DO ib_bdy = 1, nb_bdy    
    223          dta => dta_bdy(ib_bdy) 
    224          IF( nn_dta(ib_bdy) == 1 ) THEN ! skip this bit if no external data required 
     223      DO jbdy = 1, nb_bdy    
     224         dta => dta_bdy(jbdy) 
     225         IF( nn_dta(jbdy) == 1 ) THEN ! skip this bit if no external data required 
    225226       
    226227            IF( PRESENT(jit) ) THEN 
    227228               ! Update barotropic boundary conditions only 
    228229               ! jit is optional argument for fld_read and bdytide_update 
    229                IF( cn_dyn2d(ib_bdy) /= 'none' ) THEN 
    230                   IF( nn_dyn2d_dta(ib_bdy) == 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays 
     230               IF( cn_dyn2d(jbdy) /= 'none' ) THEN 
     231                  IF( nn_dyn2d_dta(jbdy) == 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays 
    231232                     IF( dta%ll_ssh ) dta%ssh(:) = 0._wp 
    232233                     IF( dta%ll_u2d ) dta%u2d(:) = 0._wp 
    233234                     IF( dta%ll_u3d ) dta%v2d(:) = 0._wp 
    234235                  ENDIF 
    235                   IF (cn_tra(ib_bdy) /= 'runoff') THEN 
    236                      IF( nn_dyn2d_dta(ib_bdy) == 1 .OR. nn_dyn2d_dta(ib_bdy) == 3 ) THEN 
     236                  IF (cn_tra(jbdy) /= 'runoff') THEN 
     237                     IF( nn_dyn2d_dta(jbdy) == 1 .OR. nn_dyn2d_dta(jbdy) == 3 ) THEN 
    237238 
    238239                        jend = jstart + dta%nread(2) - 1 
    239                         IF( ln_full_vel_array(ib_bdy) ) THEN 
     240                        IF( ln_full_vel_array(jbdy) ) THEN 
    240241                           CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), map=nbmap_ptr(jstart:jend),  & 
    241                                      & kit=jit, kt_offset=time_offset , jpk_bdy=nb_jpk_bdy, fvl=ln_full_vel_array(ib_bdy)  ) 
     242                                     & kit=jit, kt_offset=time_offset , jpk_bdy=nb_jpk_bdy, fvl=ln_full_vel_array(jbdy)  ) 
    242243                        ELSE 
    243244                           CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), map=nbmap_ptr(jstart:jend),  & 
     
    246247 
    247248                        ! If full velocities in boundary data then extract barotropic velocities from 3D fields 
    248                         IF( ln_full_vel_array(ib_bdy) .AND.                                             & 
    249                           &    ( nn_dyn2d_dta(ib_bdy) == 1 .OR. nn_dyn2d_dta(ib_bdy) == 3 .OR.  & 
    250                           &      nn_dyn3d_dta(ib_bdy) == 1 ) )THEN 
     249                        IF( ln_full_vel_array(jbdy) .AND.                                             & 
     250                          &    ( nn_dyn2d_dta(jbdy) == 1 .OR. nn_dyn2d_dta(jbdy) == 3 .OR.  & 
     251                          &      nn_dyn3d_dta(jbdy) == 1 ) )THEN 
    251252 
    252253                           igrd = 2                      ! zonal velocity 
    253254                           dta%u2d(:) = 0._wp 
    254                            DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 
    255                               ii   = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    256                               ij   = idx_bdy(ib_bdy)%nbj(ib,igrd) 
     255                           DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
     256                              ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
     257                              ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
    257258                              DO ik = 1, jpkm1 
    258259                                 dta%u2d(ib) = dta%u2d(ib) & 
     
    263264                           igrd = 3                      ! meridional velocity 
    264265                           dta%v2d(:) = 0._wp 
    265                            DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 
    266                               ii   = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    267                               ij   = idx_bdy(ib_bdy)%nbj(ib,igrd) 
     266                           DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
     267                              ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
     268                              ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
    268269                              DO ik = 1, jpkm1 
    269270                                 dta%v2d(ib) = dta%v2d(ib) & 
     
    274275                        ENDIF                     
    275276                     ENDIF 
    276                      IF( nn_dyn2d_dta(ib_bdy) .ge. 2 ) THEN ! update tidal harmonic forcing 
    277                         CALL bdytide_update( kt=kt, idx=idx_bdy(ib_bdy), dta=dta, td=tides(ib_bdy),   &  
     277                     IF( nn_dyn2d_dta(jbdy) .ge. 2 ) THEN ! update tidal harmonic forcing 
     278                        CALL bdytide_update( kt=kt, idx=idx_bdy(jbdy), dta=dta, td=tides(jbdy),   &  
    278279                          &                 jit=jit, time_offset=time_offset ) 
    279280                     ENDIF 
     
    281282               ENDIF 
    282283            ELSE 
    283                IF (cn_tra(ib_bdy) == 'runoff') then      ! runoff condition 
    284                   jend = nb_bdy_fld(ib_bdy) 
     284               IF (cn_tra(jbdy) == 'runoff') then      ! runoff condition 
     285                  jend = nb_bdy_fld(jbdy) 
    285286                  CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend),  & 
    286287                               & map=nbmap_ptr(jstart:jend), kt_offset=time_offset ) 
    287288                  ! 
    288289                  igrd = 2                      ! zonal velocity 
    289                   DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 
    290                      ii   = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    291                      ij   = idx_bdy(ib_bdy)%nbj(ib,igrd) 
     290                  DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
     291                     ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
     292                     ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
    292293                     dta%u2d(ib) = dta%u2d(ib) / ( e2u(ii,ij) * hu_0(ii,ij) ) 
    293294                  END DO 
    294295                  ! 
    295296                  igrd = 3                      ! meridional velocity 
    296                   DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 
    297                      ii   = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    298                      ij   = idx_bdy(ib_bdy)%nbj(ib,igrd) 
     297                  DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
     298                     ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
     299                     ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
    299300                     dta%v2d(ib) = dta%v2d(ib) / ( e1v(ii,ij) * hv_0(ii,ij) ) 
    300301                  END DO 
    301302               ELSE 
    302                   IF( nn_dyn2d_dta(ib_bdy) == 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays 
     303                  IF( nn_dyn2d_dta(jbdy) == 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays 
    303304                     IF( dta%ll_ssh ) dta%ssh(:) = 0._wp 
    304305                     IF( dta%ll_u2d ) dta%u2d(:) = 0._wp 
     
    308309                     jend = jstart + dta%nread(1) - 1 
    309310                     CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), & 
    310                                   & map=nbmap_ptr(jstart:jend), kt_offset=time_offset, jpk_bdy=nb_jpk_bdy, fvl=ln_full_vel_array(ib_bdy) ) 
     311                                  & map=nbmap_ptr(jstart:jend), kt_offset=time_offset, jpk_bdy=nb_jpk_bdy, fvl=ln_full_vel_array(jbdy) ) 
    311312                  ENDIF 
    312313                  ! If full velocities in boundary data then split into barotropic and baroclinic data 
    313                   IF( ln_full_vel_array(ib_bdy) .and.                                             & 
    314                     & ( nn_dyn2d_dta(ib_bdy) == 1 .OR. nn_dyn2d_dta(ib_bdy) == 3 .OR. & 
    315                     &   nn_dyn3d_dta(ib_bdy) == 1 ) ) THEN 
     314                  IF( ln_full_vel_array(jbdy) .and.                                             & 
     315                    & ( nn_dyn2d_dta(jbdy) == 1 .OR. nn_dyn2d_dta(jbdy) == 3 .OR. & 
     316                    &   nn_dyn3d_dta(jbdy) == 1 ) ) THEN 
    316317                     igrd = 2                      ! zonal velocity 
    317318                     dta%u2d(:) = 0._wp 
    318                      DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 
    319                         ii   = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    320                         ij   = idx_bdy(ib_bdy)%nbj(ib,igrd) 
     319                     DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
     320                        ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
     321                        ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
    321322                        DO ik = 1, jpkm1 
    322323                           dta%u2d(ib) = dta%u2d(ib) & 
     
    330331                     igrd = 3                      ! meridional velocity 
    331332                     dta%v2d(:) = 0._wp 
    332                      DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 
    333                         ii   = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    334                         ij   = idx_bdy(ib_bdy)%nbj(ib,igrd) 
     333                     DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
     334                        ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
     335                        ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
    335336                        DO ik = 1, jpkm1 
    336337                           dta%v2d(ib) = dta%v2d(ib) & 
     
    346347               ENDIF 
    347348#if defined key_lim3 
    348                IF( .NOT. ll_bdylim3 .AND. cn_ice_lim(ib_bdy) /= 'none' .AND. nn_ice_lim_dta(ib_bdy) == 1 ) THEN ! bdy ice input (case input is 1cat) 
    349                 CALL ice_var_itd ( bf(jfld_hti)%fnow(:,1,1), bf(jfld_hts)%fnow(:,1,1), bf(jfld_ai)%fnow(:,1,1), & 
    350                                   & dta_bdy(ib_bdy)%h_i,     dta_bdy(ib_bdy)%h_s,     dta_bdy(ib_bdy)%a_i     ) 
     349               IF( cn_ice_lim(jbdy) /= 'none' .AND. nn_ice_lim_dta(jbdy) == 1 ) THEN 
     350                  IF( nice_cat == 1 ) THEN ! case input cat = 1 
     351                     CALL ice_var_itd ( bf(jfld_hti)%fnow(:,1,1), bf(jfld_hts)%fnow(:,1,1), bf(jfld_ai)%fnow(:,1,1), & 
     352                        &               dta_bdy(jbdy)%h_i     , dta_bdy(jbdy)%h_s     , dta_bdy(jbdy)%a_i    ) 
     353                  ELSEIF( nice_cat /= 1 .AND. nice_cat /= jpl ) THEN ! case input cat /=1 and /=jpl 
     354                     CALL ice_var_itd2( bf(jfld_hti)%fnow(:,1,:), bf(jfld_hts)%fnow(:,1,:), bf(jfld_ai)%fnow(:,1,:), & 
     355                        &               dta_bdy(jbdy)%h_i     , dta_bdy(jbdy)%h_s     , dta_bdy(jbdy)%a_i    ) 
     356                  ENDIF 
    351357               ENDIF 
    352358#endif 
    353359            ENDIF 
    354360            jstart = jstart + dta%nread(1) 
    355          END IF ! nn_dta(ib_bdy) = 1 
    356       END DO  ! ib_bdy 
     361         ENDIF    ! nn_dta(jbdy) = 1 
     362      END DO  ! jbdy 
    357363 
    358364      IF ( ln_tide ) THEN 
    359365         IF (ln_dynspg_ts) THEN      ! Fill temporary arrays with slow-varying bdy data                            
    360             DO ib_bdy = 1, nb_bdy    ! Tidal component added in ts loop 
    361                IF ( nn_dyn2d_dta(ib_bdy) .ge. 2 ) THEN 
    362                   nblen => idx_bdy(ib_bdy)%nblen 
    363                   nblenrim => idx_bdy(ib_bdy)%nblenrim 
    364                   IF( cn_dyn2d(ib_bdy) == 'frs' ) THEN; ilen1(:)=nblen(:) ; ELSE ; ilen1(:)=nblenrim(:) ; ENDIF  
    365                   IF ( dta_bdy(ib_bdy)%ll_ssh ) dta_bdy_s(ib_bdy)%ssh(1:ilen1(1)) = dta_bdy(ib_bdy)%ssh(1:ilen1(1)) 
    366                   IF ( dta_bdy(ib_bdy)%ll_u2d ) dta_bdy_s(ib_bdy)%u2d(1:ilen1(2)) = dta_bdy(ib_bdy)%u2d(1:ilen1(2)) 
    367                   IF ( dta_bdy(ib_bdy)%ll_v2d ) dta_bdy_s(ib_bdy)%v2d(1:ilen1(3)) = dta_bdy(ib_bdy)%v2d(1:ilen1(3)) 
     366            DO jbdy = 1, nb_bdy    ! Tidal component added in ts loop 
     367               IF ( nn_dyn2d_dta(jbdy) .ge. 2 ) THEN 
     368                  nblen => idx_bdy(jbdy)%nblen 
     369                  nblenrim => idx_bdy(jbdy)%nblenrim 
     370                  IF( cn_dyn2d(jbdy) == 'frs' ) THEN; ilen1(:)=nblen(:) ; ELSE ; ilen1(:)=nblenrim(:) ; ENDIF  
     371                  IF ( dta_bdy(jbdy)%ll_ssh ) dta_bdy_s(jbdy)%ssh(1:ilen1(1)) = dta_bdy(jbdy)%ssh(1:ilen1(1)) 
     372                  IF ( dta_bdy(jbdy)%ll_u2d ) dta_bdy_s(jbdy)%u2d(1:ilen1(2)) = dta_bdy(jbdy)%u2d(1:ilen1(2)) 
     373                  IF ( dta_bdy(jbdy)%ll_v2d ) dta_bdy_s(jbdy)%v2d(1:ilen1(3)) = dta_bdy(jbdy)%v2d(1:ilen1(3)) 
    368374               ENDIF 
    369375            END DO 
     
    375381 
    376382      IF ( ln_apr_obc ) THEN 
    377          DO ib_bdy = 1, nb_bdy 
    378             IF (cn_tra(ib_bdy) /= 'runoff')THEN 
     383         DO jbdy = 1, nb_bdy 
     384            IF (cn_tra(jbdy) /= 'runoff')THEN 
    379385               igrd = 1                      ! meridional velocity 
    380                DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 
    381                   ii   = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    382                   ij   = idx_bdy(ib_bdy)%nbj(ib,igrd) 
    383                   dta_bdy(ib_bdy)%ssh(ib) = dta_bdy(ib_bdy)%ssh(ib) + ssh_ib(ii,ij) 
     386               DO ib = 1, idx_bdy(jbdy)%nblenrim(igrd) 
     387                  ii   = idx_bdy(jbdy)%nbi(ib,igrd) 
     388                  ij   = idx_bdy(jbdy)%nbj(ib,igrd) 
     389                  dta_bdy(jbdy)%ssh(ib) = dta_bdy(jbdy)%ssh(ib) + ssh_ib(ii,ij) 
    384390               END DO 
    385391            ENDIF 
     
    402408      !!                 
    403409      !!---------------------------------------------------------------------- 
    404       INTEGER ::   ib_bdy, jfld, jstart, jend, ierror, ios     ! Local integers 
     410      INTEGER ::   jbdy, jfld, jstart, jend, ierror, ios     ! Local integers 
    405411      ! 
    406412      CHARACTER(len=100)                     ::   cn_dir        ! Root directory for location of data files 
     
    408414      CHARACTER(len = 256)::   clname                           ! temporary file name 
    409415      LOGICAL                                ::   ln_full_vel   ! =T => full velocities in 3D boundary data 
    410                                                                 ! =F => baroclinic velocities in 3D boundary data 
     416      !                                                         ! =F => baroclinic velocities in 3D boundary data 
    411417      INTEGER                                ::   ilen_global   ! Max length required for global bdy dta arrays 
    412418      INTEGER, ALLOCATABLE, DIMENSION(:)     ::   ilen1, ilen3  ! size of 1st and 3rd dimensions of local arrays 
     
    416422      TYPE(OBC_DATA), POINTER                ::   dta           ! short cut 
    417423#if defined key_lim3 
    418       INTEGER               ::   zndims   ! number of dimensions in an array (i.e. 3 = wo ice cat; 4 = w ice cat) 
     424      INTEGER               ::   kndims   ! number of dimensions in an array (i.e. 3 = wo ice cat; 4 = w ice cat) 
     425      INTEGER, DIMENSION(4) ::   kdimsz   ! size   of dimensions 
    419426      INTEGER               ::   inum,id1 ! local integer 
    420427#endif 
     
    440447 
    441448      ! Set nn_dta 
    442       DO ib_bdy = 1, nb_bdy 
    443          nn_dta(ib_bdy) = MAX(  nn_dyn2d_dta(ib_bdy)       & 
    444                                ,nn_dyn3d_dta(ib_bdy)       & 
    445                                ,nn_tra_dta(ib_bdy)         & 
    446 #if defined key_lim3 
    447                               ,nn_ice_lim_dta(ib_bdy)    & 
     449      DO jbdy = 1, nb_bdy 
     450         nn_dta(jbdy) = MAX(   nn_dyn2d_dta  (jbdy)    & 
     451            &                , nn_dyn3d_dta  (jbdy)    & 
     452            &                , nn_tra_dta    (jbdy)    & 
     453#if defined key_lim3 
     454            &                , nn_ice_lim_dta(jbdy)    & 
    448455#endif 
    449456                              ) 
    450          IF(nn_dta(ib_bdy) > 1) nn_dta(ib_bdy) = 1 
     457         IF(nn_dta(jbdy) > 1)   nn_dta(jbdy) = 1 
    451458      END DO 
    452459 
     
    455462      ALLOCATE( nb_bdy_fld(nb_bdy) ) 
    456463      nb_bdy_fld(:) = 0 
    457       DO ib_bdy = 1, nb_bdy          
    458          IF( cn_dyn2d(ib_bdy) /= 'none' .and. ( nn_dyn2d_dta(ib_bdy) == 1 .or. nn_dyn2d_dta(ib_bdy) == 3 ) ) THEN 
    459             nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 3 
    460          ENDIF 
    461          IF( cn_dyn3d(ib_bdy) /= 'none' .and. nn_dyn3d_dta(ib_bdy) == 1 ) THEN 
    462             nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 2 
    463          ENDIF 
    464          IF( cn_tra(ib_bdy) /= 'none' .and. nn_tra_dta(ib_bdy) == 1  ) THEN 
    465             nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 2 
    466          ENDIF 
    467 #if defined key_lim3 
    468          IF( cn_ice_lim(ib_bdy) /= 'none' .and. nn_ice_lim_dta(ib_bdy) == 1  ) THEN 
    469             nb_bdy_fld(ib_bdy) = nb_bdy_fld(ib_bdy) + 3 
     464      DO jbdy = 1, nb_bdy          
     465         IF( cn_dyn2d(jbdy) /= 'none' .AND. ( nn_dyn2d_dta(jbdy) == 1 .or. nn_dyn2d_dta(jbdy) == 3 ) ) THEN 
     466            nb_bdy_fld(jbdy) = nb_bdy_fld(jbdy) + 3 
     467         ENDIF 
     468         IF( cn_dyn3d(jbdy) /= 'none' .AND. nn_dyn3d_dta(jbdy) == 1 ) THEN 
     469            nb_bdy_fld(jbdy) = nb_bdy_fld(jbdy) + 2 
     470         ENDIF 
     471         IF( cn_tra(jbdy) /= 'none' .AND. nn_tra_dta(jbdy) == 1  ) THEN 
     472            nb_bdy_fld(jbdy) = nb_bdy_fld(jbdy) + 2 
     473         ENDIF 
     474#if defined key_lim3 
     475         IF( cn_ice_lim(jbdy) /= 'none' .AND. nn_ice_lim_dta(jbdy) == 1  ) THEN 
     476            nb_bdy_fld(jbdy) = nb_bdy_fld(jbdy) + 3 
    470477         ENDIF 
    471478#endif                
    472          IF(lwp) WRITE(numout,*) 'Maximum number of files to open =',nb_bdy_fld(ib_bdy) 
     479         IF(lwp) WRITE(numout,*) 'Maximum number of files to open =', nb_bdy_fld(jbdy) 
    473480      END DO             
    474481 
     
    496503      REWIND(numnam_cfg) 
    497504      jfld = 0  
    498       DO ib_bdy = 1, nb_bdy          
    499          IF( nn_dta(ib_bdy) == 1 ) THEN 
     505      DO jbdy = 1, nb_bdy          
     506         IF( nn_dta(jbdy) == 1 ) THEN 
    500507            READ  ( numnam_ref, nambdy_dta, IOSTAT = ios, ERR = 901) 
    501508901         IF( ios /= 0 )   CALL ctl_nam ( ios , 'nambdy_dta in reference namelist', lwp ) 
     
    505512            IF(lwm) WRITE( numond, nambdy_dta ) 
    506513 
    507             cn_dir_array(ib_bdy) = cn_dir 
    508             ln_full_vel_array(ib_bdy) = ln_full_vel 
    509  
    510             nblen => idx_bdy(ib_bdy)%nblen 
    511             nblenrim => idx_bdy(ib_bdy)%nblenrim 
    512             dta => dta_bdy(ib_bdy) 
     514            cn_dir_array(jbdy) = cn_dir 
     515            ln_full_vel_array(jbdy) = ln_full_vel 
     516 
     517            nblen => idx_bdy(jbdy)%nblen 
     518            nblenrim => idx_bdy(jbdy)%nblenrim 
     519            dta => dta_bdy(jbdy) 
    513520            dta%nread(2) = 0 
    514521 
    515522            ! Only read in necessary fields for this set. 
    516523            ! Important that barotropic variables come first. 
    517             IF( nn_dyn2d_dta(ib_bdy) == 1 .or. nn_dyn2d_dta(ib_bdy) == 3 ) THEN  
     524            IF( nn_dyn2d_dta(jbdy) == 1 .or. nn_dyn2d_dta(jbdy) == 3 ) THEN  
    518525 
    519526               IF( dta%ll_ssh ) THEN  
     
    521528                  jfld = jfld + 1 
    522529                  blf_i(jfld) = bn_ssh 
    523                   ibdy(jfld) = ib_bdy 
     530                  ibdy(jfld) = jbdy 
    524531                  igrid(jfld) = 1 
    525532                  ilen1(jfld) = nblen(igrid(jfld)) 
     
    528535               ENDIF 
    529536 
    530                IF( dta%ll_u2d .and. .not. ln_full_vel_array(ib_bdy) ) THEN 
     537               IF( dta%ll_u2d .and. .not. ln_full_vel_array(jbdy) ) THEN 
    531538                  if(lwp) write(numout,*) '++++++ reading in u2d field' 
    532539                  jfld = jfld + 1 
    533540                  blf_i(jfld) = bn_u2d 
    534                   ibdy(jfld) = ib_bdy 
     541                  ibdy(jfld) = jbdy 
    535542                  igrid(jfld) = 2 
    536543                  ilen1(jfld) = nblen(igrid(jfld)) 
     
    539546               ENDIF 
    540547 
    541                IF( dta%ll_v2d .and. .not. ln_full_vel_array(ib_bdy) ) THEN 
     548               IF( dta%ll_v2d .and. .not. ln_full_vel_array(jbdy) ) THEN 
    542549                  if(lwp) write(numout,*) '++++++ reading in v2d field' 
    543550                  jfld = jfld + 1 
    544551                  blf_i(jfld) = bn_v2d 
    545                   ibdy(jfld) = ib_bdy 
     552                  ibdy(jfld) = jbdy 
    546553                  igrid(jfld) = 3 
    547554                  ilen1(jfld) = nblen(igrid(jfld)) 
     
    554561            ! read 3D velocities if baroclinic velocities require OR if 
    555562            ! barotropic velocities required and ln_full_vel set to .true. 
    556             IF( nn_dyn3d_dta(ib_bdy) == 1 .OR. & 
    557            &  ( ln_full_vel_array(ib_bdy) .AND. ( nn_dyn2d_dta(ib_bdy) == 1 .or. nn_dyn2d_dta(ib_bdy) == 3 ) ) ) THEN 
    558  
    559                IF( dta%ll_u3d .OR. ( ln_full_vel_array(ib_bdy) .and. dta%ll_u2d ) ) THEN 
     563            IF( nn_dyn3d_dta(jbdy) == 1 .OR. & 
     564           &  ( ln_full_vel_array(jbdy) .AND. ( nn_dyn2d_dta(jbdy) == 1 .OR. nn_dyn2d_dta(jbdy) == 3 ) ) ) THEN 
     565 
     566               IF( dta%ll_u3d .OR. ( ln_full_vel_array(jbdy) .and. dta%ll_u2d ) ) THEN 
    560567                  if(lwp) write(numout,*) '++++++ reading in u3d field' 
    561568                  jfld = jfld + 1 
    562569                  blf_i(jfld) = bn_u3d 
    563                   ibdy(jfld) = ib_bdy 
     570                  ibdy(jfld) = jbdy 
    564571                  igrid(jfld) = 2 
    565572                  ilen1(jfld) = nblen(igrid(jfld)) 
    566573                  ilen3(jfld) = jpk 
    567                   IF( ln_full_vel_array(ib_bdy) .and. dta%ll_u2d ) dta%nread(2) = dta%nread(2) + 1 
    568                ENDIF 
    569  
    570                IF( dta%ll_v3d .OR. ( ln_full_vel_array(ib_bdy) .and. dta%ll_v2d ) ) THEN 
     574                  IF( ln_full_vel_array(jbdy) .and. dta%ll_u2d ) dta%nread(2) = dta%nread(2) + 1 
     575               ENDIF 
     576 
     577               IF( dta%ll_v3d .OR. ( ln_full_vel_array(jbdy) .and. dta%ll_v2d ) ) THEN 
    571578                  if(lwp) write(numout,*) '++++++ reading in v3d field' 
    572579                  jfld = jfld + 1 
    573580                  blf_i(jfld) = bn_v3d 
    574                   ibdy(jfld) = ib_bdy 
     581                  ibdy(jfld) = jbdy 
    575582                  igrid(jfld) = 3 
    576583                  ilen1(jfld) = nblen(igrid(jfld)) 
    577584                  ilen3(jfld) = jpk 
    578                   IF( ln_full_vel_array(ib_bdy) .and. dta%ll_v2d ) dta%nread(2) = dta%nread(2) + 1 
     585                  IF( ln_full_vel_array(jbdy) .and. dta%ll_v2d ) dta%nread(2) = dta%nread(2) + 1 
    579586               ENDIF 
    580587 
     
    582589 
    583590            ! temperature and salinity 
    584             IF( nn_tra_dta(ib_bdy) == 1 ) THEN 
     591            IF( nn_tra_dta(jbdy) == 1 ) THEN 
    585592 
    586593               IF( dta%ll_tem ) THEN 
     
    588595                  jfld = jfld + 1 
    589596                  blf_i(jfld) = bn_tem 
    590                   ibdy(jfld) = ib_bdy 
     597                  ibdy(jfld) = jbdy 
    591598                  igrid(jfld) = 1 
    592599                  ilen1(jfld) = nblen(igrid(jfld)) 
     
    598605                  jfld = jfld + 1 
    599606                  blf_i(jfld) = bn_sal 
    600                   ibdy(jfld) = ib_bdy 
     607                  ibdy(jfld) = jbdy 
    601608                  igrid(jfld) = 1 
    602609                  ilen1(jfld) = nblen(igrid(jfld)) 
     
    608615#if defined key_lim3 
    609616            ! sea ice 
    610             IF( nn_ice_lim_dta(ib_bdy) == 1 ) THEN 
     617            IF( nn_ice_lim_dta(jbdy) == 1 ) THEN 
    611618               ! Test for types of ice input (1cat or Xcat)  
    612619               ! Build file name to find dimensions  
     
    622629               ! 
    623630               CALL iom_open  ( clname, inum ) 
    624                id1 = iom_varid( inum, bn_a_i%clvar, kndims=zndims, ldstop = .FALSE. ) 
     631               id1 = iom_varid( inum, bn_a_i%clvar, kdimsz=kdimsz, kndims=kndims, ldstop = .FALSE. ) 
    625632               CALL iom_close ( inum ) 
    626633 
    627                 IF ( zndims == 4 ) THEN 
    628                  ll_bdylim3 = .TRUE.   ! Xcat input 
     634                IF ( kndims == 4 ) THEN 
     635                 nice_cat = kdimsz(4)   ! Xcat input 
    629636               ELSE 
    630                  ll_bdylim3 = .FALSE.  ! 1cat input       
     637                 nice_cat = 1           ! 1cat input       
    631638               ENDIF 
    632639               ! End test 
     
    635642                  jfld = jfld + 1 
    636643                  blf_i(jfld) = bn_a_i 
    637                   ibdy(jfld) = ib_bdy 
     644                  ibdy(jfld)  = jbdy 
    638645                  igrid(jfld) = 1 
    639646                  ilen1(jfld) = nblen(igrid(jfld)) 
    640                   IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF 
     647                  ilen3(jfld) = nice_cat 
    641648               ENDIF 
    642649 
     
    644651                  jfld = jfld + 1 
    645652                  blf_i(jfld) = bn_h_i 
    646                   ibdy(jfld) = ib_bdy 
     653                  ibdy(jfld)  = jbdy 
    647654                  igrid(jfld) = 1 
    648655                  ilen1(jfld) = nblen(igrid(jfld)) 
    649                   IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF 
     656                  ilen3(jfld) = nice_cat 
    650657               ENDIF 
    651658 
    652659               IF( dta%ll_h_s ) THEN 
    653660                  jfld = jfld + 1 
    654                    blf_i(jfld) = bn_h_s 
    655                   ibdy(jfld) = ib_bdy 
     661                  blf_i(jfld) = bn_h_s 
     662                  ibdy(jfld)  = jbdy 
    656663                  igrid(jfld) = 1 
    657664                  ilen1(jfld) = nblen(igrid(jfld)) 
    658                   IF ( ll_bdylim3 ) THEN ; ilen3(jfld)=jpl ; ELSE ; ilen3(jfld)=1 ; ENDIF 
     665                  ilen3(jfld) = nice_cat 
    659666               ENDIF 
    660667 
     
    663670            ! Recalculate field counts 
    664671            !------------------------- 
    665             IF( ib_bdy == 1 ) THEN  
     672            IF( jbdy == 1 ) THEN  
    666673               nb_bdy_fld_sum = 0 
    667                nb_bdy_fld(ib_bdy) = jfld 
     674               nb_bdy_fld(jbdy) = jfld 
    668675               nb_bdy_fld_sum     = jfld               
    669676            ELSE 
    670                nb_bdy_fld(ib_bdy) = jfld - nb_bdy_fld_sum 
    671                nb_bdy_fld_sum = nb_bdy_fld_sum + nb_bdy_fld(ib_bdy) 
    672             ENDIF 
    673  
    674             dta%nread(1) = nb_bdy_fld(ib_bdy) 
     677               nb_bdy_fld(jbdy) = jfld - nb_bdy_fld_sum 
     678               nb_bdy_fld_sum = nb_bdy_fld_sum + nb_bdy_fld(jbdy) 
     679            ENDIF 
     680 
     681            dta%nread(1) = nb_bdy_fld(jbdy) 
    675682 
    676683         ENDIF ! nn_dta == 1 
    677       ENDDO ! ib_bdy 
     684      ENDDO ! jbdy 
    678685 
    679686      DO jfld = 1, nb_bdy_fld_sum 
     
    687694      !------------------------------------- 
    688695      jstart = 1 
    689       DO ib_bdy = 1, nb_bdy 
    690          jend = jstart - 1 + nb_bdy_fld(ib_bdy)  
    691          CALL fld_fill( bf(jstart:jend), blf_i(jstart:jend), cn_dir_array(ib_bdy), 'bdy_dta',   & 
     696      DO jbdy = 1, nb_bdy 
     697         jend = jstart - 1 + nb_bdy_fld(jbdy)  
     698         CALL fld_fill( bf(jstart:jend), blf_i(jstart:jend), cn_dir_array(jbdy), 'bdy_dta',   & 
    692699         &              'open boundary conditions', 'nambdy_dta' ) 
    693700         jstart = jend + 1 
     
    700707 
    701708      jfld = 0 
    702       DO ib_bdy=1, nb_bdy 
    703  
    704          nblen => idx_bdy(ib_bdy)%nblen 
    705          dta => dta_bdy(ib_bdy) 
     709      DO jbdy=1, nb_bdy 
     710 
     711         nblen => idx_bdy(jbdy)%nblen 
     712         dta => dta_bdy(jbdy) 
    706713 
    707714         if(lwp) then 
     
    715722         endif 
    716723 
    717          IF ( nn_dyn2d_dta(ib_bdy) == 0 .or. nn_dyn2d_dta(ib_bdy) == 2 ) THEN 
     724         IF ( nn_dyn2d_dta(jbdy) == 0 .or. nn_dyn2d_dta(jbdy) == 2 ) THEN 
    718725            if(lwp) write(numout,*) '++++++ dta%ssh/u2d/u3d allocated space' 
    719726            IF( dta%ll_ssh ) ALLOCATE( dta%ssh(nblen(1)) ) 
     
    721728            IF( dta%ll_v2d ) ALLOCATE( dta%v2d(nblen(3)) ) 
    722729         ENDIF 
    723          IF ( nn_dyn2d_dta(ib_bdy) == 1 .or. nn_dyn2d_dta(ib_bdy) == 3 ) THEN 
     730         IF ( nn_dyn2d_dta(jbdy) == 1 .or. nn_dyn2d_dta(jbdy) == 3 ) THEN 
    724731            IF( dta%ll_ssh ) THEN 
    725732               if(lwp) write(numout,*) '++++++ dta%ssh pointing to fnow' 
     
    728735            ENDIF 
    729736            IF ( dta%ll_u2d ) THEN 
    730                IF ( ln_full_vel_array(ib_bdy) ) THEN 
     737               IF ( ln_full_vel_array(jbdy) ) THEN 
    731738                  if(lwp) write(numout,*) '++++++ dta%u2d allocated space' 
    732739                  ALLOCATE( dta%u2d(nblen(2)) ) 
     
    738745            ENDIF 
    739746            IF ( dta%ll_v2d ) THEN 
    740                IF ( ln_full_vel_array(ib_bdy) ) THEN 
     747               IF ( ln_full_vel_array(jbdy) ) THEN 
    741748                  if(lwp) write(numout,*) '++++++ dta%v2d allocated space' 
    742749                  ALLOCATE( dta%v2d(nblen(3)) ) 
     
    749756         ENDIF 
    750757 
    751          IF ( nn_dyn3d_dta(ib_bdy) == 0 ) THEN 
     758         IF ( nn_dyn3d_dta(jbdy) == 0 ) THEN 
    752759            if(lwp) write(numout,*) '++++++ dta%u3d/v3d allocated space' 
    753             IF( dta%ll_u3d ) ALLOCATE( dta_bdy(ib_bdy)%u3d(nblen(2),jpk) ) 
    754             IF( dta%ll_v3d ) ALLOCATE( dta_bdy(ib_bdy)%v3d(nblen(3),jpk) ) 
    755          ENDIF 
    756          IF ( nn_dyn3d_dta(ib_bdy) == 1 .or. & 
    757            &  ( ln_full_vel_array(ib_bdy) .and. ( nn_dyn2d_dta(ib_bdy) == 1 .or. nn_dyn2d_dta(ib_bdy) == 3 ) ) ) THEN 
    758             IF ( dta%ll_u3d .or. ( ln_full_vel_array(ib_bdy) .and. dta%ll_u2d ) ) THEN 
     760            IF( dta%ll_u3d ) ALLOCATE( dta_bdy(jbdy)%u3d(nblen(2),jpk) ) 
     761            IF( dta%ll_v3d ) ALLOCATE( dta_bdy(jbdy)%v3d(nblen(3),jpk) ) 
     762         ENDIF 
     763         IF ( nn_dyn3d_dta(jbdy) == 1 .or. & 
     764           &  ( ln_full_vel_array(jbdy) .and. ( nn_dyn2d_dta(jbdy) == 1 .or. nn_dyn2d_dta(jbdy) == 3 ) ) ) THEN 
     765            IF ( dta%ll_u3d .or. ( ln_full_vel_array(jbdy) .and. dta%ll_u2d ) ) THEN 
    759766               if(lwp) write(numout,*) '++++++ dta%u3d pointing to fnow' 
    760767               jfld = jfld + 1 
    761                dta_bdy(ib_bdy)%u3d => bf(jfld)%fnow(:,1,:) 
    762             ENDIF 
    763             IF ( dta%ll_v3d .or. ( ln_full_vel_array(ib_bdy) .and. dta%ll_v2d ) ) THEN 
     768               dta_bdy(jbdy)%u3d => bf(jfld)%fnow(:,1,:) 
     769            ENDIF 
     770            IF ( dta%ll_v3d .or. ( ln_full_vel_array(jbdy) .and. dta%ll_v2d ) ) THEN 
    764771               if(lwp) write(numout,*) '++++++ dta%v3d pointing to fnow' 
    765772               jfld = jfld + 1 
    766                dta_bdy(ib_bdy)%v3d => bf(jfld)%fnow(:,1,:) 
    767             ENDIF 
    768          ENDIF 
    769  
    770          IF( nn_tra_dta(ib_bdy) == 0 ) THEN 
     773               dta_bdy(jbdy)%v3d => bf(jfld)%fnow(:,1,:) 
     774            ENDIF 
     775         ENDIF 
     776 
     777         IF( nn_tra_dta(jbdy) == 0 ) THEN 
    771778            if(lwp) write(numout,*) '++++++ dta%tem/sal allocated space' 
    772             IF( dta%ll_tem ) ALLOCATE( dta_bdy(ib_bdy)%tem(nblen(1),jpk) ) 
    773             IF( dta%ll_sal ) ALLOCATE( dta_bdy(ib_bdy)%sal(nblen(1),jpk) ) 
     779            IF( dta%ll_tem ) ALLOCATE( dta_bdy(jbdy)%tem(nblen(1),jpk) ) 
     780            IF( dta%ll_sal ) ALLOCATE( dta_bdy(jbdy)%sal(nblen(1),jpk) ) 
    774781         ELSE 
    775782            IF( dta%ll_tem ) THEN 
    776783               if(lwp) write(numout,*) '++++++ dta%tem pointing to fnow' 
    777784               jfld = jfld + 1 
    778                dta_bdy(ib_bdy)%tem => bf(jfld)%fnow(:,1,:) 
     785               dta_bdy(jbdy)%tem => bf(jfld)%fnow(:,1,:) 
    779786            ENDIF 
    780787            IF( dta%ll_sal ) THEN  
    781788               if(lwp) write(numout,*) '++++++ dta%sal pointing to fnow' 
    782789               jfld = jfld + 1 
    783                dta_bdy(ib_bdy)%sal => bf(jfld)%fnow(:,1,:) 
    784             ENDIF 
    785          ENDIF 
    786  
    787 #if defined key_lim3 
    788          IF (cn_ice_lim(ib_bdy) /= 'none') THEN 
    789             IF( nn_ice_lim_dta(ib_bdy) == 0 ) THEN 
    790                ALLOCATE( dta_bdy(ib_bdy)%a_i(nblen(1),jpl) ) 
    791                ALLOCATE( dta_bdy(ib_bdy)%h_i(nblen(1),jpl) ) 
    792                ALLOCATE( dta_bdy(ib_bdy)%h_s(nblen(1),jpl) ) 
     790               dta_bdy(jbdy)%sal => bf(jfld)%fnow(:,1,:) 
     791            ENDIF 
     792         ENDIF 
     793 
     794#if defined key_lim3 
     795         IF (cn_ice_lim(jbdy) /= 'none') THEN 
     796            IF( nn_ice_lim_dta(jbdy) == 0 ) THEN 
     797               ALLOCATE( dta_bdy(jbdy)%a_i(nblen(1),jpl) ) 
     798               ALLOCATE( dta_bdy(jbdy)%h_i(nblen(1),jpl) ) 
     799               ALLOCATE( dta_bdy(jbdy)%h_s(nblen(1),jpl) ) 
    793800            ELSE 
    794                IF ( ll_bdylim3 ) THEN ! case input is Xcat 
    795                   jfld = jfld + 1 
    796                   dta_bdy(ib_bdy)%a_i => bf(jfld)%fnow(:,1,:) 
    797                   jfld = jfld + 1 
    798                   dta_bdy(ib_bdy)%h_i => bf(jfld)%fnow(:,1,:) 
    799                   jfld = jfld + 1 
    800                   dta_bdy(ib_bdy)%h_s => bf(jfld)%fnow(:,1,:) 
    801                ELSE ! case input is 1cat 
     801               IF ( nice_cat == jpl ) THEN ! case input cat = jpl 
     802                  jfld = jfld + 1 
     803                  dta_bdy(jbdy)%a_i => bf(jfld)%fnow(:,1,:) 
     804                  jfld = jfld + 1 
     805                  dta_bdy(jbdy)%h_i => bf(jfld)%fnow(:,1,:) 
     806                  jfld = jfld + 1 
     807                  dta_bdy(jbdy)%h_s => bf(jfld)%fnow(:,1,:) 
     808               ELSE                        ! case input cat = 1 OR (/=1 and /=jpl) 
    802809                  jfld_ai  = jfld + 1 
    803810                  jfld_hti = jfld + 2 
    804811                  jfld_hts = jfld + 3 
    805812                  jfld     = jfld + 3 
    806                   ALLOCATE( dta_bdy(ib_bdy)%a_i(nblen(1),jpl) ) 
    807                   ALLOCATE( dta_bdy(ib_bdy)%h_i(nblen(1),jpl) ) 
    808                   ALLOCATE( dta_bdy(ib_bdy)%h_s(nblen(1),jpl) ) 
    809                   dta_bdy(ib_bdy)%a_i(:,:) = 0._wp 
    810                   dta_bdy(ib_bdy)%h_i(:,:) = 0._wp 
    811                   dta_bdy(ib_bdy)%h_s(:,:) = 0._wp 
     813                  ALLOCATE( dta_bdy(jbdy)%a_i(nblen(1),jpl) ) 
     814                  ALLOCATE( dta_bdy(jbdy)%h_i(nblen(1),jpl) ) 
     815                  ALLOCATE( dta_bdy(jbdy)%h_s(nblen(1),jpl) ) 
     816                  dta_bdy(jbdy)%a_i(:,:) = 0._wp 
     817                  dta_bdy(jbdy)%h_i(:,:) = 0._wp 
     818                  dta_bdy(jbdy)%h_s(:,:) = 0._wp 
    812819               ENDIF 
    813820 
     
    816823#endif 
    817824         ! 
    818       END DO ! ib_bdy  
     825      END DO ! jbdy  
    819826      ! 
    820827      IF( nn_timing == 1 ) CALL timing_stop('bdy_dta_init') 
Note: See TracChangeset for help on using the changeset viewer.