C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 5/1, 2009 ^^^^^ SUBROUTINE CHAVER(IREC8,IREC9,KOPR,NOPR,KBZTYP) C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use MKL_DFTI IMPLICIT REAL(A-H,O-Y) IMPLICIT COMPLEX(Z) INCLUDE 'PACVPP' complex(8) :: X_IN ((IFX2-1)*IFY2*IFZ2) type(DFTI_DESCRIPTOR), POINTER :: Desc_Handle integer status real(8) Scale integer lengths(3) C !$OMP THREADPRIVATE( /ZAJEKO/, /EIGENP/ ) C-----ARRAYS FOR MFFT-------------------------------------------- COMPLEX(8) ZC3D1(IFX2,IFY2,IFZ2) REAL(8) CHG3D(IFX2,IFY2,IFZ2) C================================================================ C EQUIVALENCE (ZC11D(1),ZC3D1(1,1,1)) C================================================================ KFT1 = IFX2 KFT2 = IFY2 KFT3 = IFZ2 KSUM=KFT1*KFT2*KFT3 KVOL=(KFT1-1)*KFT2*KFT3 CCC = 2.D0*RVOL/(2.D0*PAI)**3/FLOAT(KV3) KIMG=1 WRITE (6,*) 'OEPNMP IN CHAVER' DO 7701 I=1,KSUM CHGB1(I)=0.0D0 7701 CONTINUE WRITE (6,*) 'OEPNMP IN CHAVER2' DO 7731 KK=1,KFT3 DO 7732 JJ=1,KFT2 DO 7733 II=1,KFT1 CHG3D(II,JJ,KK)=0.0D0 ZC3D1(II,JJ,KK)=DCMPLX(0.0D0,0.0D0) 7733 CONTINUE 7732 CONTINUE 7731 CONTINUE C WRITE (6,*) 'CHECK POINT 0 IN CHAVER' !$OMP PARALLEL DEFAULT(NONE) !$OMP& COPYIN( ZAJ, OCCUP ) !$OMP& FIRSTPRIVATE( KFT1,KFT2,KFT3,KSUM, CHG3D ) !$OMP& PRIVATE(IIBA,I1, L1,L2,L3, !$OMP& scale, lengths, status, X_IN, Desc_Handle, !$OMP& IERR,IERR1, II,JJ,KK, INDX, ZC3D1 ) !$OMP& SHARED( KV3,NBD1,NBD2, !$OMP& IBA,NBASE, IGF1,IGF2,IGF3, !$OMP& UNIVOL, CHGB1 ) !$OMP DO C!$OMP DO REDUCTION(+:CHGB1) DO 7820 IK=1,KV3 C WRITE (6,*) 'CHECK POINT IN CHAVER, IK = ',IK DO 7810 IBAN=NBD1,NBD2 IIBA=IBA(IK) DO 7831 KK=1,KFT3 DO 7832 JJ=1,KFT2 DO 7833 II=1,KFT1 ZC3D1(II,JJ,KK)=DCMPLX(0.0D0,0.0D0) 7833 CONTINUE 7832 CONTINUE 7831 CONTINUE C DO 7830 I=1,KSUM C ZC11D(I)=DCMPLX(0.0D0,0.0D0) C 7830 CONTINUE C DO 232 I=1,IIBA I1=NBASE(I,IK) L1=IGF1(I1) L2=IGF2(I1) L3=IGF3(I1) ZC3D1(L1,L2,L3) = ZAJ(I,IBAN,IK) 232 CONTINUE C*****---- INVERSE FAST FOURIER TRANSFORMATION ----- C CALL C3FFT_MKL(ZC3D1,KFT1,KFT1-1,KFT2,KFT3,1,IERR1) C C INLINE C3FFT_MKL C DO 111 KK=1,KFT3 DO 112 JJ=1,KFT2 DO 113 II=1,KFT1-1 INDX=(KFT1-1)*KFT2*(KK-1)+(KFT1-1)*(JJ-1)+II X_IN(INDX)=ZC3D1(II,JJ,KK) 113 CONTINUE 112 CONTINUE 111 CONTINUE lengths(1) = KFT1-1 lengths(2) = KFT2 lengths(3) = KFT3 Status = DftiCreateDescriptor( Desc_Handle, & DFTI_DOUBLE, DFTI_COMPLEX, 3, lengths) C INVERSE FFT IFFT = 1 Scale = 1.0 Status = DftiSetValue(Desc_Handle, DFTI_BACKWARD_SCALE, Scale) Status = DftiCommitDescriptor( Desc_Handle ) Status = DftiComputeBackward( Desc_Handle, X_IN) C DO 211 KK=1,KFT3 DO 212 JJ=1,KFT2 DO 213 II=1,KFT1-1 INDX=(KFT1-1)*KFT2*(KK-1)+(KFT1-1)*(JJ-1)+II ZC3D1(II,JJ,KK)=X_IN(INDX) 213 CONTINUE 212 CONTINUE 211 CONTINUE C Status = DftiFreeDescriptor(Desc_Handle) C DO 1831 KK=1,KFT3 DO 1832 JJ=1,KFT2 DO 1833 II=1,KFT1 CHG3D(II,JJ,KK)=CHG3D(II,JJ,KK)+OCCUP(IBAN,IK)* & DCONJG(ZC3D1(II,JJ,KK))*ZC3D1(II,JJ,KK) 1833 CONTINUE 1832 CONTINUE 1831 CONTINUE C 7810 CONTINUE 7820 CONTINUE !$OMP END DO C !$OMP CRITICAL DO 1731 KK=1,KFT3 DO 1732 JJ=1,KFT2 DO 1733 II=1,KFT1 INDX=KFT1*KFT2*(KK-1)+KFT1*(JJ-1)+II CHGB1(INDX)=CHGB1(INDX)+CHG3D(II,JJ,KK) 1733 CONTINUE 1732 CONTINUE 1731 CONTINUE !$OMP END CRITICAL !$OMP END PARALLEL C C DO 7900 I=1,KSUM C ZC11D(I)=CCC*CHGB1(I) C 7900 CONTINUE C DO 1631 KK=1,KFT3 DO 1632 JJ=1,KFT2 DO 1633 II=1,KFT1 INDX=KFT1*KFT2*(KK-1)+KFT1*(JJ-1)+II ZC3D1(II,JJ,KK)=CCC*CHGB1(INDX) 1633 CONTINUE 1632 CONTINUE 1631 CONTINUE C C*****---- FAST FOURIER TRANSFORMATION ----- CALL C3FFT_MKL(ZC3D1,KFT1,KFT1-1,KFT2,KFT3,-1,IERR) DENOM=1.0D0/DBLE(KVOL) DO 30 I=1,KG L1=IGF1(I) L2=IGF2(I) L3=IGF3(I) ZCHG(I)=ZC3D1(L1,L2,L3)*DENOM 30 CONTINUE C---------------KNGP ---> KNG KPO ---> KOPR ----------------------- IF (KBZTYP.LT.0 .OR. KBZTYP.GE.2) THEN CALL CHGAVR(KOPR,NOPR,KIMG) END IF C--------------------------------------------------------------- RETURN END