code 34220; procedure CONJ GRAD( MATVEC, X, R, L, N, GO ON, ITERATE, NORM2); value L, N; procedure MATVEC; array X, R; boolean GO ON; integer L, N, ITERATE; real NORM2; begin array P, AP[ L: N]; integer I; real A, B, PRR, RRP; for ITERATE:= 0, ITERATE + 1 while GO ON do begin if ITERATE = 0 then begin MATVEC( X, P); for I:= L step 1 until N do P[ I]:= R[ I]:= R[ I] - P[ I]; PRR:= VECVEC( L, N, 0, R, R) end else begin B:= RRP / PRR; PRR:= RRP; for I:= L step 1 until N do P[ I]:= R[ I] + B * P[ I] end; MATVEC( P, AP); A:= PRR / VECVEC( L, N, 0, P, AP); ELMVEC( L, N, 0, X, P, A); ELMVEC( L, N, 0, R, AP, -A); NORM2:= RRP:= VECVEC( L, N, 0, R, R) end end CONJ GRAD; eop