[BACK]Return to dispatch_predictors.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Continuation

File: [local] / OpenXM_contrib / PHC / Ada / Continuation / dispatch_predictors.adb (download)

Revision 1.1.1.1 (vendor branch), Sun Oct 29 17:45:22 2000 UTC (23 years, 6 months ago) by maekawa
Branch: PHC, MAIN
CVS Tags: v2, maekawa-ipv6, RELEASE_1_2_3, RELEASE_1_2_2_KNOPPIX_b, RELEASE_1_2_2_KNOPPIX, RELEASE_1_2_2, RELEASE_1_2_1, HEAD
Changes since 1.1: +0 -0 lines

Import the second public release of PHCpack.

OKed by Jan Verschelde.

with Predictors;                         use Predictors;

package body Dispatch_Predictors is

  procedure Single_Predictor
              ( s : in out Solu_Info; p : in Pred_Pars;
                prev_x,prev_v : in Vector; v : in out Vector;
                prev_t,target : in Complex_Number;
                step,tol : in double_float; trial : in out natural ) is

    procedure TR_Predictor is new Tangent_Single_Real_Predictor(Norm,dH,dH);
    procedure TC_Predictor is new Tangent_Single_Complex_Predictor(Norm,dH,dH);
    procedure TG_Predictor is new Tangent_Geometric_Predictor(Norm,dH,dH);
    procedure HR_Predictor is new Hermite_Single_Real_Predictor(Norm,dH,dH);

  begin
    case p.predictor_type is
      when 0 => Secant_Single_Real_Predictor
                  (s.sol.v,prev_x,s.sol.t,prev_t,target,step,tol,p.power);
      when 1 => Secant_Single_Complex_Predictor
                  (s.sol.v,prev_x,s.sol.t,prev_t,target,step,tol,
                   p.dist_target,trial);
      when 2 => Secant_Geometric_Predictor
                  (s.sol.v,prev_x,s.sol.t,prev_t,target,step,tol);
      when 3 => TR_Predictor(s.sol.v,s.sol.t,target,step,tol,p.power);
                s.nsyst := s.nsyst + 1;
      when 4 => TC_Predictor
                  (s.sol.v,s.sol.t,target,step,tol,p.dist_target,trial);
                s.nsyst := s.nsyst + 1;
      when 5 => TG_Predictor(s.sol.v,s.sol.t,target,step,tol);
                s.nsyst := s.nsyst + 1;
      when 6 => HR_Predictor
                  (s.sol.v,prev_x,s.sol.t,prev_t,target,v,prev_v,step,tol);
                s.nsyst := s.nsyst + 1;
      when others => null;
    end case;
  end Single_Predictor;

  procedure Multiple_Predictor
              ( s : in out Solu_Info_Array; p : in Pred_Pars;
                sa : in out Solution_Array; prev_sa : in Solution_Array;
                t : in out Complex_Number; prev_t,target : in Complex_Number;
                step,tol,dist : in double_float; trial : in natural ) is

    cnt : natural := 0;

    procedure TR_Predictor is new Tangent_Multiple_Real_Predictor(Norm,dH,dH);
    procedure TC_Predictor is
      new Tangent_Multiple_Complex_Predictor(Norm,dH,dH);

  begin
    case p.predictor_type is
      when 0 => Secant_Multiple_Real_Predictor
                  (sa,prev_sa,t,prev_t,target,step,tol,dist,p.power);
      when 1 => Secant_Multiple_Complex_Predictor
                  (sa,prev_sa,t,prev_t,target,step,tol,dist,
                   p.dist_target,trial);
      when 3 => TR_Predictor(sa,t,target,step,tol,dist,cnt,p.power);
                for k in s'range loop
                  s(k).nsyst := s(k).nsyst + 1;
                end loop;
      when 4 => TC_Predictor
                  (sa,t,target,step,tol,dist,p.dist_target,trial,cnt);
                for k in s'range loop
                  s(k).nsyst := s(k).nsyst + 1;
                end loop;
      when others => null;
    end case;
  end Multiple_Predictor;

end Dispatch_Predictors;