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 6736 for branches/NERC/dev_r3874_FASTNEt/NEMOGCM/NEMO/OPA_SRC/BDY/bdydta.F90 – NEMO

Ignore:
Timestamp:
2016-06-24T09:50:27+02:00 (8 years ago)
Author:
jamesharle
Message:

FASTNEt code modifications

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r3874_FASTNEt/NEMOGCM/NEMO/OPA_SRC/BDY/bdydta.F90

    r3851 r6736  
    1111   !!            3.3  !  2010-09  (D.Storkey) add ice boundary conditions 
    1212   !!            3.4  !  2011     (D. Storkey) rewrite in preparation for OBC-BDY merge 
     13   !!            3.4  !  2013-04  (J. Harle) add in option to read bdy data with 
     14   !!                                        different vertical coordinates 
    1315   !!---------------------------------------------------------------------- 
    1416#if defined key_bdy 
     
    3234   USE ice_2 
    3335#endif 
    34    USE sbcapr 
    3536 
    3637   IMPLICIT NONE 
     
    109110 
    110111            IF( nn_dyn2d(ib_bdy) .gt. 0 .and. nn_dyn2d_dta(ib_bdy) .eq. 0 ) THEN  
    111                ilen1(:) = nblen(:) 
     112               IF( nn_dyn2d(ib_bdy) .eq. jp_frs ) THEN 
     113                  ilen1(:) = nblen(:) 
     114               ELSE 
     115                  ilen1(:) = nblenrim(:) 
     116               ENDIF 
    112117               igrd = 1 
    113118               DO ib = 1, ilen1(igrd) 
     
    131136 
    132137            IF( nn_dyn3d(ib_bdy) .gt. 0 .and. nn_dyn3d_dta(ib_bdy) .eq. 0 ) THEN  
    133                ilen1(:) = nblen(:) 
     138               IF( nn_dyn3d(ib_bdy) .eq. jp_frs ) THEN 
     139                  ilen1(:) = nblen(:) 
     140               ELSE 
     141                  ilen1(:) = nblenrim(:) 
     142               ENDIF 
    134143               igrd = 2  
    135144               DO ib = 1, ilen1(igrd) 
     
    151160 
    152161            IF( nn_tra(ib_bdy) .gt. 0 .and. nn_tra_dta(ib_bdy) .eq. 0 ) THEN  
    153                ilen1(:) = nblen(:) 
     162               IF( nn_tra(ib_bdy) .eq. jp_frs ) THEN 
     163                  ilen1(:) = nblen(:) 
     164               ELSE 
     165                  ilen1(:) = nblenrim(:) 
     166               ENDIF 
    154167               igrd = 1                       ! Everything is at T-points here 
    155168               DO ib = 1, ilen1(igrd) 
     
    165178#if defined key_lim2 
    166179            IF( nn_ice_lim2(ib_bdy) .gt. 0 .and. nn_ice_lim2_dta(ib_bdy) .eq. 0 ) THEN  
    167                ilen1(:) = nblen(:) 
     180               IF( nn_ice_lim2(ib_bdy) .eq. jp_frs ) THEN 
     181                  ilen1(:) = nblen(:) 
     182               ELSE 
     183                  ilen1(:) = nblenrim(:) 
     184               ENDIF 
    168185               igrd = 1                       ! Everything is at T-points here 
    169186               DO ib = 1, ilen1(igrd) 
     
    192209            IF( PRESENT(jit) ) THEN 
    193210               ! Update barotropic boundary conditions only 
    194                ! jit is optional argument for fld_read and bdytide_update 
     211               ! jit is optional argument for fld_read and tide_update 
    195212               IF( nn_dyn2d(ib_bdy) .gt. 0 ) THEN 
    196213                  IF( nn_dyn2d_dta(ib_bdy) .eq. 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays 
     
    199216                     dta_bdy(ib_bdy)%v2d(:) = 0.0 
    200217                  ENDIF 
    201                   IF (nn_tra(ib_bdy).ne.4) THEN 
    202                      IF( nn_dyn2d_dta(ib_bdy) .EQ. 1 .OR. nn_dyn2d_dta(ib_bdy) .EQ. 3 .OR.  & 
    203                        & (ln_full_vel_array(ib_bdy) .AND. nn_dyn3d_dta(ib_bdy).eq.1) )THEN 
    204  
    205                         ! For the runoff case, no need to update the forcing (already done in the baroclinic part) 
    206                         jend = nb_bdy_fld(ib_bdy) 
    207                         IF ( nn_tra(ib_bdy) .GT. 0 .AND. nn_tra_dta(ib_bdy) .GE. 1 ) jend = jend - 2 
    208                         CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), map=nbmap_ptr(jstart:jend),  & 
    209                                      & kit=jit, kt_offset=time_offset ) 
    210                         IF ( nn_tra(ib_bdy) .GT. 0 .AND. nn_tra_dta(ib_bdy) .GE. 1 ) jend = jend + 2 
    211  
    212                         ! If full velocities in boundary data then split into barotropic and baroclinic data 
    213                         IF( ln_full_vel_array(ib_bdy) .AND.                                             & 
    214                           &    ( nn_dyn2d_dta(ib_bdy) .EQ. 1 .OR. nn_dyn2d_dta(ib_bdy) .EQ. 3 .OR.  & 
    215                           &      nn_dyn3d_dta(ib_bdy) .EQ. 1 ) )THEN 
    216  
    217                            igrd = 2                      ! zonal velocity 
    218                            dta_bdy(ib_bdy)%u2d(:) = 0.0 
    219                            DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 
    220                               ii   = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    221                               ij   = idx_bdy(ib_bdy)%nbj(ib,igrd) 
    222                               DO ik = 1, jpkm1 
    223                                  dta_bdy(ib_bdy)%u2d(ib) = dta_bdy(ib_bdy)%u2d(ib) & 
    224                        &                          + fse3u(ii,ij,ik) * umask(ii,ij,ik) * dta_bdy(ib_bdy)%u3d(ib,ik) 
    225                               END DO 
    226                               dta_bdy(ib_bdy)%u2d(ib) =  dta_bdy(ib_bdy)%u2d(ib) * hur(ii,ij) 
    227                               DO ik = 1, jpkm1 
    228                                  dta_bdy(ib_bdy)%u3d(ib,ik) = dta_bdy(ib_bdy)%u3d(ib,ik) - dta_bdy(ib_bdy)%u2d(ib) 
    229                               END DO 
    230                            END DO 
    231                            igrd = 3                      ! meridional velocity 
    232                            dta_bdy(ib_bdy)%v2d(:) = 0.0 
    233                            DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 
    234                               ii   = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    235                               ij   = idx_bdy(ib_bdy)%nbj(ib,igrd) 
    236                               DO ik = 1, jpkm1 
    237                                  dta_bdy(ib_bdy)%v2d(ib) = dta_bdy(ib_bdy)%v2d(ib) & 
    238                        &                       + fse3v(ii,ij,ik) * vmask(ii,ij,ik) * dta_bdy(ib_bdy)%v3d(ib,ik) 
    239                               END DO 
    240                               dta_bdy(ib_bdy)%v2d(ib) =  dta_bdy(ib_bdy)%v2d(ib) * hvr(ii,ij) 
    241                               DO ik = 1, jpkm1 
    242                                  dta_bdy(ib_bdy)%v3d(ib,ik) = dta_bdy(ib_bdy)%v3d(ib,ik) - dta_bdy(ib_bdy)%v2d(ib) 
    243                               END DO 
    244                            END DO 
    245                         ENDIF                     
    246                      ENDIF 
    247                      IF( nn_dyn2d_dta(ib_bdy) .ge. 2 ) THEN ! update tidal harmonic forcing 
    248                         CALL bdytide_update( kt=kt, idx=idx_bdy(ib_bdy), dta=dta_bdy(ib_bdy), td=tides(ib_bdy),   &  
    249                           &                 jit=jit, time_offset=time_offset ) 
    250                      ENDIF 
     218                  IF( nn_dyn2d_dta(ib_bdy) .eq. 1 .or. nn_dyn2d_dta(ib_bdy) .eq. 3 ) THEN ! update external data 
     219                     jend = jstart + 2 
     220                     CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), map=nbmap_ptr(jstart:jend),   & 
     221                     &              jit=jit, time_offset=time_offset ) 
    251222                  ENDIF 
     223                  IF( nn_dyn2d_dta(ib_bdy) .ge. 2 ) THEN ! update tidal harmonic forcing 
     224                     CALL tide_update( kt=kt, idx=idx_bdy(ib_bdy), dta=dta_bdy(ib_bdy), td=tides(ib_bdy),   &  
     225                     &                 jit=jit, time_offset=time_offset ) 
     226                  ENDIF 
    252227               ENDIF 
    253228            ELSE 
    254                IF (nn_tra(ib_bdy).eq.4) then      ! runoff condition 
    255                   jend = nb_bdy_fld(ib_bdy) 
    256                   CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend),  & 
    257                                & map=nbmap_ptr(jstart:jend), kt_offset=time_offset ) 
    258                   ! 
    259                   igrd = 2                      ! zonal velocity 
    260                   DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 
    261                      ii   = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    262                      ij   = idx_bdy(ib_bdy)%nbj(ib,igrd) 
    263                      dta_bdy(ib_bdy)%u2d(ib) = dta_bdy(ib_bdy)%u2d(ib) / ( e2u(ii,ij) * hu_0(ii,ij) ) 
     229               IF( nn_dyn2d(ib_bdy) .gt. 0 .and. nn_dyn2d_dta(ib_bdy) .eq. 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays 
     230                  dta_bdy(ib_bdy)%ssh(:) = 0.0 
     231                  dta_bdy(ib_bdy)%u2d(:) = 0.0 
     232                  dta_bdy(ib_bdy)%v2d(:) = 0.0 
     233               ENDIF 
     234               IF( nb_bdy_fld(ib_bdy) .gt. 0 ) THEN ! update external data 
     235                  jend = jstart + nb_bdy_fld(ib_bdy) - 1 
     236                  CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), map=nbmap_ptr(jstart:jend), time_offset=time_offset,& 
     237                &                                                                                          jpk_1=nb_jpk ) 
     238               ENDIF 
     239               IF( nn_dyn2d(ib_bdy) .gt. 0 .and. nn_dyn2d_dta(ib_bdy) .ge. 2 ) THEN ! update tidal harmonic forcing 
     240                  CALL tide_update( kt=kt, idx=idx_bdy(ib_bdy), dta=dta_bdy(ib_bdy), td=tides(ib_bdy), time_offset=time_offset ) 
     241               ENDIF 
     242            ENDIF 
     243            jstart = jend+1 
     244 
     245            ! If full velocities in boundary data then split into barotropic and baroclinic data 
     246            ! (Note that we have already made sure that you can't use ln_full_vel = .true. at the same 
     247            ! time as the dynspg_ts option).  
     248 
     249            IF( ln_full_vel_array(ib_bdy) .and.                                             &  
     250           &    ( nn_dyn2d_dta(ib_bdy) .eq. 1 .or. nn_dyn2d_dta(ib_bdy) .eq. 3 .or. nn_dyn3d_dta(ib_bdy) .eq. 1 ) ) THEN  
     251 
     252               igrd = 2                      ! zonal velocity 
     253               dta_bdy(ib_bdy)%u2d(:) = 0.0 
     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) 
     257                  DO ik = 1, jpkm1 
     258                     dta_bdy(ib_bdy)%u2d(ib) = dta_bdy(ib_bdy)%u2d(ib) & 
     259              &                                + fse3u(ii,ij,ik) * umask(ii,ij,ik) * dta_bdy(ib_bdy)%u3d(ib,ik) 
    264260                  END DO 
    265                   ! 
    266                   igrd = 3                      ! meridional velocity 
    267                   DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 
    268                      ii   = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    269                      ij   = idx_bdy(ib_bdy)%nbj(ib,igrd) 
    270                      dta_bdy(ib_bdy)%v2d(ib) = dta_bdy(ib_bdy)%v2d(ib) / ( e1v(ii,ij) * hv_0(ii,ij) ) 
     261                  dta_bdy(ib_bdy)%u2d(ib) =  dta_bdy(ib_bdy)%u2d(ib) * hur(ii,ij) 
     262                  DO ik = 1, jpkm1 
     263                     dta_bdy(ib_bdy)%u3d(ib,ik) = dta_bdy(ib_bdy)%u3d(ib,ik) - dta_bdy(ib_bdy)%u2d(ib)  
    271264                  END DO 
    272                ELSE 
    273                   IF( nn_dyn2d(ib_bdy) .gt. 0 .and. nn_dyn2d_dta(ib_bdy) .eq. 2 ) THEN ! tidal harmonic forcing ONLY: initialise arrays 
    274                      dta_bdy(ib_bdy)%ssh(:) = 0.0 
    275                      dta_bdy(ib_bdy)%u2d(:) = 0.0 
    276                      dta_bdy(ib_bdy)%v2d(:) = 0.0 
    277                   ENDIF 
    278                   IF( nb_bdy_fld(ib_bdy) .gt. 0 ) THEN ! update external data 
    279                      jend = nb_bdy_fld(ib_bdy) 
    280                      CALL fld_read( kt=kt, kn_fsbc=1, sd=bf(jstart:jend), & 
    281                                   & map=nbmap_ptr(jstart:jend), kt_offset=time_offset ) 
    282                   ENDIF 
    283                   ! If full velocities in boundary data then split into barotropic and baroclinic data 
    284                   IF( ln_full_vel_array(ib_bdy) .and.                                             & 
    285                     & ( nn_dyn2d_dta(ib_bdy) .EQ. 1 .OR. nn_dyn2d_dta(ib_bdy) .EQ. 3 .OR. & 
    286                     &   nn_dyn3d_dta(ib_bdy) .EQ. 1 ) ) THEN 
    287                      igrd = 2                      ! zonal velocity 
    288                      dta_bdy(ib_bdy)%u2d(:) = 0.0 
    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) 
    292                         DO ik = 1, jpkm1 
    293                            dta_bdy(ib_bdy)%u2d(ib) = dta_bdy(ib_bdy)%u2d(ib) & 
    294                  &                       + fse3u(ii,ij,ik) * umask(ii,ij,ik) * dta_bdy(ib_bdy)%u3d(ib,ik) 
    295                         END DO 
    296                         dta_bdy(ib_bdy)%u2d(ib) =  dta_bdy(ib_bdy)%u2d(ib) * hur(ii,ij) 
    297                         DO ik = 1, jpkm1 
    298                            dta_bdy(ib_bdy)%u3d(ib,ik) = dta_bdy(ib_bdy)%u3d(ib,ik) - dta_bdy(ib_bdy)%u2d(ib) 
    299                         END DO 
    300                      END DO 
    301                      igrd = 3                      ! meridional velocity 
    302                      dta_bdy(ib_bdy)%v2d(:) = 0.0 
    303                      DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 
    304                         ii   = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    305                         ij   = idx_bdy(ib_bdy)%nbj(ib,igrd) 
    306                         DO ik = 1, jpkm1 
    307                            dta_bdy(ib_bdy)%v2d(ib) = dta_bdy(ib_bdy)%v2d(ib) & 
    308                  &                       + fse3v(ii,ij,ik) * vmask(ii,ij,ik) * dta_bdy(ib_bdy)%v3d(ib,ik) 
    309                         END DO 
    310                         dta_bdy(ib_bdy)%v2d(ib) =  dta_bdy(ib_bdy)%v2d(ib) * hvr(ii,ij) 
    311                         DO ik = 1, jpkm1 
    312                            dta_bdy(ib_bdy)%v3d(ib,ik) = dta_bdy(ib_bdy)%v3d(ib,ik) - dta_bdy(ib_bdy)%v2d(ib) 
    313                         END DO 
    314                      END DO 
    315                   ENDIF 
    316                   IF( nn_dyn2d(ib_bdy) .gt. 0 .and. nn_dyn2d_dta(ib_bdy) .ge. 2 ) THEN ! update tidal harmonic forcing 
    317                      CALL bdytide_update( kt=kt, idx=idx_bdy(ib_bdy), dta=dta_bdy(ib_bdy),  & 
    318                                         & td=tides(ib_bdy), time_offset=time_offset ) 
    319                   ENDIF 
    320                ENDIF 
    321             ENDIF 
    322             jstart = jend+1 
     265               END DO 
     266 
     267               igrd = 3                      ! meridional velocity 
     268               dta_bdy(ib_bdy)%v2d(:) = 0.0 
     269               DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 
     270                  ii   = idx_bdy(ib_bdy)%nbi(ib,igrd) 
     271                  ij   = idx_bdy(ib_bdy)%nbj(ib,igrd) 
     272                  DO ik = 1, jpkm1 
     273                     dta_bdy(ib_bdy)%v2d(ib) = dta_bdy(ib_bdy)%v2d(ib) & 
     274              &                                + fse3v(ii,ij,ik) * vmask(ii,ij,ik) * dta_bdy(ib_bdy)%v3d(ib,ik) 
     275                  END DO 
     276                  dta_bdy(ib_bdy)%v2d(ib) =  dta_bdy(ib_bdy)%v2d(ib) * hvr(ii,ij) 
     277                  DO ik = 1, jpkm1 
     278                     dta_bdy(ib_bdy)%v3d(ib,ik) = dta_bdy(ib_bdy)%v3d(ib,ik) - dta_bdy(ib_bdy)%v2d(ib)  
     279                  END DO 
     280               END DO 
     281     
     282            ENDIF 
     283 
    323284         END IF ! nn_dta(ib_bdy) = 1 
    324285      END DO  ! ib_bdy 
    325  
    326       IF ( ln_apr_obc ) THEN 
    327          DO ib_bdy = 1, nb_bdy 
    328             IF (nn_tra(ib_bdy).NE.4)THEN 
    329                igrd = 1                      ! meridional velocity 
    330                DO ib = 1, idx_bdy(ib_bdy)%nblenrim(igrd) 
    331                   ii   = idx_bdy(ib_bdy)%nbi(ib,igrd) 
    332                   ij   = idx_bdy(ib_bdy)%nbj(ib,igrd) 
    333                   dta_bdy(ib_bdy)%ssh(ib) = dta_bdy(ib_bdy)%ssh(ib) + ssh_ib(ii,ij) 
    334                ENDDO 
    335             ENDIF 
    336          ENDDO 
    337       ENDIF 
    338286 
    339287      IF( nn_timing == 1 ) CALL timing_stop('bdy_dta') 
     
    381329      IF( nn_timing == 1 ) CALL timing_start('bdy_dta_init') 
    382330 
    383       IF(lwp) WRITE(numout,*) 
    384       IF(lwp) WRITE(numout,*) 'bdy_dta_ini : initialization of data at the open boundaries' 
    385       IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    386       IF(lwp) WRITE(numout,*) '' 
    387  
    388331      ! Set nn_dta 
    389332      DO ib_bdy = 1, nb_bdy 
     
    417360         ENDIF 
    418361#endif                
    419          IF(lwp) WRITE(numout,*) 'Maximum number of files to open =',nb_bdy_fld(ib_bdy) 
    420362      ENDDO             
    421363 
     
    469411            ln_full_vel_array(ib_bdy) = ln_full_vel 
    470412 
     413            IF( ln_full_vel_array(ib_bdy) .and. lk_dynspg_ts )  THEN 
     414               CALL ctl_stop( 'bdy_dta_init: ERROR, cannot specify full velocities in boundary data',& 
     415            &                  'with dynspg_ts option' )   ;   RETURN   
     416            ENDIF              
     417 
    471418            nblen => idx_bdy(ib_bdy)%nblen 
    472419            nblenrim => idx_bdy(ib_bdy)%nblenrim 
     
    476423            IF( nn_dyn2d(ib_bdy) .gt. 0 .and. ( nn_dyn2d_dta(ib_bdy) .eq. 1 .or. nn_dyn2d_dta(ib_bdy) .eq. 3 ) ) THEN  
    477424 
    478                IF( nn_tra(ib_bdy) .ne. 4 ) THEN ! runoff condition : no ssh reading 
     425               IF( nn_dyn2d(ib_bdy) .ne. jp_frs ) THEN 
    479426                  jfld = jfld + 1 
    480427                  blf_i(jfld) = bn_ssh 
    481428                  ibdy(jfld) = ib_bdy 
    482429                  igrid(jfld) = 1 
    483                   ilen1(jfld) = nblen(igrid(jfld)) 
     430                  ilen1(jfld) = nblenrim(igrid(jfld)) 
    484431                  ilen3(jfld) = 1 
    485432               ENDIF 
    486433 
    487434               IF( .not. ln_full_vel_array(ib_bdy) ) THEN 
     435 
    488436                  jfld = jfld + 1 
    489437                  blf_i(jfld) = bn_u2d 
    490438                  ibdy(jfld) = ib_bdy 
    491439                  igrid(jfld) = 2 
    492                   ilen1(jfld) = nblen(igrid(jfld)) 
     440                  IF( nn_dyn2d(ib_bdy) .eq. jp_frs ) THEN 
     441                     ilen1(jfld) = nblen(igrid(jfld)) 
     442                  ELSE 
     443                     ilen1(jfld) = nblenrim(igrid(jfld)) 
     444                  ENDIF 
    493445                  ilen3(jfld) = 1 
    494446 
     
    497449                  ibdy(jfld) = ib_bdy 
    498450                  igrid(jfld) = 3 
    499                   ilen1(jfld) = nblen(igrid(jfld)) 
     451                  IF( nn_dyn2d(ib_bdy) .eq. jp_frs ) THEN 
     452                     ilen1(jfld) = nblen(igrid(jfld)) 
     453                  ELSE 
     454                     ilen1(jfld) = nblenrim(igrid(jfld)) 
     455                  ENDIF 
    500456                  ilen3(jfld) = 1 
     457 
    501458               ENDIF 
    502459 
     
    512469               ibdy(jfld) = ib_bdy 
    513470               igrid(jfld) = 2 
    514                ilen1(jfld) = nblen(igrid(jfld)) 
     471               IF( nn_dyn3d(ib_bdy) .eq. jp_frs ) THEN 
     472                  ilen1(jfld) = nblen(igrid(jfld)) 
     473               ELSE 
     474                  ilen1(jfld) = nblenrim(igrid(jfld)) 
     475               ENDIF 
    515476               ilen3(jfld) = jpk 
    516477 
     
    519480               ibdy(jfld) = ib_bdy 
    520481               igrid(jfld) = 3 
    521                ilen1(jfld) = nblen(igrid(jfld)) 
     482               IF( nn_dyn3d(ib_bdy) .eq. jp_frs ) THEN 
     483                  ilen1(jfld) = nblen(igrid(jfld)) 
     484               ELSE 
     485                  ilen1(jfld) = nblenrim(igrid(jfld)) 
     486               ENDIF 
    522487               ilen3(jfld) = jpk 
    523488 
     
    531496               ibdy(jfld) = ib_bdy 
    532497               igrid(jfld) = 1 
    533                ilen1(jfld) = nblen(igrid(jfld)) 
     498               IF( nn_tra(ib_bdy) .eq. jp_frs ) THEN 
     499                  ilen1(jfld) = nblen(igrid(jfld)) 
     500               ELSE 
     501                  ilen1(jfld) = nblenrim(igrid(jfld)) 
     502               ENDIF 
    534503               ilen3(jfld) = jpk 
    535504 
     
    538507               ibdy(jfld) = ib_bdy 
    539508               igrid(jfld) = 1 
    540                ilen1(jfld) = nblen(igrid(jfld)) 
     509               IF( nn_tra(ib_bdy) .eq. jp_frs ) THEN 
     510                  ilen1(jfld) = nblen(igrid(jfld)) 
     511               ELSE 
     512                  ilen1(jfld) = nblenrim(igrid(jfld)) 
     513               ENDIF 
    541514               ilen3(jfld) = jpk 
    542515 
     
    551524               ibdy(jfld) = ib_bdy 
    552525               igrid(jfld) = 1 
    553                ilen1(jfld) = nblen(igrid(jfld)) 
     526               IF( nn_ice_lim2(ib_bdy) .eq. jp_frs ) THEN 
     527                  ilen1(jfld) = nblen(igrid(jfld)) 
     528               ELSE 
     529                  ilen1(jfld) = nblenrim(igrid(jfld)) 
     530               ENDIF 
    554531               ilen3(jfld) = 1 
    555532 
     
    558535               ibdy(jfld) = ib_bdy 
    559536               igrid(jfld) = 1 
    560                ilen1(jfld) = nblen(igrid(jfld)) 
     537               IF( nn_ice_lim2(ib_bdy) .eq. jp_frs ) THEN 
     538                  ilen1(jfld) = nblen(igrid(jfld)) 
     539               ELSE 
     540                  ilen1(jfld) = nblenrim(igrid(jfld)) 
     541               ENDIF 
    561542               ilen3(jfld) = 1 
    562543 
     
    565546               ibdy(jfld) = ib_bdy 
    566547               igrid(jfld) = 1 
    567                ilen1(jfld) = nblen(igrid(jfld)) 
     548               IF( nn_ice_lim2(ib_bdy) .eq. jp_frs ) THEN 
     549                  ilen1(jfld) = nblen(igrid(jfld)) 
     550               ELSE 
     551                  ilen1(jfld) = nblenrim(igrid(jfld)) 
     552               ENDIF 
    568553               ilen3(jfld) = 1 
    569554 
     
    584569      ENDDO ! ib_bdy 
    585570 
     571 
    586572      DO jfld = 1, nb_bdy_fld_sum 
    587573         ALLOCATE( bf(jfld)%fnow(ilen1(jfld),1,ilen3(jfld)) ) 
     
    594580      jstart = 1 
    595581      DO ib_bdy = 1, nb_bdy 
    596          jend = nb_bdy_fld(ib_bdy)  
     582         jend = jstart + nb_bdy_fld(ib_bdy) - 1 
    597583         CALL fld_fill( bf(jstart:jend), blf_i(jstart:jend), cn_dir_array(ib_bdy), 'bdy_dta',   & 
    598584         &              'open boundary conditions', 'nambdy_dta' ) 
     
    613599         IF (nn_dyn2d(ib_bdy) .gt. 0) THEN 
    614600            IF( nn_dyn2d_dta(ib_bdy) .eq. 0 .or. nn_dyn2d_dta(ib_bdy) .eq. 2 .or. ln_full_vel_array(ib_bdy) ) THEN 
    615                ilen0(1:3) = nblen(1:3) 
     601               IF( nn_dyn2d(ib_bdy) .eq. jp_frs ) THEN 
     602                  ilen0(1:3) = nblen(1:3) 
     603               ELSE 
     604                  ilen0(1:3) = nblenrim(1:3) 
     605               ENDIF 
     606               ALLOCATE( dta_bdy(ib_bdy)%ssh(ilen0(1)) ) 
    616607               ALLOCATE( dta_bdy(ib_bdy)%u2d(ilen0(2)) ) 
    617608               ALLOCATE( dta_bdy(ib_bdy)%v2d(ilen0(3)) ) 
    618                IF (nn_dyn2d_dta(ib_bdy).eq.1.or.nn_dyn2d_dta(ib_bdy).eq.3) THEN 
    619                   jfld = jfld + 1 
    620                   dta_bdy(ib_bdy)%ssh => bf(jfld)%fnow(:,1,1) 
    621                ELSE 
    622                   ALLOCATE( dta_bdy(ib_bdy)%ssh(nblen(1)) ) 
    623                ENDIF 
    624609            ELSE 
    625610               IF( nn_dyn2d(ib_bdy) .ne. jp_frs ) THEN 
     
    635620 
    636621         IF ( nn_dyn3d(ib_bdy) .gt. 0 .and. nn_dyn3d_dta(ib_bdy) .eq. 0 ) THEN 
    637             ilen0(1:3) = nblen(1:3) 
     622            IF( nn_dyn3d(ib_bdy) .eq. jp_frs ) THEN 
     623               ilen0(1:3) = nblen(1:3) 
     624            ELSE 
     625               ilen0(1:3) = nblenrim(1:3) 
     626            ENDIF 
    638627            ALLOCATE( dta_bdy(ib_bdy)%u3d(ilen0(2),jpk) ) 
    639628            ALLOCATE( dta_bdy(ib_bdy)%v3d(ilen0(3),jpk) ) 
     
    650639         IF (nn_tra(ib_bdy) .gt. 0) THEN 
    651640            IF( nn_tra_dta(ib_bdy) .eq. 0 ) THEN 
    652                ilen0(1:3) = nblen(1:3) 
     641               IF( nn_tra(ib_bdy) .eq. jp_frs ) THEN 
     642                  ilen0(1:3) = nblen(1:3) 
     643               ELSE 
     644                  ilen0(1:3) = nblenrim(1:3) 
     645               ENDIF 
    653646               ALLOCATE( dta_bdy(ib_bdy)%tem(ilen0(1),jpk) ) 
    654647               ALLOCATE( dta_bdy(ib_bdy)%sal(ilen0(1),jpk) ) 
     
    664657         IF (nn_ice_lim2(ib_bdy) .gt. 0) THEN 
    665658            IF( nn_ice_lim2_dta(ib_bdy) .eq. 0 ) THEN 
    666                ilen0(1:3) = nblen(1:3) 
     659               IF( nn_ice_lim2(ib_bdy) .eq. jp_frs ) THEN 
     660                  ilen0(1:3) = nblen(1:3) 
     661               ELSE 
     662                  ilen0(1:3) = nblenrim(1:3) 
     663               ENDIF 
    667664               ALLOCATE( dta_bdy(ib_bdy)%frld(ilen0(1)) ) 
    668665               ALLOCATE( dta_bdy(ib_bdy)%hicif(ilen0(1)) ) 
Note: See TracChangeset for help on using the changeset viewer.