--- /dev/null
+*
+* $Id$
+*
+* $Log$
+* Revision 1.1.1.1 1996/04/01 15:01:48 mclareni
+* Mathlib gen
+*
+*
+#include "gen/pilot.h"
+#if defined(CERNLIB_DOUBLE)
+ SUBROUTINE DTCLGN(J1,J2,J3,M1,M2,M3,DNUM,DDEN,KPEX)
+ IMPLICIT DOUBLE PRECISION (A-H,O-Z)
+#endif
+#if !defined(CERNLIB_DOUBLE)
+ SUBROUTINE DTCLGN(J1,J2,J3,M1,M2,M3,DNUM,DDEN,KPEX)
+#include "gen/imp64.inc"
+#endif
+ CHARACTER NAME*(*)
+ CHARACTER*80 ERRTXT
+ PARAMETER (NAME = 'DTCLGN')
+
+ PARAMETER (MXP = 40)
+
+ DIMENSION KPEX(*)
+ DIMENSION IPRIM(MXP),PRIM(MXP),LS(MXP,12),LR(MXP,100)
+ DIMENSION ISD(11),JS(100),IA(7)
+
+ DATA (IA(I),I=1,7) /-1,1,1,-1,-1,1,1/
+
+ DATA (IPRIM(I),I=1,MXP)
+ 1/ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53,
+ 2 59, 61, 67, 71, 73, 79, 83, 89, 97,101,103,107,109,113,127,131,
+ 3 137,139,149,151,157,163,167,173/
+
+ DO 11 J = 1,MXP
+ LS(J,12)=0
+ PRIM(J)=IPRIM(J)
+ 11 KPEX(J)=0
+ DNUM=0
+ DDEN=1
+ IF(J1 .LT. 0 .OR. J2 .LT. 0 .OR. J3 .LT. 0) GO TO 99
+ IF(MOD(J1+J2+J3,2) .NE. 0) GO TO 99
+ MX=ABS(M1)
+ MY=ABS(M2)
+ MZ=ABS(M3)
+ IF(J1 .LT. MX .OR. J2 .LT. MY .OR. J3 .LT. MZ) GO TO 99
+ IF(MOD(J1+MX,2) .NE. 0 .OR. MOD(J2+MY,2) .NE. 0) GOTO 99
+ IF(MOD(J3+MZ,2) .NE. 0) GOTO 99
+ IF(M1+M2 .NE. M3) GO TO 99
+ ISD(1)=J3+1
+ ISD(2)=(J3+J1-J2)/2
+ ISD(3)=(J3-J1+J2)/2
+ ISD(4)=(J1+J2-J3)/2
+ ISD(5)=(J3-M3)/2
+ ISD(6)=(J3+M3)/2
+ ISD(7)=(J1+J2+J3)/2+1
+ ISD(8)=(J1-M1)/2
+ ISD(9)=(J1+M1)/2
+ ISD(10)=(J2-M2)/2
+ ISD(11)=(J2+M2)/2
+
+ IF(ISD(2) .LT. 0 .OR. ISD(3) .LT. 0 .OR. ISD(4) .LT. 0) GO TO 99
+
+ DO 41 K = 1,MXP
+ DO 41 L = 1,11
+ 41 LS(K,L)=0
+ IF(ISD(1) .GT. 1) THEN
+ KOVF=1
+ N1=ISD(1)
+ K=0
+ 42 K=K+1
+ IF(K .EQ. MXP+1) GO TO 48
+ 43 IF(MOD(N1,IPRIM(K)) .NE. 0) GO TO 42
+ LS(K,1)=LS(K,1)+1
+ N1=N1/IPRIM(K)
+ IF(N1 .NE. 1) GO TO 43
+ 48 KOVF=MAX(KOVF,N1)
+ IF(KOVF .NE. 1) THEN
+ WRITE(ERRTXT,101) J1,J2,J3,M1,M2,M3
+ CALL MTLPRT(NAME,'U112.1',ERRTXT)
+ GO TO 99
+ ENDIF
+ ENDIF
+ DO 59 L = 2,11
+ DO 54 N = 2,ISD(L)
+ KOVF=1
+ N1=N
+ K=0
+ 52 K=K+1
+ IF(K .EQ. MXP+1) GO TO 58
+ 53 IF(MOD(N1,IPRIM(K)) .NE. 0) GO TO 52
+ LS(K,L)=LS(K,L)+1
+ N1=N1/IPRIM(K)
+ IF(N1 .NE. 1) GO TO 53
+ 58 KOVF=MAX(KOVF,N1)
+ IF(KOVF .NE. 1) THEN
+ WRITE(ERRTXT,101) J1,J2,J3,M1,M2,M3
+ CALL MTLPRT(NAME,'U112.1',ERRTXT)
+ GO TO 99
+ ENDIF
+ 54 CONTINUE
+ 59 CONTINUE
+
+ DO 5 J = 1,MXP
+ 5 LS(J,12)=LS(J,12)+LS(J,1)+LS(J,2)+LS(J,3)+LS(J,4)+LS(J,5)+LS(J,6)
+ 1 -LS(J,7)-LS(J,8)-LS(J,9)-LS(J,10)-LS(J,11)
+ MM=0
+ ISD(1)=J2+J3+M1
+ ISD(2)=J1-M1
+ ISD(3)=0
+ ISD(4)=J3-J1+J2
+ ISD(5)=J3+M3
+ ISD(6)=J1-J2-M3
+ ISD(7)=J2+M2
+ DO 12 L = 1,7
+ 12 ISD(L)=ISD(L)/2-IA(L)
+ 3 DO 13 L = 1,7
+ 13 ISD(L)=ISD(L)+IA(L)
+ IF(ISD(2) .LT. 0 .OR. ISD(6) .LT. 0) GO TO 3
+ IF(ISD(1) .LT. 0 .OR. ISD(4) .LT. 0 .OR. ISD(5) .LT. 0) GO TO 4
+
+ DO 69 L = 1,6
+ DO 61 K = 1,MXP
+ 61 LS(K,L)=0
+ DO 64 N = 2,ISD(L)
+ KOVF=1
+ N1=N
+ K=0
+ 62 K=K+1
+ IF(K .EQ. MXP+1) GO TO 68
+ 63 IF(MOD(N1,IPRIM(K)) .NE. 0) GO TO 62
+ LS(K,L)=LS(K,L)+1
+ N1=N1/IPRIM(K)
+ IF(N1 .NE. 1) GO TO 63
+ 68 KOVF=MAX(KOVF,N1)
+ IF(KOVF .NE. 1) THEN
+ WRITE(ERRTXT,101) J1,J2,J3,M1,M2,M3
+ CALL MTLPRT(NAME,'U112.1',ERRTXT)
+ GO TO 99
+ ENDIF
+ 64 CONTINUE
+ 69 CONTINUE
+
+ MM=MM+1
+ JS(MM)=(-1)**ISD(7)
+ DO 9 J = 1,MXP
+ 9 LR(J,MM)=LS(J,1)+LS(J,2)-LS(J,3)-LS(J,4)-LS(J,5)-LS(J,6)
+ GO TO 3
+
+ 4 DO 31 J = 1,MXP
+ LS(J,8)=10000
+ DO 31 JK = 1,MM
+ 31 LS(J,8)=MIN(LS(J,8),LR(J,JK))
+ BSUM=0
+ DO 32 JM = 1,MM
+ BNUM=1
+ DO 33 J = 1,MXP
+ JEX=LR(J,JM)-LS(J,8)
+ IF(JEX .GT. 0) BNUM=BNUM*PRIM(J)**JEX
+ 33 CONTINUE
+ 32 BSUM=BSUM+BNUM*JS(JM)
+ IF(BSUM .EQ. 0) GO TO 99
+ DO 71 K = 1,MXP
+ 71 LS(K,1)=0
+ ASUM=ABS(BSUM)
+ IF(ASUM .GT. 1) THEN
+ OVF=1
+ A1=ASUM
+ K=0
+ 72 K=K+1
+ IF(K .EQ. MXP+1) GO TO 78
+ 73 IF(MOD(A1,PRIM(K)) .NE. 0) GO TO 72
+ LS(K,1)=LS(K,1)+1
+ A1=A1/PRIM(K)
+ IF(A1 .NE. 1) GO TO 73
+ 78 OVF=MAX(OVF,A1)
+ IF(OVF .NE. 1) THEN
+ WRITE(ERRTXT,101) J1,J2,J3,M1,M2,M3
+ CALL MTLPRT(NAME,'U112.1',ERRTXT)
+ GO TO 99
+ ENDIF
+ ENDIF
+ DO 22 J = 1,MXP
+ 22 KPEX(J)=LS(J,12)+2*(LS(J,8)+LS(J,1))
+ BNUM=1
+ BDEN=1
+ DO 16 J = 1,MXP
+ PP=PRIM(J)**ABS(KPEX(J))
+ IF(KPEX(J) .GE. 0) THEN
+ BNUM=BNUM*PP
+ ELSE
+ BDEN=BDEN*PP
+ ENDIF
+ 16 CONTINUE
+ DNUM=SIGN(BNUM,BSUM)
+ DDEN=BDEN
+ 99 RETURN
+ 101 FORMAT('LIST OF PRIME NUMBERS EXHAUSTED',2X,3I5,2X,3I5)
+ END