#include "nr.h" namespace { void mg(int j, Mat_IO_DP &u, Mat_I_DP &rhs) { using namespace NR; const int NPRE=1,NPOST=1; int jpost,jpre,nc,nf; nf=u.nrows(); nc=(nf+1)/2; if (j == 0) slvsml(u,rhs); else { Mat_DP res(nc,nc),v(0.0,nc,nc),temp(nf,nf); for (jpre=0;jpre>= 1) ng++; if ((n-1) != (1 << ng)) nrerror("n-1 must be a power of 2 in mglin."); Vec_Mat_DP_p rho(ng); nn=n; ngrid=ng-1; rho[ngrid] = new Mat_DP(nn,nn); copy(*rho[ngrid],u); while (nn > 3) { nn=nn/2+1; rho[--ngrid]=new Mat_DP(nn,nn); rstrct(*rho[ngrid],*rho[ngrid+1]); } nn=3; uj=new Mat_DP(nn,nn); slvsml(*uj,*rho[0]); for (j=1;j