Changeset 12548


Ignore:
Timestamp:
2020-03-13T11:34:46+01:00 (8 months ago)
Author:
smasson
Message:

release-4.0-HEAD: out-of-bounds in bdydta, see #2410

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/releases/release-4.0-HEAD/src/OCE/BDY/bdydta.F90

    r12395 r12548  
    9696      INTEGER ::  ii, ij, ik, igrd, ipl               ! local integers 
    9797      INTEGER,   DIMENSION(jpbgrd)     ::   ilen1  
    98       INTEGER,   DIMENSION(:), POINTER ::   nblen, nblenrim  ! short cuts 
    9998      TYPE(OBC_DATA)         , POINTER ::   dta_alias        ! short cut 
    10099      TYPE(FLD), DIMENSION(:), POINTER ::   bf_alias 
     
    112111         DO jbdy = 1, nb_bdy 
    113112            ! 
    114             nblen    => idx_bdy(jbdy)%nblen 
    115             nblenrim => idx_bdy(jbdy)%nblenrim 
    116             ! 
    117113            IF( nn_dyn2d_dta(jbdy) == 0 ) THEN  
    118                ilen1(:) = nblen(:) 
    119114               IF( dta_bdy(jbdy)%lneed_ssh ) THEN  
    120115                  igrd = 1 
    121                   DO ib = 1, ilen1(igrd) 
     116                  DO ib = 1, idx_bdy(jbdy)%nblenrim(igrd)   ! ssh is allocated and used only on the rim 
    122117                     ii = idx_bdy(jbdy)%nbi(ib,igrd) 
    123118                     ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     
    127122               IF( dta_bdy(jbdy)%lneed_dyn2d) THEN  
    128123                  igrd = 2 
    129                   DO ib = 1, ilen1(igrd) 
     124                  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 
    130125                     ii = idx_bdy(jbdy)%nbi(ib,igrd) 
    131126                     ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     
    133128                  END DO 
    134129                  igrd = 3 
    135                   DO ib = 1, ilen1(igrd) 
     130                  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 
    136131                     ii = idx_bdy(jbdy)%nbi(ib,igrd) 
    137132                     ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     
    142137            ! 
    143138            IF( nn_dyn3d_dta(jbdy) == 0 ) THEN  
    144                ilen1(:) = nblen(:) 
    145139               IF( dta_bdy(jbdy)%lneed_dyn3d ) THEN  
    146140                  igrd = 2  
    147                   DO ib = 1, ilen1(igrd) 
     141                  DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    148142                     DO ik = 1, jpkm1 
    149143                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     
    153147                  END DO 
    154148                  igrd = 3  
    155                   DO ib = 1, ilen1(igrd) 
     149                  DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    156150                     DO ik = 1, jpkm1 
    157151                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     
    164158 
    165159            IF( nn_tra_dta(jbdy) == 0 ) THEN  
    166                ilen1(:) = nblen(:) 
    167160               IF( dta_bdy(jbdy)%lneed_tra ) THEN 
    168161                  igrd = 1  
    169                   DO ib = 1, ilen1(igrd) 
     162                  DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    170163                     DO ik = 1, jpkm1 
    171164                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
     
    180173#if defined key_si3 
    181174            IF( nn_ice_dta(jbdy) == 0 ) THEN    ! set ice to initial values 
    182                ilen1(:) = nblen(:) 
    183175               IF( dta_bdy(jbdy)%lneed_ice ) THEN 
    184176                  igrd = 1    
    185177                  DO jl = 1, jpl 
    186                      DO ib = 1, ilen1(igrd) 
     178                     DO ib = 1, idx_bdy(jbdy)%nblen(igrd) 
    187179                        ii = idx_bdy(jbdy)%nbi(ib,igrd) 
    188180                        ij = idx_bdy(jbdy)%nbj(ib,igrd) 
     
    348340            DO jbdy = 1, nb_bdy      ! Tidal component added in ts loop 
    349341               IF ( nn_dyn2d_dta(jbdy) .GE. 2 ) THEN 
    350                   nblen => idx_bdy(jbdy)%nblen 
    351                   nblenrim => idx_bdy(jbdy)%nblenrim 
    352                   IF( cn_dyn2d(jbdy) == 'frs' ) THEN ; ilen1(:)=nblen(:) ; ELSE ; ilen1(:)=nblenrim(:) ; ENDIF  
     342                  IF( cn_dyn2d(jbdy) == 'frs' ) THEN   ;   ilen1(:)=idx_bdy(jbdy)%nblen(:) 
     343                  ELSE                                 ;   ilen1(:)=idx_bdy(jbdy)%nblenrim(:) 
     344                  ENDIF 
    353345                     IF ( dta_bdy(jbdy)%lneed_ssh   ) dta_bdy_s(jbdy)%ssh(1:ilen1(1)) = dta_bdy(jbdy)%ssh(1:ilen1(1)) 
    354346                     IF ( dta_bdy(jbdy)%lneed_dyn2d ) dta_bdy_s(jbdy)%u2d(1:ilen1(2)) = dta_bdy(jbdy)%u2d(1:ilen1(2)) 
Note: See TracChangeset for help on using the changeset viewer.