20 subroutine glassofast(n,S,L,thr,maxIt,msg,warm,X,W,Wd,WXj,info,brk)
23 integer n, warm, msg, maxIt
26 real S(n,n), L(n,n), X(n,n), W(n,n), Wd(n), WXj(n)
91parameter(eps = epsilon(eps))
95 shr = shr - abs(s(i, i))
102 w(i,i) = w(i,i) + l(i,i)
106 x(i,i) = 1.0/max(w(i,i),eps)
112if (thrlasso .lt. 2*eps)
then
120 x(1:n,i) = -x(1:n,i)/x(i,i)
125 wd(i) = s(i,i) + l(i,i)
129 if (msg .ne. 0)
write(0,
"(A,I4)",advance=
'no')
"␛[1K␛[1G iteration ="
135 if (x(i,j) .ne. 0.0)
then
136 wxj = wxj + w(:,i)*x(i,j)
143 a = s(i,j) - wxj(i) + wd(i)*x(i,j)
151 if (delta .ne. 0.0)
then
153 wxj(1:n) = wxj(1:n) + w(:,i)*delta
154 dlx = max(dlx, abs(delta))
158 if (dlx .lt. thrlasso)
then
166 dw = max(dw, sum(abs(wxj(1:n) - w(:,j))))
171 if (dw .le. shr)
then
175if (msg .ne. 0)
write(0,*)
177 tmp = 1/(wd(i) - sum(x(:,i)*w(:,i)))
178 x(1:n,i) = -tmp*x(1:n,i)
182 x(i+1:n,i) = (x(i+1:n,i) + x(i,i+1:n))/2;
183 x(i,i+1:n) = x(i+1:n,i)
subroutine glassofast(n, s, l, thr, maxit, msg, warm, x, w, wd, wxj, info, brk