fix for openmp simd bug in ifort 2023.1

This commit is contained in:
edoapra 2023-05-27 11:14:32 -07:00
parent 789a52bf63
commit 7dce6cbd44
No known key found for this signature in database
GPG key ID: 48E12DA1EDE9E1B0
4 changed files with 21 additions and 14 deletions

View file

@ -1,3 +1,4 @@
#include "gw_simd.fh"
subroutine gw_analytic_addrpa(rpa,eia,mynpoles,lpole)
c
c Adds squared eigenvalue differences to diagonal of
@ -13,12 +14,11 @@ c Equation (32), (34).
double precision,intent(out) :: rpa(mynpoles,*)
integer ipole
!$omp parallel do simd
!$omp parallel do MYSIMD
do ipole=lpole,lpole+mynpoles-1
rpa(ipole-lpole+1,ipole) = rpa(ipole-lpole+1,ipole) +
$ eia(ipole-lpole+1)**2
enddo
!$omp end parallel do simd
!$omp end parallel do MYSIMD
end subroutine

View file

@ -5,7 +5,7 @@
#define ISOGW real(kind=c_double)
#define GWTYP double precision
#endif
#include "gw_simd.fh"
#define USE_ALLOC 1
subroutine gw_cdgw_buildiw(pars,eia,x,wgt,iw,iwidx,nmo,nri,ngl,
$ mynmo,maxpoles,maxqp,ipol)
@ -176,7 +176,7 @@ c
! Precompute square brackets of Equation (39).
!
do isp=1,ipol
!$omp parallel do simd schedule(static)
!$omp parallel do MYSIMD schedule(static)
do ipole=1,pars%mynpoles(isp)
#ifdef GWCMPLX
factor(ipole,isp) = sqrt(
@ -187,7 +187,7 @@ c
$ dsqrt(eia(ipole,isp)/(eia(ipole,isp)**2 + w2))
#endif
enddo
!$omp end parallel do simd
!$omp end parallel do MYSIMD
enddo
!

View file

@ -1,3 +1,4 @@
#include "gw_simd.fh"
subroutine gw_cdgw_buildpi(which,ovup,ovdw,pi,factor,ldpi,nri,
$ npoles,main,ipol,maxpoles)
C
@ -64,13 +65,13 @@ C Note that we actually compute -\Pi.
!
! Scale ERIs with factor in square brackets of Equation (39)
!
!$omp parallel do simd schedule(static) collapse(2)
!$omp parallel do MYSIMD schedule(static) collapse(2)
do ipole=1,npoles(1)
do iri=1,nri
ovup(iri,ipole) = ovup(iri,ipole)*factor(ipole,1)
enddo
enddo
!$omp end parallel do simd
!$omp end parallel do MYSIMD
!
! DSFRK is the RFP version of DSYRK
@ -80,13 +81,13 @@ C Note that we actually compute -\Pi.
!
! Back-transform ERIs, since we are going to need them again
!
!$omp parallel do simd schedule(static) collapse(2)
!$omp parallel do MYSIMD schedule(static) collapse(2)
do ipole=1,npoles(1)
do iri=1,nri
ovup(iri,ipole) = ovup(iri,ipole)/factor(ipole,1)
enddo
enddo
!$omp end parallel do simd
!$omp end parallel do MYSIMD
endif
@ -98,13 +99,13 @@ C Note that we actually compute -\Pi.
!
! Scale ERIs with factor in square brackets of Equation (39)
!
!$omp parallel do simd schedule(static) collapse(2)
!$omp parallel do MYSIMD schedule(static) collapse(2)
do ipole=1,npoles(2)
do iri=1,nri
ovdw(iri,ipole) = ovdw(iri,ipole)*factor(ipole,2)
enddo
enddo
!$omp end parallel do simd
!$omp end parallel do MYSIMD
!
! DSFRK is the RFP version of DSYRK
@ -114,13 +115,13 @@ C Note that we actually compute -\Pi.
!
! Back-transform ERIs, since we are going to need them again
!
!$omp parallel do simd schedule(static) collapse(2)
!$omp parallel do MYSIMD schedule(static) collapse(2)
do ipole=1,npoles(2)
do iri=1,nri
ovdw(iri,ipole) = ovdw(iri,ipole)/factor(ipole,2)
enddo
enddo
!$omp end parallel do simd
!$omp end parallel do MYSIMD
endif

6
src/gwmol/gw_simd.fh Normal file
View file

@ -0,0 +1,6 @@
#if (__INTEL_COMPILER_BUILD_DATE>=20230302 && !defined(__INTEL_LLVM_COMPILER))
#define MYSIMD
#warning do simd disabled
#else
#define MYSIMD simd
#endif