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 ----- 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