64 subroutine matupd(n, m, ws, wy, sy, ss, d, r, itail,
65 + iupdat, col, head, theta, rr, dr, stp, dtd)
67 integer n, m, itail, iupdat, col, head
68 double precision theta, rr, dr, stp, dtd, d(n), r(n),
69 + ws(n, m), wy(n, m), sy(m, m), ss(m, m)
91 if (iupdat .le. m)
then
93 itail = mod(head+iupdat-2,m) + 1
95 itail = mod(itail,m) + 1
96 head = mod(head,m) + 1
101 call dcopy(n,d,1,ws(1,itail),1)
102 call dcopy(n,r,1,wy(1,itail),1)
112 if (iupdat .gt. m)
then
115 call dcopy(j,ss(2,j+1),1,ss(1,j),1)
116 call dcopy(col-j,sy(j+1,j+1),1,sy(j,j),1)
123 sy(col,j) = ddot(n,d,1,wy(1,pointr),1)
124 ss(j,col) = ddot(n,ws(1,pointr),1,d,1)
125 pointr = mod(pointr,m) + 1
127 if (stp .eq. one)
then
130 ss(col,col) = stp*stp*dtd
subroutine matupd(n, m, ws, wy, sy, ss, d, r, itail, iupdat, col, head, theta, rr, dr, stp, dtd)
This subroutine updates matrices WS and WY, and forms the middle matrix in B.