公開プログラム(第0.1版、4/23、1997)
作ってみようバンド計算プログラムへ[戻る
][最新版][ガイドへ][Top][Forbidden
redistribute]
C @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
C @@ BAND STRUCTURE AND TOTAL ENERGY CALCULATION @@
C @@ (ORIGINAL FROM DR. H. ISHIDA) @@
C @@ 1989 5/4 (START) BY KOBAYASHI KAZUAKI @@
C @@ MODIFIED BY Y. MORIKAWA(SYMMETRY)@@
C @@ 1992 7/14 MODIFIED TO STRESS CALCULATION @@
C @@ 1993 3/16 MODIFIED TO CONSTANT PRESSURE @@
C @@ AUTOMATIC OPT (ANDERSEN ARG) @@
C @@ 1994 10/25 MODIFIED TO INTRODUCTION OF PCC @@
C @@ 1994 11/22 MODIFIED TO CONSTANT PRESSURE @@
C @@ AUTOMATIC OPT (PARRINELLO-RAHMAN)@@
C @@ 1994 12/16 MODIFIED TO INPUT/OUTPUT OF RECAL@@
C @@ 1995 1/2 MODIFIED TO VPP-PARALEEL VERSION @@
C @@ 1995 2/13 VPP-PARALLEL VER 1.01@@
C @@ 1995 6/2 VPP-PARALLEL VER 1.1 @@
C @@ 1995 7/17 MODIFIED TO ADD NON-LOCAL D 1.2 @@
C @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
C VPP-PARALLEL
C*****FOR PCC
DIMENSION RHPC(KIZA,KTYP)
INTEGER KTPCC(KTYP),KMDTP(KATM)
C*****FOR KPMIRB
DIMENSION QWGT(KNV3)
C*****FOR SYMM
DIMENSION FORC(KATM,3),FORCW(KATM,3)
DIMENSION EPP(3,3)
DIMENSION RX(125),RY(125),RZ(125),RR(125)
INTEGER IRX(125),IRY(125),IRZ(125)
!XOCL PARALLEL REGION
KOPR=KO
KIMG= 1
C-----DUMMY KIMG--------------------------------------ATTN]]] 8*KG1
ITIME1=0
WRITE (6,*) 'START OF PROGRAM (REVPE_D.F)'
IREC8=0
IREC9=0
KREC8=16*KNG1
KREC9=16*KFFT
KR8=KREC8/32760
KR9=KREC9/32760
IF (KR8.NE.0) THEN
IREC8=KR8+1
IF (MOD(KREC8,IREC8).EQ.0) THEN
KREC8=KREC8/IREC8
ELSE
KREC8=KREC8/IREC8+1
END IF
END IF
IF (KR9.NE.0) THEN
IREC9=KR9+1
IF (MOD(KREC9,IREC9).EQ.0) THEN
KREC9=KREC9/IREC9
ELSE
KREC9=KREC9/IREC9+1
END IF
END IF
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1400 CONTINUE
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
INCLUDE 'REINIT'
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
C FOR MOVING ATOMS KMDTP=1 : FIXED ATOMS KMDTP=0
WRITE(6,*) 'MD CONDITION FOR EACH ATOMS'
DO 101 I=1,KATM
KMDTP(I) = 1
101 CONTINUE
C DO 103 I= 9,12
C KMDTP(I) = 0
C 103 CONTINUE
WRITE(6,102) (I,KMDTP(I),I=1,KATM)
102 FORMAT(20I3)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
CALL SIMP
CALL TIME(ITIME1,'SIMP ',2)
1300 CONTINUE
C^^^^ READ UNIT = 1 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
CALL INPUT1(ALFA)
CALL TIME(ITIME1,'INPUT1',2)
IF (ICONT.EQ.1.AND.ICAF.EQ.1) IMD=0
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
CALL INFOUT(ICAR,ICAF,IPRE,IPCC,IMD,IOVE,IRES,IORW,ISSS
& ,ISTMD,ICOST,IOUT,IMDI,NBAND1,NBAND2
& ,IREC8,IREC9,KREC8,KREC9,KBZTYP
& ,WIDTH,CMIX,DTIMEL,DTIMIO,DTIMUC,KTPCC)
CALL TIME(ITIME1,'INFOUT',2)
C^^^^ UNIT CELL CHANGE ^^^^^^^^^^^^^^^^^^^^^^^^^^^
ITER=0
1200 CONTINUE
IF (ICAR.NE.2) THEN
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
CALL LATTIC
< (RX,RY,RZ,RR,IRX,IRY,IRZ)
CALL TIME(ITIME1,'LATTIC',2)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
CALL GSTEP1(IPRE)
CALL TIME(ITIME1,'GSTEP1',2)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
CALL HPSORT(KG,IG1,IG2,IG3,GX,GY,GZ,GR)
CALL TIME(ITIME1,'BUBBLG',2)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IF(KBZTYP.GE.2) THEN
CALL TIME(ITIME1,' ',1)
CALL SYMM(KOPR,NOPR,KBZTYP,125,6,RX,RY,RZ)
CALL TIME(ITIME1,'SYMM ',2)
END IF
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
CALL GSTEPF
CALL TIME(ITIME1,'GSTEPF',2)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
CALL KSTEP
> (KNV3,KBZTYP,ALTV,RLTV,
> KNVX,KNVY,KNVZ,KNVX2,KNVY2,KNVZ2,6,
< KV3,VX,VY,VZ,QWGT)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
CALL BASNUM(QWGT)
CALL TIME(ITIME1,'BASNUM',2)
C^^^^ PRE-CALCULATION IPRE=1 ^^^^^^^^^^^^^^^^^^^^^
IF (IPRE.EQ.1) THEN
WRITE (6,*) 'THIS IS PRE-CALCULATION] PROGRAM STOPS]'
STOP
END IF
ELSE IF (ICAR.EQ.2 .AND. ISTR.EQ.1) THEN
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
CALL LATSCA
< (RX,RY,RZ,RR,IRX,IRY,IRZ)
WRITE (6,*) ALTV(1,1),ALTV(1,2),ALTV(1,3)
WRITE (6,*) ALTV(2,1),ALTV(2,2),ALTV(2,3)
WRITE (6,*) ALTV(3,1),ALTV(3,2),ALTV(3,3)
C WRITE (6,*) EPP(1,1),EPP(1,2),EPP(1,3)
C WRITE (6,*) EPP(2,1),EPP(2,2),EPP(2,3)
C WRITE (6,*) EPP(3,1),EPP(3,2),EPP(3,3)
CALL TIME(ITIME1,'LATTIC',2)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
C WRITE (6,*) 'CALL START GSTSCA'
CALL GSTSCA(IPRE,EPP)
C WRITE (6,*) 'CALL END GSTSCA'
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
C CALL HPSORT(KG,IG1,IG2,IG3,GX,GY,GZ,GR)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IF(KBZTYP.GE.2) THEN
CALL SYMSCA(KOPR,NOPR,KBZTYP,NEIBRD,NFOUT
& ,RX,RY,RZ,EPP)
END IF
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
CALL GSFSCA
CALL TIME(ITIME1,'GSTEPF',2)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL KSTEP
> (KNV3,KBZTYP,ALTV,RLTV,
> KNVX,KNVY,KNVZ,KNVX2,KNVY2,KNVZ2,6,
< KV3,VX,VY,VZ,QWGT)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
C CALL BASNUM(QWGT)
CALL TIME(ITIME1,'BASNUM',2)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
END IF
1100 CONTINUE
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
CALL FORM
CALL TIME(ITIME1,'FORM ',2)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IF (IPCC.EQ.1) THEN
C CALL TIME(ITIME1,' ',1)
CALL PCC(KTPCC,RHPC,
< SCHGPC,EPC,PCM)
C CALL TIME(ITIME1,'PCC ',2)
ELSE IF (ITER.EQ.0) THEN
DO 1010 I=1,KNG
ZRHPC(I)=DCMPLX(0.D0,0.D0)
ZRRPC(I)=DCMPLX(0.D0,0.D0)
EPC = 0.D0
1010 CONTINUE
END IF
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
IF (ITER.EQ.0 .OR. ISTR.EQ.1) THEN
WRITE (6,*) 'CALL PSEUDO'
CALL PSEUDO(TOTCH,ETOT1)
ELSE
WRITE (6,*) 'CALL PSEUMD'
CALL PSELMD
END IF
CALL TIME(ITIME1,'PSEUDO',2)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
IF (ICAR.EQ.0 .OR. ICAR.EQ.2) CALL EWVEC(ETOT2)
IF (ICAR.EQ.1) CALL EWVMD(ETOT2)
CALL TIME(ITIME1,'EWALDV',2)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IF (ITER.EQ.0.AND.ICONT.EQ.0) THEN
CALL TIME(ITIME1,' ',1)
CALL INTCHG(ALFA)
CALL TIME(ITIME1,'INTCHG',2)
END IF
C^^^^ LOOP ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1000 CONTINUE
ITER=ITER+1
IF (ICONT.EQ.1 .AND. IORW.EQ.0) THEN
IORW=1
CALL EVIN(IREC8,IREC9,EPC)
WRITE (6,*) 'END OF EVIN'
END IF
IF (ICAF.NE.0.AND.ITER.GT.IMD) ICAR=ICAF
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL XCFFT(1,SCHGPC)
C^^^^^^^^^^^^^^^^^^^^^^^^^DEBUG^^^^^^^^^^^^^^^^^^^
IF (ITER.EQ.1) THEN
CALL TIME(ITIME1,' ',1)
CALL KBMAT
CALL DIAGON(IREC8)
CALL KBINT
CALL TIME(ITIME1,'KBMSD ',2)
ELSE
CALL TIME(ITIME1,' ',1)
CALL MSD(IREC8,IREC9,IMD,ICAR,ISTR)
CALL TIME(ITIME1,'MSD ',2)
END IF
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IF (ICAR.EQ.2) THEN
IF (MOD(ITER,IOVE).EQ.IRES) THEN
ISTR=1
ELSE
ISTR=0
END IF
END IF
C
CALL TIME(ITIME1,' ',1)
CALL FERMI(TOTCH,QWGT,WIDTH)
CALL TIME(ITIME1,'FERMI ',2)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
IF (MOD(ITER,IMDI).EQ.IRES) THEN
IF (ITER.EQ.1 .OR. ITER.GT.IMD) THEN
WRITE (6,*) 'CALL FORCE'
CALL FORCE(IREC8)
ELSE
CALL FORZFB
END IF
ELSE
WRITE (6,*) 'CALL FORZFB'
CALL FORZFB
END IF
CALL TIME(ITIME1,'FORCE ',2)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
CALL CHAVER(IREC8,IREC9,KOPR,NOPR,KBZTYP)
CALL TIME(ITIME1,'CHAVER',2)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
IF (IPCC.EQ.1) CALL XCFFT(3,SCHGPC)
CALL TIME(ITIME1,'XCFFT ',2)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IF (ITER.EQ.IMD+1) ISTR=1
C STRESS
C IF (ITER.EQ.100 .OR. ITER.EQ.300) THEN
IF (ISTR.EQ.1) THEN
CALL TIME(ITIME1,' ',1)
CALL STRESS(IPCC,SCHGPC
& ,ETOT1,TOTCH,EPC,PCM,KOPR,KBZTYP)
CALL TIME(ITIME1,'STRESS',2)
END IF
CALL TIME(ITIME1,'FORLOC',2)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IF (ITER.GT.IMD .AND. ICAR.GE.1) THEN
DTIO=0.0D0
IF (MOD(ITER,IMDI).EQ.IRES .OR. ISTR.EQ.1) THEN
WRITE (6,*) 'CALL FORLOC AND MD'
CALL TIME(ITIME1,' ',1)
CALL FORLOC(KTPCC)
IF(KBZTYP.GE.2) THEN
DO 2500 IA=1,KATM
FORC(IA,1)=REAL(ZFORC2(IA,1))
FORC(IA,2)=REAL(ZFORC2(IA,2))
FORC(IA,3)=REAL(ZFORC2(IA,3))
2500 CONTINUE
CALL FORCES(KO,NOPR,FORC,FORCW)
DO 2501 IA=1,KATM
ZFORC2(IA,1)=CMPLX(FORC(IA,1),0.0D0)
ZFORC2(IA,2)=CMPLX(FORC(IA,2),0.0D0)
ZFORC2(IA,3)=CMPLX(FORC(IA,3),0.0D0)
2501 CONTINUE
END IF
IF (MOD(ITER,10).EQ.1) THEN
WRITE (17,*) 'ITER = ',ITER
WRITE (17,3500)(I,ZFORC2(I,1),ZFORC2(I,2),ZFORC2(I,3),I=1,KATM)
END IF
3500 FORMAT(I3,6F11.7)
C
DTIO=DTIMIO
CALL MD(IMD,KMDTP,MDFLAG,ICAR,ITERMD,ITERMX,ISTR,ISSS
& ,DTUC,EPP)
END IF
END IF
IF (ITER.EQ.ISTMD) DTIM=DTIMEL
IF (ITER.EQ.ISTMD) ICAR=0
IF (ITER.EQ.ISTMD) ICAF=0
C^^^^^^^^^^^^^^^^^^^^^^^^^DEBUG^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
CALL ENERGY(TOTCH,ETOT1,ETOT2,ETONEW,SCHGPC,EPC)
CALL TIME(ITIME1,'ENERGY',2)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL TIME(ITIME1,' ',1)
CALL CONV2(ETONEW,ETOOLD,IMD,ITERMD,CMIX)
CALL TIME(ITIME1,'CONV2 ',2)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IF (MOD(ITER,ICOST).EQ.IRES) THEN
WRITE (6,*) 'READ 2 --- REINIT OR NOT'
REWIND 2
READ (2,*) IREINT
WRITE (6,*) 'READ 2 --- REINIT OR NOT',IREINT
IF (IREINT.GE.1) THEN
WRITE (6,*) 'READ 2 --- REINIT'
READ (2,*) DTIMEL,DTIMIO,DTIMUC
READ (2,*) CMIX,WIDTH,TEMPSB
C SET A EXTERNAL PRESSURE
READ (2,*) PEX(1)
READ (2,*) PEX(2)
READ (2,*) PEX(3)
READ (2,*) PEX(4)
READ (2,*) PEX(5)
READ (2,*) PEX(6)
READ (2,*) IPRE,ITRA1,ITRA2,IPCC,KBZTYP
READ (2,*) IMDC,IMDIC,IOVEC,IRESC,ISTOP,ISTEL,ICOST,IOUT
DO 1238 ITYP=1,KTYP
READ (2,*) KTPCC(ITYP)
1238 CONTINUE
ISTMD = ISTOP - ISTEL
DTIM = DTIMEL
DTIO = DTIMIO
DTUC = DTIMUC
C.................................................
WRITE (6,*) DTIMEL,DTIMIO,DTIMUC
WRITE (6,*) CMIX,WIDTH,TEMPSB
WRITE (6,*) PEX(1)
WRITE (6,*) PEX(2)
WRITE (6,*) PEX(3)
WRITE (6,*) PEX(4)
WRITE (6,*) PEX(5)
WRITE (6,*) PEX(6)
WRITE (6,*) IPRE,ICAF,ICAR,ITRA1,ITRA2,IPCC,KBZTYP
WRITE (6,*) IMDC,IMDIC,IOVEC,IRESC,ISTOP,ISTEL,ICOST,IOUT
DO 1336 ITYP=1,KTYP
WRITE (6,*) KTPCC(ITYP)
1336 CONTINUE
END IF
C
WRITE (6,*) 'EVOUT ITER = ',ITER
IF (IOUT.EQ.1) THEN
CALL EVOUT(IREC8,IREC9,ALFA,EPC)
END IF
IF (IREINT.EQ.2) GO TO 1300
IF (IREINT.EQ.3) GO TO 1400
END IF
C
IF (ITER.GE. ISTOP ) THEN
CALL EVOU2(ALFA)
GOTO 4100
END IF
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IF (ITER.GT.IMD) THEN
IF (ISTR.EQ.1) GO TO 1200
IF (MOD(ITER,IMDI).EQ.IRES) GO TO 1100
END IF
GO TO 1000
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4100 CONTINUE
!XOCL END PARALLEL
C WRITE(34,4200) (ZCHG(I),I=1,KG)
C*****DO 4110 IBAN = 38,44,2
C NNN=1
C WRITE(12,4210) IBAN,NNN
C* IREC = KV3*(IBAN-1)+IWRT(NNN)
C IF (IREC8.NE.0) IREC=IREC8*IREC-IREC8+1
C READ(80,REC=IREC) ZV1
C* WRITE(12,4200) ( ZV1(I),I=1,IBA(NNN) )
C WRITE(12,4200) ( ZAJ(I,IBAN,NNN),I=1,IBA(NNN) )
C NNN=5
C WRITE(12,4210) IBAN,NNN
C* IREC = KV3*(IBAN-1)+IWRT(NNN)
C IF (IREC8.NE.0) IREC=IREC8*IREC-IREC8+1
C READ(80,REC=IREC) ZV1
C* WRITE(12,4200) ( ZV1(I),I=1,IBA(NNN) )
C WRITE(12,4200) ( ZAJ(I,IBAN,NNN),I=1,IBA(NNN) )
C NNN=17
C WRITE(12,4210) IBAN,NNN
C* IREC = KV3*(IBAN-1)+IWRT(NNN)
C IF (IREC8.NE.0) IREC=IREC8*IREC-IREC8+1
C READ(80,REC=IREC) ZV1
C* WRITE(12,4200) ( ZV1(I),I=1,IBA(NNN) )
C WRITE(12,4200) ( ZAJ(I,IBAN,NNN),I=1,IBA(NNN) )
C NNN=21
C WRITE(12,4210) IBAN,NNN
C* IREC = KV3*(IBAN-1)+IWRT(NNN)
C IF (IREC8.NE.0) IREC=IREC8*IREC-IREC8+1
C READ(80,REC=IREC) ZV1
C* WRITE(12,4200) ( ZV1(I),I=1,IBA(NNN) )
C WRITE(12,4200) ( ZAJ(I,IBAN,NNN),I=1,IBA(NNN) )
C4110 CONTINUE
C WRITE(14,4220) KG,KX1,KY1,KZ1
C WRITE(14,4230) (IG1(I),I=1,KG)
C WRITE(14,4230) (IG2(I),I=1,KG)
C WRITE(14,4230) (IG3(I),I=1,KG)
C4200 FORMAT(4D18.10)
C4210 FORMAT(' ',I4,3X,I4)
C4220 FORMAT(4I6)
C4230 FORMAT(20I4)
C CLOSE(UNIT=90,STATUS='KEEP')
STOP
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE INFOUT(ICAR,ICAF,IPRE,IPCC,IMD,IOVE,IRES,IORW,ISSS
& ,ISTMD,ICOST,IOUT,IMDI,NBAND1,NBAND2
& ,IREC8,IREC9,KREC8,KREC9,KBZTYP
& ,WIDTH,CMIX,DTIMEL,DTIMIO,DTIMUC,KTPCC)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
INTEGER KTPCC(KTYP),KMDTP(KATM)
C
WRITE (6,*) 'IPRE = ',IPRE
WRITE (6,*) 'ICAR = ',ICAR
WRITE (6,*) 'ICAF = ',ICAF
WRITE (6,*) 'IPRI = ',IPRI
WRITE (6,*) 'ICONT = ',ICONT
WRITE (6,*) 'IPCC = ',IPCC
WRITE (6,*) 'KBZTYP = ',KBZTYP
WRITE (6,*) 'IMD = ',IMD
WRITE (6,*) 'IOVE = ',IOVE
WRITE (6,*) 'IMDI = ',IMDI
WRITE (6,*) 'IRES = ',IRES
WRITE (6,*) 'IORW = ',IORW
WRITE (6,*) 'ISSS = ',ISSS
WRITE (6,*) 'ISTOP = ',ISTOP
WRITE (6,*) 'ISTMD = ',ISTMD
WRITE (6,*) 'ICOST = ',ICOST
WRITE (6,*) 'IOUT = ',IOUT
WRITE (6,*) 'IREC8 = ',IREC8
WRITE (6,*) 'IREC9 = ',IREC9
WRITE (6,*) 'KREC8 = ',KREC8
WRITE (6,*) 'KREC9 = ',KREC9
WRITE (6,*) 'UP-BAND = ',NBAND1
WRITE (6,*) 'DOWN-BAND = ',NBAND2
C OUTPUT INCLUDE FILE INFORMATION
WRITE (6,*) 'OUTPUT INCLUDE FILE INFORMATION'
WRITE (6,*) 'KNX,Y,Z =',KNX,KNY,KNZ
WRITE (6,*) 'KNG,1,11 =',KNG,KNG1,KNG11
WRITE (6,*) 'KNBMX =',KNBMX
WRITE (6,*) 'KNVX,Y,Z =',KNVX,KNVY,KNVZ
WRITE (6,*) 'KVX2,Y2,Z2=',KNVX2,KNVY2,KNVZ2
WRITE (6,*) 'KEG,KBD1,2=',KEG,KBD1,KBD2
WRITE (6,*) 'KTYP,KATM =',KTYP,KATM
WRITE (6,*) 'EWALD =',KLX,KLY,KLZ,KMX,KMY,KMZ
WRITE (6,*) 'DTIMEL =',DTIMEL
WRITE (6,*) 'DTIMIO =',DTIMIO
WRITE (6,*) 'DTIMUC =',DTIMUC
WRITE (6,*) 'WIDTH =',WIDTH
WRITE (6,*) 'CMIX =',CMIX
WRITE (6,*) 'TEMPSB =',TEMPSB
DO 1000 ITYP=1,KTYP
WRITE (6,*) 'KTPCC =',KTPCC(ITYP)
1000 CONTINUE
DO 1010 I=1,6
WRITE (6,*) 'PEX = ',I,PEX(I)
1010 CONTINUE
DO 2000 I=1,KATM
WRITE (6,*) 'AMION = ',AMION(I)
2000 CONTINUE
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE SIMP
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
PARAMETER(KIZA=421)
COMMON/OM/ OMO(KIZA)
OMO(1) = 1.0D0
DO 1101 N = 2,KIZA-1,2
OMO(N) = 4.0D0
OMO(N+1) = 2.0D0
1101 CONTINUE
OMO(KIZA) = 1.0D0
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE INPUT1(ALFA)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
C'''''READING THE DATA (UNIT=1)''''''''''''''''''''''''''''''''''
REWIND 1
READ(1,*) ITEMAX,PPMIX,CONV,GMAX,ICONT
WRITE(6,99) ITEMAX,PPMIX,CONV,GMAX,ICONT
99 FORMAT(' ',I6,F8.4,D12.4,F8.4,I4)
DO 100 I=1,3
READ(1,*) ALTV(1,I),ALTV(2,I),ALTV(3,I)
WRITE(6,200) ALTV(1,I),ALTV(2,I),ALTV(3,I)
100 CONTINUE
200 FORMAT(3(F20.10))
READ(1,*) KCOTYP
WRITE(6,*)KCOTYP,' COORDINATES 0:NORMALIZED 1:CARTESIAN '
IF (KCOTYP.EQ.0) THEN
DO 300 IA=1,KATM
READ(1,*) PPOS(IA),QPOS(IA),RPOS(IA)
WRITE(6,200) PPOS(IA),QPOS(IA),RPOS(IA)
300 CONTINUE
DO 400 IA=1,KATM
CATX(IA)=PPOS(IA)*ALTV(1,1)+QPOS(IA)*ALTV(1,2)
& +RPOS(IA)*ALTV(1,3)
CATY(IA)=PPOS(IA)*ALTV(2,1)+QPOS(IA)*ALTV(2,2)
& +RPOS(IA)*ALTV(2,3)
CATZ(IA)=PPOS(IA)*ALTV(3,1)+QPOS(IA)*ALTV(3,2)
& +RPOS(IA)*ALTV(3,3)
400 CONTINUE
ELSE IF(KCOTYP.EQ.1) THEN
DO 500 IA=1,KATM
READ(1,*) CATX(IA),CATY(IA),CATZ(IA)
WRITE(6,200) CATX(IA),CATY(IA),CATZ(IA)
500 CONTINUE
ELSE
WRITE(6,*) ' KCOTYP = ',KCOTYP
STOP
END IF
NNATM=0
DO 600 IT=1,KTYP
READ(1,*) IATOM(IT),NLSPD(IT)
WRITE(6,*) 'IATOM,NLSPD=',IATOM(IT),NLSPD(IT)
READ(1,*) AICH,ALFA
WRITE(6,700) IT,AICH,ALFA
READ(1,*) ACHG(IT),AC(IT,1),AC(IT,2),BC(IT,1),BC(IT,2)
WRITE(6,701) ACHG(IT),AC(IT,1),AC(IT,2),BC(IT,1),BC(IT,2)
DO 800 IA=NNATM+1,NNATM+IATOM(IT)
AICHG(IA) = AICH
KFTYPE(IA) = IT
800 CONTINUE
NNATM=NNATM+IATOM(IT)
600 CONTINUE
700 FORMAT(' ','TYPE=',I3,' CHARGE=',F8.4,'GAUSS COEFF.=',F8.4)
701 FORMAT(' ','AC,BC=',5F12.6)
IF (NNATM.NE.KATM) THEN
WRITE(6,*) ' NNATM= ',NNATM
STOP
END IF
KV3 = KNV3
C'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
PINIT=PPMIX
DO 1 I=1,ITEMAX
PMIX(I)=PPMIX
1 CONTINUE
DO 2 K=1,KV3
DO 3 I=1,KEG
OCCUP(I,K)=1.0D0
3 CONTINUE
2 CONTINUE
DO 4 I=1,KATM
VEL(I,1) =0.0D0
VEL(I,2) =0.0D0
VEL(I,3) =0.0D0
4 CONTINUE
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE LATTIC
< (RX,RY,RZ,RR,IRX,IRY,IRZ)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
REAL RX(125),RY(125),RZ(125),RR(125)
INTEGER IRX(125),IRY(125),IRZ(125)
NEIBR = 2
NEIBRD = 125
C
ALEN1=SQRT(ALTV(1,1)**2+ALTV(2,1)**2+ALTV(3,1)**2)
ALEN2=SQRT(ALTV(1,2)**2+ALTV(2,2)**2+ALTV(3,2)**2)
ALEN3=SQRT(ALTV(1,3)**2+ALTV(2,3)**2+ALTV(3,3)**2)
ALMAX=MAX(ALEN1,ALEN2,ALEN3)
ALF=1.0D0/ALMAX
WRITE(6,*) ' <<>>'
FFF= ALTV(1,1)*(ALTV(2,2)*ALTV(3,3)-ALTV(3,2)*ALTV(2,3))
& + ALTV(2,1)*(ALTV(3,2)*ALTV(1,3)-ALTV(1,2)*ALTV(3,3))
& + ALTV(3,1)*(ALTV(1,2)*ALTV(2,3)-ALTV(2,2)*ALTV(1,3))
UNIVOL=ABS( FFF )
WRITE(6,708) UNIVOL
708 FORMAT(1H ,'VOLUME OF A UNIT CELL=',F15.6)
FFF=2.D0*PAI/FFF
RLTV(1,1)=(ALTV(2,2)*ALTV(3,3)-ALTV(3,2)*ALTV(2,3))*FFF
RLTV(2,1)=(ALTV(3,2)*ALTV(1,3)-ALTV(1,2)*ALTV(3,3))*FFF
RLTV(3,1)=(ALTV(1,2)*ALTV(2,3)-ALTV(2,2)*ALTV(1,3))*FFF
RLTV(1,2)=(ALTV(2,3)*ALTV(3,1)-ALTV(3,3)*ALTV(2,1))*FFF
RLTV(2,2)=(ALTV(3,3)*ALTV(1,1)-ALTV(1,3)*ALTV(3,1))*FFF
RLTV(3,2)=(ALTV(1,3)*ALTV(2,1)-ALTV(2,3)*ALTV(1,1))*FFF
RLTV(1,3)=(ALTV(2,1)*ALTV(3,2)-ALTV(3,1)*ALTV(2,2))*FFF
RLTV(2,3)=(ALTV(3,1)*ALTV(1,2)-ALTV(1,1)*ALTV(3,2))*FFF
RLTV(3,3)=(ALTV(1,1)*ALTV(2,2)-ALTV(2,1)*ALTV(1,2))*FFF
WRITE(6,707) ((RLTV(I,J),I=1,3),J=1,3)
707 FORMAT((1H ,3(F10.6,5X)))
DO 800 I=1,3
DO 810 J=1,3
ALINV(I,J)=RLTV(J,I)/(2.D0*PAI)
810 CONTINUE
800 CONTINUE
DO 703 I=1,3
DO 703 J=1,3
FFF = ALTV(I,1)*ALINV(1,J) + ALTV(I,2)*ALINV(2,J)
& + ALTV(I,3)*ALINV(3,J)
WRITE(6,702) I,J,FFF
702 FORMAT(1H ,'ALTV(',I3,')*ALINV(',I3,')=',F20.15)
703 CONTINUE
C--*--GENERATE TRANSLATIONAL VECTOR
MM=0
DO 500 I=-NEIBR,NEIBR
DO 510 J=-NEIBR,NEIBR
DO 520 K=-NEIBR,NEIBR
MM = MM + 1
IRX(MM) = I
IRY(MM) = I
IRZ(MM) = I
F1 = DFLOAT(I)
F2 = DFLOAT(J)
F3 = DFLOAT(K)
RX(MM) = ALTV(1,1)*F1 + ALTV(1,2)*F2 + ALTV(1,3)*F3
RY(MM) = ALTV(2,1)*F1 + ALTV(2,2)*F2 + ALTV(2,3)*F3
RZ(MM) = ALTV(3,1)*F1 + ALTV(3,2)*F2 + ALTV(3,3)*F3
RR(MM) = SQRT( RX(MM)**2 + RY(MM)**2 + RZ(MM)**2 )
520 CONTINUE
510 CONTINUE
500 CONTINUE
IF(MM.NE.NEIBRD) THEN
WRITE(6,*) ' MM.NE.NEIBRD MM,NEIBRD =',MM,NEIBRD
END IF
CALL HPSORT(NEIBRD,IRX,IRY,IRZ,RX,RY,RZ,RR)
IF(IPRI.GE.2) THEN
WRITE(6,*) ' TRANSLATIONAL VECTOR'
WRITE(6,600) (I,IRX(I),IRY(I),IRZ(I),
& RX(I) ,RY(I) ,RZ(I) ,RR(I),I=1,NEIBRD)
END IF
600 FORMAT((' ',4I5,4F12.6))
WRITE (6,*) 'UNIVOL(IN LATTIC) = ',UNIVOL
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE LATSCA
< (RX,RY,RZ,RR,IRX,IRY,IRZ)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
REAL RX(125),RY(125),RZ(125),RR(125)
INTEGER IRX(125),IRY(125),IRZ(125)
NEIBR = 2
NEIBRD = 125
C
ALEN1=SQRT(ALTV(1,1)**2+ALTV(2,1)**2+ALTV(3,1)**2)
ALEN2=SQRT(ALTV(1,2)**2+ALTV(2,2)**2+ALTV(3,2)**2)
ALEN3=SQRT(ALTV(1,3)**2+ALTV(2,3)**2+ALTV(3,3)**2)
ALMAX=MAX(ALEN1,ALEN2,ALEN3)
ALF=1.0D0/ALMAX
C WRITE(6,*) ' <<>>'
FFF= ALTV(1,1)*(ALTV(2,2)*ALTV(3,3)-ALTV(3,2)*ALTV(2,3))
& + ALTV(2,1)*(ALTV(3,2)*ALTV(1,3)-ALTV(1,2)*ALTV(3,3))
& + ALTV(3,1)*(ALTV(1,2)*ALTV(2,3)-ALTV(2,2)*ALTV(1,3))
UNIVOL=ABS( FFF )
WRITE(6,708) UNIVOL
708 FORMAT(1H ,'VOLUME AT LATSCA CELL=',F15.6)
FFF=2.D0*PAI/FFF
RLTV(1,1)=(ALTV(2,2)*ALTV(3,3)-ALTV(3,2)*ALTV(2,3))*FFF
RLTV(2,1)=(ALTV(3,2)*ALTV(1,3)-ALTV(1,2)*ALTV(3,3))*FFF
RLTV(3,1)=(ALTV(1,2)*ALTV(2,3)-ALTV(2,2)*ALTV(1,3))*FFF
RLTV(1,2)=(ALTV(2,3)*ALTV(3,1)-ALTV(3,3)*ALTV(2,1))*FFF
RLTV(2,2)=(ALTV(3,3)*ALTV(1,1)-ALTV(1,3)*ALTV(3,1))*FFF
RLTV(3,2)=(ALTV(1,3)*ALTV(2,1)-ALTV(2,3)*ALTV(1,1))*FFF
RLTV(1,3)=(ALTV(2,1)*ALTV(3,2)-ALTV(3,1)*ALTV(2,2))*FFF
RLTV(2,3)=(ALTV(3,1)*ALTV(1,2)-ALTV(1,1)*ALTV(3,2))*FFF
RLTV(3,3)=(ALTV(1,1)*ALTV(2,2)-ALTV(2,1)*ALTV(1,2))*FFF
WRITE(6,707) ((RLTV(I,J),I=1,3),J=1,3)
707 FORMAT((1H ,3(F10.6,5X)))
DO 800 I=1,3
DO 810 J=1,3
ALINV(I,J)=RLTV(J,I)/(2.D0*PAI)
810 CONTINUE
800 CONTINUE
DO 703 I=1,3
DO 703 J=1,3
FFF = ALTV(I,1)*ALINV(1,J) + ALTV(I,2)*ALINV(2,J)
& + ALTV(I,3)*ALINV(3,J)
C WRITE(6,702) I,J,FFF
C 702 FORMAT(1H ,'ALTV(',I3,')*ALINV(',I3,')=',F20.15)
703 CONTINUE
C--*--GENERATE TRANSLATIONAL VECTOR
MM=0
DO 500 I=-NEIBR,NEIBR
DO 510 J=-NEIBR,NEIBR
DO 520 K=-NEIBR,NEIBR
MM = MM + 1
IRX(MM) = I
IRY(MM) = I
IRZ(MM) = I
F1 = DFLOAT(I)
F2 = DFLOAT(J)
F3 = DFLOAT(K)
RX(MM) = ALTV(1,1)*F1 + ALTV(1,2)*F2 + ALTV(1,3)*F3
RY(MM) = ALTV(2,1)*F1 + ALTV(2,2)*F2 + ALTV(2,3)*F3
RZ(MM) = ALTV(3,1)*F1 + ALTV(3,2)*F2 + ALTV(3,3)*F3
RR(MM) = SQRT( RX(MM)**2 + RY(MM)**2 + RZ(MM)**2 )
520 CONTINUE
510 CONTINUE
500 CONTINUE
IF(MM.NE.NEIBRD) THEN
WRITE(6,*) ' MM.NE.NEIBRD MM,NEIBRD =',MM,NEIBRD
END IF
C CALL HPSORT(NEIBRD,IRX,IRY,IRZ,RX,RY,RZ,RR) <------- STRESS
IF(IPRI.GE.2) THEN
WRITE(6,*) ' TRANSLATIONAL VECTOR'
WRITE(6,600) (I,IRX(I),IRY(I),IRZ(I),
& RX(I) ,RY(I) ,RZ(I) ,RR(I),I=1,NEIBRD)
END IF
600 FORMAT((' ',4I5,4F12.6))
C WRITE (6,*) 'UNIVOL(IN LATTIC) = ',UNIVOL
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE GSTEP1(IPRE)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
KMAX=KNX+1
KMAY=KNY+1
KMAZ=KNZ+1
IF (IPRE.NE.1) THEN
KMAX=KNX-1
KMAY=KNY-1
KMAZ=KNZ-1
END IF
KMAX2=2*KMAX+1
KMAY2=2*KMAY+1
KMAZ2=2*KMAZ+1
C ## LARGEST WAVE VECTOR; CUT OFF WAVE NUMBER FOR WAVE FUNCTION ##
GMAX2=GMAX*2.0D0
C //////////////////////////////////////////////
C // GENERATION OF RECIPROCAL LATTICE VECTORS //
C // STEP 1 //
C //////////////////////////////////////////////
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)
MM=0
DO 20 I1=1,KMAX2
F1=FLOAT(I1-KMAX-1)
DO 20 I2=1,KMAY2
F2=FLOAT(I2-KMAY-1)
DO 20 I3=1,KMAZ2
F3=FLOAT(I3-KMAZ-1)
FX= F1*B1X + F2*B2X + F3*B3X
FY= F1*B1Y + F2*B2Y + F3*B3Y
FZ= F1*B1Z + F2*B2Z + F3*B3Z
FR=SQRT(FX*FX+FY*FY+FZ*FZ)
IF(FR.LE.GMAX2) THEN
MM=MM+1
IG1(MM)=I1-KMAX-1
IG2(MM)=I2-KMAY-1
IG3(MM)=I3-KMAZ-1
GX(MM)=FX
GY(MM)=FY
GZ(MM)=FZ
GR(MM)=FR
END IF
20 CONTINUE
WRITE(6,*) 'NUMBER OF GENERATED VECTORS=',MM
IF(MM.NE.KG) WRITE(6,*) '**WARNING] KG MUST BE EQUAL TO ',MM
C-----------------------------------------------------------------------
KG=MM
IXMA=0
IYMA=0
IZMA=0
DO 643 I=1,KG
IXMA= MAX(IXMA,ABS(IG1(I)))
IYMA= MAX(IYMA,ABS(IG2(I)))
IZMA= MAX(IZMA,ABS(IG3(I)))
643 CONTINUE
IXMA = IXMA +1
IYMA = IYMA +1
IZMA = IZMA +1
WRITE(6,*) '**KX1 SHOULD BE =',IXMA
WRITE(6,*) '**KY1 SHOULD BE =',IYMA
WRITE(6,*) '**KZ1 SHOULD BE =',IZMA
C
KX1=IXMA
KY1=IYMA
KZ1=IZMA
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE GSTSCA(IPRE,EPP)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
REAL EPP(3,3),ERE(3,3),EPCI(3,3)
C SXX, SXY, SXZ
C SYX, SYY, SYZ
C SZX, SZY, SZZ
C X Y Z
C 1 ALTV(1,1),ALTV(2,1),ALTV(3,1) AX1,AY1,AZ1
C 2 ALTV(1,2),ALTV(2,2),ALTV(3,2) AX2,AY2,AZ2
C 3 ALTV(1,3),ALTV(2,3),ALTV(3,3) AX3,AY3,AZ3
C
C CALCULATE INVERSE MATRIX OF STRESS
SXX=EPP(1,1)
SXY=EPP(1,2)
SXZ=EPP(1,3)
SYY=EPP(2,2)
SYZ=EPP(2,3)
SZZ=EPP(3,3)
C
ADJA=SXX*SYY*SZZ+2.0D0*SXY*SXZ*SYZ-SXZ*SXZ*SYY-SYZ*SYZ*SXX
& -SXY*SXY*SZZ
ADJAI=1.0D0/ADJA
C
ERE(1,1)=ADJAI*(SYY*SZZ-SYZ*SYZ)
ERE(1,2)=ADJAI*(SYZ*SXZ-SZZ*SXY)
ERE(1,3)=ADJAI*(SXY*SYZ-SXZ*SYY)
ERE(2,1)=ERE(1,2)
ERE(2,2)=ADJAI*(SZZ*SXX-SXZ*SXZ)
ERE(2,3)=ADJAI*(SXZ*SXY-SXX*SYZ)
ERE(3,1)=ERE(1,3)
ERE(3,2)=ERE(2,3)
ERE(3,3)=ADJAI*(SXX*SYY-SXY*SXY)
C CHECK!
DO 2000 I=1,3
DO 2100 J=1,3
EPCI(I,J)=EPP(I,1)*ERE(1,J)+EPP(I,2)*ERE(2,J)
& +EPP(I,3)*ERE(3,J)
2100 CONTINUE
2000 CONTINUE
C
WRITE (6,*) 'CHECK! EPP*ERE'
WRITE (6,*) EPCI(1,1),EPCI(1,2),EPCI(1,3)
WRITE (6,*) EPCI(2,1),EPCI(2,2),EPCI(2,3)
WRITE (6,*) EPCI(3,1),EPCI(3,2),EPCI(3,3)
C
DO 1000 I=1,KNG
GXX =ERE(1,1)*GX(I)+ERE(1,2)*GY(I)+ERE(1,3)*GZ(I)
GYY =ERE(2,1)*GX(I)+ERE(2,2)*GY(I)+ERE(2,3)*GZ(I)
GZZ =ERE(3,1)*GX(I)+ERE(3,2)*GY(I)+ERE(3,3)*GZ(I)
GX(I)=GXX
GY(I)=GYY
GZ(I)=GZZ
GR(I)=SQRT(GX(I)*GX(I)+GY(I)*GY(I)+GZ(I)*GZ(I))
1000 CONTINUE
C
C ERE(1,1)=1.0D0/EPP(1,1)
C ERE(2,2)=1.0D0/EPP(2,2)
C ERE(3,3)=1.0D0/EPP(3,3)
RETURN
END
C---*----1----*----2----*----3----*----4----*----5----*----6----*----7
SUBROUTINE SYMM(KOPR,NOPR,NBZTYP,NEIBRD,NFOUT,RX,RY,RZ)
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
DIMENSION NPPP(KNG,KO),NAAA(KATM,KO)
DIMENSION OO(3,3,KO),TAA(3,KO)
DIMENSION RX(NEIBRD),RY(NEIBRD),RZ(NEIBRD)
!XOCL SUBPROCESSOR PT(IPARA)=PQ(1:IPARA)
!XOCL INDEX PARTITION IQ=(PT,INDEX=1:KO,PART=BAND)
!XOCL LOCAL NPPP(:,/IQ),NAAA(:,/IQ),OO(:,:,/IQ),TAA(:,/IQ)
EQUIVALENCE (NGPT,NPPP),(NAPT,NAAA),(OP,OO),(TAU,TAA)
C----------------------------------------------------------------------
IF (NBZTYP.EQ.5) THEN
A = ABS(ALTV(1,1))*2.D0
ELSE IF(NBZTYP.EQ.6.OR.NBZTYP.EQ.7) THEN
A = ABS(ALTV(1,1))
B = ABS(ALTV(2,2))
ELSE IF(NBZTYP.EQ.8 .OR. NBZTYP.EQ.10) THEN
A = ABS(ALTV(1,1))
B = ABS(ALTV(3,3))
ELSE IF(NBZTYP.EQ.9.OR.NBZTYP.GE.11) THEN
A = ABS(ALTV(1,1))
B = ABS(ALTV(2,2))
C = ABS(ALTV(3,3))
END IF
C---------------------------------------------
CALL OPGR
> (NBZTYP,KOPR,A,B,C,NFOUT,
< NOPR)
C--*--SYMMETRY PAIRS FOR G-POINTS ------------
DO 100 I = 1,KG
PX=GX(I)
PY=GY(I)
PZ=GZ(I)
!XOCL SPREAD DO /IQ
DO 110 NO=1,NOPR
FX=OO(1,1,NO)*PX +OO(1,2,NO)*PY +OO(1,3,NO)*PZ
FY=OO(2,1,NO)*PX +OO(2,2,NO)*PY +OO(2,3,NO)*PZ
FZ=OO(3,1,NO)*PX +OO(3,2,NO)*PY +OO(3,3,NO)*PZ
DO 120 J = 1,KG
FF1 = ABS(GX(J)-FX)+ABS(GY(J)-FY)+ABS(GZ(J)-FZ)
IF (FF1.LE.1.D-5) THEN
NPPP(I,NO) = J
GOTO 110
END IF
120 CONTINUE
WRITE(NFOUT,130) I,NO
STOP
110 CONTINUE
!XOCL END SPREAD
100 CONTINUE
130 FORMAT(' ','THERE IS NO PAIR FOR NG,NOP=',2I8)
C--*--SYMMETRY PAIRS FOR ATOMS
DDD = 1.0D-5
DO 200 I = 1,KATM
PX=CATX(I)
PY=CATY(I)
PZ=CATZ(I)
!XOCL SPREAD DO /IQ
DO 210 NO=1,NOPR
FX=OO(1,1,NO)*PX+OO(1,2,NO)*PY+OO(1,3,NO)*PZ+TAA(1,NO)
FY=OO(2,1,NO)*PX+OO(2,2,NO)*PY+OO(2,3,NO)*PZ+TAA(2,NO)
FZ=OO(3,1,NO)*PX+OO(3,2,NO)*PY+OO(3,3,NO)*PZ+TAA(3,NO)
DO 220 J = 1,KATM
DO 230 K = 1,NEIBRD
FFX = ABS( FX - CATX(J) - RX(K) )
FFY = ABS( FY - CATY(J) - RY(K) )
FFZ = ABS( FZ - CATZ(J) - RZ(K) )
IF( (FFX.LE.DDD).AND.
& (FFY.LE.DDD).AND.
& (FFZ.LE.DDD) ) THEN
NAAA(I,NO) = J
GOTO 210
END IF
230 CONTINUE
220 CONTINUE
WRITE(NFOUT,*) ' NO PAIR I, NO ',I,NO
STOP
210 CONTINUE
!XOCL END SPREAD
200 CONTINUE
C--*--OUTPUT
IF(IPRI.GE.2) THEN
WRITE(NFOUT,*) ' NGPT '
DO 310 I=1,20
WRITE(NFOUT,*) ' NG =',I
WRITE(NFOUT,300) (NGPT(I,J),J=1,NOPR)
310 CONTINUE
DO 320 I=KG-20,KG
WRITE(NFOUT,*) ' NG =',I
WRITE(NFOUT,300) (NGPT(I,J),J=1,NOPR)
320 CONTINUE
WRITE(NFOUT,*) ' NAPT '
DO 330 I=1,KATM
WRITE(NFOUT,*) ' NA =',I
WRITE(NFOUT,300) (NAPT(I,J),J=1,NOPR)
330 CONTINUE
300 FORMAT((8I8))
END IF
RETURN
END
C---*----1----*----2----*----3----*----4----*----5----*----6----*----7
SUBROUTINE SYMSCA(KOPR,NOPR,NBZTYP,NEIBRD,NFOUT,RX,RY,RZ,EPP)
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
DIMENSION TAA(3,KO)
!XOCL SUBPROCESSOR PT(IPARA)=PQ(1:IPARA)
!XOCL INDEX PARTITION IQ=(PT,INDEX=1:KO,PART=BAND)
!XOCL LOCAL TAA(:,/IQ)
EQUIVALENCE (TAU,TAA)
DIMENSION EPP(3,3)
C----------------------------------------------------------------------
!XOCL SPREAD DO /IQ
DO 1000 I=1,NOPR
C TAU(1,I)=EPP(1,1)*TAU(1,I)+EPP(1,2)*TAU(2,I)+EPP(1,3)*TAU(3,I)
C TAU(2,I)=EPP(1,2)*TAU(1,I)+EPP(2,2)*TAU(2,I)+EPP(2,3)*TAU(3,I)
C TAU(3,I)=EPP(1,3)*TAU(1,I)+EPP(2,3)*TAU(2,I)+EPP(3,3)*TAU(3,I)
TAA(1,I)=EPP(1,1)*TAA(1,I)
TAA(2,I)=EPP(2,2)*TAA(2,I)
TAA(3,I)=EPP(3,3)*TAA(3,I)
1000 CONTINUE
!XOCL END SPREAD
C DO 1100 I=1,NOPR
C WRITE (6,600) TAU(1,I),TAU(2,I),TAU(3,I)
C 600 FORMAT(1H ,'TAU(1,2,3) = ',3F12.6)
C1100 CONTINUE
RETURN
END
C---*----1----*----2----*----3----*----4----*----5----*----6----*----7
SUBROUTINE FORCES
> (KOPR,NOPR,FORC,FORCW)
C FORCE SYMMETRIZATION
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
DIMENSION NAAA(KATM,KO)
DIMENSION OO(3,3,KO)
!XOCL SUBPROCESSOR PT(IPARA)=PQ(1:IPARA)
!XOCL INDEX PARTITION IQ=(PT,INDEX=1:KO,PART=BAND)
!XOCL LOCAL NAAA(:,/IQ),OO(:,:,/IQ)
EQUIVALENCE (NAPT,NAAA),(OP,OO)
DIMENSION FORC(KATM,3),FORCW(KATM,3)
C----------------------------------------------------------------------
DENOM = 1.0D0/FLOAT(NOPR)
DO 100 IA = 1,KATM
FORCW(IA,1) = 0.0D0
FORCW(IA,2) = 0.0D0
FORCW(IA,3) = 0.0D0
100 CONTINUE
!XOCL SPREAD DO /IQ
DO 210 IOP = 1,NOPR
DO 200 IA= 1,KATM
IAA= NAAA(IA,IOP)
F1 = FORC(IAA,1)
F2 = FORC(IAA,2)
F3 = FORC(IAA,3)
F4 = OO(1,1,IOP)*F1 +OO(2,1,IOP)*F2 +OO(3,1,IOP)*F3
F5 = OO(1,2,IOP)*F1 +OO(2,2,IOP)*F2 +OO(3,2,IOP)*F3
F6 = OO(1,3,IOP)*F1 +OO(2,3,IOP)*F2 +OO(3,3,IOP)*F3
FORCW(IA,1) = FORCW(IA,1) + F4
FORCW(IA,2) = FORCW(IA,2) + F5
FORCW(IA,3) = FORCW(IA,3) + F6
200 CONTINUE
210 CONTINUE
!XOCL END SPREAD SUM(FORCW)
DO 300 IA = 1,KATM
FORC(IA,1) = FORCW(IA,1) * DENOM
FORC(IA,2) = FORCW(IA,2) * DENOM
FORC(IA,3) = FORCW(IA,3) * DENOM
300 CONTINUE
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE GSTEPF
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
DO 30 I=1,KG
IF (IG1(I).LE.-1) IGF1(I)=IG1(I)+2*IFX-1
IF (IG1(I).GE. 0) IGF1(I)=IG1(I)+1
IF (IG2(I).LE.-1) IGF2(I)=IG2(I)+2*IFY-1
IF (IG2(I).GE. 0) IGF2(I)=IG2(I)+1
IF (IG3(I).LE.-1) IGF3(I)=IG3(I)+2*IFZ-1
IF (IG3(I).GE. 0) IGF3(I)=IG3(I)+1
30 CONTINUE
C --------------------TETRAHEDRON VOLUME-------------------------
FFF = RLTV(1,1)*(RLTV(2,2)*RLTV(3,3)-RLTV(3,2)*RLTV(2,3))
& + RLTV(2,1)*(RLTV(3,2)*RLTV(1,3)-RLTV(1,2)*RLTV(3,3))
& + RLTV(3,1)*(RLTV(1,2)*RLTV(2,3)-RLTV(2,2)*RLTV(1,3))
RVOL = ABS(FFF)
DO 1000 K=1,KNZ2
DO 1000 J=1,KNY2
DO 1000 I=1,KNX2
IGPO(I,J,K) = 0
1000 CONTINUE
C CALCULATION OF POINTER IGPO
DO 1100 I=1,KG
IGPO(IG1(I)+KX1,IG2(I)+KY1,IG3(I)+KZ1)= I
1100 CONTINUE
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE GSFSCA
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
C --------------------TETRAHEDRON VOLUME-------------------------
FFF = RLTV(1,1)*(RLTV(2,2)*RLTV(3,3)-RLTV(3,2)*RLTV(2,3))
& + RLTV(2,1)*(RLTV(3,2)*RLTV(1,3)-RLTV(1,2)*RLTV(3,3))
& + RLTV(3,1)*(RLTV(1,2)*RLTV(2,3)-RLTV(2,2)*RLTV(1,3))
RVOL = ABS(FFF)
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE BASNUM(QWGT)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
DIMENSION QWGT(KNV3)
C //////////////////////////////
C // CUT OFF FOR WAVEFUNCTION //
C //////////////////////////////
JGB=0
JG2=0
JJT=0
GRVT=0.D0
DO 1000 I=1,KV3
DX = VX(I)
DY = VY(I)
DZ = VZ(I)
JJ = 0
KK = 0
GRVMX = 0.D0
DO 1100 J=1,KG
GRVV = SQRT((DX+GX(J))**2+(DY+GY(J))**2+(DZ+GZ(J))**2)
IF(GRVV.LE.GMAX) THEN
JJ = JJ + 1
NBASE(JJ,I)=J
IF(GRVMX.LT.GRVV) GRVMX = GRVV
END IF
IF(GRVV.LE.GMAX/2.0D0) THEN
KK = KK + 1
NBMAT(KK,I)=J
END IF
1100 CONTINUE
IBA(I) = JJ
JJT = JJT+JJ
GRVT = GRVT+GRVMX*QWGT(I)
IBA2(I)= KK
WRITE(6,1200) I,JJ,KK,GRVT
1200 FORMAT(' ',' K = ',I4,' JJ = ',I5,' KK = ',I5,' GRV = ',F12.8)
IF(JJ.GT.JGB) JGB = JJ
IF(KK.GT.JG2) JG2 = KK
1000 CONTINUE
WRITE(6,*) 'MAXIMUM NUMBER OF BASES FOR WAVE FUNCTION (KG1)=',JGB
WRITE(6,*) ' JJT = ',JJT,' MEAN GRV = ',GRVT
WRITE(6,*) 'MAXIMUM NUMBER OF BASES FOR (GMAX/2) (KG2)=',JG2
C <----- ATTN] KG1 WO SAITEIGI SHITE IRU]
KG1=JGB
NBMX = 0
DO 2000 IK = 1,KV3
IIBA = IBA(IK)
DO 2010 I= 1,IIBA
NBMX=MAX(NBASE(I,IK),NBMX)
2010 CONTINUE
2000 CONTINUE
WRITE(6,2020) NBMX
2020 FORMAT(' ','MAX NBMX = ',I6)
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE FORM
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
DO 1000 IT = 1,KTYP
DO 1010 N = 1,KG
ZFM3(N,IT) = DCMPLX(0.0D0,0.0D0)
1010 CONTINUE
1000 CONTINUE
DO 2000 IA=1,KATM
DO 2010 I=1,KG
FX = GX(I)
FY = GY(I)
FZ = GZ(I)
ZFORT =CDEXP(-ZI*(CATX(IA)*FX+CATY(IA)*FY+CATZ(IA)*FZ))
*VOCL STMT,IF(90)
IF(I.LE.KNBMX) ZFM2(I,IA) = ZFORT
ZFM3(I,KFTYPE(IA)) = ZFM3(I,KFTYPE(IA)) + ZFORT
2010 CONTINUE
2000 CONTINUE
RETURN
END
C---*----1----*----2----*----3----*----4----*----5----*----6----*----7
SUBROUTINE PCC(KTPCC,RHPC,
< SCHGPC,EPC,PCM)
C SUBROUTINE FOR PARTIAL CORE CORRECTION
C MODIFIED FROM ATOMIC SEP.1990 MORIKAWA
C REF. S.G.LOUIE,S.FROYEN,AND M.L.COHEN,
C PHYS.REV.B26,1738(1982)
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
INTEGER I,IA,ITY,N,KTPCC(KTYP)
REAL EPC,PCM,RS
REAL XH,H,H3,S,SCHGPC
REAL RHPC(KIZA,KTYP),CHGPC(KTYP),EPCP(KTYP),EMCP(KTYP)
DATA XH/32.0D0/
H = 1.D0/XH
H3 = H/3.D0
CO3=4.D0/3.D0
C WRITE (6,*) 'UNIVOL IN PCC =',UNIVOL
C///////////// FOURIER TRANSFORMATION OF PARTIAL CHARGE DENSITY /////
IF (ITER.EQ.0) THEN
DO 1110 ITY=1,KTYP
DO 1111 N=1,KIZA
RHPC(N,ITY)=0.0D0
1111 CONTINUE
1110 CONTINUE
C----------------------------------------
REWIND 27
READ(27,1100) (I,RAD(N),N=1,KIZA)
1100 FORMAT(3(I4,D22.14))
IF (I.NE.KIZA) THEN
WRITE (6,*) ' READ IN PCC '
STOP
END IF
WRITE(6,*) I,' RAD(KIZA)= ',RAD(KIZA)
DO 1000 ITY=1,KTYP
IF (KTPCC(ITY).EQ.0) GOTO 1000
READ(27,*) CHGPC(ITY)
READ(27,1100) (I,RHPC(N,ITY),N=1,KIZA)
IF (I.NE.KIZA) THEN
WRITE (6,*) ' READ IN PCC ITY= ',ITY
STOP
END IF
1000 CONTINUE
END IF
C--------------------------------
DO 1001 ITY=1,KTYP
WRITE(6,*) ITY,' RHPC(KIZA,ITY)= ',RHPC(KIZA,ITY)
S = 0.D0
EPCP(ITY) = 0.D0
EMCP(ITY) = 0.D0
DO 1150 N=1,KIZA
IF (RHPC(N,ITY).GE.1.D-40) THEN
RS = (3.D0/RHPC(N,ITY))**(1.D0/3.D0)*RAD(N)
EPCP(ITY) = EPCP(ITY)-(0.458D0/RS+0.44D0/(RS+7.8D0))
& *RHPC(N,ITY)*OMO(N)
EMCP(ITY) = EMCP(ITY)-(0.458D0*CO3/RS+(0.44D0*CO3*RS +
& 3.432D0)/(RS+7.8D0)**2)*RHPC(N,ITY)*OMO(N)
END IF
S = S + RHPC(N,ITY)*OMO(N)
1150 CONTINUE
S = S *H3
EPCP(ITY) = EPCP(ITY)*H3
EMCP(ITY) = EMCP(ITY)*H3
WRITE (6,*) ' CHGPC(ITY) = ',CHGPC(ITY)
IF (ABS(S-CHGPC(ITY)).GE.1.D-7) THEN
WRITE (6,*) ITY,'PARTIAL CORE CHARGE S-CHGPC='
/ ,S-CHGPC(ITY)
STOP
END IF
C------------------------------------
DO 1300 I=1,KG
RHPCG(I,ITY)=0.0D0
RRPCG(I,ITY)=0.0D0
1300 CONTINUE
DO 1200 N=1,KIZA
R=RAD(N)
FAC1=OMO(N)*RHPC(N,ITY)*H3/UNIVOL
FAC2=OMO(N)*RHPC(N,ITY)*R*H3/UNIVOL
DO 1210 I=1,KG
XX(I)=R*GR(I)
1210 CONTINUE
CALL DSJNV(0,KG,XX,Y11)
CALL DSJNV(1,KG,XX,Y22)
DO 1220 I=1,KG
RHPCG(I,ITY)=RHPCG(I,ITY)+FAC1*Y11(I)
RRPCG(I,ITY)=RRPCG(I,ITY)-FAC2*Y22(I)
1220 CONTINUE
1200 CONTINUE
1001 CONTINUE
SCHGPC = 0.D0
EPC = 0.D0
PCM = 0.0D0
DO 1410 IA = 1,KATM
IF (KTPCC(KFTYPE(IA)).EQ.0) GOTO 1410
SCHGPC = SCHGPC+CHGPC(KFTYPE(IA))
EPC = EPC +EPCP (KFTYPE(IA))
PCM = PCM +EMCP (KFTYPE(IA))
1410 CONTINUE
WRITE (6,*) 'NO-OVERLAP P.C.(USED) EPC = ',EPC
WRITE (6,*) 'NO-OVERLAP P.C.(USED) PCM = ',PCM
WRITE (6,*) 'TOTAL PARTIAL CHARGE SCHGPC = ',SCHGPC
C///////////////////////////////////////////////////////////////////
ZRHPC(1)=DCMPLX(0.D0,0.D0)
ZRRPC(1)=DCMPLX(0.D0,0.D0)
RG(1)=1.0D0
DO 1500 I=2,KG
ZRHPC(I)=DCMPLX(0.D0,0.D0)
ZRRPC(I)=DCMPLX(0.D0,0.D0)
RG(I)=1.0D0/GR(I)
1500 CONTINUE
DO 2000 IT=1,KTYP
IF (KTPCC(IT).EQ.0) GOTO 2000
DO 2100 I=1,KG
ZRHPC(I) = ZRHPC(I) + ZFM3(I,IT)*RHPCG(I,IT)
ZRRPC(I) = ZRRPC(I) + ZFM3(I,IT)*RRPCG(I,IT)*RG(I)
2100 CONTINUE
2000 CONTINUE
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE INTCHG(ALFA)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
DO 128 I=1,KG
ZCHG(I) = DCMPLX(0.0D0,0.0D0)
128 CONTINUE
DO 15 IT=1,KTYP
DO 10 I=1,KG
ZCHG(I) = ZCHG(I) + ZFM3(I,IT)*
& ACHG(IT)*EXP(-GR(I)*GR(I)*0.25D0/ALFA)/UNIVOL
10 CONTINUE
15 CONTINUE
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE FORLOC(KTPCC)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
DIMENSION ZFPC(6)
INTEGER KTPCC(KTYP)
C FORCE2 AND PRESSURE ADDITION SSN(KNG1)
DO 161 IA=1,KATM
DO 162 I=1,KG
FX = GX(I)
FY = GY(I)
FZ = GZ(I)
ZFORT =CDEXP(-ZI*(CATX(IA)*FX+CATY(IA)*FY+CATZ(IA)*FZ))
ZFTMP =ZFORT *PSC(I,KFTYPE(IA))*DCONJG(ZCHG(I))
ZFORC2(IA,1)=ZFORC2(IA,1)+GX(I)*ZFTMP
ZFORC2(IA,2)=ZFORC2(IA,2)+GY(I)*ZFTMP
ZFORC2(IA,3)=ZFORC2(IA,3)+GZ(I)*ZFTMP
162 CONTINUE
IF (KTPCC(KFTYPE(IA)).EQ.1) THEN
DO 1000 N=1,6
ZFPC(N)=DCMPLX(0.0D0,0.0D0)
1000 CONTINUE
DO 200 I=1,KG
C 4/20, 1999, MODIFIED SERIOUS BUG
FX = GX(I)
FY = GY(I)
FZ = GZ(I)
ZFORT =CDEXP(-ZI*(CATX(IA)*FX+CATY(IA)*FY+CATZ(IA)*FZ))
ZFTMP =ZFORT *RHPCG(I,KFTYPE(IA))*DCONJG(ZVXC(I))
ZFPC(1)=ZFPC(1)+GX(I)*ZFTMP
ZFPC(2)=ZFPC(2)+GY(I)*ZFTMP
ZFPC(3)=ZFPC(3)+GZ(I)*ZFTMP
C [COMMENT OUT](in Japanese, 10/5, 1999)
C ZFTMP =ZFORT *RHPCG(I,KFTYPE(IA))*DCONJG(ZVXCPC(I))
C ZFPC(4)=ZFPC(4)+GX(I)*ZFTMP
C ZFPC(5)=ZFPC(5)+GY(I)*ZFTMP
C ZFPC(6)=ZFPC(6)+GZ(I)*ZFTMP
200 CONTINUE
ZFORC2(IA,1)=ZFORC2(IA,1)+ZFPC(1)-ZFPC(4)
ZFORC2(IA,2)=ZFORC2(IA,2)+ZFPC(2)-ZFPC(5)
ZFORC2(IA,3)=ZFORC2(IA,3)+ZFPC(3)-ZFPC(6)
C IF(MOD(ITER,50).EQ.0) THEN
C WRITE(6,1100) IA,ZFPC(1),ZFPC(2),ZFPC(3),
C & ZFPC(4),ZFPC(5),ZFPC(6)
C 1100 FORMAT(I4,6D12.4,/,4X,6D12.4)
C END IF
END IF
C COMBINE THE FORCE1 AND FORCE2.
161 CONTINUE
DO 261 IA=1,KATM
ZFORC2(IA,1)=UNIVOL*ZI*ZFORC2(IA,1) + DCMPLX(FFF1(IA,1),0.0D0)
ZFORC2(IA,2)=UNIVOL*ZI*ZFORC2(IA,2) + DCMPLX(FFF1(IA,2),0.0D0)
ZFORC2(IA,3)=UNIVOL*ZI*ZFORC2(IA,3) + DCMPLX(FFF1(IA,3),0.0D0)
261 CONTINUE
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE CONV2(ETONEW,ETOOLD,IMD,ITERMD,CMIX)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
IF (ITER.EQ.IMD+1) WRITE (6,*) 'MIXING RATE = ',CMIX
IF (ITER.GE.IMD+1) PMIX(ITER)=CMIX
ZFFF=DCMPLX(0.0D0,0.0D0)
PPMIX = PMIX(ITER)
QQMIX = 1.D0 - PPMIX
DO 1100 I=1,KG
ZUU1=ZCHG(I)-ZCHGO(I)
ZFFF=ZFFF+DCONJG(ZUU1)*ZUU1
ZCHO1 = ZCHGO(I)
ZCHGO(I) = ZCHG(I)
ZCHG(I) = ZCHO1*PPMIX + ZCHGO(I)*QQMIX
1100 CONTINUE
DCHG=DSQRT(DREAL(ZFFF))
5000 CONTINUE
IF(ITER.NE.1) THEN
EPP2=ABS(ETONEW-ETOOLD)
IF(ETOOLD.LT.ETONEW) THEN
C-------------------------------WRITE(6,*) '**********************'
WRITE(6,*) '>> ETOOLD.LT.ETONEW <<'
C-------------------------------WRITE(6,*) '**********************'
WRITE(6,*) 'ETONEW-ETTOOLD=',
& ETONEW-ETOOLD
EPP2=1.0D0
END IF
ETOOLD=ETONEW
ELSE
EPP2 =1.0D5
ETOOLD=ETONEW
END IF
EDEV=27200.0D0*EPP2
WRITE(6,610) ITER,EPP2,EDEV,DCHG
610 FORMAT(1H ,' ITER=',I3,' ET(H)=',D15.7,' ET(M)=',F10.6,' DC='
& ,D15.7)
IF( ITER.LE.ITEMAX ) THEN
C IF(EPP2.LE.CONV) GOTO 2000
IF(ITER.NE.ITEMAX) THEN
IFLAG=1
GO TO 9999
END IF
END IF
WRITE(6,*) '////////////////////////////////////////////'
WRITE(6,*) '// UNLUCKY! CONVERGENCE WAS NOT ACHIEVED! //'
WRITE(6,*) '////////////////////////////////////////////'
GO TO 2001
2000 CONTINUE
WRITE(6,*) '///////////////////////////////////////////////'
WRITE(6,*) '// CONGRATULATION! CONVERGENCE WAS ACHIEVED! //'
WRITE(6,*) '///////////////////////////////////////////////'
2001 CONTINUE
IFLAG=0
9999 CONTINUE
RETURN
END
C================================================================
SUBROUTINE EVIN(IREC8,IREC9,EPC)
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
DIMENSION DVS(KIZA),DVP(KIZA),DVD(KIZA)
REWIND 28
REWIND 29
REWIND 30
REWIND 31
REWIND 32
REWIND 33
REWIND 34
REWIND 35
REWIND 36
REWIND 37
READ (28,*) ITER,EPC,WS,WP,WD
READ (29) SNL
READ (30) SNL2
READ (31) SNL3
READ (32) ZAJ
READ (33) ZFBB,ZFBB2
READ (34) EKO
READ (35) ZCHG
READ (36) VEL
READ (37) ZRHPC
WRITE (6,*) 'EVIN ITER = ',ITER,EPC
DO 1000 I=NBD1,NBD2
DO 1010 K=1,KNV3
WRITE (6,600) EKO(I,K)
600 FORMAT(1H ,4F12.6)
1010 CONTINUE
1000 CONTINUE
C NSEK = 2 BECAUSE DVS,DVP INCLUDES RAD(N).
NSEK=2
REWIND 15
DO 100 ITY = 1,KTYP
IF (NLSPD(ITY).EQ.1) THEN
READ (15,*) MESHR,NMES,DX,WS(ITY),WP(ITY)
& ,RAD,DVS,DVP
WD(ITY)=0.0D0
DO 111 N=1,MESHR
WVS(N,ITY)=DVS(N)
WVP(N,ITY)=DVP(N)
WVD(N,ITY)=0.0D0
111 CONTINUE
ELSE
READ (15,*) MESHR,NMES,DX,WS(ITY),WP(ITY),WD(ITY)
& ,RAD,DVS,DVP,DVD
DO 110 N=1,MESHR
WVS(N,ITY)=DVS(N)
WVP(N,ITY)=DVP(N)
WVD(N,ITY)=DVD(N)
110 CONTINUE
END IF
100 CONTINUE
RETURN
END
C================================================================
SUBROUTINE EVOUT(IREC8,IREC9,ALFA,EPC)
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
REWIND 11
REWIND 20
REWIND 28
REWIND 29
REWIND 30
REWIND 31
REWIND 32
REWIND 33
REWIND 34
REWIND 35
REWIND 36
REWIND 37
WRITE (20,300) EF
300 FORMAT(1H ,'E-K CURVE EF =',F12.6)
DO 100 NNN=1,KV3
WRITE(20,303) VX(NNN),VY(NNN),VZ(NNN)
303 FORMAT((1H ,3(F10.6,2X)))
WRITE(20,302) (EKO(I,NNN),I=1,KEG)
302 FORMAT((1H ,5(F10.6,2X)))
100 CONTINUE
C
WRITE (28,*) ITER,EPC,WS,WP,WD
WRITE (29) SNL
WRITE (30) SNL2
WRITE (31) SNL3
WRITE (32) ZAJ
WRITE (33) ZFBB,ZFBB2
WRITE (34) EKO
WRITE (35) ZCHG
WRITE (36) VEL
WRITE (37) ZRHPC
C'''''WRITE 11!'''''''''''''''''''''''''''''''''''''''''''''''''''
WRITE(11,399) ITEMAX,PINIT,CONV,GMAX,ICONT
399 FORMAT(' ',I6,F8.4,D12.4,F8.4,I4)
DO 400 I=1,3
WRITE(11,500) ALTV(1,I),ALTV(2,I),ALTV(3,I)
400 CONTINUE
WRITE(11,*) KCOTYP,' COORDINATES 0:NORMALIZED 1:CARTESIAN '
IF(KCOTYP.EQ.0) THEN
DO 410 IA=1,KATM
PPOS(IA) = ALINV(1,1)*CATX(IA)
& + ALINV(1,2)*CATY(IA) + ALINV(1,3)*CATZ(IA)
QPOS(IA) = ALINV(2,1)*CATX(IA)
& + ALINV(2,2)*CATY(IA) + ALINV(2,3)*CATZ(IA)
RPOS(IA) = ALINV(3,1)*CATX(IA)
& + ALINV(3,2)*CATY(IA) + ALINV(3,3)*CATZ(IA)
410 CONTINUE
WRITE(11,500)(PPOS(IA),QPOS(IA),RPOS(IA),IA=1,KATM)
ELSE
WRITE(11,500)(CATX(IA),CATY(IA),CATZ(IA),IA=1,KATM)
END IF
NNATM=0
DO 420 IT=1,KTYP
NNATM=NNATM+IATOM(IT)
WRITE(11,*) IATOM(IT),NLSPD(IT)
WRITE(11,502) AICHG(NNATM),ALFA
WRITE(11,502) ACHG(IT),AC(IT,1),AC(IT,2),BC(IT,1),BC(IT,2)
420 CONTINUE
500 FORMAT(3(F20.10))
502 FORMAT(5(F15.8))
C'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
RETURN
END
C----------------------------------------------------------------
SUBROUTINE EVOU2(ALFA)
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
REWIND 11
REWIND 20
WRITE (20,300) EF
300 FORMAT(1H ,'E-K CURVE EF =',F12.6)
DO 100 NNN=1,KV3
WRITE(20,303) VX(NNN),VY(NNN),VZ(NNN)
303 FORMAT((1H ,3(F10.6,2X)))
WRITE(20,302) (EKO(I,NNN),I=1,KEG)
302 FORMAT((1H ,5(F10.6,2X)))
100 CONTINUE
C'''''WRITE 11!'''''''''''''''''''''''''''''''''''''''''''''''''''
WRITE(11,399) ITEMAX,PINIT,CONV,GMAX,ICONT
399 FORMAT(' ',I6,F8.4,D12.4,F8.4,I4)
DO 400 I=1,3
WRITE(11,500) ALTV(1,I),ALTV(2,I),ALTV(3,I)
400 CONTINUE
WRITE(11,*) KCOTYP,' COORDINATES 0:NORMALIZED 1:CARTESIAN '
IF(KCOTYP.EQ.0) THEN
DO 410 IA=1,KATM
PPOS(IA) = ALINV(1,1)*CATX(IA)
& + ALINV(1,2)*CATY(IA) + ALINV(1,3)*CATZ(IA)
QPOS(IA) = ALINV(2,1)*CATX(IA)
& + ALINV(2,2)*CATY(IA) + ALINV(2,3)*CATZ(IA)
RPOS(IA) = ALINV(3,1)*CATX(IA)
& + ALINV(3,2)*CATY(IA) + ALINV(3,3)*CATZ(IA)
410 CONTINUE
WRITE(11,500)(PPOS(IA),QPOS(IA),RPOS(IA),IA=1,KATM)
ELSE
WRITE(11,500)(CATX(IA),CATY(IA),CATZ(IA),IA=1,KATM)
END IF
NNATM=0
DO 420 IT=1,KTYP
NNATM=NNATM+IATOM(IT)
WRITE(11,*) IATOM(IT),NLSPD(IT)
WRITE(11,502) AICHG(NNATM),ALFA
WRITE(11,502) ACHG(IT),AC(IT,1),AC(IT,2),BC(IT,1),BC(IT,2)
420 CONTINUE
500 FORMAT(3(F20.10))
502 FORMAT(5(F15.8))
C'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
RETURN
END
C------------------------------------------------------------
SUBROUTINE XCFFT(III,SCHGPC)
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
C-----ARRAYS FOR MFFT--------------------------------------------
DIMENSION IWL(8*IFX2+28),IWM(8*IFY2+28),IWN(8*IFZ2+28)
& ,IWORK(2*IFX2)
DIMENSION ZRB(IFX2,IFY2,IFZ2)
C============================================================
EQUIVALENCE (ZV1D(1),ZRB(1,1,1))
C============================================================
KFT1 = IFX2
KFT2 = IFY2
KFT3 = IFZ2
KSUM=KFT1*KFT2*KFT3
KVOL=(KFT1-1)*KFT2*KFT3
THIRD=1.D0/3.D0
ALFF=0.7D0
CO1=1.5D0*ALFF*(3.D0/PAI)**THIRD
CO2=(0.75D0/PAI)**THIRD
CO3=4.D0/3.D0
VCEL=ABS(UNIVOL/FLOAT(KVOL))
C*****---- SET UP C3FFT (FAST FOURIER TRANSFORMATION) -----
CALL C3FFT(ZRB,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,0,1,IWORK,IERR)
IF (IERR.NE.0) THEN
WRITE (6,*) ' C3FFT(SET UP)] IERR = ',IERR
STOP
END IF
DO 111 I=1,KSUM
ZV1D(I)=DCMPLX(0.0D0,0.0D0)
111 CONTINUE
IF (III.EQ.3) THEN
DO 110 I=1,KG
L1=IGF1(I)
L2=IGF2(I)
L3=IGF3(I)
ZRB(L1,L2,L3)= ZRHPC(I)
110 CONTINUE
ELSE
DO 210 I=1,KG
L1=IGF1(I)
L2=IGF2(I)
L3=IGF3(I)
ZRB(L1,L2,L3)=ZCHG(I)+ZRHPC(I)
210 CONTINUE
END IF
C*****---- INVERSE FAST FOURIER TRANSFORMATION -----
CALL C3FFT(ZRB,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,1,1,IWORK,IERRI)
IF (IERRI.NE.0) THEN
WRITE (6,*) ' C3FFT(INVERSE)] IERR = ',IERRI
STOP
END IF
DO 1000 I=1,KSUM
CHGB1(I) = DREAL(ZV1D(I))
1000 CONTINUE
DO 20 I=1,KSUM
IF( CHGB1(I).LE.0.0D0 ) THEN
IF ( MOD(I,IFX2).NE.0 ) THEN
C IF ( CHGB1(I).LE.-1.0D-5 ) THEN
C WRITE(6,610) I,CHGB1(I)
C 610 FORMAT(1H ,'**WARNING CHG.DEN<0.0 AT ',
C & I5,2D15.7,'***')
C END IF
CHGB1(I) = 1.D-40
ELSE
CHGB1(I) = 1.D-40
END IF
END IF
20 CONTINUE
S = 0.D0
DO 1010 I=1,KSUM
S = S+CHGB1(I)
1010 CONTINUE
S=S*VCEL - SCHGPC
IF (MOD(ITER,10).EQ.0) THEN
WRITE (6,*) 'REAL TOTAL CHARGE = ',S,' IN XCFFT'
END IF
C*****<<< WIGNER INTERPOLATION >>>
IF((III.EQ.1).OR.(III.EQ.3)) THEN
DO 1020 I=1,KSUM
RS=CO2*( 1.0D0/CHGB1(I) )**THIRD
RHO= -0.458D0*CO3/RS-(0.44D0*CO3*RS + 3.432D0)/
& (RS+7.8D0)**2
ZV1D(I)=DCMPLX(RHO,0.0D0)
1020 CONTINUE
ELSE
DO 1030 I=1,KSUM
RS=CO2*( 1.0D0/CHGB1(I) )**THIRD
RHO= -0.458D0/RS-0.44D0/(RS+7.8D0)
ZV1D(I)=DCMPLX(RHO,0.0D0)
1030 CONTINUE
END IF
C*****---- FAST FOURIER TRANSFORMATION -----
CALL C3FFT(ZRB,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,-1,1,IWORK,IERR)
IF (IERR.NE.0) THEN
WRITE (6,*) ' C3FFT(FFT)] IERR = ',IERR
STOP
END IF
DENOM=1.0D0/DBLE(KVOL)
C----------------------------------------------------
IF (III.EQ.1) THEN
DO 120 I=1,KG
L1=IGF1(I)
L2=IGF2(I)
L3=IGF3(I)
ZVXC(I)=ZRB(L1,L2,L3)*DENOM
120 CONTINUE
ELSE IF (III.EQ.2) THEN
DO 121 I=1,KG
L1=IGF1(I)
L2=IGF2(I)
L3=IGF3(I)
ZEXC(I)=ZRB(L1,L2,L3)*DENOM
121 CONTINUE
ELSE IF (III.EQ.3) THEN
DO 122 I=1,KG
L1=IGF1(I)
L2=IGF2(I)
L3=IGF3(I)
ZVXCPC(I)=ZRB(L1,L2,L3)*DENOM
122 CONTINUE
END IF
RETURN
END
C------------------------------------------------------------
SUBROUTINE XSTPC(III,SCHGPC)
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
C STRESS FOR PARTIAL CORE CORRECTION
C-----ARRAYS FOR MFFT--------------------------------------------
DIMENSION IWL(8*IFX2+28),IWM(8*IFY2+28),IWN(8*IFZ2+28)
& ,IWORK(2*IFX2)
DIMENSION ZRB(IFX2,IFY2,IFZ2),ZRX(KFFT)
& ,ZRY(KFFT),ZRZ(KFFT)
C============================================================
EQUIVALENCE (ZV1D(1),ZRB(1,1,1))
C============================================================
ICOUNT=0
KFT1 = IFX2
KFT2 = IFY2
KFT3 = IFZ2
KSUM=KFT1*KFT2*KFT3
KVOL=(KFT1-1)*KFT2*KFT3
THIRD=1.D0/3.D0
ALFF=0.7D0
CO1=1.5D0*ALFF*(3.D0/PAI)**THIRD
CO2=(0.75D0/PAI)**THIRD
CO3=4.D0/3.D0
VCEL=ABS(UNIVOL/FLOAT(KVOL))
C*****---- SET UP C3FFT (FAST FOURIER TRANSFORMATION) -----
CALL C3FFT(ZRB,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,0,1,IWORK,IERR)
IF (IERR.NE.0) THEN
WRITE (6,*) ' C3FFT(SET UP)] IERR = ',IERR
STOP
END IF
C----- X ---------------------------
DO 111 I=1,KSUM
ZV1D(I)=DCMPLX(0.0D0,0.0D0)
111 CONTINUE
DO 110 I=1,KG
L1=IGF1(I)
L2=IGF2(I)
L3=IGF3(I)
ZRB(L1,L2,L3)= ZRRPC(I)*GX(I)*GX(I)
110 CONTINUE
C*****---- INVERSE FAST FOURIER TRANSFORMATION -----
CALL C3FFT(ZRB,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,1,1,IWORK,IERRI)
IF (IERRI.NE.0) THEN
WRITE (6,*) ' C3FFT(INVERSE)] IERR = ',IERRI
STOP
END IF
DO 1005 I=1,KSUM
ZRX(I) = ZV1D(I)
1005 CONTINUE
C----- Y ---------------------------
DO 113 I=1,KSUM
ZV1D(I)=DCMPLX(0.0D0,0.0D0)
113 CONTINUE
DO 134 I=1,KG
L1=IGF1(I)
L2=IGF2(I)
L3=IGF3(I)
ZRB(L1,L2,L3)= ZRRPC(I)*GY(I)*GY(I)
134 CONTINUE
C*****---- INVERSE FAST FOURIER TRANSFORMATION -----
CALL C3FFT(ZRB,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,1,1,IWORK,IERRI)
IF (IERRI.NE.0) THEN
WRITE (6,*) ' C3FFT(INVERSE)] IERR = ',IERRI
STOP
END IF
DO 1006 I=1,KSUM
ZRY(I) = ZV1D(I)
1006 CONTINUE
C----- Z ---------------------------
DO 114 I=1,KSUM
ZV1D(I)=DCMPLX(0.0D0,0.0D0)
114 CONTINUE
DO 124 I=1,KG
L1=IGF1(I)
L2=IGF2(I)
L3=IGF3(I)
ZRB(L1,L2,L3)= ZRRPC(I)*GZ(I)*GZ(I)
124 CONTINUE
C*****---- INVERSE FAST FOURIER TRANSFORMATION -----
CALL C3FFT(ZRB,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,1,1,IWORK,IERRI)
IF (IERRI.NE.0) THEN
WRITE (6,*) ' C3FFT(INVERSE)] IERR = ',IERRI
STOP
END IF
DO 1007 I=1,KSUM
ZRZ(I) = ZV1D(I)
1007 CONTINUE
C-------------------------------
DO 112 I=1,KSUM
ZV1D(I)=DCMPLX(0.0D0,0.0D0)
112 CONTINUE
DO 210 I=1,KG
L1=IGF1(I)
L2=IGF2(I)
L3=IGF3(I)
ZRB(L1,L2,L3)=ZCHG(I)+ZRHPC(I)
210 CONTINUE
C*****---- INVERSE FAST FOURIER TRANSFORMATION -----
CALL C3FFT(ZRB,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,1,1,IWORK,IERRI)
IF (IERRI.NE.0) THEN
WRITE (6,*) ' C3FFT(INVERSE)] IERR = ',IERRI
STOP
END IF
DO 1000 I=1,KSUM
CHGB1(I) = DREAL(ZV1D(I))
1000 CONTINUE
DO 20 I=1,KSUM
IF( CHGB1(I).LE.0.0D0 ) THEN
IF ( MOD(I,IFX2).NE.0 ) THEN
IF ( CHGB1(I).LE.-1.0D-5 ) THEN
ICOUNT=ICOUNT+1
C WRITE(6,610) I,CHGB1(I)
C 610 FORMAT(1H ,'**WARNING CHG.DEN<0.0 AT ',
C & I5,2D15.7,'***')
END IF
CHGB1(I) = 1.D-40
ELSE
CHGB1(I) = 1.D-40
END IF
END IF
20 CONTINUE
S = 0.D0
DO 1010 I=1,KSUM
S = S+CHGB1(I)
1010 CONTINUE
S=S*VCEL - SCHGPC
WRITE (6,*) 'REAL TOTAL CHARGE = ',S,' IN XSTPC'
C -- X ------------
DO 1020 I=1,KSUM
RS=CO2*( 1.0D0/CHGB1(I) )**THIRD
RH1 = -0.458D0*CO3/RS-(0.44D0*CO3*RS + 3.432D0)/
& (RS+7.8D0)**2
RH2 = -0.458D0/RS-0.44D0/(RS+7.8D0)
C
RHV(I)=RH1 - RH2
ZV1D(I)=ZRX(I)*(RHV(I))/CHGB1(I)
1020 CONTINUE
C*****---- FAST FOURIER TRANSFORMATION -----
CALL C3FFT(ZRB,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,-1,1,IWORK,IERR)
IF (IERR.NE.0) THEN
WRITE (6,*) ' C3FFT(FFT)] IERR = ',IERR
STOP
END IF
DENOM=1.0D0/DBLE(KVOL)
DO 30 I=1,KG
L1=IGF1(I)
L2=IGF2(I)
L3=IGF3(I)
ZXXX(I)=ZRB(L1,L2,L3)*DENOM
30 CONTINUE
C -- Y -------------
DO 1021 I=1,KSUM
ZV1D(I)=ZRY(I)*(RHV(I))/CHGB1(I)
1021 CONTINUE
C*****---- FAST FOURIER TRANSFORMATION -----
CALL C3FFT(ZRB,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,-1,1,IWORK,IERR)
IF (IERR.NE.0) THEN
WRITE (6,*) ' C3FFT(FFT)] IERR = ',IERR
STOP
END IF
DO 31 I=1,KG
L1=IGF1(I)
L2=IGF2(I)
L3=IGF3(I)
ZYYY(I)=ZRB(L1,L2,L3)*DENOM
31 CONTINUE
C -- Z -------------
DO 1022 I=1,KSUM
ZV1D(I)=ZRZ(I)*(RHV(I))/CHGB1(I)
1022 CONTINUE
C*****---- FAST FOURIER TRANSFORMATION -----
CALL C3FFT(ZRB,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,-1,1,IWORK,IERR)
IF (IERR.NE.0) THEN
WRITE (6,*) ' C3FFT(FFT)] IERR = ',IERR
STOP
END IF
DO 32 I=1,KG
L1=IGF1(I)
L2=IGF2(I)
L3=IGF3(I)
ZZZZ(I)=ZRB(L1,L2,L3)*DENOM
32 CONTINUE
WRITE (6,*) 'ICOUNT = ',ICOUNT,' XSTPC END'
RETURN
END
C /////////////////////////////////////
C // CALCULATION OF THE TOTAL ENERGY //
C /////////////////////////////////////
SUBROUTINE ENERGY(TOTCH,ETOT1,ETOT2,ETOTAL,SCHGPC,EPC)
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
!XOCL SUBPROCESSOR PS(IPARA)=PQ(1:IPARA)
!XOCL INDEX PARTITION IP=(PS,INDEX=1:KNV3,PART=BAND)
DIMENSION EKK(KEG,KNV3),OCCUU(KEG,KNV3)
!XOCL LOCAL EKK(:,/IP),OCCUU(:,/IP)
EQUIVALENCE (EKO,EKK),(OCCUP,OCCUU)
C /////////////////////////////////////////////////
C // PSEUDOPOTENTIAL-CORRECTION AND EWALD ENERGY //
C /////////////////////////////////////////////////
ETOTAL = ETOT1*TOTCH + ETOT2
C ///////////////////////////////////////////////////////////
C // BAND ENERGY(1) <- "VXC" AND "VHR" WITH "OLD CHARGE" //
C ///////////////////////////////////////////////////////////
CALL XCFFT(2,SCHGPC)
ETOTAL = ETOTAL - UNIVOL*DREAL(DCONJG(ZVXC(1))*ZCHG(1))
& + UNIVOL*DREAL(DCONJG(ZEXC(1))*(ZCHG(1)+ZRHPC(1)))
DO 10 I=2,KG
ETOTAL = ETOTAL - UNIVOL*
& ( DREAL(DCONJG(ZVXC(I))*ZCHG(I)) +
& PAI4*REAL( (DCONJG(ZCHGO(I)))*ZCHG(I) )*RGG(I) )
& + UNIVOL*
& ( DREAL(DCONJG(ZEXC(I))*(ZCHG(I)+ZRHPC(I))) +
& PAI2*REAL( (DCONJG(ZCHG(I)))*ZCHG(I) )*RGG(I) )
10 CONTINUE
C //////////////////////////////////////////////
C // BAND ENERGY(3); BRILLOUIN ZONE SUMMATION //
C //////////////////////////////////////////////
FFF = FLOAT(KV3)
TTT = 0.D0
!XOCL SPREAD DO /IP
DO 2 I=1,KV3
DO 100 IBAN=NBD1,NBD2
TTT = TTT + OCCUU(IBAN,I)*
& EKK(IBAN,I)
100 CONTINUE
2 CONTINUE
!XOCL END SPREAD SUM(TTT)
ETOTAL = ETOTAL + 2.D0*TTT/FFF
C FOR PARTIAL CORE CORRECTION 90.11.3
ETOTAL = ETOTAL-EPC <-- [Attn!]
WRITE(6,1104) ITER,ETOTAL,ETOTAL
WRITE(19,1104) ITER,ETOTAL,ETOTAL
1104 FORMAT(1H ,'TOTAL ENERGY FOR',I4,'-TH ITERATION=',
& F12.7,5X,D15.7)
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE PSEUDO(TOTCH,ETOT1)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
DIMENSION VD(KIZA),VDNL(KIZA)
C DATA FOR ATOMS
TOTCH = 0.D0
ETOT1 = 0.D0
UNIRV = 1.0D0/UNIVOL
RG(1) =0.0D0
RGG(1)=0.0D0
DO 2000 I=2,KG
RG(I) =1.0D0/(GR(I))
RGG(I)=1.0D0/(GR(I)*GR(I))
2000 CONTINUE
C
REWIND 16
DO 500 II=1,KTYP
ETOT1 = ETOT1 + FLOAT(IATOM(II))*PAI*ACHG(II)
& * ( AC(II,1)/BC(II,1) + AC(II,2)/BC(II,2) )/UNIVOL
TOTCH=TOTCH + FLOAT(IATOM(II))*ACHG(II)
C
IF (ITER.EQ.0) THEN
IF (NLSPD(II).EQ.1) THEN
READ(16,*) MESHR,NMES,DX,RAD,VD,VDNL
DO 1210 N=1,MESHR
VDD(N,II)=VD(N)
VDDNL(N,II)=VDNL(N)
1210 CONTINUE
ELSE
DO 1212 N=1,MESHR
VDD(N,II) =0.0D0
VDDNL(N,II)=0.0D0
1212 CONTINUE
END IF
ELSE
DO 1211 N=1,MESHR
VD(N)=VDD(N,II)
VDNL(N)=VDDNL(N,II)
1211 CONTINUE
END IF
C
S=0.0D0
DO 1200 N=1,MESHR
S=S + OMO(N)*VDNL(N)*(RAD(N)**3)
1200 CONTINUE
PSC(1,II)=0.0D0
DSC(1,II)=0.0D0
ETOT1 =ETOT1+FLOAT(IATOM(II))*4.0D0*PAI*DX*S/UNIVOL
C CORE-PART NCP MATRIX ELEMENT; PSCO
C1=AC(II,1)*4.D0*PAI*ACHG(II)
C2=AC(II,2)*4.D0*PAI*ACHG(II)
B1=-0.25D0/BC(II,1)
B2=-0.25D0/BC(II,2)
DO 82 I=2,KG
GG=GR(I)**2
PSC(I,II)=-( C1*EXP(B1*GG) + C2*EXP(B2*GG) )/(GG*UNIVOL)
DSC(I,II)=-( C1*(B1-RGG(I))*EXP(B1*GG)
& +C2*(B2-RGG(I))*EXP(B2*GG) )*RGG(I)*UNIRV
82 CONTINUE
C
IF (NLSPD(II).EQ.1) THEN
C
DO 1201 N=1,MESHR
R=RAD(N)
FAC1=OMO(N)*VDNL(N)*RAD(N)**3*4.0D0*PAI*DX/UNIVOL
FAC2=OMO(N)*VDNL(N)*RAD(N)**4*2.0D0*PAI*DX
DO 1110 I=1,KG
XX(I)=R*GR(I)
1110 CONTINUE
CALL DSJNV(0,KG,XX,Y11)
CALL DSJNV(1,KG,XX,Y22)
DO 1120 I=2,KG
PSC(I,II)=PSC(I,II)+FAC1*Y11(I)
DSC(I,II)=DSC(I,II)-FAC2*Y22(I)*RG(I)*UNIRV
1120 CONTINUE
1201 CONTINUE
END IF
500 CONTINUE
C ETOT1 -> TOTAL ENERGY CORRECTION FROM THE PSEUDOPOTENTIAL
C ETOT2 -> TOTAL ENERGY CONTRIBUTION FROM THE EWALD SUMMATION
WRITE(6,*) 'TOTAL VAL CHG PER UNIT-CELL = ',TOTCH
WRITE(6,*) 'TOTAL ENERGY CORRECTION FROM PS= ',ETOT1
WRITE(6,*) ' UNIVOL= ',UNIVOL
DO 75 I=1,KG
ZPSCC(I) = DCMPLX(0.0D0,0.0D0)
ZDSCC(I) = DCMPLX(0.0D0,0.0D0)
75 CONTINUE
DO 73 IT=1,KTYP
DO 72 I=1,KG
ZPSCC(I) = ZPSCC(I) + PSC(I,IT )*ZFM3(I,IT)
ZDSCC(I) = ZDSCC(I) + DSC(I,IT )*ZFM3(I,IT)
72 CONTINUE
73 CONTINUE
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE PSELMD
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
DO 75 I=1,KG
ZPSCC(I) = DCMPLX(0.0D0,0.0D0)
ZDSCC(I) = DCMPLX(0.0D0,0.0D0)
75 CONTINUE
DO 73 IT=1,KTYP
DO 72 I=1,KG
ZPSCC(I) = ZPSCC(I) + PSC(I,IT )*ZFM3(I,IT)
ZDSCC(I) = ZDSCC(I) + DSC(I,IT )*ZFM3(I,IT)
72 CONTINUE
73 CONTINUE
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE DIAGON(IREC8)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
PARAMETER(KNMT=KNG11*(KNG11+1)/2,KNM9=9*KNG11)
!XOCL SUBPROCESSOR PS(IPARA)=PQ(1:IPARA)
!XOCL INDEX PARTITION IP=(PS,INDEX=1:KNV3,PART=BAND)
DIMENSION ZZ2(KNG1,KEG,KNV3),SSS(KNG1,KNV3,KTYP,10)
DIMENSION EKK(KEG,KNV3),OCCUU(KEG,KNV3)
!XOCL LOCAL ZZ2(:,:,/IP),SSS(:,/IP,:,:)
!XOCL LOCAL EKK(:,/IP),OCCUU(:,/IP)
EQUIVALENCE (ZAJ,ZZ2),(SNL,SSS),(EKO,EKK)
& ,(OCCUP,OCCUU)
C EIGEN-VALUE PROBLEM
DIMENSION ZAAA(KNMT)
& ,WWW(3*KNG11),ZWW(5*KNG11),ZAWORK(KNG1)
& ,IFLG(KEG)
& ,ZVN(KNG11,KEG),ZZZ(KNG11,KNG11),EG(KEG)
C & ,EVR(KNG11,KEG),EVI(KNG11,KEG),EG(KEG)
C & ,WK1(KNG11,6),WK2(8*KEG),ZWK3(KNG11,2),IWK(6*KEG+KNG11)
C & ,IFLG(KEG)
C & ,ZAWORK(KNG1)
C & ,WOK(KNM9),CCC(KNG11,KNG11)
C
DIMENSION PPM(KNG11),IJG(KNG11)
C
IF (KNG1.NE.KNG11) THEN
WRITE (6,*) 'WORNING] KNG1 IS NOT EQUAL TO KNG11'
END IF
C
DO 4 I=1,KG
ZCHGO(I) = ZCHG(I)
ZCHG(I) = DCMPLX(0.0D0,0.0D0)
4 CONTINUE
C ////////////////////////////
C // DIAGONALIZE AT K-POINT //
C ////////////////////////////
C VPP-PARALLEL START
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 100 NNN=1,KNV3
C IWRT(NNN) =NNN
AKX = VX(NNN)
AKY = VY(NNN)
AKZ = VZ(NNN)
IIKB = IBA(NNN)
IIBA = IBA2(NNN)
C PSEUDOPOTENTIAL NON-LOCAL PART MATRIX ELEMENT
DO 71 I=1,KNG11*(KNG11+1)/2
ZAAA(I)=DCMPLX(0.0D0,0.0D0)
71 CONTINUE
DO 272 I=1,KNG11
DO 274 K=1,KEG
C EVR(I,K)=0.0D0
C EVI(I,K)=0.0D0
ZVN(I,K)=CMPLX(0.0,0.0)
274 CONTINUE
DO 273 J=1,KNG11
C CCC(J,I)=0.0D0
ZZZ(J,I)=CMPLX(0.0,0.0)
273 CONTINUE
272 CONTINUE
C
DO 6 IT=1,KTYP
CS=1.0D0/(WS(IT)*UNIVOL)
CP=1.0D0/(WP(IT)*UNIVOL)
CWL(1)=CS
CWL(2)=CP
CWL(3)=CP
CWL(4)=CP
IF (NLSPD(IT).EQ.2) THEN
CD=1.0D0/(WD(IT)*UNIVOL)
CWL(5)=CD
CWL(6)=CD
CWL(7)=CD
CWL(8)=CD
CWL(9)=CD
END IF
IF (NLSPD(IT).EQ.1) THEN
LNUM = 4
ELSE
LNUM = 9
END IF
DO 5 I=1,IIBA
I1 = NBMAT(I,NNN)
L1=IG1(I1)+KX1
L2=IG2(I1)+KY1
L3=IG3(I1)+KZ1
II=I*(I-1)/2
DO 8700 L=1,LNUM
DO 7600 J =1,I
PPMT = CWL(L)*SSS(I,NNN,IT,L)*SSS(J,NNN,IT,L)
ZAAA(II+J) = ZAAA(II+J) + PPMT *
& ZFM3( IGPO( L1-IG1(NBMAT(J,NNN)),
& L2-IG2(NBMAT(J,NNN)),
& L3-IG3(NBMAT(J,NNN)) ) ,IT)
7600 CONTINUE
8700 CONTINUE
5 CONTINUE
6 CONTINUE
C MATRIX ELEMENT AND KINETIC ENERGY
DO 230 I=1,IIBA
PPM(I) = ( (AKX+GX(NBMAT(I,NNN)))**2
& + (AKY+GY(NBMAT(I,NNN)))**2
& + (AKZ+GZ(NBMAT(I,NNN)))**2 )/2.D0
230 CONTINUE
DO 222 I=1,IIBA
I1=NBMAT(I,NNN)
I2=I*(I-1)/2
L1=IG1(I1)+KX1
L2=IG2(I1)+KY1
L3=IG3(I1)+KZ1
ZAAA(I*(I+1)/2) = ZAAA(I*(I+1)/2) + PPM(I)
DO 222 J=1,I
C HARTREE, EXCHANGE AND CORE POTENTIAL
IJG(J) = ( IGPO( L1-IG1(NBMAT(J,NNN)), L2-IG2(NBMAT(J,NNN)),
& L3-IG3(NBMAT(J,NNN)) ) )
IF(IJG(J).NE.1) THEN
ZAAA(I2+J) = ZAAA(I2+J) + PAI4*ZCHGO(IJG(J))/GR(IJG(J))**2
END IF
ZAAA(I2+J) = ZAAA(I2+J) + ZVXC(IJG(J)) + ZPSCC(IJG(J))
222 CONTINUE
C=====DIAGONALIZATION SSL2
DO 7701 I=1,IIBA
MM = I*(I-1)/2
DO 7702 J=1,I
ZZZ(I,J)=ZAAA(MM+J)
IF (I.NE.J) ZZZ(J,I)=CONJG(ZZZ(I,J))
C RMAT = DREAL(ZAAA(MM+J))
C CMAT = DIMAG(ZAAA(MM+J))
C CCC(I,J) = RMAT
C IF (I.NE.J) CCC(J,I) = CMAT
7702 CONTINUE
7701 CONTINUE
C""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
KBAS = KNG11
KGB = KEG
IOPT = 2
EPS = 1.0D-15
C CALL HZES1M(ZAAA,IIBA,KGB,KGB,EPS,IOPT,EG,EVR,KBAS,EVI,IFLG
C & ,WK1,WK2,ZWK3,IWK,ICON)
C WRITE(6,*) KBAS,IIBA,KGB
C CALL DHEIG2(CCC,KBAS,IIBA,-KGB,EG,EVR,EVI,WOK,ICON)
CALL CHOBSD(ZZZ,KBAS,IIBA,EG,-KGB,ZVN,KGB,EPS,WWW,ZWW,ICON)
C""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
IF(ICON.NE.0) THEN
WRITE(6,*) '*****!! AT HZES1M, ICON=',ICON
END IF
C
DO 7164 M=1,KEG
EKK(M,NNN)=EG(M)
C WRITE(6,*) 'NNN = ',NNN,'IBAN = ',M
C WRITE(6,*) 'ENERGY = ',EKK(M,NNN)
7164 CONTINUE
C OUTPUT EIGENVECTORS ON FILE 80 (DIRECT-ACCESS) (KNG11 <---> IIBA)
C WRITE(6,*) 'ZAJ = '
DO 231 IBAN = NBD1,NBD2
DO 33 J=1,IIBA
C ZAJ(J,IBAN,NNN) = EVR(J,IBAN) + ZI*EVI(J,IBAN)
ZZ2(J,IBAN,NNN) = ZVN(J,IBAN)
C*********ZV1(J) = EVR(J,IBAN) + ZI*EVI(J,IBAN)
33 CONTINUE
DO 97 M=1,IIKB
ZAWORK(M)=0.D0
97 CONTINUE
DO 91 J=1,IIBA
DO 92 M=1,IIKB
IF (NBASE(M,NNN) .EQ. NBMAT(J,NNN)) THEN
ZAWORK(M)=ZZ2(J,IBAN,NNN)
ENDIF
92 CONTINUE
91 CONTINUE
DO 93 M=1,IIKB
ZZ2(M,IBAN,NNN)=ZAWORK(M)
93 CONTINUE
C**************DO 34 J=IIBA+1,KNG1
C ZV1(J) = DCMPLX(0.0D0,0.0D0)
C 34 CONTINUE
C IREC = KV3*(IBAN-1)+IWRT(NNN)
C IF (IREC8.NE.0) IREC=IREC8*IREC-IREC8+1
C**************WRITE(80,REC=IREC) ZV1
231 CONTINUE
100 CONTINUE
!XOCL END SPREAD
C!XOCL END PARALLEL
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE KBMAT
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
C VPP-PARALLEL
!XOCL SUBPROCESSOR PS(IPARA)=PQ(1:IPARA)
!XOCL INDEX PARTITION IP=(PS,INDEX=1:KNV3,PART=BAND)
DIMENSION SSS(KNG1,KNV3,KTYP,10),RAA(KNG1,KNV3)
!XOCL LOCAL SSS(:,/IP,:,:),RAA(:,/IP)
EQUIVALENCE (SNL,SSS),(RAK,RAA)
C K-B TYPE ADDITION
DIMENSION RKS(KIZA),RKP(KIZA),RKD(KIZA),DVS(KIZA)
& ,DVP(KIZA),DVD(KIZA)
NSEK=2
SC=DSQRT(PAI4)
PC=DSQRT(3.0D0*PAI4)
DC=DSQRT(5.0D0*PAI4)
CO1=DSQRT(3.0D0)
REWIND 15
C INTEGRATION OF K-B TYPE POTENTIAL
DO 100 ITY = 1,KTYP
IF (NLSPD(ITY).EQ.1) THEN
READ (15,*) MESHR,NMES,DX,WS(ITY),WP(ITY)
& ,RAD,DVS,DVP
WD(ITY)=0.0D0
DO 111 N=1,MESHR
WVS(N,ITY)=DVS(N)
WVP(N,ITY)=DVP(N)
WVD(N,ITY)=0.0D0
111 CONTINUE
ELSE
READ (15,*) MESHR,NMES,DX,WS(ITY),WP(ITY),WD(ITY)
& ,RAD,DVS,DVP,DVD
DO 110 N=1,MESHR
WVS(N,ITY)=DVS(N)
WVP(N,ITY)=DVP(N)
WVD(N,ITY)=DVD(N)
110 CONTINUE
END IF
100 CONTINUE
C
!XOCL SPREAD DO /IP
DO 1003 IK=1,KV3
AKX = VX(IK)
AKY = VY(IK)
AKZ = VZ(IK)
C IIBA = IBA(IK)
DO 1005 I=1,IBA2(IK)
RK=SQRT((AKX+GX(NBMAT(I,IK)))**2
& +(AKY+GY(NBMAT(I,IK)))**2 + (AKZ+GZ(NBMAT(I,IK)))**2 )
*VOCL STMT,IF(90)
IF (RK.NE.0.0D0) THEN
RAA(I,IK)=1.0D0/RK
ELSE
RAA(I,IK)=0.0D0
END IF
1005 CONTINUE
1003 CONTINUE
!XOCL END SPREAD
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 200 NNN=1,KV3
AKX = VX(NNN)
AKY = VY(NNN)
AKZ = VZ(NNN)
IIBA = IBA2(NNN)
DO 1000 J =1,IIBA
QX(J) = AKX + GX(NBMAT(J,NNN))
QY(J) = AKY + GY(NBMAT(J,NNN))
QZ(J) = AKZ + GZ(NBMAT(J,NNN))
QA1(J) = 0.5D0*(2.0D0*QZ(J)*QZ(J)-QX(J)*QX(J)-QY(J)*QY(J))
QA2(J) = 0.5D0*CO1*(QX(J)*QX(J)-QY(J)*QY(J))
QA3(J) = CO1*QX(J)*QY(J)
QA4(J) = CO1*QX(J)*QZ(J)
QA5(J) = CO1*QY(J)*QZ(J)
AK2(J) = SQRT( QX(J)**2 + QY(J)**2 + QZ(J)**2 )
1000 CONTINUE
DO 1100 ITY=1,KTYP
DO 1111 KN=1,KNG11
SSS(KN,NNN,ITY,1)=0.0D0
SSS(KN,NNN,ITY,2)=0.0D0
SSS(KN,NNN,ITY,3)=0.0D0
SSS(KN,NNN,ITY,4)=0.0D0
1111 CONTINUE
C
DO 7320 N=1,MESHR
R=RAD(N)
FACS= OMO(N)*WVS(N,ITY)*R**NSEK*SC*DX
FACP= OMO(N)*WVP(N,ITY)*R**NSEK*PC*DX
DO 7777 KN=1,IIBA
X(KN)=AK2(KN)*R
7777 CONTINUE
CALL DSJNV(0,IIBA,X,Y1)
CALL DSJNV(1,IIBA,X,Y2)
DO 7330 KN=1,IIBA
C RKS(N)=$DMSJM(0,AK2(KN)*RAD(N))
SSS(KN,NNN,ITY,1) =SSS(KN,NNN,ITY,1) +FACS*Y1(KN)
SSS(KN,NNN,ITY,2) =SSS(KN,NNN,ITY,2)
& +FACP*Y2(KN)*QX(KN)*RAA(KN,NNN)
SSS(KN,NNN,ITY,3) =SSS(KN,NNN,ITY,3)
& +FACP*Y2(KN)*QY(KN)*RAA(KN,NNN)
SSS(KN,NNN,ITY,4) =SSS(KN,NNN,ITY,4)
& +FACP*Y2(KN)*QZ(KN)*RAA(KN,NNN)
7330 CONTINUE
7320 CONTINUE
C
IF (NLSPD(ITY).EQ.2) THEN
DO 1112 KN=1,KNG11
SSS(KN,NNN,ITY,5)=0.0D0
SSS(KN,NNN,ITY,6)=0.0D0
SSS(KN,NNN,ITY,7)=0.0D0
SSS(KN,NNN,ITY,8)=0.0D0
SSS(KN,NNN,ITY,9)=0.0D0
1112 CONTINUE
C
DO 7321 N=1,MESHR
R=RAD(N)
FACD= OMO(N)*WVD(N,ITY)*R**NSEK*DC*DX
DO 7778 KN=1,IIBA
X(KN)=AK2(KN)*R
7778 CONTINUE
CALL DSJNV(2,IIBA,X,Y3)
DO 7331 KN=1,IIBA
C RKS(N)=$DMSJM(0,AK2(KN)*RAD(N))
SSS(KN,NNN,ITY,5) =SSS(KN,NNN,ITY,5)
& +FACD*Y3(KN)*QA1(KN)*RAA(KN,NNN)*RAA(KN,NNN)
SSS(KN,NNN,ITY,6) =SSS(KN,NNN,ITY,6)
& +FACD*Y3(KN)*QA2(KN)*RAA(KN,NNN)*RAA(KN,NNN)
SSS(KN,NNN,ITY,7) =SSS(KN,NNN,ITY,7)
& +FACD*Y3(KN)*QA3(KN)*RAA(KN,NNN)*RAA(KN,NNN)
SSS(KN,NNN,ITY,8) =SSS(KN,NNN,ITY,8)
& +FACD*Y3(KN)*QA4(KN)*RAA(KN,NNN)*RAA(KN,NNN)
SSS(KN,NNN,ITY,9) =SSS(KN,NNN,ITY,9)
& +FACD*Y3(KN)*QA5(KN)*RAA(KN,NNN)*RAA(KN,NNN)
7331 CONTINUE
7321 CONTINUE
END IF
1100 CONTINUE
200 CONTINUE
!XOCL END SPREAD
C!XOCL END PARALLEL
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE KBINT
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
C K-B TYPE ADDITION
C VPP-PARALLEL
!XOCL SUBPROCESSOR PS(IPARA)=PQ(1:IPARA)
!XOCL INDEX PARTITION IP=(PS,INDEX=1:KNV3,PART=BAND)
DIMENSION SSS(KNG1,KNV3,KTYP,10),SS2(KNG1,KNV3,KTYP,9)
& ,SS3(KNG1,KNV3,KTYP,4)
& ,RAA(KNG1,KNV3)
!XOCL LOCAL SSS(:,/IP,:,:),SS2(:,/IP,:,:),SS3(:,/IP,:)
!XOCL LOCAL RAA(:,/IP)
EQUIVALENCE (SNL,SSS),(SNL2,SS2),(SNL3,SS3)
& ,(RAK,RAA)
C
C K-B TYPE ADDITION
C INTEGRATION OF K-B TYPE POTENTIAL
C MODIFIED TO STRESS CALCULATION FOR KB-SEPARABLE FORM
NSEK=2
CO0=DSQRT(2.0D0)
CO1=DSQRT(3.0D0)
SC=DSQRT(PAI4)
PC=DSQRT(3.0D0*PAI4)
DC=DSQRT(5.0D0*PAI4)
C
!XOCL SPREAD DO /IP
DO 1003 IK=1,KV3
AKX = VX(IK)
AKY = VY(IK)
AKZ = VZ(IK)
C IIBA = IBA(IK)
DO 1005 I=1,IBA(IK)
RK=SQRT((AKX+GX(NBASE(I,IK)))**2
& +(AKY+GY(NBASE(I,IK)))**2 + (AKZ+GZ(NBASE(I,IK)))**2 )
*VOCL STMT,IF(90)
IF (RK.NE.0.0D0) THEN
RAA(I,IK)=1.0D0/RK
ELSE
RAA(I,IK)=0.0D0
END IF
1005 CONTINUE
1003 CONTINUE
!XOCL END SPREAD
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 1006 NNN=1,KV3
AKX = VX(NNN)
AKY = VY(NNN)
AKZ = VZ(NNN)
IIBA = IBA(NNN)
C
DO 7500 J =1,IIBA
QX(J)=AKX+GX(NBASE(J,NNN))
QY(J)=AKY+GY(NBASE(J,NNN))
QZ(J)=AKZ+GZ(NBASE(J,NNN))
QA1(J)=0.5D0*(2.0D0*QZ(J)*QZ(J)-QX(J)*QX(J)-QY(J)*QY(J))
QA2(J)=0.5D0*CO1*(QX(J)*QX(J)-QY(J)*QY(J))
QA3(J)=CO1*QX(J)*QY(J)
QA4(J)=CO1*QX(J)*QZ(J)
QA5(J)=CO1*QY(J)*QZ(J)
AK2(J) = SQRT( QX(J)**2 + QY(J)**2 + QZ(J)**2 )
7500 CONTINUE
C REWIND 15
DO 7300 ITY=1,KTYP
C ATTN] IL=1,4 (S,P ONLY)
DO 7311 KN=1,KNG1
SSS(KN,NNN,ITY,1)=0.0D0
SSS(KN,NNN,ITY,2)=0.0D0
SSS(KN,NNN,ITY,3)=0.0D0
SSS(KN,NNN,ITY,4)=0.0D0
SS2(KN,NNN,ITY,1)=0.0D0
SS2(KN,NNN,ITY,2)=0.0D0
SS2(KN,NNN,ITY,3)=0.0D0
SS2(KN,NNN,ITY,4)=0.0D0
SS3(KN,NNN,ITY,1)=0.0D0
7311 CONTINUE
C
DO 7320 N=1,MESHR
R=RAD(N)
FACS= OMO(N)*WVS(N,ITY)*R**NSEK*SC*DX
FACP= OMO(N)*WVP(N,ITY)*R**NSEK*PC*DX
FAC1=-OMO(N)*WVS(N,ITY)*R**(NSEK+1)*SC*DX
FAC2= OMO(N)*WVP(N,ITY)*R**(NSEK+1)*PC*DX
DO 7777 KN=1,IIBA
X(KN)=AK2(KN)*R
7777 CONTINUE
CALL DSJNV(0,IIBA,X,Y1)
CALL DSJNV(1,IIBA,X,Y2)
CALL DSJNV(2,IIBA,X,Y3)
DO 7878 KN=1,IIBA
Y3(KN)=(Y1(KN)-2.0D0*Y3(KN))/3.0D0
7878 CONTINUE
DO 7330 KN=1,IIBA
C RKS(N)=$DMSJM(0,AK2(KN)*RAD(N))
SSS(KN,NNN,ITY,1) =SSS(KN,NNN,ITY,1) +FACS*Y1(KN)
SSS(KN,NNN,ITY,2) =SSS(KN,NNN,ITY,2)
& +FACP*Y2(KN)*QX(KN)*RAA(KN,NNN)
SSS(KN,NNN,ITY,3) =SSS(KN,NNN,ITY,3)
& +FACP*Y2(KN)*QY(KN)*RAA(KN,NNN)
SSS(KN,NNN,ITY,4) =SSS(KN,NNN,ITY,4)
& +FACP*Y2(KN)*QZ(KN)*RAA(KN,NNN)
SS2(KN,NNN,ITY,1) =SS2(KN,NNN,ITY,1)+FAC1*Y2(KN)
SS2(KN,NNN,ITY,2) =SS2(KN,NNN,ITY,2)
& +FAC2*Y3(KN)*QX(KN)*RAA(KN,NNN)
SS2(KN,NNN,ITY,3) =SS2(KN,NNN,ITY,3)
& +FAC2*Y3(KN)*QY(KN)*RAA(KN,NNN)
SS2(KN,NNN,ITY,4) =SS2(KN,NNN,ITY,4)
& +FAC2*Y3(KN)*QZ(KN)*RAA(KN,NNN)
SS3(KN,NNN,ITY,1) =SS3(KN,NNN,ITY,1)+FACP*Y2(KN)
7330 CONTINUE
7320 CONTINUE
C
IF (NLSPD(ITY).EQ.2) THEN
C
DO 7314 KN=1,KNG1
SSS(KN,NNN,ITY,5)=0.0D0
SSS(KN,NNN,ITY,6)=0.0D0
SSS(KN,NNN,ITY,7)=0.0D0
SSS(KN,NNN,ITY,8)=0.0D0
SSS(KN,NNN,ITY,9)=0.0D0
SSS(KN,NNN,ITY,10)=0.0D0
SS2(KN,NNN,ITY,5)=0.0D0
SS2(KN,NNN,ITY,6)=0.0D0
SS2(KN,NNN,ITY,7)=0.0D0
SS2(KN,NNN,ITY,8)=0.0D0
SS2(KN,NNN,ITY,9)=0.0D0
SS3(KN,NNN,ITY,2)=0.0D0
SS3(KN,NNN,ITY,3)=0.0D0
SS3(KN,NNN,ITY,4)=0.0D0
7314 CONTINUE
C
DO 7321 N=1,MESHR
R=RAD(N)
FACS= OMO(N)*WVS(N,ITY)*R**NSEK*SC*DX
FACP= OMO(N)*WVP(N,ITY)*R**NSEK*PC*DX
FACD= OMO(N)*WVD(N,ITY)*R**NSEK*DC*DX
FAC1=-OMO(N)*WVS(N,ITY)*R**(NSEK+1)*SC*DX
FAC2= OMO(N)*WVP(N,ITY)*R**(NSEK+1)*PC*DX
FAC3= OMO(N)*WVD(N,ITY)*R**(NSEK+1)*DC*DX
DO 8778 KN=1,IIBA
X(KN)=AK2(KN)*R
8778 CONTINUE
CALL DSJNV(0,IIBA,X,Y1)
CALL DSJNV(1,IIBA,X,Y2)
CALL DSJNV(2,IIBA,X,Y3)
CALL DSJNV(3,IIBA,X,Y4)
DO 7788 KN=1,IIBA
YD(KN)= Y3(KN)
Y3(KN)=(Y1(KN)-2.0D0*Y3(KN))/3.0D0
Y4(KN)=(2.0D0*Y2(KN)-3.0D0*Y4(KN))/5.0D0
7788 CONTINUE
DO 7331 KN=1,IIBA
C ATTN] FOR SSL2 (IN ISSP)
SSS(KN,NNN,ITY,5) =SSS(KN,NNN,ITY,5)
& +FACD*YD(KN)*QA1(KN)*RAA(KN,NNN)*RAA(KN,NNN)
SSS(KN,NNN,ITY,6) =SSS(KN,NNN,ITY,6)
& +FACD*YD(KN)*QA2(KN)*RAA(KN,NNN)*RAA(KN,NNN)
SSS(KN,NNN,ITY,7) =SSS(KN,NNN,ITY,7)
& +FACD*YD(KN)*QA3(KN)*RAA(KN,NNN)*RAA(KN,NNN)
SSS(KN,NNN,ITY,8) =SSS(KN,NNN,ITY,8)
& +FACD*YD(KN)*QA4(KN)*RAA(KN,NNN)*RAA(KN,NNN)
SSS(KN,NNN,ITY,9) =SSS(KN,NNN,ITY,9)
& +FACD*YD(KN)*QA5(KN)*RAA(KN,NNN)*RAA(KN,NNN)
SSS(KN,NNN,ITY,10)=SSS(KN,NNN,ITY,10)+FACD*YD(KN)
SS2(KN,NNN,ITY,5)=SS2(KN,NNN,ITY,5)
& +FAC3*Y4(KN)*QA1(KN)*RAA(KN,NNN)*RAA(KN,NNN)
SS2(KN,NNN,ITY,6)=SS2(KN,NNN,ITY,6)
& +FAC3*Y4(KN)*QA2(KN)*RAA(KN,NNN)*RAA(KN,NNN)
SS2(KN,NNN,ITY,7)=SS2(KN,NNN,ITY,7)
& +FAC3*Y4(KN)*QA3(KN)*RAA(KN,NNN)*RAA(KN,NNN)
SS2(KN,NNN,ITY,8)=SS2(KN,NNN,ITY,8)
& +FAC3*Y4(KN)*QA4(KN)*RAA(KN,NNN)*RAA(KN,NNN)
SS2(KN,NNN,ITY,9)=SS2(KN,NNN,ITY,9)
& +FAC3*Y4(KN)*QA5(KN)*RAA(KN,NNN)*RAA(KN,NNN)
SS3(KN,NNN,ITY,2)=SS3(KN,NNN,ITY,2)+CO1*FACD*QX(KN)*YD(KN)
& *RAA(KN,NNN)
SS3(KN,NNN,ITY,3)=SS3(KN,NNN,ITY,3)+CO1*FACD*QY(KN)*YD(KN)
& *RAA(KN,NNN)
SS3(KN,NNN,ITY,4)=SS3(KN,NNN,ITY,4)+CO1*FACD*QZ(KN)*YD(KN)
& *RAA(KN,NNN)
7331 CONTINUE
7321 CONTINUE
END IF
7300 CONTINUE
1006 CONTINUE
!XOCL END SPREAD
C!XOCL END PARALLEL
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE FORCE(IREC8)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
C VPP-PARALLEL
!XOCL SUBPROCESSOR PS(IPARA)=PQ(1:IPARA)
!XOCL INDEX PARTITION IP=(PS,INDEX=1:KNV3,PART=BAND)
DIMENSION SSS(KNG1,KNV3,KTYP,10)
& ,ZZZ(KNG1,KEG,KNV3),ZFC(KEG,KNV3,KATM,10)
& ,OCCUU(KEG,KNV3)
!XOCL LOCAL SSS(:,/IP,:,:),ZZZ(:,:,/IP),ZFC(:,/IP,:,:)
!XOCL LOCAL OCCUU(:,/IP)
EQUIVALENCE (SNL,SSS),(ZAJ,ZZZ),(ZFBB,ZFC)
& ,(OCCUP,OCCUU)
DIMENSION ZFX1(KEG),ZFX2(KEG),ZFX3(KEG),ZFX4(KEG)
DIMENSION ZFY1(KEG),ZFY2(KEG),ZFY3(KEG),ZFY4(KEG)
DIMENSION ZFZ1(KEG),ZFZ2(KEG),ZFZ3(KEG),ZFZ4(KEG)
DIMENSION ZFB1(KEG),ZFB2(KEG),ZFB3(KEG),ZFB4(KEG)
C
DIMENSION ZFX5(KEG),ZFX6(KEG),ZFX7(KEG),ZFX8(KEG),ZFX9(KEG)
DIMENSION ZFY5(KEG),ZFY6(KEG),ZFY7(KEG),ZFY8(KEG),ZFY9(KEG)
DIMENSION ZFZ5(KEG),ZFZ6(KEG),ZFZ7(KEG),ZFZ8(KEG),ZFZ9(KEG)
DIMENSION ZFB5(KEG),ZFB6(KEG),ZFB7(KEG),ZFB8(KEG),ZFB9(KEG)
DIMENSION ZFBA(KEG)
C
DO 1000 IA=1,KATM
ZFORC2(IA,1)=DCMPLX(0.0D0,0.0D0)
ZFORC2(IA,2)=DCMPLX(0.0D0,0.0D0)
ZFORC2(IA,3)=DCMPLX(0.0D0,0.0D0)
1000 CONTINUE
C VPP-PAEALLEL START
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 2100 IK=1,KV3
IIBA = IBA(IK)
C*******DO 1 IBAN=NBD1,NBD2
C IREC = KV3*(IBAN-1)+IK
C IF (IREC8.NE.0) IREC=IREC8*IREC-IREC8+1
C READ(80,REC=IREC) ZV1
C DO 2 I=1,IIBA
C ZEVC(I,IBAN) = ZV1(I)
C 2 CONTINUE
C***1 CONTINUE
DO 2110 IA=1,KATM
CS=1.0D0/(WS(KFTYPE(IA))*UNIVOL)
CP=1.0D0/(WP(KFTYPE(IA))*UNIVOL)
DO 2115 IBAN=NBD1,NBD2
ZFX1(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFX2(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFX3(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFX4(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFY1(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFY2(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFY3(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFY4(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFZ1(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFZ2(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFZ3(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFZ4(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFB1(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFB2(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFB3(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFB4(IBAN)=DCMPLX(0.0D0,0.0D0)
2115 CONTINUE
DO 2200 IBAN=NBD1,NBD2
DO 1510 I=1,IIBA
I1=NBASE(I,IK)
ZTMP=ZZZ(I,IBAN,IK)*DCONJG( ZFM2( I1 ,IA ) )
ZTMP1=ZTMP*SSS(I,IK,KFTYPE(IA),1)
ZTMP2=ZTMP*SSS(I,IK,KFTYPE(IA),2)
ZTMP3=ZTMP*SSS(I,IK,KFTYPE(IA),3)
ZTMP4=ZTMP*SSS(I,IK,KFTYPE(IA),4)
ZFB1(IBAN)=ZFB1(IBAN)+ZTMP1
ZFB2(IBAN)=ZFB2(IBAN)+ZTMP2
ZFB3(IBAN)=ZFB3(IBAN)+ZTMP3
ZFB4(IBAN)=ZFB4(IBAN)+ZTMP4
ZFX1(IBAN)=ZFX1(IBAN)+GX(I1)*ZTMP1
ZFX2(IBAN)=ZFX2(IBAN)+GX(I1)*ZTMP2
ZFX3(IBAN)=ZFX3(IBAN)+GX(I1)*ZTMP3
ZFX4(IBAN)=ZFX4(IBAN)+GX(I1)*ZTMP4
ZFY1(IBAN)=ZFY1(IBAN)+GY(I1)*ZTMP1
ZFY2(IBAN)=ZFY2(IBAN)+GY(I1)*ZTMP2
ZFY3(IBAN)=ZFY3(IBAN)+GY(I1)*ZTMP3
ZFY4(IBAN)=ZFY4(IBAN)+GY(I1)*ZTMP4
ZFZ1(IBAN)=ZFZ1(IBAN)+GZ(I1)*ZTMP1
ZFZ2(IBAN)=ZFZ2(IBAN)+GZ(I1)*ZTMP2
ZFZ3(IBAN)=ZFZ3(IBAN)+GZ(I1)*ZTMP3
ZFZ4(IBAN)=ZFZ4(IBAN)+GZ(I1)*ZTMP4
1510 CONTINUE
2200 CONTINUE
DO 2205 IBAN=NBD1,NBD2
ZFC(IBAN,IK,IA,1)=CS*ZFB1(IBAN)
ZFC(IBAN,IK,IA,2)=CP*ZFB2(IBAN)
ZFC(IBAN,IK,IA,3)=CP*ZFB3(IBAN)
ZFC(IBAN,IK,IA,4)=CP*ZFB4(IBAN)
ZFORC2(IA,1)=ZFORC2(IA,1)+OCCUU(IBAN,IK)*
& ( DCONJG(ZFX1(IBAN))*ZFC(IBAN,IK,IA,1)
& +DCONJG(ZFX2(IBAN))*ZFC(IBAN,IK,IA,2)
& +DCONJG(ZFX3(IBAN))*ZFC(IBAN,IK,IA,3)
& +DCONJG(ZFX4(IBAN))*ZFC(IBAN,IK,IA,4) )
ZFORC2(IA,2)=ZFORC2(IA,2)+OCCUU(IBAN,IK)*
& ( DCONJG(ZFY1(IBAN))*ZFC(IBAN,IK,IA,1)
& +DCONJG(ZFY2(IBAN))*ZFC(IBAN,IK,IA,2)
& +DCONJG(ZFY3(IBAN))*ZFC(IBAN,IK,IA,3)
& +DCONJG(ZFY4(IBAN))*ZFC(IBAN,IK,IA,4) )
ZFORC2(IA,3)=ZFORC2(IA,3)+OCCUU(IBAN,IK)*
& ( DCONJG(ZFZ1(IBAN))*ZFC(IBAN,IK,IA,1)
& +DCONJG(ZFZ2(IBAN))*ZFC(IBAN,IK,IA,2)
& +DCONJG(ZFZ3(IBAN))*ZFC(IBAN,IK,IA,3)
& +DCONJG(ZFZ4(IBAN))*ZFC(IBAN,IK,IA,4) )
2205 CONTINUE
C
IF (NLSPD(KFTYPE(IA)).EQ.2) THEN
C
CD=1.0D0/(WD(KFTYPE(IA))*UNIVOL)
DO 2135 IBAN=NBD1,NBD2
ZFX5(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFX6(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFX7(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFX8(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFX9(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFY5(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFY6(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFY7(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFY8(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFY9(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFZ5(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFZ6(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFZ7(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFZ8(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFZ9(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFB5(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFB6(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFB7(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFB8(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFB9(IBAN)=DCMPLX(0.0D0,0.0D0)
ZFBA(IBAN)=DCMPLX(0.0D0,0.0D0)
2135 CONTINUE
DO 2230 IBAN=NBD1,NBD2
DO 1513 I=1,IIBA
I1=NBASE(I,IK)
ZTMP=ZZZ(I,IBAN,IK)*DCONJG( ZFM2( I1 ,IA ) )
ZTMP5=ZTMP*SSS(I,IK,KFTYPE(IA),5)
ZTMP6=ZTMP*SSS(I,IK,KFTYPE(IA),6)
ZTMP7=ZTMP*SSS(I,IK,KFTYPE(IA),7)
ZTMP8=ZTMP*SSS(I,IK,KFTYPE(IA),8)
ZTMP9=ZTMP*SSS(I,IK,KFTYPE(IA),9)
ZTMPA=ZTMP*SSS(I,IK,KFTYPE(IA),10)
ZFB5(IBAN)=ZFB5(IBAN)+ZTMP5
ZFB6(IBAN)=ZFB6(IBAN)+ZTMP6
ZFB7(IBAN)=ZFB7(IBAN)+ZTMP7
ZFB8(IBAN)=ZFB8(IBAN)+ZTMP8
ZFB9(IBAN)=ZFB9(IBAN)+ZTMP9
ZFBA(IBAN)=ZFBA(IBAN)+ZTMPA
ZFX5(IBAN)=ZFX5(IBAN)+GX(I1)*ZTMP5
ZFX6(IBAN)=ZFX6(IBAN)+GX(I1)*ZTMP6
ZFX7(IBAN)=ZFX7(IBAN)+GX(I1)*ZTMP7
ZFX8(IBAN)=ZFX8(IBAN)+GX(I1)*ZTMP8
ZFX9(IBAN)=ZFX9(IBAN)+GX(I1)*ZTMP9
ZFY5(IBAN)=ZFY5(IBAN)+GY(I1)*ZTMP5
ZFY6(IBAN)=ZFY6(IBAN)+GY(I1)*ZTMP6
ZFY7(IBAN)=ZFY7(IBAN)+GY(I1)*ZTMP7
ZFY8(IBAN)=ZFY8(IBAN)+GY(I1)*ZTMP8
ZFY9(IBAN)=ZFY9(IBAN)+GY(I1)*ZTMP9
ZFZ5(IBAN)=ZFZ5(IBAN)+GZ(I1)*ZTMP5
ZFZ6(IBAN)=ZFZ6(IBAN)+GZ(I1)*ZTMP6
ZFZ7(IBAN)=ZFZ7(IBAN)+GZ(I1)*ZTMP7
ZFZ8(IBAN)=ZFZ8(IBAN)+GZ(I1)*ZTMP8
ZFZ9(IBAN)=ZFZ9(IBAN)+GZ(I1)*ZTMP9
1513 CONTINUE
2230 CONTINUE
DO 2235 IBAN=NBD1,NBD2
ZFC(IBAN,IK,IA,5)=CD*ZFB5(IBAN)
ZFC(IBAN,IK,IA,6)=CD*ZFB6(IBAN)
ZFC(IBAN,IK,IA,7)=CD*ZFB7(IBAN)
ZFC(IBAN,IK,IA,8)=CD*ZFB8(IBAN)
ZFC(IBAN,IK,IA,9)=CD*ZFB9(IBAN)
ZFC(IBAN,IK,IA,10)=CD*ZFBA(IBAN)
C 4/20, 1999, MODIFIED ZFX,Y,Z1 ---> ZFX,Y,Z5
ZFORC2(IA,1)=ZFORC2(IA,1)+OCCUU(IBAN,IK)*
& ( DCONJG(ZFX5(IBAN))*ZFC(IBAN,IK,IA,5)
& +DCONJG(ZFX6(IBAN))*ZFC(IBAN,IK,IA,6)
& +DCONJG(ZFX7(IBAN))*ZFC(IBAN,IK,IA,7)
& +DCONJG(ZFX8(IBAN))*ZFC(IBAN,IK,IA,8)
& +DCONJG(ZFX9(IBAN))*ZFC(IBAN,IK,IA,9) )
ZFORC2(IA,2)=ZFORC2(IA,2)+OCCUU(IBAN,IK)*
& ( DCONJG(ZFY5(IBAN))*ZFC(IBAN,IK,IA,5)
& +DCONJG(ZFY6(IBAN))*ZFC(IBAN,IK,IA,6)
& +DCONJG(ZFY7(IBAN))*ZFC(IBAN,IK,IA,7)
& +DCONJG(ZFY8(IBAN))*ZFC(IBAN,IK,IA,8)
& +DCONJG(ZFY9(IBAN))*ZFC(IBAN,IK,IA,9) )
ZFORC2(IA,3)=ZFORC2(IA,3)+OCCUU(IBAN,IK)*
& ( DCONJG(ZFZ5(IBAN))*ZFC(IBAN,IK,IA,5)
& +DCONJG(ZFZ6(IBAN))*ZFC(IBAN,IK,IA,6)
& +DCONJG(ZFZ7(IBAN))*ZFC(IBAN,IK,IA,7)
& +DCONJG(ZFZ8(IBAN))*ZFC(IBAN,IK,IA,8)
& +DCONJG(ZFZ9(IBAN))*ZFC(IBAN,IK,IA,9) )
2235 CONTINUE
END IF
C
2110 CONTINUE
2100 CONTINUE
!XOCL END SPREAD SUM(ZFORC2)
C!XOCL END PARALLEL
ZCCC = 4.D0*ZI*RVOL/(2.D0*PAI)**3/FLOAT(KV3)
C---------------------------------------------------------
DO 1501 IA=1,KATM
ZFORC2(IA,1)=ZCCC*DIMAG( ZFORC2(IA,1) )
ZFORC2(IA,2)=ZCCC*DIMAG( ZFORC2(IA,2) )
ZFORC2(IA,3)=ZCCC*DIMAG( ZFORC2(IA,3) )
1501 CONTINUE
3000 FORMAT(I4,6F12.8)
RETURN
END
C^^^^^1992 1/7 FOR STRESS ^^^^^^^^^^^
SUBROUTINE FORZFB
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
C VPP-PARALLEL
!XOCL SUBPROCESSOR PS(IPARA)=PQ(1:IPARA)
!XOCL INDEX PARTITION IP=(PS,INDEX=1:KNV3,PART=BAND)
DIMENSION SSS(KNG1,KNV3,KTYP,10)
& ,ZZZ(KNG1,KEG,KNV3),ZFC(KEG,KNV3,KATM,10)
!XOCL LOCAL SSS(:,/IP,:,:),ZZZ(:,:,/IP),ZFC(:,/IP,:,:)
EQUIVALENCE (SNL,SSS),(ZAJ,ZZZ),(ZFBB,ZFC)
C
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 1000 IA=1,KATM
IF (NLSPD(KFTYPE(IA)).EQ.1) THEN
LNUM = 4
ELSE
LNUM = 9
END IF
DO 1003 L=1,LNUM
DO 1001 IK=1,KV3
DO 1002 IBAN=NBD1,NBD2
ZFC(IBAN,IK,IA,L) =DCMPLX(0.0D0,0.0D0)
1002 CONTINUE
1001 CONTINUE
1003 CONTINUE
1000 CONTINUE
!XOCL END SPREAD
C!XOCL END PARALLEL
C VPP-PARALLEL START
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 2100 IK=1,KV3
DO 2110 IA=1,KATM
CS=1.0D0/(WS(KFTYPE(IA))*UNIVOL)
CP=1.0D0/(WP(KFTYPE(IA))*UNIVOL)
CWL(1)=CS
CWL(2)=CP
CWL(3)=CP
CWL(4)=CP
C
IF (NLSPD(KFTYPE(IA)).EQ.1) THEN
LNUM = 4
ELSE
LNUM = 9
CD=1.0D0/(WD(KFTYPE(IA))*UNIVOL)
CWL(5)=CD
CWL(6)=CD
CWL(7)=CD
CWL(8)=CD
CWL(9)=CD
END IF
DO 3222 L=1,LNUM
DO 3200 IBAN=NBD1,NBD2
C 1991 11/28 I ---> I1
DO 3510 I=1,IBA(IK)
I1 = NBASE(I,IK)
L1 = IG1(I1)+KX1
L2 = IG2(I1)+KY1
L3 = IG3(I1)+KZ1
ZTMP=ZZZ(I,IBAN,IK)*DCONJG( ZFM2( I1 ,IA ) )
ZFC(IBAN,IK,IA,L)=ZFC(IBAN,IK,IA,L)+
& ZTMP*SSS(I,IK,KFTYPE(IA),L)
3510 CONTINUE
ZFC(IBAN,IK,IA,L)=CWL(L)*ZFC(IBAN,IK,IA,L)
3200 CONTINUE
3222 CONTINUE
C
2110 CONTINUE
2100 CONTINUE
!XOCL END SPREAD
C!XOCL END PARALLEL
C
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE CHAVER(IREC8,IREC9,KOPR,NOPR,KBZTYP)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
C VPP-PARALLEL
!XOCL SUBPROCESSOR PS(IPARA)=PQ(1:IPARA)
!XOCL INDEX PARTITION IP=(PS,INDEX=1:KNV3,PART=BAND)
DIMENSION ZZZ(KNG1,KEG,KNV3),OCCUU(KEG,KNV3)
!XOCL LOCAL ZZZ(:,:,/IP),OCCUU(:,/IP)
EQUIVALENCE (ZAJ,ZZZ),(OCCUP,OCCUU)
C-----ARRAYS FOR MFFT--------------------------------------------
DIMENSION ZC3D1(IFX2,IFY2,IFZ2)
DIMENSION IWL(8*IFX2+28),IWM(8*IFY2+28),IWN(8*IFZ2+28)
& ,IWORK(2*IFX2)
C================================================================
EQUIVALENCE (ZC1D(1),ZC3D1(1,1,1))
C================================================================
C REWIND 90
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
C*****---- SET UP C3FFT (FAST FOURIER TRANSFORMATION) -----
CALL C3FFT(ZC3D1,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,0,1,IWORK,IERR)
IF (IERR.NE.0) THEN
WRITE (6,*) ' C3FFT(SET UP)] IERR = ',IERR
STOP
END IF
DO 7701 I=1,KSUM
CHGB1(I)=0.0D0
7701 CONTINUE
C VPP-PARALLEL START
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 7820 IK=1,KV3
DO 7810 IBAN=NBD1,NBD2
C******* BUILD UP CHARGE DENSITY FOR IBAN-TH BAND, IK-TH K-POINT
C*********NAC = (IBAN-1)*KV3 + IWRT(IK)
C IF (IREC8.NE.0) NAC=IREC8*NAC-IREC8+1
C*********READ(80,REC=NAC) ZV1
IIBA=IBA(IK)
DO 7830 I=1,KSUM
ZC1D(I)=DCMPLX(0.0D0,0.0D0)
7830 CONTINUE
DO 232 I=1,IIBA
I1=NBASE(I,IK)
L1=IGF1(I1)
L2=IGF2(I1)
L3=IGF3(I1)
ZC3D1(L1,L2,L3) = ZZZ(I,IBAN,IK)
C***********ZC3D1(L1,L2,L3) = ZV1(I)
232 CONTINUE
C*****---- INVERSE FAST FOURIER TRANSFORMATION -----
CALL C3FFT(ZC3D1,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,1,1,IWORK,IERR1)
IF (IERR1.NE.0) THEN
WRITE (6,*) ' C3FFT(IFFT C)] IERR1 = ',IERR1
STOP
END IF
C---------IREC = KV3*(IBAN-1)+IWRT(IK)
C IF (IREC.LE.IRECMX) THEN
C IF (IREC9.NE.0) IREC=IREC9*IREC-IREC9+1
C WRITE(90,REC=IREC) ZC1D
C---------END IF
DO 240 I=1,KSUM
CHGB1(I)=CHGB1(I)+OCCUU(IBAN,IK)*
& DCONJG(ZC1D(I))*ZC1D(I)
240 CONTINUE
7810 CONTINUE
7820 CONTINUE
!XOCL END SPREAD SUM(CHGB1)
C!XOCL END PARALLEL
DO 7900 I=1,KSUM
ZC1D(I)=CCC*CHGB1(I)
7900 CONTINUE
C*****---- FAST FOURIER TRANSFORMATION -----
CALL C3FFT(ZC3D1,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,-1,1,IWORK,IERR)
IF (IERR.NE.0) THEN
WRITE (6,*) ' C3FFT(FFT)] IERR = ',IERR
STOP
END IF
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.GE.2) THEN
CALL CHGAVR(KOPR,NOPR,KIMG)
END IF
C---------------------------------------------------------------
RETURN
END
C---*----1----*----2----*----3----*----4----*----5----*----6----*----7
SUBROUTINE CHGAVR(KOPR,NOPR,KIMG)
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
DIMENSION NPPP(KNG,KO)
DIMENSION TAA(3,KO)
!XOCL SUBPROCESSOR PT(IPARA)=PQ(1:IPARA)
!XOCL INDEX PARTITION IQ=(PT,INDEX=1:KO,PART=BAND)
!XOCL LOCAL NPPP(:,/IQ),TAA(:,/IQ)
EQUIVALENCE (NGPT,NPPP),(TAU,TAA)
FI = 1.D0/DFLOAT(NOPR)
ZI = CMPLX(0.0D0,1.0D0)
C--*-- CASE FOR REAL CHARGE
DO 200 NG = 1,KG
ZXXX(NG) = CMPLX(0.D0,0.0D0)
200 CONTINUE
!XOCL SPREAD DO /IQ
DO 210 NO = 1,NOPR
TX = TAA(1,NO)
TY = TAA(2,NO)
TZ = TAA(3,NO)
DO 220 NG = 1,KG
NGP= NPPP(NG,NO)
FX = GX(NGP)
FY = GY(NGP)
FZ = GZ(NGP)
FP = FX*TX + FY*TY + FZ*TZ
FC = EXP(ZI*FP)
ZCR= ZCHG(NGP)
ZXXX(NG) = ZXXX(NG) + FC*ZCR
220 CONTINUE
210 CONTINUE
!XOCL END SPREAD SUM(ZXXX)
DO 230 NG = 1,KG
ZCHG(NG) = ZXXX(NG) *FI
230 CONTINUE
RETURN
END
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
C ////////////////////////////////////////////////////////////
C // EWALD SUMMATION FOR TOTAL ENERGY , FORCE (VEC VERSION) //
C // 7 OCTOBER, 1986 ---> 3/15,1990 //
C ////////////////////////////////////////////////////////////
SUBROUTINE EWVMD(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
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
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
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,IRL
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,IRL
IF(CR(L).EQ.0.0D0) THEN
SUM=SUM-CC*AL1
ELSE
SUM=SUM+ (1.D0-ERF(AL1*CR(L)))/CR(L)
END IF
12 CONTINUE
C-----FORCE CALCULATION (R-SPACE) ---------------------------------
IF (I.NE.J) THEN
DO 14 L=1,IRL
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,IRL
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,IKM
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,IKM
C CX = CY = CZ =0
IF (CKR(L).EQ.0.0D0) GOTO 21
SUM=SUM+ CON*EXP(-AL2*CKR(L)*CKR(L))
& *COS(CKX(L)*R1+CKY(L)*R2+CKZ(L)*R3)/(CKR(L)*CKR(L))
21 CONTINUE
SUM= SUM -PAI/ALFF/UNIVOL
C ////////////
C // STEP 3 //
C ////////////
IF(ITE.EQ.1) THEN
SUM1 =SUM
C------------SF2X =SF1X
C SF2Y =SF1Y
C SF2Z =SF1Z
C SF2XI=SF1XI
C SF2YI=SF1YI
C------------SF2ZI=SF1ZI
ALFF=2.D0*ALFF
ITE=2
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,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))
22 FORMAT(1H ,2(I5,1X),' EWALD-SUMM=',D16.8,2X,D16.8)
101 CONTINUE
100 CONTINUE
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
WRITE(6,*) 'ETOT2(EWALD) = ',ETOT2
RETURN
END
C-----------------------------------------------------------------------
SUBROUTINE MD(IMD,KMDTP,MDFLAG,ICAR,ITERMD,ITERMX,ISTR,ISSS
& ,DTUC,EPP)
C-----------------------------------------------------------------------
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
INTEGER KMDTP(KATM)
C MOLECULAR DYNAMICS PART (SIMPLE VERLET ALGORITHM)
DIMENSION VEPSI(6),EPP(3,3),VAVB(6),EPSIR(6)
DIMENSION ALT(3,3)
C WRITE (6,*) 'IN MD ICAR,ISTR = ',ICAR,ISTR,ISSS
TKIN=0.0D0
FCMX=0.0D0
FDEL =-5.0D-12
DO 10 I=1,KATM
IF (KMDTP(I).EQ.1) THEN
FCX = DREAL(ZFORC2(I,1))
FCY = DREAL(ZFORC2(I,2))
FCZ = DREAL(ZFORC2(I,3))
FCA = SQRT(FCX**2+FCY**2+FCZ**2)
IF (FCA.GT.FCMX) FCMX=FCA
END IF
10 CONTINUE
C WRITE (6,*) 'IN MD MDFLAG = ',MDFLAG
IF(MDFLAG.EQ.0) THEN
DO 100 I=1,KATM
IF (KMDTP(I).EQ.1) THEN
FCX = DREAL(ZFORC2(I,1))
FCY = DREAL(ZFORC2(I,2))
FCZ = DREAL(ZFORC2(I,3))
C** FCA = SQRT(FCX**2+FCY**2+FCZ**2)
C** IF (FCA.GT.FCMX) FCMX=FCA
FVX=FCX*VEL(I,1)
IF (FVX.LT.0.0D0) VEL(I,1)=0.0D0
FVY=FCY*VEL(I,2)
IF (FVY.LT.0.0D0) VEL(I,2)=0.0D0
FVZ=FCZ*VEL(I,3)
IF (FVZ.LT.0.0D0) VEL(I,3)=0.0D0
C
VEL(I,1) = VEL(I,1) + DTIO*FCX/AMION(I)
VEL(I,2) = VEL(I,2) + DTIO*FCY/AMION(I)
VEL(I,3) = VEL(I,3) + DTIO*FCZ/AMION(I)
CATX(I) = CATX(I) + DTIO*VEL(I,1)
CATY(I) = CATY(I) + DTIO*VEL(I,2)
CATZ(I) = CATZ(I) + DTIO*VEL(I,3)
END IF
100 CONTINUE
C CONSIDER BOUNDARY CONDITION
C*****IF (MOD(ITER,100).EQ.0) THEN
DO 200 I=1,KATM
P = ALINV(1,1)*CATX(I)+ALINV(1,2)*CATY(I)+ALINV(1,3)*CATZ(I)
Q = ALINV(2,1)*CATX(I)+ALINV(2,2)*CATY(I)+ALINV(2,3)*CATZ(I)
R = ALINV(3,1)*CATX(I)+ALINV(3,2)*CATY(I)+ALINV(3,3)*CATZ(I)
C IF (P.GE.1.0D0) P = P-1.0D0
C IF (P.LT.0.0D0) P = P+1.0D0
C IF (Q.GE.1.0D0) Q = Q-1.0D0
C IF (Q.LT.0.0D0) Q = Q+1.0D0
C IF (R.GE.1.0D0) R = R-1.0D0
C IF (R.LT.0.0D0) R = R+1.0D0
C* RECALCULATE X,Y,Z
CATX(I)=P*ALTV(1,1)+Q*ALTV(1,2)+R*ALTV(1,3)
CATY(I)=P*ALTV(2,1)+Q*ALTV(2,2)+R*ALTV(2,3)
CATZ(I)=P*ALTV(3,1)+Q*ALTV(3,2)+R*ALTV(3,3)
PPOS(I)=P
QPOS(I)=Q
RPOS(I)=R
200 CONTINUE
C WRITE (6,*) 'NEXT IS EPP SET]'
C------------------------------------------------------------
C CHANGE A SHAPE OF AN UNIT CELL BY USING STRESSES -
C 1993 4/9 -
C------------------------------------------------------------
IF (ICAR.EQ.2 .AND. ISTR.EQ.1) THEN
WRITE (6,*) 'NOW MD SET EPP',ITER
DO 6005 I=1,6
VAVB(I)=0.0D0
6005 CONTINUE
DO 6010 IA=1,KATM
C WRITE (6,*) 'VEL(IA) = ',IA,VEL(IA,1),VEL(IA,2),VEL(IA,3)
VAVB(1)=VAVB(1)+VEL(IA,1)*VEL(IA,1)/UNIVOL
VAVB(2)=VAVB(2)+VEL(IA,1)*VEL(IA,2)/UNIVOL
VAVB(3)=VAVB(3)+VEL(IA,1)*VEL(IA,3)/UNIVOL
VAVB(4)=VAVB(4)+VEL(IA,2)*VEL(IA,2)/UNIVOL
VAVB(5)=VAVB(5)+VEL(IA,2)*VEL(IA,3)/UNIVOL
VAVB(6)=VAVB(6)+VEL(IA,3)*VEL(IA,3)/UNIVOL
6010 CONTINUE
IF (ISSS.EQ.0) THEN
DO 6000 I=1,6
C VEPSI(I)=-DTUC*(SIGSTR(I)+VAVB(I)-PEX(I))
EPSIR(I)=-DTUC*(SIGSTR(I)+VAVB(I)-PEX(I))
C EPSIR(I)= DTUC*VEPSI(I)
6000 CONTINUE
ISSS=1
END IF
DO 6100 I=1,6
C CHKVF=VEPSI(I)*(SIGSTR(I)+VAVB(I)-PEX(I))
CHKVF=EPSIR(I)*(SIGSTR(I)+VAVB(I)-PEX(I))
IF (CHKVF.GE.0.0D0) THEN
EPSIR(I)=0.0D0
C VEPSI(I)=0.0D0
END IF
C VEPSI(I)=VEPSI(I) -DTUC*(SIGSTR(I)+VAVB(I)-PEX(I))
EPSIR(I)= -DTUC*(SIGSTR(I)+VAVB(I)-PEX(I))
C EPSIR(I)=EPSIR(I) +DTUC*VEPSI(I)
6100 CONTINUE
EPP(1,1)=EPSIR(1) + 1.0D0
EPP(1,2)=EPSIR(2)
EPP(1,3)=EPSIR(3)
EPP(2,1)=EPSIR(2)
EPP(2,2)=EPSIR(4) + 1.0D0
EPP(2,3)=EPSIR(5)
EPP(3,1)=EPSIR(3)
EPP(3,2)=EPSIR(5)
EPP(3,3)=EPSIR(6) + 1.0D0
WRITE (6,*) 'EPP(1,1) = ',EPP(1,1),VAVB(1)
WRITE (6,*) 'EPP(1,2) = ',EPP(1,2),VAVB(2)
WRITE (6,*) 'EPP(1,3) = ',EPP(1,3),VAVB(3)
WRITE (6,*) 'EPP(2,1) = ',EPP(2,1),VAVB(2)
WRITE (6,*) 'EPP(2,2) = ',EPP(2,2),VAVB(4)
WRITE (6,*) 'EPP(2,3) = ',EPP(2,3),VAVB(5)
WRITE (6,*) 'EPP(3,1) = ',EPP(3,1),VAVB(3)
WRITE (6,*) 'EPP(3,2) = ',EPP(3,2),VAVB(5)
WRITE (6,*) 'EPP(3,3) = ',EPP(3,3),VAVB(6)
5000 CONTINUE
C CHANGE AXES OF A UNIT CELL
DO 6200 I=1,3
ALT(I,1)=EPP(I,1)*ALTV(1,1)+EPP(I,2)*ALTV(2,1)
& +EPP(I,3)*ALTV(3,1)
ALT(I,2)=EPP(I,1)*ALTV(1,2)+EPP(I,2)*ALTV(2,2)
& +EPP(I,3)*ALTV(3,2)
ALT(I,3)=EPP(I,1)*ALTV(1,3)+EPP(I,2)*ALTV(2,3)
& +EPP(I,3)*ALTV(3,3)
6200 CONTINUE
C
DO 6210 I=1,3
ALTV(I,1)=ALT(I,1)
ALTV(I,2)=ALT(I,2)
ALTV(I,3)=ALT(I,3)
6210 CONTINUE
C
DO 6500 IA=1,KATM
P=PPOS(IA)
Q=QPOS(IA)
R=RPOS(IA)
CATX(IA)=P*ALTV(1,1)+Q*ALTV(1,2)+R*ALTV(1,3)
CATY(IA)=P*ALTV(2,1)+Q*ALTV(2,2)+R*ALTV(2,3)
CATZ(IA)=P*ALTV(3,1)+Q*ALTV(3,2)+R*ALTV(3,3)
6500 CONTINUE
C
END IF
C
C IF(MOD(ITER,10).EQ.0) THEN
WRITE (18,*) 'ITER = ',ITER
WRITE (18,300)(I,CATX(I),CATY(I),CATZ(I),
& PPOS(I),QPOS(I),RPOS(I) ,I=1,KATM)
C END IF
IF((FCMX.LT.FDEL*0.5D0).OR.(ITER.GE.ITERMX)) THEN
MDFLAG = 1
ICAR = 0
ITERMD = ITER
WRITE(6,*) ' ITERMD= ',ITERMD
END IF
END IF
IF((FCMX.GT.FDEL).AND.(ITER.LE.ITERMX)) THEN
MDFLAG = 0
ICAR = 2
ITERMD = 5000
END IF
300 FORMAT(' ',I3,3F15.10,3F10.6)
302 FORMAT(' ',I3,3F20.10)
WRITE(21,305) ITER,FCMX,MDFLAG
305 FORMAT(' ',I5,F12.6,3X,I3,'ITER AND FCMX')
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE MSD(IREC8,IREC9,IMD,ICAR,ISTR)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
C VPP-PARALLEL
!XOCL SUBPROCESSOR PS(IPARA)=PQ(1:IPARA)
!XOCL INDEX PARTITION IP=(PS,INDEX=1:KNV3,PART=BAND)
DIMENSION SSS(KNG1,KNV3,KTYP,10),ZZZ(KNG1,KEG,KNV3)
& ,ZFC(KEG,KNV3,KATM,10)
DIMENSION EKK(KEG,KNV3),OCCUU(KEG,KNV3),RAA(KNG1,KNV3)
!XOCL LOCAL SSS(:,/IP,:,:),ZZZ(:,:,/IP),ZFC(:,/IP,:,:)
!XOCL LOCAL EKK(:,/IP),OCCUU(:,/IP),RAA(:,/IP)
EQUIVALENCE (SNL,SSS),(ZAJ,ZZZ),(ZFBB,ZFC)
& ,(EKO,EKK),(OCCUP,OCCUU),(RAK,RAA)
C EIGEN-VALUE PROBLEM
DIMENSION ZDEVC(KNG1,KEG)
& ,EMAS(KEG)
C-----ARRAYS FOR MFFT--------------------------------------------
DIMENSION ZEV3C(IFX2,IFY2,IFZ2),ZV3D(IFX2,IFY2,IFZ2)
DIMENSION IWL(8*IFX2+28),IWM(8*IFY2+28),IWN(8*IFZ2+28)
& ,IWORK(2*IFX2)
C================================================================
EQUIVALENCE (ZV1D(1),ZV3D(1,1,1)),(ZC1D(1),ZEV3C(1,1,1))
C==== ATTN KX1 OR KX11 ==========================================
C REWIND 90
KFT1 = IFX2
KFT2 = IFY2
KFT3 = IFZ2
KSUM=KFT1*KFT2*KFT3
KVOL=(KFT1-1)*KFT2*KFT3
IF (ITER.EQ.2) WRITE (6,*) 'DTIME = ',DTIM
C---------- MASS OF ELECTRON -----
DO 4 I=1,KG
ZCHGO(I) = ZCHG(I)
ZCHG(I) = DCMPLX(0.0D0,0.0D0)
4 CONTINUE
C FOR STRESS (CALL KBINT & FORZFB 1992 1/7)
IF(ISTR.EQ.1) THEN
WRITE (6,*) 'KBINT ITER>IMD IN MSD'
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL KBINT
C^^^^^ STRESS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
CALL FORZFB
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
END IF
C ////////////////////////////////////
C // CALCULATE THE VERLET ALGORITHM //
C ////////////////////////////////////
ZVP(1) = ZVXC(1) + ZPSCC(1)
DO 2001 I=2,KG
ZVP(I) = ZVXC(I) + ZPSCC(I) + PAI4*ZCHGO(I)*RGG(I)
2001 CONTINUE
C*****---- SET UP C3FFT (FAST FOURIER TRANSFORMATION) -----
CALL C3FFT(ZEV3C,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,0,1,IWORK,IERR)
IF (IERR.NE.0) THEN
WRITE (6,*) ' C3FFT(SET UP)] IERR = ',IERR
STOP
END IF
DO 234 I=1,KSUM
ZV1D(I)=DCMPLX(0.0D0,0.0D0)
234 CONTINUE
DO 233 I=1,KG
LF1=IGF1(I)
LF2=IGF2(I)
LF3=IGF3(I)
ZV3D(LF1,LF2,LF3) = ZVP(I)
233 CONTINUE
CALL TIME(ITIME1,' ',1)
C*****---- INVERSE FAST FOURIER TRANSFORMATION -----
CALL C3FFT(ZV3D ,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,1,1,IWORK,IERR2)
CALL TIME(ITIME1,'C3FFT ',2)
IF (IERR2.NE.0) THEN
WRITE (6,*) ' C3FFT(IFFT V)] IERR2 = ',IERR2
STOP
END IF
C WRITE(6,*) 'ZV1D = '
C DO 27 I=1,20
C WRITE(6,*) ZV1D(I)
C 27 CONTINUE
C-----K-POINT LOOP---------------------------------------------
C VPP-PARALLEL START 2
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 100 NNN=1,KV3
C IWRT(NNN) =NNN
AKX = VX(NNN)
AKY = VY(NNN)
AKZ = VZ(NNN)
IIBA = IBA(NNN)
DO 3 IBAN=NBD1,NBD2
EMAS(IBAN)=0.0D0
3 CONTINUE
DO 2002 J=1,IIBA
X(J) = 0.0D0
VKIN =
& ( (AKX+GX(NBASE(J,NNN)))**2
& + (AKY+GY(NBASE(J,NNN)))**2
& + (AKZ+GZ(NBASE(J,NNN)))**2 )/2.D0
Y3(J) = VKIN + DREAL(ZVP(1))
2002 CONTINUE
DO 7000 ITY=1,KTYP
CS=1.0D0/(WS(ITY)*UNIVOL)
CP=1.0D0/(WP(ITY)*UNIVOL)
CWL(1)=CS
CWL(2)=CP
CWL(3)=CP
CWL(4)=CP
IF (NLSPD(ITY).EQ.1) THEN
LNUM = 4
ELSE
LNUM = 9
CD=1.0D0/(WD(ITY)*UNIVOL)
CWL(5)=CD
CWL(6)=CD
CWL(7)=CD
CWL(8)=CD
CWL(9)=CD
END IF
C
DO 7111 L=1,LNUM
DO 7010 I=1,IIBA
TMPP = CWL(L)*SSS(I,NNN,ITY,L)**2
Y3(I) = Y3(I) + TMPP*DFLOAT(IATOM(ITY))
X(I) = X(I) + TMPP*DFLOAT(IATOM(ITY))
7010 CONTINUE
7111 CONTINUE
7000 CONTINUE
C-----BAND LOOP----------------------------------------------
DO 200 IBAN=NBD1,NBD2
C*********IREC = KV3*(IBAN-1)+IWRT(NNN)
C IF (IREC8.NE.0) IREC=IREC8*IREC-IREC8+1
C READ(80,REC=IREC) ZV1
C IREC = KV3*(IBAN-1)+IWRT(NNN)
C IF (IREC.LE.1000) THEN
C IF (IREC.LE.IRECMX) THEN
C IF (IREC9.NE.0) IREC=IREC9*IREC-IREC9+1
C READ(90,REC=IREC) ZRC
C ELSE
C READ(90,REC=IREC) ZRC
C---------------------------------------90.1.22 Y.M.----
DO 3231 I=1,KSUM
ZC1D(I)=CMPLX(0.0D0,0.0D0)
3231 CONTINUE
DO 3232 I=1,IIBA
I1=NBASE(I,NNN)
L1=IGF1(I1)
L2=IGF2(I1)
L3=IGF3(I1)
ZEV3C(L1,L2,L3) = ZZZ(I,IBAN,NNN)
C*******ZEV3C(L1,L2,L3) = ZV1(I)
3232 CONTINUE
C*****---- INVERSE FAST FOURIER TRANSFORMATION -----
CALL C3FFT(ZEV3C,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,1,1,IWORK,IERR1)
IF (IERR1.NE.0) THEN
WRITE (6,*) ' C3FFT(IFFT C)] IERR1 = ',IERR1
STOP
END IF
CXX DO 3240 I=1,KSUM
CXX ZRC(I)=ZC1D(I)
C3240 CONTINUE
C END IF
C ----- CALCULATE THE MATRIX ELEMENTS -----
DO 71 I=1,KNG1
C ZPNL(I) = - ZZZ(I,IBAN,NNN)*X(I)
Y1(I) = - DREAL(ZZZ(I,IBAN,NNN)*X(I))
Y2(I) = - DIMAG(ZZZ(I,IBAN,NNN)*X(I))
71 CONTINUE
DO 401 IA=1,KATM
C
IF (NLSPD(KFTYPE(IA)).EQ.1) THEN
LNUM = 4
ELSE
LNUM = 9
END IF
C
DO 411 L =1,LNUM
DO 400 I =1,IIBA
ZTMP = SSS(I,NNN,KFTYPE(IA),L)
& * ZFC(IBAN,NNN,IA,L)
C ZPNL(I) = ZPNL(I) + ZTMP*ZFM2(NBASE(I,NNN),IA)
Y1(I) = Y1(I) + DREAL(ZTMP*ZFM2(NBASE(I,NNN),IA))
Y2(I) = Y2(I) + DIMAG(ZTMP*ZFM2(NBASE(I,NNN),IA))
400 CONTINUE
411 CONTINUE
401 CONTINUE
DO 240 I=1,KSUM
C ZC1D(I)=ZV1D(I)*ZRC(I)
ZC1D(I)=ZV1D(I)*ZC1D(I)
240 CONTINUE
C*****---- FAST FOURIER TRANSFORMATION -----
CALL C3FFT(ZEV3C,KFT1,KFT1-1,KFT2,KFT3,IWL,IWM,IWN
& ,0,-1,1,IWORK,IERR)
IF (IERR.NE.0) THEN
WRITE (6,*) ' C3FFT(FFT)] IERR = ',IERR
STOP
END IF
DENOM=1.0D0/DBLE(KVOL)
DO 30 I=1,IIBA
I1=NBASE(I,NNN)
L1=IGF1(I1)
L2=IGF2(I1)
L3=IGF3(I1)
ZPGG=ZEV3C(L1,L2,L3)*DENOM
WDI =(Y3(I)-EKK(IBAN,NNN))
C ZROF =(ZPGG+ZPNL(I)-ZVP(1)*ZZZ(I,IBAN,NNN))
ZROF =(ZPGG+Y1(I)+ZI*Y2(I)-ZVP(1)*ZZZ(I,IBAN,NNN))
ZDEVC(I,IBAN)=-(WDI*ZZZ(I,IBAN,NNN)+ZROF)
EMAS(IBAN)=EMAS(IBAN)+DCONJG(ZZZ(I,IBAN,NNN))*ZDEVC(I,IBAN)
ESHI=DEXP(-WDI*DTIM)
ZZZ(I,IBAN,NNN)=ZZZ(I,IBAN,NNN)*ESHI+(ESHI-1.0D0)*ZROF/WDI
30 CONTINUE
C-------------------------------------------------------------------
200 CONTINUE
C >>>>> AFTER C(T+DT)=C(T)+DC(T) <<<<<
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
C GRAM-SCHMIDT ORTHOGONALIZATION
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
C IF (NNN.EQ.1) CALL TIME(ITIME1,' ',1)
C CALL GRAMMD(NNN,IIBA)
C IF (NNN.EQ.1) CALL TIME(ITIME1,'GRAM ',2)
DO 1000 IBAN=NBD1,NBD2-1
ZNRM=DCMPLX(0.0D0,0.0D0)
DO 1010 I=1,IIBA
ZNRM=ZNRM+DCONJG(ZZZ(I,IBAN,NNN))*ZZZ(I,IBAN,NNN)
1010 CONTINUE
DENOM=1.0D0/DSQRT(DREAL(ZNRM))
DO 1020 I=1,IIBA
ZZZ(I,IBAN,NNN)=ZZZ(I,IBAN,NNN)*DENOM
1020 CONTINUE
DO 1030 JBAN=IBAN+1,NBD2
ZNRM=DCMPLX(0.0D0,0.0D0)
DO 1040 I=1,IIBA
ZNRM=ZNRM+DCONJG(ZZZ(I,IBAN,NNN))*ZZZ(I,JBAN,NNN)
1040 CONTINUE
DO 1050 I=1,IIBA
ZZZ(I,JBAN,NNN)=ZZZ(I,JBAN,NNN)-ZNRM*ZZZ(I,IBAN,NNN)
1050 CONTINUE
1030 CONTINUE
1000 CONTINUE
ZNRM=DCMPLX(0.0D0,0.0D0)
DO 1100 I=1,IIBA
ZNRM=ZNRM+DCONJG(ZZZ(I,NBD2,NNN))*ZZZ(I,NBD2,NNN)
1100 CONTINUE
DENOM=1.0D0/DSQRT(DREAL(ZNRM))
DO 1110 I=1,IIBA
ZZZ(I,NBD2,NNN)=ZZZ(I,NBD2,NNN)*DENOM
1110 CONTINUE
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
C CHECK
C**************************************************************
C IF (ITER.GT.40) THEN
C DO 700 IBAN=NBD1,NBD2
C DO 720 JBAN=NBD1,IBAN
C ZNORM=DCMPLX(0.0D0,0.0D0)
C DO 7001 I=1,IIBA
C ZNORM=ZNORM+DCONJG(ZAJ(I,IBAN,NNN))*ZAJ(I,JBAN,NNN)
C7001 CONTINUE
C RNOR=DSQRT(CDABS(ZNORM))
C IF (IBAN.EQ.JBAN) THEN
C IF(DABS(1.0D0-RNOR).GT.1.0D-7) THEN
C WRITE(6,*) 'NRM.NE.1.0 I= ',IBAN,'NRM=',RNOR
C END IF
C ELSE
C IF(RNOR.GT.1.0D-7) THEN
C WRITE(6,*) 'NRM.NE.0.0 I J= ',IBAN,JBAN
C & ,'NRM= ',RNOR
C END IF
C IFLAG=1
C END IF
C 720 CONTINUE
C 700 CONTINUE
C END IF
C******************************************************************
DO 261 IBAN=NBD1,NBD2
DO 260 I=1,IIBA
EKK(IBAN,NNN)=EKK(IBAN,NNN)
& -2.0D0*DCONJG(ZZZ(I,IBAN,NNN))*ZDEVC(I,IBAN)
260 CONTINUE
EKK(IBAN,NNN)=EKK(IBAN,NNN)+EMAS(IBAN)
C EG(IBAN)=EKK(IBAN,NNN)
261 CONTINUE
DO 262 IBAN=NBD1,NBD2-1
DO 262 JBAN=IBAN+1,NBD2
IF(EKK(JBAN,NNN).LT.EKK(IBAN,NNN)) THEN
EE =EKK(IBAN,NNN)
EKK(IBAN,NNN)=EKK(JBAN,NNN)
EKK(JBAN,NNN)=EE
DO 270 IV=1,IIBA
ZTV = ZZZ(IV,IBAN,NNN)
ZZZ(IV,IBAN,NNN) = ZZZ(IV,JBAN,NNN)
ZZZ(IV,JBAN,NNN) = ZTV
270 CONTINUE
END IF
262 CONTINUE
C DO 263 IBAN=NBD1,NBD2
C EKK(IBAN,NNN)=EG(IBAN)
C WRITE(6,*) 'NNN = ',NNN,'IBAN = ',IBAN
C WRITE(6,*) EKO(IBAN,NNN)
C 263 CONTINUE
C OUTPUT EIGENVECTORS ON FILE 80 (DIRECT-ACCESS) (KG1 <---> IIBA)
DO 231 IBAN = NBD1,NBD2
C**************IREC = KV3*(IBAN-1)+IWRT(NNN)
C IF (IREC8.NE.0) IREC=IREC8*IREC-IREC8+1
C**************WRITE(80,REC=IREC) ZV1
231 CONTINUE
100 CONTINUE
!XOCL END SPREAD
C!XOCL END PARALLEL
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE STRESS(IPCC,SCHGPC,ETOT1,TOTCH,EPC,PCM
& ,KOPR,NBZTYP)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
C VPP-PARALLEL
!XOCL SUBPROCESSOR PS(IPARA)=PQ(1:IPARA)
!XOCL INDEX PARTITION IP=(PS,INDEX=1:KNV3,PART=BAND)
DIMENSION ZZZ(KNG1,KEG,KNV3),OCCUU(KEG,KNV3)
!XOCL LOCAL ZZZ(:,:,/IP),OCCUU(:,/IP)
EQUIVALENCE (ZAJ,ZZZ),(OCCUP,OCCUU)
DIMENSION OO(3,3,KO)
!XOCL INDEX PARTITION IQ=(PS,INDEX=1:KO,PART=BAND)
!XOCL LOCAL OO(:,:,/IQ)
EQUIVALENCE (OP,OO)
C
DIMENSION SSS(3,3),TTT(3,3)
C STRESS CALCULATION FOR KINETIC, HARTREE, EX-COR, LOCAL AND ETOT1
CCC =2.D0*RVOL/(2.D0*PAI)**3/FLOAT(KV3)
DO 1000 IS=1,6
SIGSTR(IS)=0.0D0
1000 CONTINUE
RGG(1)=0.0D0
ZXXX(1)=DCMPLX(0.0D0,0.0D0)
ZYYY(1)=DCMPLX(0.0D0,0.0D0)
ZZZZ(1)=DCMPLX(0.0D0,0.0D0)
DO 1001 I=2,KG
ZXXX(I)=DCMPLX(0.0D0,0.0D0)
ZYYY(I)=DCMPLX(0.0D0,0.0D0)
ZZZZ(I)=DCMPLX(0.0D0,0.0D0)
RGG(I)=1.0D0/(GR(I)*GR(I))
1001 CONTINUE
C KINETIC PART
C VPP-PARALLEL START
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 1100 IK=1,KV3
C IWRT(IK) =IK
AKX = VX(IK)
AKY = VY(IK)
AKZ = VZ(IK)
DO 1110 IBAN=NBD1,NBD2
CW=CCC*OCCUU(IBAN,IK)
DO 1120 I=1,IBA(IK)
I1 = NBASE(I,IK)
STMP=CW*DCONJG(ZZZ(I,IBAN,IK))*ZZZ(I,IBAN,IK)
SIGSTR(1)=SIGSTR(1)-STMP*(AKX+GX(I1))*(AKX+GX(I1))
SIGSTR(2)=SIGSTR(2)-STMP*(AKX+GX(I1))*(AKY+GY(I1))
SIGSTR(3)=SIGSTR(3)-STMP*(AKX+GX(I1))*(AKZ+GZ(I1))
SIGSTR(4)=SIGSTR(4)-STMP*(AKY+GY(I1))*(AKY+GY(I1))
SIGSTR(5)=SIGSTR(5)-STMP*(AKY+GY(I1))*(AKZ+GZ(I1))
SIGSTR(6)=SIGSTR(6)-STMP*(AKZ+GZ(I1))*(AKZ+GZ(I1))
1120 CONTINUE
1110 CONTINUE
1100 CONTINUE
!XOCL END SPREAD SUM(SIGSTR)
C!XOCL END PARALLEL
SSS1=SIGSTR(1)
SSS2=SIGSTR(2)
SSS3=SIGSTR(3)
SSS4=SIGSTR(4)
SSS5=SIGSTR(5)
SSS6=SIGSTR(6)
WRITE (6,*) 'TOTAL STR 1 1 = ',SIGSTR(1)
WRITE (6,*) ' 2 = ',SIGSTR(2)
WRITE (6,*) ' 3 = ',SIGSTR(3)
WRITE (6,*) ' 4 = ',SIGSTR(4)
WRITE (6,*) ' 5 = ',SIGSTR(5)
WRITE (6,*) ' 6 = ',SIGSTR(6)
C HARTREE PART I=1 -----> GR(1)=0.0D0 : RGG(1)=INFINITE
C EXCHANGE-CORRELATION + LOCAL PS PARTS
DO 1250 I=1,KG
ZVP(I)=ZVXC(I)
1250 CONTINUE
CALL XCFFT(1,SCHGPC)
CALL XCFFT(2,SCHGPC)
IF (IPCC.EQ.1) CALL XSTPC(1,SCHGPC)
STMQ=DCONJG(ZEXC(1))*(ZCHG(1)+ZRHPC(1))-DCONJG(ZVXC(1))*ZCHG(1)
& -DCONJG(ZVXC(1))*ZRHPC(1)
SS1=-DCONJG(ZEXC(1))*ZRRPC(1)
SSX=-DCONJG(ZXXX(1))*(ZCHG(1)+ZRHPC(1))
SSY=-DCONJG(ZYYY(1))*(ZCHG(1)+ZRHPC(1))
SSZ=-DCONJG(ZZZZ(1))*(ZCHG(1)+ZRHPC(1))
SIGSTR(1)=SIGSTR(1)+STMQ+SS1*GX(1)*GX(1)+SSX
SIGSTR(4)=SIGSTR(4)+STMQ+SS1*GY(1)*GY(1)+SSY
SIGSTR(6)=SIGSTR(6)+STMQ+SS1*GZ(1)*GZ(I)+SSZ
TTT1=SIGSTR(1)-SSS1
TTT2=SIGSTR(2)-SSS2
TTT3=SIGSTR(3)-SSS3
TTT4=SIGSTR(4)-SSS4
TTT5=SIGSTR(5)-SSS5
TTT6=SIGSTR(6)-SSS6
SSS1=SIGSTR(1)
SSS2=SIGSTR(2)
SSS3=SIGSTR(3)
SSS4=SIGSTR(4)
SSS5=SIGSTR(5)
SSS6=SIGSTR(6)
WRITE (6,*) 'TOTAL STR 2 1 = ',TTT1
WRITE (6,*) ' 2 = ',TTT2
WRITE (6,*) ' 3 = ',TTT3
WRITE (6,*) ' 4 = ',TTT4
WRITE (6,*) ' 5 = ',TTT5
WRITE (6,*) ' 6 = ',TTT6
STX=0.0D0
STY=0.0D0
STZ=0.0D0
STT=0.0D0
STU=0.0D0
STV=0.0D0
STW=0.0D0
DO 1200 I=2,KG
STMP=0.5D0*PAI4*DCONJG(ZCHG(I))*ZCHG(I)*RGG(I)
STMQ=DCONJG(ZEXC(I))*(ZCHG(I)+ZRHPC(I))-DCONJG(ZVXC(I))*ZCHG(I)
& -DCONJG(ZVXC(I))*ZRHPC(I)
STM1= DCONJG(ZEXC(I))*ZRRPC(I)
STMX= DCONJG(ZXXX(I))*(ZCHG(I)+ZRHPC(I))
STMY= DCONJG(ZYYY(I))*(ZCHG(I)+ZRHPC(I))
STMZ= DCONJG(ZZZZ(I))*(ZCHG(I)+ZRHPC(I))
C STX=STX+DREAL(DCONJG(ZVXC(I))*ZRRPC(I))*GX(I)*GX(I)
C STY=STY+DREAL(DCONJG(ZEXC(I))*ZRRPC(I))*GX(I)*GX(I)
C STZ=STZ+STMX
C STT=STT+STMY
STX=STX+STMP*(2.0D0*GX(I)*GX(I)*RGG(I)-1.0D0)+STMQ
& -STMS*2.0D0*GX(I)*GX(I)-STMR-STM1*GX(I)*GX(I)-STMX
STY=STY+STMP*(2.0D0*GX(I)*GX(I)*RGG(I)-1.0D0)
STZ=STZ+STMQ
STT=STT-STMS*2.0D0*GX(I)*GX(I)
STU=STU-STMR
STV=STV-STM1*GX(I)*GX(I)
STW=STW-STMX
STMR=ZPSCC(I)*DCONJG(ZCHG(I))
STMS=ZDSCC(I)*DCONJG(ZCHG(I))
SIGSTR(1)=SIGSTR(1)+STMP*(2.0D0*GX(I)*GX(I)*RGG(I)-1.0D0)+STMQ
& -STMS*2.0D0*GX(I)*GX(I)-STMR-STM1*GX(I)*GX(I)-STMX
SIGSTR(2)=SIGSTR(2)+STMP*(2.0D0*GX(I)*GY(I)*RGG(I))
& -STMS*2.0D0*GX(I)*GY(I)
SIGSTR(3)=SIGSTR(3)+STMP*(2.0D0*GX(I)*GZ(I)*RGG(I))
& -STMS*2.0D0*GX(I)*GZ(I)
SIGSTR(4)=SIGSTR(4)+STMP*(2.0D0*GY(I)*GY(I)*RGG(I)-1.0D0)+STMQ
& -STMS*2.0D0*GY(I)*GY(I)-STMR-STM1*GY(I)*GY(I)-STMY
SIGSTR(5)=SIGSTR(5)+STMP*(2.0D0*GY(I)*GZ(I)*RGG(I))
& -STMS*2.0D0*GY(I)*GZ(I)
SIGSTR(6)=SIGSTR(6)+STMP*(2.0D0*GZ(I)*GZ(I)*RGG(I)-1.0D0)+STMQ
& -STMS*2.0D0*GZ(I)*GZ(I)-STMR-STM1*GZ(I)*GZ(I)-STMZ
1200 CONTINUE
WRITE (6,*) 'ZVX,ZEX = ',STX,STY
WRITE (6,*) 'STM1(XY)= ',STZ,STT
WRITE (6,*) 'STU,V,W = ',STU,STV,STW
STOT=STY+STZ+STT+STU+STV+STW
WRITE (6,*) 'STOT = ',STOT
TTT1=SIGSTR(1)-SSS1
TTT2=SIGSTR(2)-SSS2
TTT3=SIGSTR(3)-SSS3
TTT4=SIGSTR(4)-SSS4
TTT5=SIGSTR(5)-SSS5
TTT6=SIGSTR(6)-SSS6
SSS1=SIGSTR(1)
SSS2=SIGSTR(2)
SSS3=SIGSTR(3)
SSS4=SIGSTR(4)
SSS5=SIGSTR(5)
SSS6=SIGSTR(6)
WRITE (6,*) 'TOTAL STR 3 1 = ',TTT1
WRITE (6,*) ' 2 = ',TTT2
WRITE (6,*) ' 3 = ',TTT3
WRITE (6,*) ' 4 = ',TTT4
WRITE (6,*) ' 5 = ',TTT5
WRITE (6,*) ' 6 = ',TTT6
DO 1251 I=1,KNG
ZVXC(I)=ZVP(I)
1251 CONTINUE
C CALL NON-LOCAL PART SUBROUTINE
CALL STRNL(ETOT1)
C NON-LOCAL PS AND EWALD PARTS
DO 1400 IS=1,6
SIGSTR(IS)=SIGSTR(IS)+SIGNL(IS)+SIGEWA(IS)
1400 CONTINUE
WRITE (6,*) 'SIGEWA 1 = ',SIGEWA(1)
WRITE (6,*) 'SIGEWA 2 = ',SIGEWA(2)
WRITE (6,*) 'SIGEWA 3 = ',SIGEWA(3)
WRITE (6,*) 'SIGEWA 4 = ',SIGEWA(4)
WRITE (6,*) 'SIGEWA 5 = ',SIGEWA(5)
WRITE (6,*) 'SIGEWA 6 = ',SIGEWA(6)
WRITE (6,*) 'SIGNL 1 = ',SIGNL(1)
WRITE (6,*) 'SIGNL 2 = ',SIGNL(2)
WRITE (6,*) 'SIGNL 3 = ',SIGNL(3)
WRITE (6,*) 'SIGNL 4 = ',SIGNL(4)
WRITE (6,*) 'SIGNL 5 = ',SIGNL(5)
WRITE (6,*) 'SIGNL 6 = ',SIGNL(6)
TTT1=SIGSTR(1)-SSS1
TTT2=SIGSTR(2)-SSS2
TTT3=SIGSTR(3)-SSS3
TTT4=SIGSTR(4)-SSS4
TTT5=SIGSTR(5)-SSS5
TTT6=SIGSTR(6)-SSS6
SSS1=SIGSTR(1)
SSS2=SIGSTR(2)
SSS3=SIGSTR(3)
SSS4=SIGSTR(4)
SSS5=SIGSTR(5)
SSS6=SIGSTR(6)
WRITE (6,*) 'TOTAL STR 4 1 = ',TTT1
WRITE (6,*) ' 2 = ',TTT2
WRITE (6,*) ' 3 = ',TTT3
WRITE (6,*) ' 4 = ',TTT4
WRITE (6,*) ' 5 = ',TTT5
WRITE (6,*) ' 6 = ',TTT6
SIGSTR(1)=SIGSTR(1)-ETOT1*TOTCH/UNIVOL
SIGSTR(4)=SIGSTR(4)-ETOT1*TOTCH/UNIVOL
SIGSTR(6)=SIGSTR(6)-ETOT1*TOTCH/UNIVOL
TTT1=SIGSTR(1)-SSS1
TTT2=SIGSTR(2)-SSS2
TTT3=SIGSTR(3)-SSS3
TTT4=SIGSTR(4)-SSS4
TTT5=SIGSTR(5)-SSS5
TTT6=SIGSTR(6)-SSS6
SSS1=SIGSTR(1)
SSS2=SIGSTR(2)
SSS3=SIGSTR(3)
SSS4=SIGSTR(4)
SSS5=SIGSTR(5)
SSS6=SIGSTR(6)
WRITE (6,*) 'TOTAL STR 5 1 = ',TTT1
WRITE (6,*) ' 2 = ',TTT2
WRITE (6,*) ' 3 = ',TTT3
WRITE (6,*) ' 4 = ',TTT4
WRITE (6,*) ' 5 = ',TTT5
WRITE (6,*) ' 6 = ',TTT6
WRITE (6,*) 'TOTAL SUMM 1 = ',SSS1
WRITE (6,*) ' 2 = ',SSS2
WRITE (6,*) ' 3 = ',SSS3
WRITE (6,*) ' 4 = ',SSS4
WRITE (6,*) ' 5 = ',SSS5
WRITE (6,*) ' 6 = ',SSS6
IF (NBZTYP.LE.1) GO TO 9000
DENOM = 1.0D0/FLOAT(KOPR)
SSS(1,1)=SIGSTR(1)
SSS(2,2)=SIGSTR(4)
SSS(3,3)=SIGSTR(6)
SSS(1,2)=SIGSTR(2)
SSS(1,3)=SIGSTR(3)
SSS(2,3)=SIGSTR(5)
SSS(2,1)=SSS(1,2)
SSS(3,1)=SSS(1,3)
SSS(3,2)=SSS(2,3)
DO 1210 I=1,3
DO 1220 J=1,3
TTT(I,J)=0.0D0
1220 CONTINUE
1210 CONTINUE
!XOCL SPREAD DO /IQ
DO 2400 IOP = 1,KOPR
DO 2200 I=1,3
DO 2300 J=1,3
SXX=SSS(1,1)
SXY=SSS(1,2)
SXZ=SSS(1,3)
SYY=SSS(2,2)
SYZ=SSS(2,3)
SZZ=SSS(3,3)
TXX=OO(1,I,IOP)*SSS(I,J)*OO(1,J,IOP)
TXY=OO(1,I,IOP)*SSS(I,J)*OO(2,J,IOP)
TXZ=OO(1,I,IOP)*SSS(I,J)*OO(3,J,IOP)
TYY=OO(2,I,IOP)*SSS(I,J)*OO(2,J,IOP)
TYZ=OO(2,I,IOP)*SSS(I,J)*OO(3,J,IOP)
TZZ=OO(3,I,IOP)*SSS(I,J)*OO(3,J,IOP)
TTT(1,1)=TTT(1,1) + OO(1,I,IOP)*SSS(I,J)*OO(1,J,IOP)
TTT(1,2)=TTT(1,2) + OO(1,I,IOP)*SSS(I,J)*OO(2,J,IOP)
TTT(1,3)=TTT(1,3) + OO(1,I,IOP)*SSS(I,J)*OO(3,J,IOP)
TTT(2,2)=TTT(2,2) + OO(2,I,IOP)*SSS(I,J)*OO(2,J,IOP)
TTT(2,3)=TTT(2,3) + OO(2,I,IOP)*SSS(I,J)*OO(3,J,IOP)
TTT(3,3)=TTT(3,3) + OO(3,I,IOP)*SSS(I,J)*OO(3,J,IOP)
2300 CONTINUE
2200 CONTINUE
2400 CONTINUE
!XOCL END SPREAD SUM(TTT)
SIGSTR(1)=TTT(1,1)*DENOM
SIGSTR(2)=TTT(1,2)*DENOM
SIGSTR(3)=TTT(1,3)*DENOM
SIGSTR(4)=TTT(2,2)*DENOM
SIGSTR(5)=TTT(2,3)*DENOM
SIGSTR(6)=TTT(3,3)*DENOM
SSS1=SIGSTR(1)
SSS2=SIGSTR(2)
SSS3=SIGSTR(3)
SSS4=SIGSTR(4)
SSS5=SIGSTR(5)
SSS6=SIGSTR(6)
WRITE (6,*) 'TOTAL SUMM OP1 = ',SSS1
WRITE (6,*) ' 2 = ',SSS2
WRITE (6,*) ' 3 = ',SSS3
WRITE (6,*) ' 4 = ',SSS4
WRITE (6,*) ' 5 = ',SSS5
WRITE (6,*) ' 6 = ',SSS6
9000 CONTINUE
RETURN
END
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SUBROUTINE STRNL(ETOT1)
C^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IMPLICIT REAL(A-H,O-Y)
IMPLICIT COMPLEX(Z)
INCLUDE 'PACVPP'
C VPP-PARALLEL
!XOCL SUBPROCESSOR PS(IPARA)=PQ(1:IPARA)
!XOCL INDEX PARTITION IP=(PS,INDEX=1:KNV3,PART=BAND)
DIMENSION SSS(KNG1,KNV3,KTYP,10),SS2(KNG1,KNV3,KTYP,9)
& ,SS3(KNG1,KNV3,KTYP,4),ZZZ(KNG1,KEG,KNV3)
& ,ZFC(KEG,KNV3,KATM,10),ZFC2(KEG,KNV3,KATM,6)
& ,OCCUU(KEG,KNV3),RAA(KNG1,KNV3)
!XOCL LOCAL SSS(:,/IP,:,:),SS2(:,/IP,:,:),SS3(:,/IP,:)
!XOCL LOCAL ZZZ(:,:,/IP),ZFC(:,/IP,:,:),ZFC2(:,/IP,:,:)
!XOCL LOCAL OCCUU(:,/IP),RAA(:,/IP)
EQUIVALENCE (SNL,SSS),(SNL2,SS2),(SNL3,SS3),(ZAJ,ZZZ)
& ,(ZFBB,ZFC),(ZFBB2,ZFC2),(OCCUP,OCCUU)
& ,(RAK,RAA)
C STRESS CALCULATION FOR NON-LOCAL PSEUDOPOTENTIAL PART
KSTR=KEG*KNV3*KATM*6
CCC =2.D0*RVOL/(2.D0*PAI)**3/FLOAT(KV3)
RUNI=2.0D0*CCC
DO 1003 IS=1,6
SIGNL(IS)=0.0D0
1003 CONTINUE
C VPP-PARALLEL START 1
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 1901 IK=1,KV3
DO 1002 IBAN=NBD1,NBD2
DO 1902 IA=1,KATM
ZFC2(IBAN,IK,IA,1)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,2)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,3)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,4)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,5)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,6)=DCMPLX(0.0D0,0.0D0)
1902 CONTINUE
1002 CONTINUE
1901 CONTINUE
!XOCL END SPREAD
C!XOCL END PARALLEL
C
C VPP-PARALLEL 2
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 1010 IK=1,KV3
DO 1000 IA=1,KATM
RWS =WS(KFTYPE(IA))*UNIVOL
RWP =WP(KFTYPE(IA))*UNIVOL
CWL(1)= RWS
CWL(2)= RWP
CWL(3)= RWP
CWL(4)= RWP
IF (NLSPD(KFTYPE(IA)).EQ.1) THEN
LNUM = 4
ELSE
LNUM = 9
RWD =WD(KFTYPE(IA))*UNIVOL
CWL(5)= RWD
CWL(6)= RWD
CWL(7)= RWD
CWL(8)= RWD
CWL(9)= RWD
END IF
C
DO 1022 L=1,LNUM
DO 1020 IBAN=NBD1,NBD2
CW=0.5D0*RUNI*OCCUU(IBAN,IK)
STMP=CW*CWL(L)*DREAL(DCONJG(ZFC(IBAN,IK,IA,L))
& *ZFC(IBAN,IK,IA,L))
SIGNL(1)=SIGNL(1)-STMP
SIGNL(4)=SIGNL(4)-STMP
SIGNL(6)=SIGNL(6)-STMP
1020 CONTINUE
1022 CONTINUE
1000 CONTINUE
1010 CONTINUE
!XOCL END SPREAD SUM(SIGNL)
C!XOCL END PARALLEL
SSS1=SIGNL(1)
SSS2=SIGNL(2)
SSS3=SIGNL(3)
SSS4=SIGNL(4)
SSS5=SIGNL(5)
SSS6=SIGNL(6)
WRITE (6,*) 'SIGNL 1 1 = ',SSS1
WRITE (6,*) ' 2 = ',SSS2
WRITE (6,*) ' 3 = ',SSS3
WRITE (6,*) ' 4 = ',SSS4
WRITE (6,*) ' 5 = ',SSS5
WRITE (6,*) ' 6 = ',SSS6
C
SK1=0.0D0
SK2=0.0D0
SK3=0.0D0
SK4=0.0D0
SK5=0.0D0
SK6=0.0D0
C VPP-PARALLEL START 3
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 1110 IK=1,KV3
AKX = VX(IK)
AKY = VY(IK)
AKZ = VZ(IK)
DO 1100 IA=1,KATM
DO 1120 IBAN=NBD1,NBD2
CW=RUNI*OCCUU(IBAN,IK)
DO 1130 I=1,IBA(IK)
I1 = NBASE(I,IK)
ZTMP=ZZZ(I,IBAN,IK)*DCONJG(ZFM2(I1,IA))
& *SS2(I,IK,KFTYPE(IA),1)*RAA(I,IK)
ZFC2(IBAN,IK,IA,1)=ZFC2(IBAN,IK,IA,1)
& -ZTMP*(AKX+GX(I1))*(AKX+GX(I1))
ZFC2(IBAN,IK,IA,2)=ZFC2(IBAN,IK,IA,2)
& -ZTMP*(AKX+GX(I1))*(AKY+GY(I1))
ZFC2(IBAN,IK,IA,3)=ZFC2(IBAN,IK,IA,3)
& -ZTMP*(AKX+GX(I1))*(AKZ+GZ(I1))
ZFC2(IBAN,IK,IA,4)=ZFC2(IBAN,IK,IA,4)
& -ZTMP*(AKY+GY(I1))*(AKY+GY(I1))
ZFC2(IBAN,IK,IA,5)=ZFC2(IBAN,IK,IA,5)
& -ZTMP*(AKY+GY(I1))*(AKZ+GZ(I1))
ZFC2(IBAN,IK,IA,6)=ZFC2(IBAN,IK,IA,6)
& -ZTMP*(AKZ+GZ(I1))*(AKZ+GZ(I1))
1130 CONTINUE
SIGNL(1)=SIGNL(1)+CW *DREAL(
& ZFC2(IBAN,IK,IA,1)*DCONJG(ZFC(IBAN,IK,IA,1)) )
SIGNL(2)=SIGNL(2)+CW *DREAL(
& ZFC2(IBAN,IK,IA,2)*DCONJG(ZFC(IBAN,IK,IA,1)) )
SIGNL(3)=SIGNL(3)+CW *DREAL(
& ZFC2(IBAN,IK,IA,3)*DCONJG(ZFC(IBAN,IK,IA,1)) )
SIGNL(4)=SIGNL(4)+CW *DREAL(
& ZFC2(IBAN,IK,IA,4)*DCONJG(ZFC(IBAN,IK,IA,1)) )
SIGNL(5)=SIGNL(5)+CW *DREAL(
& ZFC2(IBAN,IK,IA,5)*DCONJG(ZFC(IBAN,IK,IA,1)) )
SIGNL(6)=SIGNL(6)+CW *DREAL(
& ZFC2(IBAN,IK,IA,6)*DCONJG(ZFC(IBAN,IK,IA,1)) )
1120 CONTINUE
1100 CONTINUE
1110 CONTINUE
!XOCL END SPREAD SUM(SIGNL)
C!XOCL END PARALLEL
TTT1=SIGNL(1)-SSS1
TTT2=SIGNL(2)-SSS2
TTT3=SIGNL(3)-SSS3
TTT4=SIGNL(4)-SSS4
TTT5=SIGNL(5)-SSS5
TTT6=SIGNL(6)-SSS6
SSS1=SIGNL(1)
SSS2=SIGNL(2)
SSS3=SIGNL(3)
SSS4=SIGNL(4)
SSS5=SIGNL(5)
SSS6=SIGNL(6)
WRITE (6,*) 'SIGNL 2 1 = ',TTT1
WRITE (6,*) ' 2 = ',TTT2
WRITE (6,*) ' 3 = ',TTT3
WRITE (6,*) ' 4 = ',TTT4
WRITE (6,*) ' 5 = ',TTT5
WRITE (6,*) ' 6 = ',TTT6
C 4
DO 1300 L =2,9
C VPP-PARALLEL START 4
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 1912 IK=1,KV3
DO 1913 IA=1,KATM
IF (NLSPD(KFTYPE(IA)).EQ.1 .AND. L.GT.4)
& GO TO 1913
DO 1911 IBAN=NBD1,NBD2
ZFC2(IBAN,IK,IA,1)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,2)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,3)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,4)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,5)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,6)=DCMPLX(0.0D0,0.0D0)
1911 CONTINUE
1913 CONTINUE
1912 CONTINUE
!XOCL END SPREAD
C!XOCL END PARALLEL
C
C VPP-PARALLEL START 5
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 1320 IK=1,KV3
AKX = VX(IK)
AKY = VY(IK)
AKZ = VZ(IK)
DO 1310 IA=1,KATM
IF (NLSPD(KFTYPE(IA)).EQ.1 .AND. L.GT.4)
& GO TO 1310
DO 1330 IBAN=NBD1,NBD2
CW=RUNI*OCCUU(IBAN,IK)
DO 1340 I=1,IBA(IK)
I1 = NBASE(I,IK)
ZTMP=ZZZ(I,IBAN,IK)*DCONJG(ZFM2(I1,IA))
& *( SS2(I,IK,KFTYPE(IA),L) )*RAA(I,IK)
ZFC2(IBAN,IK,IA,1)=ZFC2(IBAN,IK,IA,1)-ZTMP
& *(AKX+GX(I1))*(AKX+GX(I1))
ZFC2(IBAN,IK,IA,2)=ZFC2(IBAN,IK,IA,2)-ZTMP
& *(AKX+GX(I1))*(AKY+GY(I1))
ZFC2(IBAN,IK,IA,3)=ZFC2(IBAN,IK,IA,3)-ZTMP
& *(AKX+GX(I1))*(AKZ+GZ(I1))
ZFC2(IBAN,IK,IA,4)=ZFC2(IBAN,IK,IA,4)-ZTMP
& *(AKY+GY(I1))*(AKY+GY(I1))
ZFC2(IBAN,IK,IA,5)=ZFC2(IBAN,IK,IA,5)-ZTMP
& *(AKY+GY(I1))*(AKZ+GZ(I1))
ZFC2(IBAN,IK,IA,6)=ZFC2(IBAN,IK,IA,6)-ZTMP
& *(AKZ+GZ(I1))*(AKZ+GZ(I1))
1340 CONTINUE
SIGNL(1)=SIGNL(1)+CW *DREAL(
& ZFC2(IBAN,IK,IA,1)*DCONJG( ZFC(IBAN,IK,IA,L)) )
SIGNL(2)=SIGNL(2)+CW *DREAL(
& ZFC2(IBAN,IK,IA,2)*DCONJG( ZFC(IBAN,IK,IA,L)) )
SIGNL(3)=SIGNL(3)+CW *DREAL(
& ZFC2(IBAN,IK,IA,3)*DCONJG( ZFC(IBAN,IK,IA,L)) )
SIGNL(4)=SIGNL(4)+CW *DREAL(
& ZFC2(IBAN,IK,IA,4)*DCONJG( ZFC(IBAN,IK,IA,L)) )
SIGNL(5)=SIGNL(5)+CW *DREAL(
& ZFC2(IBAN,IK,IA,5)*DCONJG( ZFC(IBAN,IK,IA,L)) )
SIGNL(6)=SIGNL(6)+CW *DREAL(
& ZFC2(IBAN,IK,IA,6)*DCONJG( ZFC(IBAN,IK,IA,L)) )
1330 CONTINUE
1310 CONTINUE
1320 CONTINUE
!XOCL END SPREAD SUM(SIGNL)
C!XOCL END PARALLEL
1300 CONTINUE
TTT1=SIGNL(1)-SSS1
TTT2=SIGNL(2)-SSS2
TTT3=SIGNL(3)-SSS3
TTT4=SIGNL(4)-SSS4
TTT5=SIGNL(5)-SSS5
TTT6=SIGNL(6)-SSS6
SSS1=SIGNL(1)
SSS2=SIGNL(2)
SSS3=SIGNL(3)
SSS4=SIGNL(4)
SSS5=SIGNL(5)
SSS6=SIGNL(6)
WRITE (6,*) 'SIGNL 3 1 = ',TTT1
WRITE (6,*) ' 2 = ',TTT2
WRITE (6,*) ' 3 = ',TTT3
WRITE (6,*) ' 4 = ',TTT4
WRITE (6,*) ' 5 = ',TTT5
WRITE (6,*) ' 6 = ',TTT6
CWL(1)=1.0D0
CWL(2)=1.0D0
CWL(3)=1.0D0
CWL(4)=1.0D0
CWL(5)=2.0D0
CWL(6)=2.0D0
CWL(7)=2.0D0
CWL(8)=2.0D0
CWL(9)=2.0D0
CWL(10)=1.0D0
C 4
DO 1400 L=2,10
C VPP-PARALLEL START 6
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 1922 IK=1,KV3
DO 1923 IA=1,KATM
IF (NLSPD(KFTYPE(IA)).EQ.1 .AND. L.GT.4)
& GO TO 1923
DO 1921 IBAN=NBD1,NBD2
ZFC2(IBAN,IK,IA,1)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,2)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,3)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,4)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,5)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,6)=DCMPLX(0.0D0,0.0D0)
1921 CONTINUE
1923 CONTINUE
1922 CONTINUE
!XOCL END SPREAD
C!XOCL END PARALLEL
C
C VPP-PARALLEL START 7
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 1420 IK=1,KV3
AKX = VX(IK)
AKY = VY(IK)
AKZ = VZ(IK)
DO 1410 IA=1,KATM
IF (NLSPD(KFTYPE(IA)).EQ.1 .AND. L.GT.4)
& GO TO 1410
DO 1430 IBAN=NBD1,NBD2
CW=CWL(L)*RUNI*OCCUU(IBAN,IK)
DO 1440 I=1,IBA(IK)
I1 = NBASE(I,IK)
ZTMP=ZZZ(I,IBAN,IK)*DCONJG(ZFM2(I1,IA))
& *SSS(I,IK,KFTYPE(IA),L)*RAA(I,IK)*RAA(I,IK)
ZFC2(IBAN,IK,IA,1)=ZFC2(IBAN,IK,IA,1)+ZTMP
& *(AKX+GX(I1))*(AKX+GX(I1))
ZFC2(IBAN,IK,IA,2)=ZFC2(IBAN,IK,IA,2)+ZTMP
& *(AKX+GX(I1))*(AKY+GY(I1))
ZFC2(IBAN,IK,IA,3)=ZFC2(IBAN,IK,IA,3)+ZTMP
& *(AKX+GX(I1))*(AKZ+GZ(I1))
ZFC2(IBAN,IK,IA,4)=ZFC2(IBAN,IK,IA,4)+ZTMP
& *(AKY+GY(I1))*(AKY+GY(I1))
ZFC2(IBAN,IK,IA,5)=ZFC2(IBAN,IK,IA,5)+ZTMP
& *(AKY+GY(I1))*(AKZ+GZ(I1))
ZFC2(IBAN,IK,IA,6)=ZFC2(IBAN,IK,IA,6)+ZTMP
& *(AKZ+GZ(I1))*(AKZ+GZ(I1))
1440 CONTINUE
SIGNL(1)=SIGNL(1)+CW *DREAL(
& ZFC2(IBAN,IK,IA,1)*DCONJG(ZFC(IBAN,IK,IA,L)) )
SIGNL(2)=SIGNL(2)+CW *DREAL(
& ZFC2(IBAN,IK,IA,2)*DCONJG(ZFC(IBAN,IK,IA,L)) )
SIGNL(3)=SIGNL(3)+CW *DREAL(
& ZFC2(IBAN,IK,IA,3)*DCONJG(ZFC(IBAN,IK,IA,L)) )
SIGNL(4)=SIGNL(4)+CW *DREAL(
& ZFC2(IBAN,IK,IA,4)*DCONJG(ZFC(IBAN,IK,IA,L)) )
SIGNL(5)=SIGNL(5)+CW *DREAL(
& ZFC2(IBAN,IK,IA,5)*DCONJG(ZFC(IBAN,IK,IA,L)) )
SIGNL(6)=SIGNL(6)+CW *DREAL(
& ZFC2(IBAN,IK,IA,6)*DCONJG(ZFC(IBAN,IK,IA,L)) )
1430 CONTINUE
1410 CONTINUE
1420 CONTINUE
!XOCL END SPREAD SUM(SIGNL)
C!XOCL END PARALLEL
1400 CONTINUE
TTT1=SIGNL(1)-SSS1
TTT2=SIGNL(2)-SSS2
TTT3=SIGNL(3)-SSS3
TTT4=SIGNL(4)-SSS4
TTT5=SIGNL(5)-SSS5
TTT6=SIGNL(6)-SSS6
SSS1=SIGNL(1)
SSS2=SIGNL(2)
SSS3=SIGNL(3)
SSS4=SIGNL(4)
SSS5=SIGNL(5)
SSS6=SIGNL(6)
WRITE (6,*) 'SIGNL 4 1 = ',TTT1
WRITE (6,*) ' 2 = ',TTT2
WRITE (6,*) ' 3 = ',TTT3
WRITE (6,*) ' 4 = ',TTT4
WRITE (6,*) ' 5 = ',TTT5
WRITE (6,*) ' 6 = ',TTT6
C 1
DO 2331 L=1,4
C VPP-PARALLEL START 8
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 1942 IK=1,KV3
DO 1943 IA=1,KATM
IF (NLSPD(KFTYPE(IA)).EQ.1 .AND. L.GT.1)
& GO TO 1943
DO 1941 IBAN=NBD1,NBD2
ZFC2(IBAN,IK,IA,1)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,2)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,3)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,4)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,5)=DCMPLX(0.0D0,0.0D0)
ZFC2(IBAN,IK,IA,6)=DCMPLX(0.0D0,0.0D0)
1941 CONTINUE
1943 CONTINUE
1942 CONTINUE
!XOCL END SPREAD
C!XOCL END PARALLEL
C
C VPP-PARALLEL START 9
C!XOCL PARALLEL REGION
!XOCL SPREAD DO /IP
DO 1520 IK=1,KV3
C IWRT(IK) =IK
AKX = VX(IK)
AKY = VY(IK)
AKZ = VZ(IK)
DO 1510 IA=1,KATM
IF (NLSPD(KFTYPE(IA)).EQ.1 .AND. L.GT.1)
& GO TO 1510
IF (L.EQ.1) THEN
RWC=1.0D0/(WP(KFTYPE(IA))*UNIVOL)
ELSE
RWC=1.0D0/(WD(KFTYPE(IA))*UNIVOL)
END IF
DO 1530 IBAN=NBD1,NBD2
CW=RUNI*OCCUU(IBAN,IK)
DO 1540 I=1,IBA(IK)
I1 = NBASE(I,IK)
ZTMP=DCONJG(ZZZ(I,IBAN,IK))*ZFM2(I1,IA)
& *SS3(I,IK,KFTYPE(IA),L)*RAA(I,IK)
ZFC2(IBAN,IK,IA,1)=ZFC2(IBAN,IK,IA,1)-ZTMP
& *(AKX+GX(I1))
ZFC2(IBAN,IK,IA,2)=ZFC2(IBAN,IK,IA,2)-ZTMP
& *(AKY+GY(I1))
ZFC2(IBAN,IK,IA,3)=ZFC2(IBAN,IK,IA,3)-ZTMP
& *(AKZ+GZ(I1))
1540 CONTINUE
SIGNL(1)=SIGNL(1)-RWC*CW *DREAL(
& ZFC2(IBAN,IK,IA,1)*DCONJG(ZFC2(IBAN,IK,IA,1)) )
SIGNL(2)=SIGNL(2)-RWC*CW *DREAL(
& ZFC2(IBAN,IK,IA,1)*DCONJG(ZFC2(IBAN,IK,IA,2)) )
SIGNL(3)=SIGNL(3)-RWC*CW *DREAL(
& ZFC2(IBAN,IK,IA,1)*DCONJG(ZFC2(IBAN,IK,IA,3)) )
SIGNL(4)=SIGNL(4)-RWC*CW *DREAL(
& ZFC2(IBAN,IK,IA,2)*DCONJG(ZFC2(IBAN,IK,IA,2)) )
SIGNL(5)=SIGNL(5)-RWC*CW *DREAL(
& ZFC2(IBAN,IK,IA,2)*DCONJG(ZFC2(IBAN,IK,IA,3)) )
SIGNL(6)=SIGNL(6)-RWC*CW *DREAL(
& ZFC2(IBAN,IK,IA,3)*DCONJG(ZFC2(IBAN,IK,IA,3)) )
1530 CONTINUE
1510 CONTINUE
1520 CONTINUE
!XOCL END SPREAD SUM(SIGNL)
C!XOCL END PARALLEL
2331 CONTINUE
TTT1=SIGNL(1)-SSS1
TTT2=SIGNL(2)-SSS2
TTT3=SIGNL(3)-SSS3
TTT4=SIGNL(4)-SSS4
TTT5=SIGNL(5)-SSS5
TTT6=SIGNL(6)-SSS6
SSS1=SIGNL(1)
SSS2=SIGNL(2)
SSS3=SIGNL(3)
SSS4=SIGNL(4)
SSS5=SIGNL(5)
SSS6=SIGNL(6)
WRITE (6,*) 'SIGNL 5 1 = ',TTT1
WRITE (6,*) ' 2 = ',TTT2
WRITE (6,*) ' 3 = ',TTT3
WRITE (6,*) ' 4 = ',TTT4
WRITE (6,*) ' 5 = ',TTT5
WRITE (6,*) ' 6 = ',TTT6
RETURN
END
C---*----1----*----2----*----3----*----4----*----5----*----6----*----7
SUBROUTINE KSTEP
> (KNV3,NBZTYP,ALTV,RLTV,NKX,NKY,NKZ,NKX2,NKY2,NKZ2,NFOUT,
< KV3,VX,VY,VZ,QWGT)
IMPLICIT LOGICAL(A-Z)
INTEGER KNV3,NBZTYP,NKX,NKY,NKZ,NKX2,NKY2,NKZ2,KV3
INTEGER INDX(0:20,0:20,0:20),IK,NFOUT
REAL ALTV(3,3),RLTV(3,3),A,B,C,PAI2,A1,B1,C1
REAL VX(KNV3),VY(KNV3),VZ(KNV3),QWGT(KNV3)
LOGICAL SPINP
PAI2 = 8.D0*ATAN(1.D0)
SPINP = .FALSE.
C*** IF((NBZTYP.EQ.0).OR.(NBZTYP.EQ.1)) THEN
IF((NBZTYP.EQ.0).OR.(NBZTYP.EQ.1).OR.(NBZTYP.EQ.9)
> .OR.(NBZTYP.GE.11)) THEN
IF(NBZTYP.EQ.0) THEN
C----------------------------------------------
WRITE(NFOUT,*) ' SURFACE B.Z. '
CALL KPMSF
> (KNV3,RLTV,NKX,NKY,NKZ,NKX2,NKY2,NKZ2,NFOUT,
< KV3,VX,VY,VZ)
C----------------------------------------------
C**** ELSE IF(NBZTYP.EQ.1) THEN
ELSE IF(NBZTYP.EQ.1.OR.NBZTYP.EQ.9.OR.NBZTYP.GE.11) THEN
C----------------------------------------------
WRITE(NFOUT,*) ' WHOLE B.Z. '
CALL KPMWBZ
> (KNV3,RLTV,NKX,NKY,NKZ,NKX2,NKY2,NKZ2,NFOUT,
< KV3,VX,VY,VZ)
C----------------------------------------------
END IF
DO 100 IK=1,KNV3
QWGT(IK) = 1.D0/DFLOAT(KV3)
100 CONTINUE
ELSE IF((NBZTYP.GE.2).AND.(NBZTYP.LE.5)) THEN
IF(NBZTYP.EQ.2) THEN
C----------------------------------------------------------
WRITE(NFOUT,*) ' SIMPLE CUBIC LATTICE '
CALL SCCM
> (KNV3,NKX,SPINP,NFOUT,
< KV3,VX,VY,VZ,QWGT,INDX)
C----------------------------------------------------------
ELSE IF(NBZTYP.EQ.3) THEN
C----------------------------------------------------------
WRITE(NFOUT,*) ' BCC LATTICE '
CALL BCCM
> (KNV3,NKX,SPINP,NFOUT,
< KV3,VX,VY,VZ,QWGT,INDX)
C----------------------------------------------------------
ELSE IF((NBZTYP.EQ.4).OR.(NBZTYP.EQ.5)) THEN
C----------------------------------------------------------
WRITE(NFOUT,*) ' FCC LATTICE '
CALL FCCM
> (KNV3,NKX,SPINP,NFOUT,
< KV3,VX,VY,VZ,QWGT,INDX)
C----------------------------------------------------------
END IF
A = ABS(ALTV(1,1)) * 2.D0
B = PAI2/A
DO 200 IK = 1,KV3
VX(IK) = B*VX(IK)
VY(IK) = B*VY(IK)
VZ(IK) = B*VZ(IK)
200 CONTINUE
ELSE IF(NBZTYP.EQ.6) THEN
C----------------------------------------------------------
WRITE(NFOUT,*) ' HEX LATTICE '
CALL HEXM
> (KNV3,NKX,NKY,RLTV,SPINP,NFOUT,
< KV3,VX,VY,VZ,QWGT,INDX)
C----------------------------------------------------------
ELSE IF (NBZTYP.EQ.8 .OR. NBZTYP.EQ.10) THEN
WRITE (NFOUT,*) ' TETRAGONAL LATTICE '
CALL TETRAH
> (KNV3,NKX,NKZ,RLTV,SPINP,NFOUT,
< KV3,VX,VY,VZ,QWGT,INDX)
A = ABS(ALTV(1,1))*2.0D0
A1 = PAI2/A
B = ABS(ALTV(3,3))*2.0D0
B1 = PAI2/B
WRITE (6,*) A,B,A1,B1,ALTV(1,1),ALTV(3,3)
DO 201 IK = 1,KV3
VX(IK) = A1*VX(IK)
VY(IK) = A1*VY(IK)
VZ(IK) = B1*VZ(IK)
201 CONTINUE
ELSE IF (NBZTYP.EQ.9.OR.NBZTYP.GE.11) THEN
WRITE (NFOUT,*) ' ORTHORHONBIC LATTICE '
CALL APBO2
> (KNV3,NKX,NKY,NKZ,RLTV,SPINP,NFOUT,
< KV3,VX,VY,VZ,QWGT,INDX)
A = ABS(ALTV(1,1))*2.0D0
A1 = PAI2/A
B = ABS(ALTV(2,2))*2.0D0
B1 = PAI2/B
C = ABS(ALTV(3,3))*2.0D0
C1 = PAI2/C
DO 202 IK = 1,KV3
VX(IK) = A1*VX(IK)
VY(IK) = B1*VY(IK)
VZ(IK) = C1*VZ(IK)
202 CONTINUE
ELSE
WRITE(NFOUT,*) ' NBZTYP ERR IN KSTEP NBUB = ',NBZTYP
STOP
END IF
C KV3=1
C A = ABS(ALTV(1,1))
C A1 = PAI2/A
C B = ABS(ALTV(3,3))
C B1 = PAI2/B
C WRITE (6,*) A,B,A1,B1,ALTV(1,1),ALTV(3,3)
C DO 202 IK = 1,KV3
C VX(IK) = A1*VX(IK)
C VY(IK) = A1*VY(IK)
C VZ(IK) = B1*VZ(IK)
C 202 CONTINUE
WRITE(NFOUT,300) (IK,VX(IK),VY(IK),VZ(IK),QWGT(IK),IK=1,KV3)
300 FORMAT((' ','IK = ',I3,3F10.6,3X,'QWGT = ',F10.6))
RETURN
END
C---*----1----*----2----*----3----*----4----*----5----*----6----*----7
SUBROUTINE KPMWBZ
> (KNV3,RLTV,NKX,NKY,NKZ,NKX2,NKY2,NKZ2,NFOUT,
< KV3,VX,VY,VZ)
C************************************************************
IMPLICIT LOGICAL(A-Z)
INTEGER IKP,KNV3,NKX,NKY,NKZ,NKX2,NKY2,NKZ2,KV3,MM,I1,I2,I3,NFOUT
REAL RLTV(3,3),VX(KNV3),VY(KNV3),VZ(KNV3),FVX,FVY,FVZ
REAL DGVX,DGVY,DGVZ,FV1,FV2,FV3
FVX=DFLOAT(NKX*2)
FVY=DFLOAT(NKY*2)
FVZ=DFLOAT(NKZ*2)
IKP=0
IF (IKP.EQ.0) THEN
MM=0
C DGVX=0.5D0*(RLTV(1,1)/FVX+RLTV(1,2)/FVY+RLTV(1,3)/FVZ)
C DGVY=0.5D0*(RLTV(2,1)/FVX+RLTV(2,2)/FVY+RLTV(2,3)/FVZ)
C DGVZ=0.5D0*(RLTV(3,1)/FVX+RLTV(3,2)/FVY+RLTV(3,3)/FVZ)
DGVX=0.0D0
DGVY=0.0D0
DGVZ=0.0D0
DO 100 I1=1,NKX2
FV1=DFLOAT(I1-NKX-1)/FVX
DO 100 I2=1,NKY2
FV2=DFLOAT(I2-NKY-1)/FVY
DO 100 I3=1,NKZ2
FV3=DFLOAT(I3-NKZ-1)/FVZ
MM=MM+1
VX(MM)=RLTV(1,1)*FV1 + RLTV(1,2)*FV2 + RLTV(1,3)*FV3 +DGVX
VY(MM)=RLTV(2,1)*FV1 + RLTV(2,2)*FV2 + RLTV(2,3)*FV3 +DGVY
VZ(MM)=RLTV(3,1)*FV1 + RLTV(3,2)*FV2 + RLTV(3,3)*FV3 +DGVZ
100 CONTINUE
WRITE(NFOUT,*) 'NUMBER OF GENERATED K-POINTS=',MM
IF(MM.NE.KNV3) WRITE(NFOUT,*) '**WARNING MM SHOULD BE KNV3**'
KV3=MM
ELSE IF (IKP.EQ.1) THEN
VX(1)=0.0D0
VY(1)=0.0D0
VZ(1)=0.0D0
KV3=1
END IF
RETURN
END
C---*----1----*----2----*----3----*----4----*----5----*----6----*----7
SUBROUTINE KPMSF
> (KNV3,RLTV,NKX,NKY,NKZ,NKX2,NKY2,NKZ2,NFOUT,
< KV3,VX,VY,VZ)
IMPLICIT LOGICAL(A-Z)
INTEGER KNV3,NKX,NKY,NKZ,NKX2,NKY2,NKZ2,KV3,MM,I2,I3,NFOUT
REAL RLTV(3,3),VX(KNV3),VY(KNV3),VZ(KNV3),FVY,FVZ
REAL DGVY,DGVZ,FV2,FV3
FVY=DFLOAT(NKY*2)
FVZ=DFLOAT(NKZ*2)
MM=0
DGVY=0.5D0*(RLTV(2,2)/FVY+RLTV(2,3)/FVZ)
DGVZ=0.5D0*(RLTV(3,2)/FVY+RLTV(3,3)/FVZ)
DO 100 I2=1,NKY2
FV2=DFLOAT(I2-NKY-1)/FVY
DO 100 I3=1,NKZ2
FV3=DFLOAT(I3-NKZ-1)/FVZ
MM=MM+1
VX(MM) = 0.D0
VY(MM) = RLTV(2,2)*FV2 + RLTV(2,3)*FV3 + DGVY
VZ(MM) = RLTV(3,2)*FV2 + RLTV(3,3)*FV3 + DGVZ
100 CONTINUE
WRITE(NFOUT,*) 'NUMBER OF GENERATED K-POINTS=',MM
IF(MM.NE.KNV3) WRITE(NFOUT,*) '**WARN MM SHOULD BE KNV3**'
KV3=MM
RETURN
END