program main c c ... array declarations. c real coef(120,5), rhs(100), u(100), wksp(600), ubar(1), a rparm(30) integer jcoef(120,5), iwksp(300), iparm(30), p(100), ip(100) external cg, rs6 c ndim = 120 mdim = 5 nw = 600 inw = 300 c c ... generate coef, jcoef, and rhs. c nx = 10 ny = 10 n = nx*ny h = 1.0/float(nx + 1) maxnz = 5 do 10 i = 1,n coef(i,1) = 6.0 coef(i,2) = -1.0 coef(i,3) = -2.0 coef(i,4) = -1.0 coef(i,5) = -2.0 jcoef(i,1) = i jcoef(i,2) = i + 1 jcoef(i,3) = i + nx jcoef(i,4) = i - 1 jcoef(i,5) = i - nx rhs(i) = 0.0 10 continue k = 0 do 40 j = 1,ny y = float(j)*h do 35 i = 1,nx x = float(i)*h k = k + 1 if (j .eq. 1) then rhs(k) = rhs(k) + 2.0 coef(k,5) = 0.0 jcoef(k,5) = 0 endif if (j .eq. ny) then rhs(k) = rhs(k) + 2.0*(1.0 + x) coef(k,3) = 0.0 jcoef(k,3) = 0 endif if (i .eq. 1) then rhs(k) = rhs(k) + 1.0 coef(k,4) = 0.0 jcoef(k,4) = 0 endif if (i .eq. nx) then rhs(k) = rhs(k) + 1.0 + y coef(k,2) = 0.0 jcoef(k,2) = 0 endif 35 continue 40 continue call dfault (iparm,rparm) c c ... now, reset some default values. c iparm(3) = 3 iparm(12) = 1 iparm(14) = 1 iparm(23) = 0 c c ... generate an initial guess for u and call nspcg. c call vfill (n,u,0.0) c call redblk (ndim,n,maxnz,coef,jcoef,p,ip,1,iwksp,ier) call nspcg (rs6,cg,ndim,mdim,n,maxnz,coef,jcoef,p,ip, a u,ubar,rhs,wksp,iwksp,nw,inw,iparm,rparm,ier) stop end