struct Mglin { Int n,ng; MatDoub *uj,*uj1; NRvector *> rho; Mglin(MatDoub_IO &u, const Int ncycle) : n(u.nrows()), ng(0) { Int nn=n; while (nn >>= 1) ng++; if ((n-1) != (1 << ng)) throw("n-1 must be a power of 2 in mglin."); nn=n; Int ngrid=ng-1; rho.resize(ng); rho[ngrid] = new MatDoub(nn,nn); *rho[ngrid]=u; while (nn > 3) { nn=nn/2+1; rho[--ngrid]=new MatDoub(nn,nn); rstrct(*rho[ngrid],*rho[ngrid+1]); } nn=3; uj=new MatDoub(nn,nn); slvsml(*uj,*rho[0]); for (Int j=1;j