code 34250; procedure ITISOL(A, LU, N, AUX, RI, CI, B); value N; integer N; array A, LU, AUX, B; integer array RI, CI; begin integer I, ITER, MAXITER; real MAXERX, ERX, NRMRES, NRMSOL, R, RR; array RES, SOL[1:N]; MAXERX:= ERX:= AUX[10]; MAXITER:= AUX[12]; INIVEC(1, N, SOL, 0); DUPVEC(1, N, 0, RES, B); for ITER:= 1, ITER + 1 while ITER <= MAXITER & MAXERX < ERX do begin SOLELM(LU, N, RI, CI, RES); ERX:= NRMSOL:= NRMRES:= 0; for I:= 1 step 1 until N do begin R:= RES[I]; ERX:= ERX + ABS(R); RR:= SOL[I] + R; SOL[I]:= RR; NRMSOL:= NRMSOL + ABS(RR) end; ERX:= ERX / NRMSOL; for I:= 1 step 1 until N do begin LNGMATVEC(1, N, I, A, SOL, - B[I], 0, R, RR); R:= - (R + RR); RES[I]:= R; NRMRES:= NRMRES + ABS(R) end end ITERATION; DUPVEC(1, N, 0, B, SOL); AUX[11]:= ERX; AUX[13]:= NRMRES end ITISOL eop