File : lowerqdegs.adb


with Reps, Fouriers_Init;
use Reps, Fouriers_Init;
with Fouriers.Ops, Fouriers.IO;

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

procedure LowerQDegs is

  subtype Scalar is Interval;

  Lmax: constant Positive := 40;
  Wmax: constant Positive := 40;
  Pdeg: constant Positive := 16;
  Dho:  constant Natural  :=  8;

  package Scal_Fou is new Fouriers (Lmax => Lmax, Wmax => Wmax, Pdeg => Pdeg, Dho => Dho, Scalar => Scalar);
  package Scal_Fou_IO is new Scal_Fou.IO;
  package Scal_Fou_Ops is new Scal_Fou.Ops;
  use Scal_Fou, Scal_Fou_Ops, Scal_Fou_IO;

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

  Iname: constant String  := "40-16-8";     -- name stem for input
  Oname1: constant String := "30-16-8";     -- 1st name stem for output
  Oname2: constant String := "25-16-8";     -- 2nd name stem for output
  HDec:  constant Boolean := False;         -- use decimal IO for Hamiltonians

  Lmax1: constant Positive := 30;
  Wmax1: constant Positive := 30;
  Lmax2: constant Positive := 25;
  Wmax2: constant Positive := 25;

  H: Fourier;

begin

  Read("Fix-" & Iname & ".nh",0,(R.Q,One),H,HDec);
  QDegConvert(Lmax1,Wmax1,H);
  Write("Fix-" & Oname1 & ".nh",H,HDec);

  Read("Fix-" & Iname & ".nh",0,(R.Q,One),H,HDec);
  QDegConvert(Lmax2,Wmax2,H);
  Write("Fix-" & Oname2 & ".nh",H,HDec);

---

  Read("Hdq-" & Iname & ".nh",1,(R.Q,One),H,HDec);
  QDegConvert(Lmax1,Wmax1,H);
  Write("Hdq-" & Oname1 & ".nh",H,HDec);

  Read("Hdq-" & Iname & ".nh",1,(R.Q,One),H,HDec);
  QDegConvert(Lmax2,Wmax2,H);
  Write("Hdq-" & Oname2 & ".nh",H,HDec);

---

  Read("Hdp-" & Iname & ".nh",0,(R.Q,One),H,HDec);
  QDegConvert(Lmax1,Wmax1,H);
  Write("Hdp-" & Oname1 & ".nh",H,HDec);

  Read("Hdp-" & Iname & ".nh",0,(R.Q,One),H,HDec);
  QDegConvert(Lmax2,Wmax2,H);
  Write("Hdp-" & Oname2 & ".nh",H,HDec);

---

  Read("Hzp-" & Iname & ".nh",0,(Two,One),H,HDec); -- knows its domain
  QDegConvert(Lmax1,Wmax1,H);
  Write("Hzp-" & Oname1 & ".nh",H,HDec);

  Read("Hzp-" & Iname & ".nh",0,(Two,One),H,HDec); -- knows its domain
  QDegConvert(Lmax2,Wmax2,H);
  Write("Hzp-" & Oname2 & ".nh",H,HDec);

----

  Read("Hq-"  & Iname & ".nh",1,(R.Q,One),H,HDec);
  QDegConvert(Lmax1,Wmax1,H);
  Write("Hq-" & Oname1 & ".nh",H,HDec);

  Read("Hq-"  & Iname & ".nh",1,(R.Q,One),H,HDec);
  QDegConvert(Lmax2,Wmax2,H);
  Write("Hq-" & Oname2 & ".nh",H,HDec);

---

  Read("Hdi-" & Iname & ".nh",0,(Two,One),H,HDec); -- knows its domain
  QDegConvert(Lmax1,Wmax1,H);
  Write("Hdi-" & Oname1 & ".nh",H,HDec);

end LowerQDegs;