#include <iostream>
#include <iomanip>
#include <cmath>
#include "nr.h"
using namespace std;

// Driver for routine mglin

int main(void)
{
        const int NSTEP=4,JMAX=33;
        int i,j,midl=JMAX/2;
        Mat_DP f(JMAX,JMAX),u(0.0,JMAX,JMAX);

        u[midl][midl]=2.0;
        NR::mglin(u,2);
        cout << "MGLIN solution:" << endl;
        cout << fixed << setprecision(4);
        for (i=0;i<JMAX;i+=NSTEP) {
          for (j=0;j<JMAX;j+=NSTEP) cout << setw(8) << u[i][j];
          cout << endl;
        }
        cout << endl << "Test that solution satisfies difference equations:";
        cout << endl;
        for (i=NSTEP;i<JMAX-1;i+=NSTEP) {
          for (j=NSTEP;j<JMAX-1;j+=NSTEP)
            f[i][j]=u[i+1][j]+u[i-1][j]+u[i][j+1]+u[i][j-1]
              -4.0*u[i][j];
          cout << "       ";
          for (j=NSTEP;j<JMAX-1;j+=NSTEP)
            cout << setw(8) << f[i][j]*(JMAX-1)*(JMAX-1);
          cout << endl;
        }
        return 0;
}