Ignore:
Timestamp:
Sep 24, 2014, 1:14:19 PM (10 years ago)
Author:
Ehouarn Millour
Message:

Bug fix: wrong (implicit) bounds for matmul operations, in the non-FFT filteringcase.
EM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/dyn3dmem/mod_filtreg_p.F

    r1907 r2125  
    66     &     ifiltre, iaire, griscal ,iter)
    77      USE parallel_lmdz, only : OMP_CHUNK
    8       USE mod_filtre_fft_loc
    9       USE timer_filtre
    10      
    11       USE filtreg_mod
     8      USE mod_filtre_fft_loc, ONLY: use_filtre_fft, filtre_u_fft,
     9     &                              filtre_v_fft, filtre_inv_fft
     10      USE timer_filtre, ONLY: init_timer, start_timer, stop_timer
     11     
     12      USE filtreg_mod, ONLY: matrinvn, matrinvs, matriceun, matriceus,
     13     &                       matricevn, matricevs
    1214     
    1315      IMPLICIT NONE
     
    5759#include "coefils.h"
    5860c
    59       INTEGER jjb,jje,ibeg,iend,nlat,nbniv,ifiltre,iter
     61      INTEGER,INTENT(IN) :: jjb,jje,ibeg,iend,nlat,nbniv,ifiltre,iter
     62      INTEGER,INTENT(IN) :: iaire
     63      LOGICAL,INTENT(IN) :: griscal
     64      REAL,INTENT(INOUT) ::  champ( iip1,jjb:jje,nbniv)
     65     
    6066      INTEGER i,j,l,k
    6167      INTEGER iim2,immjm
    6268      INTEGER jdfil1,jdfil2,jffil1,jffil2,jdfil,jffil
    63      
    64       REAL  champ( iip1,jjb:jje,nbniv)
    65      
    66       LOGICAL    griscal
    67       INTEGER    hemisph, iaire
    68      
     69      INTEGER    hemisph
    6970      REAL :: champ_fft(iip1,jjb:jje,nbniv)
    70       REAL :: champ_in(iip1,jjb:jje,nbniv)
     71!      REAL :: champ_in(iip1,jjb:jje,nbniv)
    7172     
    7273      LOGICAL,SAVE     :: first=.TRUE.
     
    216217     &                    champ_fft(1,j,1), iip1*(jje-jjb+1))
    217218#else
    218                      champ_fft(:,j,1:nbniv_loc)=
    219      &                    matmul(matrinvn(:,:,j),
    220      &                    champ_loc(:iim,j,1:nbniv_loc))
     219                     champ_fft(1:iim,j,1:nbniv_loc)=
     220     &                    matmul(matrinvn(1:iim,1:iim,j),
     221     &                    champ_loc(1:iim,j,1:nbniv_loc))
    221222#endif
    222223                  ENDDO
     
    230231     &                    champ_fft(1,j,1), iip1*(jje-jjb+1))
    231232#else
    232                      champ_fft(:,j,1:nbniv_loc)=
    233      &                    matmul(matriceun(:,:,j),
    234      &                           champ_loc(:iim,j,1:nbniv_loc))
     233                     champ_fft(1:iim,j,1:nbniv_loc)=
     234     &                    matmul(matriceun(1:iim,1:iim,j),
     235     &                           champ_loc(1:iim,j,1:nbniv_loc))
    235236#endif
    236237                  ENDDO
     
    244245     &                    champ_fft(1,j,1), iip1*(jje-jjb+1))
    245246#else
    246                      champ_fft(:,j,1:nbniv_loc)=
    247      &                    matmul(matricevn(:,:,j),           
    248      &                           champ_loc(:iim,j,1:nbniv_loc))
     247                     champ_fft(1:iim,j,1:nbniv_loc)=
     248     &                    matmul(matricevn(1:iim,1:iim,j),           
     249     &                           champ_loc(1:iim,j,1:nbniv_loc))
    249250#endif
    250251                  ENDDO
     
    262263     &                    champ_fft(1,j,1), iip1*(jje-jjb+1))
    263264#else
    264                      champ_fft(:,j,1:nbniv_loc)=
    265      &                    matmul(matrinvs(:,:,j-jfiltsu+1),
    266      &                           champ_loc(:iim,j,1:nbniv_loc))
     265                     champ_fft(1:iim,j,1:nbniv_loc)=
     266     &                    matmul(matrinvs(1:iim,1:iim,j-jfiltsu+1),
     267     &                           champ_loc(1:iim,j,1:nbniv_loc))
    267268#endif
    268269                  ENDDO
     
    277278     &                    champ_fft(1,j,1), iip1*(jje-jjb+1))
    278279#else
    279                      champ_fft(:,j,1:nbniv_loc)=
    280      &                    matmul(matriceus(:,:,j-jfiltsu+1),
    281      &                           champ_loc(:iim,j,1:nbniv_loc))
     280                     champ_fft(1:iim,j,1:nbniv_loc)=
     281     &                    matmul(matriceus(1:iim,1:iim,j-jfiltsu+1),
     282     &                           champ_loc(1:iim,j,1:nbniv_loc))
    282283#endif
    283284                  ENDDO
     
    292293     &                    champ_fft(1,j,1), iip1*(jje-jjb+1))
    293294#else
    294                      champ_fft(:,j,1:nbniv_loc)=
    295      &                    matmul(matricevs(:,:,j-jfiltsv+1),
    296      &                           champ_loc(:iim,j,1:nbniv_loc))
     295                     champ_fft(1:iim,j,1:nbniv_loc)=
     296     &                    matmul(matricevs(1:iim,1:iim,j-jfiltsv+1),
     297     &                           champ_loc(1:iim,j,1:nbniv_loc))
    297298#endif
    298299                  ENDDO
     
    344345            DO l = 1, nbniv
    345346               DO j = jdfil,jffil
     347                  ! add redundant longitude
    346348                  champ( iip1,j,l ) = champ( 1,j,l )
    347349               ENDDO
     
    406408               DO j=jdfil,jffil
    407409!            champ_FFT( iip1,j,l ) = champ_FFT( 1,j,l )
     410                  ! add redundant longitude
    408411                  champ( iip1,j,l ) = champ( 1,j,l )
    409412               ENDDO
Note: See TracChangeset for help on using the changeset viewer.