Changeset 12547 for NEMO/trunk/src/OCE


Ignore:
Timestamp:
2020-03-13T11:12:08+01:00 (9 months ago)
Author:
smasson
Message:

trunk: out-of-bounds in bdydta, see #2399

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/OCE/BDY/bdydta.F90

    r12396 r12547  
    9292      INTEGER ::  ii, ij, ik, igrd, ipl               ! local integers 
    9393      INTEGER,   DIMENSION(jpbgrd)     ::   ilen1  
    94       INTEGER,   DIMENSION(:), POINTER ::   nblen, nblenrim  ! short cuts 
    9594      TYPE(OBC_DATA)         , POINTER ::   dta_alias        ! short cut 
    9695      TYPE(FLD), DIMENSION(:), POINTER ::   bf_alias 
     
    108107         DO jbdy = 1, nb_bdy 
    109108            ! 
    110             nblen    => idx_bdy(jbdy)%nblen 
    111             nblenrim => idx_bdy(jbdy)%nblenrim 
    112             ! 
    113109            IF( nn_dyn2d_dta(jbdy) == 0 ) THEN  
    114                ilen1(:) = nblen(:) 
    115110               IF( dta_bdy(jbdy)%lneed_ssh ) THEN  
    116111                  igrd = 1 
    117                   DO ib = 1, ilen1(igrd) 
     112                  DO ib = 1, idx_bdy(jbdy)%nblenrim(igrd)   ! ssh is allocated and used only on the rim 
    118113                     ii = idx_bdy(jbdy)%nbi(ib,igrd) 
    119114                     ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     
    123118               IF( dta_bdy(jbdy)%lneed_dyn2d) THEN  
    124119                  igrd = 2 
    125                   DO ib = 1, ilen1(igrd) 
     120                  DO ib = 1, SIZE(dta_bdy(jbdy)%u2d)   ! u2d is used only on the rim except if ln_full_vel = T, see bdy_dta_init 
    126121                     ii = idx_bdy(jbdy)%nbi(ib,igrd) 
    127122                     ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     
    129124                  END DO 
    130125                  igrd = 3 
    131                   DO ib = 1, ilen1(igrd) 
     126                  DO ib = 1, SIZE(dta_bdy(jbdy)%v2d)   ! v2d is used only on the rim except if ln_full_vel = T, see bdy_dta_init 
    132127                     ii = idx_bdy(jbdy)%nbi(ib,igrd) 
    133128                     ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     
    138133            ! 
    139134            IF( nn_dyn3d_dta(jbdy) == 0 ) THEN  
    140                ilen1(:) = nblen(:) 
    141135               IF( dta_bdy(jbdy)%lneed_dyn3d ) THEN  
    142136                  igrd = 2  
    143                   DO ib = 1, ilen1(igrd) 
     137                  DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    144138                     DO ik = 1, jpkm1 
    145139                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     
    149143                  END DO 
    150144                  igrd = 3  
    151                   DO ib = 1, ilen1(igrd) 
     145                  DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    152146                     DO ik = 1, jpkm1 
    153147                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     
    160154 
    161155            IF( nn_tra_dta(jbdy) == 0 ) THEN  
    162                ilen1(:) = nblen(:) 
    163156               IF( dta_bdy(jbdy)%lneed_tra ) THEN 
    164157                  igrd = 1  
    165                   DO ib = 1, ilen1(igrd) 
     158                  DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    166159                     DO ik = 1, jpkm1 
    167160                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     
    176169#if defined key_si3 
    177170            IF( nn_ice_dta(jbdy) == 0 ) THEN    ! set ice to initial values 
    178                ilen1(:) = nblen(:) 
    179171               IF( dta_bdy(jbdy)%lneed_ice ) THEN 
    180172                  igrd = 1    
    181173                  DO jl = 1, jpl 
    182                      DO ib = 1, ilen1(igrd) 
     174                     DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    183175                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
    184176                        ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     
    338330            DO jbdy = 1, nb_bdy      ! Tidal component added in ts loop 
    339331               IF ( nn_dyn2d_dta(jbdy) .GE. 2 ) THEN 
    340                   nblen => idx_bdy(jbdy)%nblen 
    341                   nblenrim => idx_bdy(jbdy)%nblenrim 
    342                   IF( cn_dyn2d(jbdy) == 'frs' ) THEN   ;   ilen1(:)=nblen(:) 
    343                   ELSE                                 ;   ilen1(:)=nblenrim(:) 
     332                  IF( cn_dyn2d(jbdy) == 'frs' ) THEN   ;   ilen1(:)=idx_bdy(jbdy)%nblen(:) 
     333                  ELSE                                 ;   ilen1(:)=idx_bdy(jbdy)%nblenrim(:) 
    344334                  ENDIF 
    345335                  IF ( dta_bdy(jbdy)%lneed_ssh   ) dta_bdy_s(jbdy)%ssh(1:ilen1(1)) = dta_bdy(jbdy)%ssh(1:ilen1(1)) 
Note: See TracChangeset for help on using the changeset viewer.