#include <cstdio>
#include <iostream>
#include <ctime>
#include <cmath>
#ifdef VTKFIG
#endif
#include "vtkfigFrame.h"
#include "vtkfigDataSet.h"
#include "vtkfigGridView.h"
#include "vtkfigScalarView.h"
{
      {-2,0},
      {0,0},
      {2,0},
      {2,2},
      {0.5,2},
      {0,1},
      {-0.5,2},
      {-2,2}
    });
      {0,1},
      {1,2},
      {2,3},
      {3,4},
      {4,5},
      {5,6},
      {6,7},
      {7,0},
      {5,1},
        });
  
  
  
      {-0.5,1},
      {0.5,1}
    });
  double vol=0.001;
  
  
  
  
  
  
  bcfac=0;
  bcval=0;
  bcval(4)=1.0;
  bcval(1)=0.0;
  source=0;
  auto fkappa = [](double u, double &kappa,double &dkappa  ) 
    { 
      kappa=0.001+1000.0*u*u*u*u*u*u;
      dkappa=6000.0*u*u*u*u*u; 
    };
  
  Sol=0.0;
  
  int iter=0;
  double oldnorm=1.0;
  double d=0.1;
  double ddelta=1.2;
  
  
  while (iter<100 && norm >1.0e-13)
  {
    printf("iter=%d norm=%8.4e contract=%8.5e\n", iter,norm,norm/oldnorm);
    Sol=Sol-d*Upd;
    iter++;
  }
  
#ifdef VTKFIG
  auto griddata=numcxx::vtkfigDataSet(grid);
  griddata->SetPointScalar(Sol ,"Sol");
  auto frame=vtkfig::Frame::New();
  frame->SetSize(800,400);
  frame->SetLayout(2,1);
  auto gridview=vtkfig::GridView::New();
  gridview->SetData(griddata);
  frame->AddFigure(gridview,0);
  
  auto solview=vtkfig::ScalarView::New();
  solview->SetData(griddata,"Sol");
  frame->AddFigure(solview,1);
  
  frame->Interact();
#endif
}