C //////////////////////////////////////////////////////////// C // EWALD SUMMATION FOR TOTAL ENERGY , FORCE (VEC VERSION) // C // 7 OCTOBER, 1986 ---> 3/15,1990 // C //////////////////////////////////////////////////////////// SUBROUTINE EWVEC(ETOT2) IMPLICIT REAL(A-H,O-Y) IMPLICIT COMPLEX(Z) INCLUDE 'PACVPP' PARAMETER(KEWA=KATM*(KATM+1)/2) DIMENSION CR(KLM),CI(KLM) DIMENSION CRX(KLM),CRY(KLM),CRZ(KLM),CLX(KLM),CLY(KLM),CLZ(KLM) DIMENSION SSS(KLM),SSI(KLM) DIMENSION ITYP(KATM) DIMENSION FORC1(KATM,KATM,3) C CON=4.D0*PAI/UNIVOL CC=2.D0/SQRT(PAI) ETOT2=0.D0 IRL=KLX2*KLY2*KLZ2 IKM=KMX2*KMY2*KMZ2 MM=0 DO 2 II=1,KTYP I1=MM+1 I2=MM+IATOM(II) MM=I2 DO 1 JJ=I1,I2 C <------ ATTN]]] KFTYPE <------- ]]]]] ITYP(JJ)=II 1 CONTINUE 2 CONTINUE IF(MM.NE.KATM) & WRITE(6,*) '****WARNING "MM.NE.KATM" IN EWALD DO-LOOP 1****' C ************************************************************ C ** THE RESULTS SHOULD BE INDEPENDENT OF THE VALUE OF ALF. ** C ************************************************************ A1X=ALTV(1,1) A1Y=ALTV(2,1) A1Z=ALTV(3,1) A2X=ALTV(1,2) A2Y=ALTV(2,2) A2Z=ALTV(3,2) A3X=ALTV(1,3) A3Y=ALTV(2,3) A3Z=ALTV(3,3) B1X=RLTV(1,1) B1Y=RLTV(2,1) B1Z=RLTV(3,1) B2X=RLTV(1,2) B2Y=RLTV(2,2) B2Z=RLTV(3,2) B3X=RLTV(1,3) B3Y=RLTV(2,3) B3Z=RLTV(3,3) C DO 110 J=1,KATM DO 111 I=1,KATM FORC1(I,J,1)=0.0D0 FORC1(I,J,2)=0.0D0 FORC1(I,J,3)=0.0D0 111 CONTINUE 110 CONTINUE C MM=0 DO 10 I1=1,KLX2 F1=FLOAT(I1-KLX-1) DO 10 I2=1,KLY2 F2=FLOAT(I2-KLY-1) DO 10 I3=1,KLZ2 F3=FLOAT(I3-KLZ-1) MM=MM+1 CX(MM)= F1*A1X + F2*A2X + F3*A3X CY(MM)= F1*A1Y + F2*A2Y + F3*A3Y CZ(MM)= F1*A1Z + F2*A2Z + F3*A3Z 10 CONTINUE C MK=0 DO 20 I1=1,KMX2 F1=FLOAT(I1-KMX-1) DO 20 I2=1,KMY2 F2=FLOAT(I2-KMY-1) DO 20 I3=1,KMZ2 F3=FLOAT(I3-KMZ-1) MK=MK+1 CKX(MK)= F1*B1X + F2*B2X + F3*B3X CKY(MK)= F1*B1Y + F2*B2Y + F3*B3Y CKZ(MK)= F1*B1Z + F2*B2Z + F3*B3Z CKR(MK)= SQRT( CKX(MK)**2 + CKY(MK)**2 + CKZ(MK)**2 ) 20 CONTINUE C IF (IRL.NE.MM.OR.IKM.NE.MK) & WRITE (6,*) 'WORNING] IRL .NE. MM OR IKM .NE. MK]' C STRESS 1 DO 1000 IS=1,6 SIGEWA(IS)=0.0D0 1000 CONTINUE C DO 100 I=1,KATM DO 101 J=I,KATM ITE=1 ALFF=ALF 77 CONTINUE AL1=SQRT(ALFF) AL2=0.25D0/ALFF SUM =0.0D0 SIG1 =0.0D0 SIG2 =0.0D0 SIG3 =0.0D0 SIG4 =0.0D0 SIG5 =0.0D0 SIG6 =0.0D0 SF1X =0.0D0 SF1Y =0.0D0 SF1Z =0.0D0 SF1XI=0.0D0 SF1YI=0.0D0 SF1ZI=0.0D0 C R1=CATX(I)-CATX(J) R2=CATY(I)-CATY(J) R3=CATZ(I)-CATZ(J) C /////////////////////////////////// C // STEP 1; REAL-SPACE SUMMATION // C /////////////////////////////////// DO 11 L=1,MM SSS(L)=0.0D0 SSI(L)=0.0D0 CRX(L)=CX(L)+R1 CRY(L)=CY(L)+R2 CRZ(L)=CZ(L)+R3 CLX(L)=CX(L)-R1 CLY(L)=CY(L)-R2 CLZ(L)=CZ(L)-R3 CR(L)=SQRT((CX(L)+R1)**2 + (CY(L)+R2)**2 + (CZ(L)+R3)**2 ) CI(L)=SQRT((CX(L)-R1)**2 + (CY(L)-R2)**2 + (CZ(L)-R3)**2 ) 11 CONTINUE C DO 12 L=1,MM IF(CR(L).EQ.0.0D0) THEN SUM=SUM-CC*AL1 ELSE SUM=SUM+ (1.D0-ERF(AL1*CR(L)))/CR(L) C-----STRESS CALCULATION STMP = - (1.D0-ERF(AL1*CR(L)))/(CR(L)*CR(L)*CR(L)) & - CC*AL1*EXP(-ALFF*CR(L)*CR(L))/(CR(L)*CR(L)) SIG1=SIG1+STMP*CRX(L)*CRX(L) SIG2=SIG2+STMP*CRX(L)*CRY(L) SIG3=SIG3+STMP*CRX(L)*CRZ(L) SIG4=SIG4+STMP*CRY(L)*CRY(L) SIG5=SIG5+STMP*CRY(L)*CRZ(L) SIG6=SIG6+STMP*CRZ(L)*CRZ(L) END IF 12 CONTINUE C-----FORCE CALCULATION (R & K-SPACE) --------------------------------- IF (I.NE.J) THEN DO 14 L=1,MM IF (CR(L).NE.0.0D0) & SSS(L)=(1.0D0-ERF(AL1*CR(L)))/(CR(L)**3)+(CC*AL1 & *EXP(-ALFF*CR(L)*CR(L)))/(CR(L)*CR(L)) IF (CI(L).NE.0.0D0) & SSI(L)=(1.0D0-ERF(AL1*CI(L)))/(CI(L)**3)+(CC*AL1 & *EXP(-ALFF*CI(L)*CI(L)))/(CI(L)*CI(L)) 14 CONTINUE C DO 15 L=1,MM SF1X =SF1X +CRX(L)*SSS(L) SF1Y =SF1Y +CRY(L)*SSS(L) SF1Z =SF1Z +CRZ(L)*SSS(L) SF1XI=SF1XI+CLX(L)*SSI(L) SF1YI=SF1YI+CLY(L)*SSI(L) SF1ZI=SF1ZI+CLZ(L)*SSI(L) 15 CONTINUE C FORCE CALCULATION (K-SPACE) FOR OPTICAL VIBRATION DO 24 L=1,MK IF (CKR(L).EQ.0.0D0) GOTO 24 SSK =(CON*SIN(CKX(L)*R1+CKY(L)*R2+CKZ(L)*R3) & *EXP(-AL2*CKR(L)*CKR(L)))/(CKR(L)*CKR(L)) SF1X =SF1X +CKX(L)*SSK SF1Y =SF1Y +CKY(L)*SSK SF1Z =SF1Z +CKZ(L)*SSK SF1XI=SF1XI-CKX(L)*SSK SF1YI=SF1YI-CKY(L)*SSK SF1ZI=SF1ZI-CKZ(L)*SSK 24 CONTINUE C FORC1(I,J,1)= & ACHG(ITYP(I))*ACHG(ITYP(J))*SF1X FORC1(I,J,2)= & ACHG(ITYP(I))*ACHG(ITYP(J))*SF1Y FORC1(I,J,3)= & ACHG(ITYP(I))*ACHG(ITYP(J))*SF1Z FORC1(J,I,1)= & ACHG(ITYP(I))*ACHG(ITYP(J))*SF1XI FORC1(J,I,2)= & ACHG(ITYP(I))*ACHG(ITYP(J))*SF1YI FORC1(J,I,3)= & ACHG(ITYP(I))*ACHG(ITYP(J))*SF1ZI END IF C ///////////////////////////////////////// C // STEP 2; RECIPROCAL-SPACE SUMMATION // C ///////////////////////////////////////// DO 21 L=1,MK C CX = CY = CZ =0 IF (CKR(L).EQ.0.0D0) GOTO 21 STMP=CON*EXP(-AL2*CKR(L)*CKR(L)) & *COS(CKX(L)*R1+CKY(L)*R2+CKZ(L)*R3)/(CKR(L)*CKR(L)) SUM=SUM+ STMP SIG1=SIG1+STMP*( 2.0D0*CKX(L)*CKX(L)*( & 1.0D0/(CKR(L)*CKR(L)) + AL2 ) - 1.0D0 ) SIG2=SIG2+STMP*( 2.0D0*CKX(L)*CKY(L)*( & 1.0D0/(CKR(L)*CKR(L)) + AL2 ) ) SIG3=SIG3+STMP*( 2.0D0*CKX(L)*CKZ(L)*( & 1.0D0/(CKR(L)*CKR(L)) + AL2 ) ) SIG4=SIG4+STMP*( 2.0D0*CKY(L)*CKY(L)*( & 1.0D0/(CKR(L)*CKR(L)) + AL2 ) - 1.0D0 ) SIG5=SIG5+STMP*( 2.0D0*CKY(L)*CKZ(L)*( & 1.0D0/(CKR(L)*CKR(L)) + AL2 ) ) SIG6=SIG6+STMP*( 2.0D0*CKZ(L)*CKZ(L)*( & 1.0D0/(CKR(L)*CKR(L)) + AL2 ) - 1.0D0 ) 21 CONTINUE SUM= SUM -PAI/ALFF/UNIVOL SIG1=SIG1 +PAI/ALFF/UNIVOL SIG4=SIG4 +PAI/ALFF/UNIVOL SIG6=SIG6 +PAI/ALFF/UNIVOL C //////////// C // STEP 3 // C //////////// IF(ITE.EQ.1) THEN SUM1 =SUM SI21 =SIG1 C------------SF2X =SF1X C SF2Y =SF1Y C SF2Z =SF1Z C SF2XI=SF1XI C SF2YI=SF1YI C------------SF2ZI=SF1ZI ALFF=2.D0*ALFF ITE=2 C C IF (MOD(ITER,ILAM).EQ.1) GOTO 77 GOTO 77 ELSE IF(ABS(SUM-SUM1).GT.1.D-5) WRITE(6,*) & '******WARNING SUM.NE.SUM1***********' END IF C WRITE (6,22) I,J,SUM1 ,SUM C WRITE (6,22) I,J,SI21 ,SIG1 C-----WRITE (6,22) I,J,SF2X ,SF1X C WRITE (6,22) I,J,SF2Y ,SF1Y C WRITE (6,22) I,J,SF2Z ,SF1Z C WRITE (6,22) I,J,SF2XI,SF1XI C WRITE (6,22) I,J,SF2YI,SF1YI C WRITE (6,22) I,J,SF2ZI,SF1ZI FAC=1.D0 IF(I.EQ.J) FAC=0.5D0 ETOT2= ETOT2 + FAC*SUM*ACHG(ITYP(I))*ACHG(ITYP(J)) SIGEWA(1)=SIGEWA(1)+FAC*SIG1*ACHG(ITYP(I))*ACHG(ITYP(J)) SIGEWA(2)=SIGEWA(2)+FAC*SIG2*ACHG(ITYP(I))*ACHG(ITYP(J)) SIGEWA(3)=SIGEWA(3)+FAC*SIG3*ACHG(ITYP(I))*ACHG(ITYP(J)) SIGEWA(4)=SIGEWA(4)+FAC*SIG4*ACHG(ITYP(I))*ACHG(ITYP(J)) SIGEWA(5)=SIGEWA(5)+FAC*SIG5*ACHG(ITYP(I))*ACHG(ITYP(J)) SIGEWA(6)=SIGEWA(6)+FAC*SIG6*ACHG(ITYP(I))*ACHG(ITYP(J)) 22 FORMAT(1H ,2(I5,1X),' EWALD-SUMM=',D16.8,2X,D16.8) 101 CONTINUE 100 CONTINUE SIGEWA(1)=SIGEWA(1)/UNIVOL SIGEWA(2)=SIGEWA(2)/UNIVOL SIGEWA(3)=SIGEWA(3)/UNIVOL SIGEWA(4)=SIGEWA(4)/UNIVOL SIGEWA(5)=SIGEWA(5)/UNIVOL SIGEWA(6)=SIGEWA(6)/UNIVOL C DO 150 I=1,KATM FFF1(I,1)=0.0D0 FFF1(I,2)=0.0D0 FFF1(I,3)=0.0D0 150 CONTINUE C DO 200 I=1,KATM DO 201 J=1,KATM FFF1(I,1)=FFF1(I,1)+FORC1(I,J,1) FFF1(I,2)=FFF1(I,2)+FORC1(I,J,2) FFF1(I,3)=FFF1(I,3)+FORC1(I,J,3) 201 CONTINUE 200 CONTINUE C IF (ITER.EQ.0) THEN WRITE(6,*) 'TOTAL ENERGY CONTRIBUTION FROM THE EWALD SUMM.....' WRITE(6,*) ETOT2 END IF RETURN END