Ignore:
Timestamp:
Feb 23, 2022, 2:22:42 PM (3 years ago)
Author:
emillour
Message:

Common dynamics:
Some rather harmless OpenMP fixes in the filtering identified by recent versions of ifort.
EM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.COMMON/libf/dyn3dpar/filtreg_p.F

    r1019 r2626  
    44     &     ifiltre, iaire, griscal ,iter)
    55      USE parallel_lmdz, only : OMP_CHUNK
    6       USE mod_filtre_fft
    7       USE timer_filtre
    8      
    9       USE filtreg_mod
     6      USE mod_filtre_fft, only: use_filtre_fft, filtre_u_fft
     7      USE mod_filtre_fft, only: filtre_v_fft, filtre_inv_fft
     8      USE timer_filtre, only: init_timer, start_timer, stop_timer
     9      USE filtreg_mod, only: matriceun, matricevn, matrinvn, matrinvs
     10      USE filtreg_mod, only: matriceus, matricevs
    1011     
    1112      IMPLICIT NONE
     
    5152c
    5253c
    53 #include "dimensions.h"
    54 #include "paramet.h"
    55 #include "coefils.h"
    56 c
    57       INTEGER ibeg,iend,nlat,nbniv,ifiltre,iter
     54      include "dimensions.h"
     55      include "paramet.h"
     56      include "coefils.h"
     57c
     58      REAL,INTENT(INOUT) :: champ( iip1,nlat,nbniv)
     59      INTEGER,INTENT(IN) :: ibeg,iend,nlat,nbniv,ifiltre,iter
     60      LOGICAL,INTENT(IN) :: griscal
     61      INTEGER,INTENT(IN) :: iaire
     62
    5863      INTEGER i,j,l,k
    5964      INTEGER iim2,immjm
    6065      INTEGER jdfil1,jdfil2,jffil1,jffil2,jdfil,jffil
    6166     
    62       REAL  champ( iip1,nlat,nbniv)
    63      
    64       LOGICAL    griscal
    65       INTEGER    hemisph, iaire
     67      INTEGER    hemisph
    6668     
    6769      REAL :: champ_fft(iip1,nlat,nbniv)
     
    201203            ENDDO
    202204c$OMP END DO NOWAIT
    203 
    204205            nbniv_loc = ll_nb
    205206
     
    214215     &                    champ_fft(1,j-jdfil+1,1), iip1*nlat)
    215216#else
    216                      champ_fft(:iim,j-jdfil+1,:)
    217      &                    =matmul(matrinvn(:,:,j),champ_loc(:iim,j,:))
     217                     champ_fft(:iim,j-jdfil+1,:nbniv_loc)
     218     &                    =matmul(matrinvn(:,:,j),
     219     &                            champ_loc(:iim,j,:nbniv_loc))
    218220#endif
    219221                  ENDDO
     
    227229     &                    champ_fft(1,j-jdfil+1,1), iip1*nlat)
    228230#else
    229                      champ_fft(:iim,j-jdfil+1,:)
    230      &                    =matmul(matriceun(:,:,j),champ_loc(:iim,j,:))
     231                     champ_fft(:iim,j-jdfil+1,:nbniv_loc)
     232     &                    =matmul(matriceun(:,:,j),
     233     &                            champ_loc(:iim,j,:nbniv_loc))
    231234#endif
    232235                  ENDDO
     
    240243     &                    champ_fft(1,j-jdfil+1,1), iip1*nlat)
    241244#else
    242                      champ_fft(:iim,j-jdfil+1,:)
    243      &                    =matmul(matricevn(:,:,j),champ_loc(:iim,j,:))
    244 #endif
    245                   ENDDO
    246                  
    247                ENDIF
    248                
    249             ELSE
     245                     champ_fft(:iim,j-jdfil+1,:nbniv_loc)
     246     &                    =matmul(matricevn(:,:,j),
     247     &                            champ_loc(:iim,j,:nbniv_loc))
     248#endif
     249                  ENDDO
     250                 
     251               ENDIF ! of IF( ifiltre.EQ.-2 ) ... ELSE IF ( griscal ) ... ELSE
     252               
     253            ELSE ! of IF( hemisph.EQ.1 )
    250254               
    251255               IF( ifiltre.EQ.-2 )   THEN
     
    257261     &                    champ_fft(1,j-jdfil+1,1), iip1*nlat)
    258262#else
    259                      champ_fft(:iim,j-jdfil+1,:)
     263                     champ_fft(:iim,j-jdfil+1,:nbniv_loc)
    260264     &                    =matmul(matrinvs(:,:,j-jfiltsu+1),
    261      &                            champ_loc(:iim,j,:))
     265     &                            champ_loc(:iim,j,:nbniv_loc))
    262266#endif
    263267                  ENDDO
     
    272276     &                    champ_fft(1,j-jdfil+1,1), iip1*nlat)
    273277#else
    274                      champ_fft(:iim,j-jdfil+1,:)
     278                     champ_fft(:iim,j-jdfil+1,:nbniv_loc)
    275279     &                    =matmul(matriceus(:,:,j-jfiltsu+1),
    276      &                            champ_loc(:iim,j,:))
     280     &                            champ_loc(:iim,j,:nbniv_loc))
    277281#endif
    278282                  ENDDO
     
    287291     &                    champ_fft(1,j-jdfil+1,1), iip1*nlat)
    288292#else
    289                      champ_fft(:iim,j-jdfil+1,:)
     293                     champ_fft(:iim,j-jdfil+1,:nbniv_loc)
    290294     &                    =matmul(matricevs(:,:,j-jfiltsv+1),
    291      &                            champ_loc(:iim,j,:))
    292 #endif
    293                   ENDDO
    294                  
    295                ENDIF
    296                
    297             ENDIF
     295     &                            champ_loc(:iim,j,:nbniv_loc))
     296#endif
     297                  ENDDO
     298                 
     299               ENDIF ! of IF( ifiltre.EQ.-2 ) ... ELSE IF ( griscal ) ... ELSE
     300               
     301            ENDIF ! of IF( hemisph.EQ.1 ) ... ELSE
    298302!     c     
    299303            IF( ifiltre.EQ.2 )  THEN
     
    334338c$OMP END DO NOWAIT
    335339               
    336             ENDIF
     340            ENDIF ! of IF( ifiltre.EQ.2 ) ... ELSE
    337341           
    338342c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     
    348352ccccccccccccccccccccccccccccccccccccccccccccc
    349353       
    350          ELSE
     354         ELSE ! of IF (.NOT. use_filtre_fft)
    351355       
    352356c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     
    405409            ENDDO
    406410c$OMP END DO NOWAIT             
    407          ENDIF
     411         ENDIF ! of IF (.NOT. use_filtre_fft) ... ELSE
    408412c Fin de la zone de filtrage
    409413
    410414       
    411       ENDDO
     415      ENDDO ! of DO hemisph = 1, 2
    412416
    413417!      DO j=1,nlat
     
    430434      CALL stop_timer
    431435c$OMP END MASTER
    432       RETURN
     436
    433437      END
Note: See TracChangeset for help on using the changeset viewer.