1
C/MEMBR ADD NAME=DPMUL,SSI=0
3
subroutine dpmul(p1,d1,p2,d2,p3,d3)
5
c ce sous programme effectue le calcul:
7
c p3(x) = p3(x) + (p1(x) * p2(x))
9
c ou p1, p2 et p3 sont des polynomes de degres d1, d2 et d3,
10
c respectivement. Ils sont classes en ordre croissant.
11
c Tous les parametres sont d'entree, sauf p3 et d3 qui sont
15
c date: 22 fevrier 1985.
17
implicit double precision (a-h,o-z)
18
double precision dlamch,ddot
19
double precision p1(*),p2(*),p3(*)
21
integer dmax,dmin,dsum
27
c fixation de dmax et dmin
29
if (d2 .gt. d1) dmax = d2
32
if (d3 .ge. dsum) goto 1
40
c cas des degres egaux a zero
41
if (d1 .eq. 0 .or. d2 .eq. 0) goto 53
46
w=ddot(i,p1(1),1,p2(1),-1)
48
if(abs(w1).gt.eps*max(abs(p3(i)),abs(w))) then
55
if (d1 .eq. d2) goto 21
59
if (d1 .lt. d2) goto 25
62
w=ddot(dmin+1, p1(k), 1, p2(1), -1)
64
if(abs(w1).gt.eps*max(abs(p3(i)),abs(w))) then
78
w=ddot(j, p1(k), 1, p2(l), -1)
80
if(abs(w1).gt.eps*max(abs(p3(i)),abs(w))) then
90
w=ddot(dmin+1, p2(k), -1, p1(1), 1)
92
if(abs(w1).gt.eps*max(abs(p3(i)),abs(w))) then
106
w=ddot(j, p1(l), 1, p2(k), -1)
108
if(abs(w1).gt.eps*max(abs(p3(i)),abs(w))) then
115
c cas des degres egaux a zero
116
53 if (d1 .eq. 0 .and. d2 .eq. 0) goto 100
118
if (d1 .eq.0) goto 60
123
if(abs(w1).gt.eps*max(abs(p3(i)),abs(w))) then
134
if(abs(w1).gt.eps*max(abs(p3(i)),abs(w))) then
141
100 p3(1) = p3(1) + p1(1) * p2(1)