File : mm1norm_w.adb


with Reps, Messages, Fouriers_Init, Lin, Lin.IO;
use Reps, Messages, Fouriers_Init, Lin, Lin.IO;
with RG_Ops;

with Intervals, Intervals.Ops, Intervals.IO;
use Intervals, Intervals.Ops, Intervals.IO;
pragma Elaborate_All(Intervals.Ops, Intervals.IO);

procedure MM1Norm_W is

-- arguments: Col1 Col2

  subtype Scalar is Interval;

  Lmax: constant Positive := 30;
  Wmax: constant Positive := 30;
  Pdeg: constant Positive := 12;
  Dho:  constant Natural  :=  6;

  Sigma: constant Rep := 0.85001;
  Kappa: constant Rep := Sigma/0.4;

  package MM1Norm_W_Ops is new RG_Ops (Lmax => Lmax, Wmax => Wmax, Pdeg => Pdeg, Dho => Dho,
                                       Sigma => Sigma, Kappa => Kappa, Scalar => Scalar);
  use MM1Norm_W_Ops;
  use Scal_Fou, Scal_Fou_Ops, Scal_Fou_IO;

  R: constant Weights := (0.85,0.15);      -- for domain of RG

  Iname: constant String := "30-16-8";     -- name stem for input Hamiltonians
  Yname: constant String := "85B04";       -- name stem for input matrices
  HDec:  constant Boolean := False;        -- use decimal IO for Hamiltonians

  Lhh:   constant Positive := 20;          -- number of columns processed in each MM1 call
  Nyy:   constant Positive := 294911;      -- maximum number of entries in sparse matrix W
  Err:   constant Radius  := 1.0E-12;      -- precision for NumFixComp3 etc.

  Col1:  constant Positive := GetArg(1);
  Col2:  constant Positive := GetArg(2);

  B3: Radius;
  E: Scalar;
  H1,Hdq,Hdp,Hq,Hzp,Hdi: Hamilton;
  W: Sparse(0 .. Nyy);

begin
  Trace;                                 -- activate TraceEnter/TraceLeave
  ShowParam;
  Show("Col1 =",Col1);
  Show("Col2 =",Col2);
  Show(" Lhh =",Lhh);
  Show("   R =",R);
  Show(" Err =",Err);

  Read("W-" & Yname & ".tdr",W);

  Read("Fix-" & Iname & ".nh",0,(Two,One),H1,HDec);
  Read("Hdq-" & Iname & ".nh",1,(Two,One),Hdq,HDec);
  Read("Hdp-" & Iname & ".nh",0,(Two,One),Hdp,HDec);
  Read("Hzp-" & Iname & ".nh",0,(Two,One),Hzp,HDec);
  B3 := Sup(Norm(R,Hzp));
  Read("Hq-"  & Iname & ".nh",1,(R.Q,B3),Hq,HDec);
  Read("Hdi-" & Iname & ".nh",0,(Two,One),Hdi,HDec);

  MM1Norm(Err,R,W,Hq,Hzp,H1,Hdq,Hdp,Hdi,Col1,Col2,Lhh,E);

end MM1Norm_W;