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, 11 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;