Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SUBROUTINE DORBAX (F,NP1,NP2,BBXS,PWP,NBB,NPW,XLFT,XRGT,NAQRS,
- $ NND,NNE,MAXLOT,igam)
- c
- implicit double precision (a-h,o-z)
- parameter (NHT=7,nh4=4*nht-3)
- parameter (nhq=nht*nht*nht*nht)
- parameter (zero=0.d0)
- DIMENSION F(igam),BBXS(3*nbb),PWP(NPW,3),XLFT(NND,MAXLOT,3),
- # XRGT(NNE,MAXLOT,3),BX(NAQRS*(NHKTA+NHKTB+NHKTC+NHKTD))
- COMMON /XA/ XAND(3,8,nh4)
- COMMON /CONI/ NUCT(4),NRCT(4),JSTT(4),
- 1 IFD1X,IFD2X,NUCAQ,NUCRS,NXXXX,NCQRS,KQ,KR,KS,IVA
- LOGICAL IFPL,NP1(3),NP2(3)
- COMMON /TAB/ NNN
- COMMON / /FACT(nh4),RFACT(nh4),FACTM(nh4),RFACTM(nh4)
- & ,MAA,IFD1,IFD2,KCD,KBCD,NHCD,NHBCD,NNC,IFPL(3),
- & NN1,NN2,NHKTA,NHKTB,NHKTC,NHKTD,KHKTA,KHKTB,KHKTC,KHKTD
- $ ,NNB
- COMMON /DOR/ INDXY(nhq),INDZ(nhq)
- C
- C THE DIMENSION OF INDXY AND INDZ IS (L+1)**4
- C
- NUC12=NUCT(1)*NUCT(2)
- NUMM=0
- NUML=0
- NUM=0
- NUMJ=0
- DO 111 NA=1,NHKTA
- DO 1 NB=1,NHKTB
- I12=NA+NB-1
- NUMI=0
- DO 341 NC=1,NHKTC
- DO 340 ND=1,NHKTD
- I34=NC+ND-1
- NUML=NUML+1
- JT=I12+I34-1
- ijt = (jt-1)*naqrs+1
- IM=NNN-JT+1
- INDXY(NUML)=NUM*NCQRS+1
- INDZ(NUML)=((NUML-1)*(NNN+1)-NUM-1)*NCQRS+1
- IB4= NCQRS * (NUM+1)
- IB6 = NUCAQ * (NUMJ+I12-1)
- c
- IF (JT.GT.2) THEN
- C
- C.... GENERAL CODE. USE WHEN SUM OF Q.N. (JT) >2
- C
- DO 230 IXY=1,3
- IB44=IB4 + (IXY-1)*NBB
- do i=1,NAQRS*(JT-1)
- bx(naqrs+i) = zero
- enddo
- DO 52 IP=2,JT
- IF(NP1(IXY) .AND. NP2(IXY) .AND. (iand(1,IP+JT).EQ.1))
- 1 GO TO 52
- MIN9=MAX(1,IP-I12+1)
- MAX9=MIN(IP,I34)
- DO 51 I9=MIN9,MAX9
- IF((NP2(IXY) .AND. (iand(1,I9+I34).EQ.1)) .OR.
- 1 (NP1(IXY) .AND. (iand(1,I9+I12-IP).EQ.0))) GO TO 51
- C... NO SIMPLIFICATIONS DUE TO PLANARITY
- CALL MPPROD (BX,XLFT(NUCAQ*(NUMJ+IP-I9)+1,KQ,IXY),NUCAQ,
- $ XRGT(NUC12*(NUMI+I9-1)+1,IVA,IXY),NUCRS,
- $ XAND(IXY,KR,I34-I9+1)*FACT(IP))
- ii = (ip-1)*naqrs
- DO 53 I=1,NAQRS
- BX(I+ii) = BX(I+ii) + BX(I)
- 53 continue
- 51 CONTINUE
- 52 CONTINUE
- CALL CMPRI(BX(naqrs+1),BX,JT-1)
- C
- C... FIRST DO THE CONTRIBUTIONS FOR I = 1&2
- C
- IF(IXY.LT.3) THEN
- c
- C... DO X AND Y COMPONENTS.
- IF((.NOT.NP1(IXY) .OR. (iand(1,I12).EQ.1)) .AND.
- 1 (.NOT.NP2(IXY) .OR. (iand(1,I34).EQ.1))) THEN
- C... NO SIMPLIFICATIONS DUE TO PLANARITY
- CALL MPPROD (BX(ijt),XLFT(NUMJ*NUCAQ+1,KQ,IXY),
- * NUCAQ, XRGT(NUMI*NUC12+1,IVA,IXY),NUCRS,XAND(IXY,KR,I34))
- CALL CMPR1(BX(iJT),BBXS(NCQRS*NUM+1+(IXY-1)*NBB))
- DO 10 JPQRS=1,NCQRS
- BBXS(JPQRS+IB44) = BX(JPQRS+NCQRS) + BX(JPQRS)*
- * PWP(JPQRS,IXY)
- 10 continue
- C
- ELSE
- C PLANAR AB OR CD FRAGMENT
- do i=1,ncqrs
- bbxs(NCQRS*NUM+(IXY-1)*NBB+i) = zero
- enddo
- IF(IFPL(IXY))THEN
- c CALL MOVE (BX(NCQRS+1),BBXS(IB44+1),NCQRS)
- do jpqrs=1,ncqrs
- bbxs(ib44+jpqrs) = bx(ncqrs+jpqrs)
- enddo
- ELSE
- DO 13 JPQRS=1,NCQRS
- BBXS(JPQRS+IB44) = BX(JPQRS+NCQRS) + BX(JPQRS)*
- * PWP(JPQRS,IXY)
- 13 continue
- ENDIF
- C
- ENDIF
- C
- ELSE
- c
- C... DO Z COMPONENTS
- IF((.NOT.NP1(3) .OR. (iand(1,I12).EQ.1)) .AND.
- 1 (.NOT.NP2(3) .OR. (iand(1,I34).EQ.1))) THEN
- CALL MPPROD (BX(iJT) ,XLFT(NUMJ*NUCAQ+1,KQ,3),NUCAQ ,
- # XRGT(NUMI*NUC12+1,IVA,3) , NUCRS, XAND(3,KR,I34))
- DO 91 IJ=1,IM
- IFB = NCQRS*IJ
- IB2 = NCQRS*(NUMM+IJ-1) + 2*NBB
- CALL CMPR1 (BX(iJT),BX(ijt+naqrs))
- DO 90 JPQRS=1,NCQRS
- BBXS(JPQRS+IB2) = BX(JPQRS+ijt+naqrs-1)*F(JPQRS+IFB-NCQRS)+
- $ F(JPQRS+IFB)*(BX(JPQRS+NCQRS)+BX(JPQRS)*PWP(JPQRS,3))
- 90 CONTINUE
- 91 continue
- C
- C
- ELSE IF (IFPL(3)) THEN
- C PLANAR ABCD GEOMETRY
- DO 961 IJ=1,IM
- IFB = NCQRS*IJ
- IB2 = NCQRS * (NUMM+IJ-1) + 2*NBB
- DO 96 JPQRS=1,NCQRS
- BBXS(JPQRS+IB2) = F(JPQRS+IFB) * BX(JPQRS+NCQRS)
- 96 continue
- 961 continue
- C
- ELSE
- C PLANAR AB OR CD FRAGMENT
- DO 971 IJ=1,IM
- IFB = NCQRS*IJ
- IB2 = NCQRS * (NUMM+IJ-1) + 2*NBB
- DO 97 JPQRS=1,NCQRS
- BBXS(JPQRS+IB2) =
- 1 F(JPQRS+IFB)*(BX(JPQRS+NCQRS)+BX(JPQRS)*PWP(JPQRS,3))
- 97 continue
- 971 continue
- ENDIF
- C
- ENDIF
- C
- C... NOW DO CONTRIBUTIONS FOR I>2
- C...
- IF(IFPL(IXY)) THEN
- IMAX = (JT+1)/2
- ELSE
- IMAX = JT
- ENDIF
- C
- DO 220 I=3,IMAX
- IF(IFPL(IXY)) THEN
- C... PLANAR ABCD GEOMETRY
- IIX = (I+I-3)*NCQRS
- DO 125 JPQRS=1,NCQRS
- BX(JPQRS+ijt-1) = RFACT(I)*BX(JPQRS+IIX)
- 125 continue
- ELSE
- IRUM = MIN(I,JT-I+1)
- IIX = NCQRS * (I-2)
- DO 110 JPQRS=1,NCQRS
- BX(JPQRS+iJT-1) = RFACT(I)*BX(JPQRS+IIX)*PWP(JPQRS+IIX,IXY)
- 110 continue
- if(irum.lt.2) go to 160
- DO 131 IRU=3,IRUM
- IIX = (I+IRU-3) * NCQRS
- IF(IRU.EQ.I) THEN
- DO 126 JPQRS=1,NCQRS
- BX(JPQRS+iJT-1) = BX(JPQRS+iJT-1) + RFACT(I)*BX(JPQRS+IIX)
- 126 continue
- ELSE
- IIY= (I-IRU-1) * NCQRS
- DO 130 JPQRS=1,NCQRS
- BX(JPQRS+iJT-1) = BX(JPQRS+iJT-1)+RFACT(IRU)*RFACT(I-IRU+1)*
- 1 PWP(JPQRS+IIY,IXY)*BX(JPQRS+IIX)
- 130 continue
- ENDIF
- 131 CONTINUE
- IIX = NCQRS *(I-1)
- IIY = NCQRS * (I-3)
- DO 150 JPQRS=1,NCQRS
- BX(JPQRS+iJT-1) = BX(JPQRS+iJT-1) + RFACT(I-1)*
- 1 BX(JPQRS+IIX)*PWP(JPQRS+IIY,IXY)
- 150 continue
- ENDIF
- C
- 160 IF(IXY .LT. 3) THEN
- C... X AND Y COMPONENTS
- IB5 = NCQRS * (NUM+I-1) + (IXY-1)*NBB
- DO 170 JPQRS=1,NCQRS
- BBXS(JPQRS + IB5) = BX(JPQRS+iJT-1)
- 170 continue
- ELSE
- C... Z COMPONENTS
- DO 211 IJ=1,IM
- IFB = NCQRS*(IJ+I-2)
- IB2 = NCQRS * (NUMM+IJ-1) + 2*NBB
- DO 210 JPQRS=1,NCQRS
- BBXS(JPQRS+IB2) = BBXS(JPQRS+IB2)+F(JPQRS+IFB)*BX(JPQRS+iJT-1)
- 210 continue
- 211 continue
- ENDIF
- C
- 220 CONTINUE
- 230 CONTINUE
- C
- ELSE IF (JT.EQ.2) THEN
- C... X AND Y COMPONENTS
- IB8 = NUC12 * (NUMI+I34-1)
- DO 270 IXY=1,2
- IB44=IB4 + (IXY-1)*NBB
- IF(IFPL(IXY)) GO TO 270
- IF((.NOT.NP1(IXY) .OR. (I12.EQ.1)) .AND.
- 1 (.NOT.NP2(IXY) .OR. (I34.EQ.1))) THEN
- CALL MVPROD(BX,XLFT(IB6+1,KQ,IXY),NUCAQ,XRGT(IB8+1,IVA,IXY),
- # NUCRS)
- CALL MPPROD(BX(naqrs+1),XLFT(NUMJ*NUCAQ+1,KQ,IXY),NUCAQ,
- # XRGT(NUMI*NUC12+1,IVA,IXY),NUCRS,XAND(IXY,KR,I34))
- CALL CMPR2(BX,BX(naqrs+1),BX(2*naqrs+1),
- * BBXS(NCQRS*NUM+1+(IXY-1)*NBB))
- DO 260 JPQRS=1,NCQRS
- BBXS(JPQRS+IB44) = BX(JPQRS+2*naqrs)*PWP(JPQRS,IXY)
- 260 continue
- C
- ELSE
- C PLANAR AB OR CD FRAGMENT
- CALL MVPROD(BX(naqrs+1),XLFT(IB6+1,KQ,IXY),NUCAQ,
- # XRGT(IB8+1,IVA,IXY),NUCRS)
- CALL CMPR1(BX(naqrs+1),BX)
- do i=1,ncqrs
- BBXS(NCQRS*NUM+(IXY-1)*NBB+i) = zero
- enddo
- DO 261 JPQRS=1,NCQRS
- BBXS(JPQRS + IB44) = BX(JPQRS)*PWP(JPQRS,IXY)
- 261 continue
- ENDIF
- C
- 270 CONTINUE
- C... Z COMPONENTS
- IF( .NOT.IFPL(3)) THEN
- IF((.NOT.NP1(3) .OR. (I12.EQ.1)) .AND.
- 1 (.NOT.NP2(3) .OR. (I34.EQ.1))) THEN
- CALL MVPROD(BX(3*naqrs+1),XLFT(IB6+1,KQ,3),NUCAQ,
- * XRGT(IB8+1,IVA,3),NUCRS)
- CALL MPPROD(BX(2*naqrs+1),XLFT(NUMJ*NUCAQ+1,KQ,3),NUCAQ,
- $ XRGT(NUMI*NUC12+1,IVA,3),NUCRS,XAND(3,KR,I34))
- CALL CMPR2(BX(2*naqrs+1),BX(3*naqrs+1),BX,BX(naqrs+1))
- DO 285 JPQRS=1,NCQRS
- BX(JPQRS+naqrs) = BX(JPQRS+naqrs) * PWP(JPQRS,3)
- 285 continue
- DO 291 IJ=1,IM
- IFB = NCQRS*IJ
- IB2 = NCQRS *(NUMM+IJ-1) + 2*NBB
- DO 290 JPQRS=1,NCQRS
- BBXS(JPQRS + IB2) = BX(JPQRS+naqrs) * F(JPQRS+IFB) +
- 1 BX(JPQRS) * F(JPQRS+IFB-NCQRS)
- 290 continue
- 291 continue
- C
- ELSE
- C PLANAR AB OR CD FRAGMENT
- CALL MVPROD (BX(3*naqrs+1),XLFT(IB6+1,KQ,3),NUCAQ,
- * XRGT(IB8+1,IVA,3),NUCRS)
- CALL CMPR1(BX(3*naqrs+1),BX(naqrs+1))
- DO 286 JPQRS=1,NCQRS
- BX(JPQRS+naqrs) = BX(JPQRS+naqrs) * PWP(JPQRS,3)
- 286 continue
- c GO TO 298
- c DO 297 IJ=1,IM
- c IFB = NCQRS*IJ
- c IB2 = NCQRS * (NUMM+IJ-1) + 2*NBB
- c DO 291 JPQRS=1,NCQRS
- c 291 BBXS(JPQRS + IB2) = BX(JPQRS,2) * F(JPQRS+IFB)
- c 297 CONTINUE
- 298 CALL PROD(BBXS(NCQRS*NUMM+2*NBB+1),BX(naqrs+1),F(NCQRS+1),NCQRS,
- * IM)
- C
- C HAD TO DO THIS 'CAUSE OF A COMPILER BUG
- C PROD DOES WHAT THE LOOP ->297 WAS SUPPOSEDTO
- C J.A. JULY -84
- C
- ENDIF
- C
- ENDIF
- ELSE
- C... SPECIAL CASE FOR JT=1
- DO 320 JPQRS=1,NCQRS
- BBXS(JPQRS) = 1.d0
- BBXS(JPQRS+NBB) = 1.d0
- 320 continue
- c CALL MOVE(F,BBXS(2*NBB+1),IM*NCQRS)
- do i=1,im*ncqrs
- bbxs(2*nbb+i) = f(i)
- enddo
- ENDIF
- C
- NUMM=NUMM +IM
- NUM=NUM+JT
- NUMI=NUMI+I34
- 340 continue
- 341 continue
- NUMJ=NUMJ+I12
- 1 continue
- 111 continue
- c
- RETURN
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement