1
subroutine hessl2(neq,tq,pd,nrowpd)
3
c Elle etablit la valeur de la Hessienne, derivee
4
c seconde de la fonction phi au point q .
6
c subroutine hessl2(neq,tq,pd,nrowpd)
8
c - neq. tableau entier de taille 3+(nq+1)*(nq+2)
9
c neq(1)=nq est le degre effectif du polynome tq (ou q).
10
c neq(2)=ng est le nombre de coefficient de fourier
11
c neq(3)=dgmax degre maximum pour q (l'adresse des coeff de fourier dans
13
c neq(4:(nq+1)*(nq+2)) tableau de travail entier
14
c - tq. tableau reel de taille au moins
15
c 6+dgmax+5*nq+6*ng+nq*ng+nq**2*(ng+1)
16
c tq(1:nq+1) est le tableau des coefficients du polynome.
17
c tq(dgmax+2:dgmax+ng+2) est le tableau des coefficients
19
c tq(dgmax+ng+3:) est un tableau de travail de taille au moins
20
c 5+5*nq+5*ng+nq*ng+nq**2*(ng+1)
22
c - pd matrice hessienne
25
implicit double precision (a-h,o-y)
26
dimension tq(*),pd(nrowpd,*)
32
c decoupage du tableau neq
37
c decoupage du tableau tq
46
id2aux=id1aux+(ng+1)*nq
47
iw=id2aux+nq*nq*(ng+1)
49
call hl2(nq,tq,tq(itg),ng,pd,nrowpd,tq(itr),
50
$ tq(itp),tq(itv),tq(itw),tq(itij),tq(id1aux),tq(id2aux),
51
$ neq(jmxnv),neq(jmxnw))
57
subroutine hl2(nq,tq,tg,ng,pd,nrowpd,tr,tp,tv,tw,tij,d1aux,d2aux,
61
implicit double precision (a-h,o-y)
62
dimension tq(nq+1),tg(ng+1),pd(nrowpd,*)
64
dimension tr(nq+ng+1),tv(nq+ng+1),tp(nq+ng+1),tw(nq+ng+1),
65
& tij(ng+1),d1aux(ng+1,nq),d2aux(nq,nq,ng+1)
66
integer maxnv(nq),maxnw(nq,nq)
68
c --- Calcul des derivees premieres de 'vq' ---
72
c . division euclidienne de z^nq*g par q
73
call dset(nq,0.0d0,tp,1)
74
call dcopy(ng+1,tg,1,tp(nq+1),1)
75
call dpodiv(tp,tq,nq+ng,nq)
77
c . calcul de Lq et Vq
78
call lq(nq,tq,tr,tg,ng)
80
c . division euclidienne de Vq par q
81
call dcopy(ng+1,tr(ltvq),1,tv,1)
82
call dset(nq,0.0d0,tv(ng+2),1)
83
call dpodiv(tv,tq,ng,nq)
87
call dzdivq(ichoi1,nv1,tp,nq,tq)
89
call mzdivq(ichoi2,nv2,tv,nq,tq)
93
d1aux(j,i)= tp(nq+j)-tv(nq+j)
97
c --- Calcul des derivees secondes de 'vq' ---
100
call dset(ng+nq+1,0.0d0,tw,1)
103
call dcopy(maxnv(i)+1,d1aux(1,i),1,tw(nq),1)
105
call dpodiv(tw,tq,nw,nq)
109
call dzdivq(ichoix,nw,tw,nq,tq)
112
d2aux(i,j,k)=tw(nq+k)
118
c --- Conclusion des calculs sur la hessienne ---
122
call scapol(maxnv(i),d1aux(1,i),maxnv(j),
125
if (maxnw(i,j).gt.maxnw(j,i)) then
128
do 60 k=minij+2,maxij+1
129
tij(k)= -d2aux(i,j,k)
131
else if (maxnw(i,j).lt.maxnw(j,i)) then
134
do 70 k=minij+2,maxij+1
135
tij(k)= -d2aux(j,i,k)
143
tij(k)= -d2aux(i,j,k) -d2aux(j,i,k)
146
call scapol(maxij,tij,ng,tr(ltvq),y2)
149
pd(i,i)=-2.0d+0 * (y1+y2)
151
pd(i,j)=-2.0d+0 * (y1+y2)
152
pd(j,i)=-2.0d+0 * (y1+y2)