diff --git a/src/gwmol/gw_analytic_addrpa.F b/src/gwmol/gw_analytic_addrpa.F index c36e9a3c4b..67e8fa9929 100644 --- a/src/gwmol/gw_analytic_addrpa.F +++ b/src/gwmol/gw_analytic_addrpa.F @@ -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 diff --git a/src/gwmol/gw_cdgw_buildiw.F b/src/gwmol/gw_cdgw_buildiw.F index c639a3905f..02852f90bb 100644 --- a/src/gwmol/gw_cdgw_buildiw.F +++ b/src/gwmol/gw_cdgw_buildiw.F @@ -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 ! diff --git a/src/gwmol/gw_cdgw_buildpi.F b/src/gwmol/gw_cdgw_buildpi.F index 9e0ed87ad9..4905b73890 100644 --- a/src/gwmol/gw_cdgw_buildpi.F +++ b/src/gwmol/gw_cdgw_buildpi.F @@ -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 diff --git a/src/gwmol/gw_simd.fh b/src/gwmol/gw_simd.fh new file mode 100644 index 0000000000..dadf7084ec --- /dev/null +++ b/src/gwmol/gw_simd.fh @@ -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