Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Dynlift/dynamic_mixed_subdivisions.ads, Revision 1.1.1.1
1.1 maekawa 1: with Standard_Integer_Vectors; use Standard_Integer_Vectors;
2: with Standard_Floating_Vectors;
3: with Lists_of_Integer_Vectors; use Lists_of_Integer_Vectors;
4: with Triangulations; use Triangulations;
5: with Integer_Faces_of_Polytope; use Integer_Faces_of_Polytope;
6: with Integer_Mixed_Subdivisions; use Integer_Mixed_Subdivisions;
7: with Arrays_of_Integer_Vector_Lists; use Arrays_of_Integer_Vector_Lists;
8:
9: package Dynamic_Mixed_Subdivisions is
10:
11: -- DESCRIPTION :
12: -- This package provides implementations of the dynamic lifting
13: -- algorithm for the construction of a mixed subdivision.
14:
15: -- OPTIONS :
16: -- 1. Choice of the order of the points;
17: -- 2. For vertices or not, allows to add interior points;
18: -- 3. With flattening or not, allows maximum lifting value.
19:
20: -- DATA STRUCTURES :
21:
22: type Face_Structure is record
23: l,last : List; -- l contains the lifted points of the faces,
24: -- last is a pointer to the last element of l
25: t : Triangulation; -- triangulation of the points in l
26: f : Faces; -- k-faces of conv(l)
27: end record;
28: type Face_Structures is array(integer range <>) of Face_Structure;
29:
30: -- BASIC VERSIONS : WITHOUT OUTPUT GENERICS :
31:
32: procedure Dynamic_Lifting
33: ( n : in natural; mix : in Vector; points : in Array_of_Lists;
34: order,inter,conmv : in boolean; maxli : in natural;
35: mixsub : in out Mixed_Subdivision;
36: fs : in out Face_Structures;
37: nbsucc,nbfail : in out Standard_Floating_Vectors.Vector );
38:
39: -- DESCRIPTION :
40: -- Application of the dynamic lifting algorithm to the points.
41:
42: -- ON ENTRY :
43: -- n dimension before lifting;
44: -- mix type of mixture;
45: -- points tuple of lists of points of length n;
46: -- order if true, then the points are already ordered and will
47: -- be processed like they occur in the list,
48: -- if false, then a random order will be chosen;
49: -- inter if true, then the list may contain interior points,
50: -- that are points x in conv(l\{x}),
51: -- if false, no interior points occur in the list;
52: -- conmv if true, then online checks on zero contributions will
53: -- be made, otherwise this will not happen;
54: -- maxli maximum value of the lifting function,
55: -- if = 0, then no flattening will be applied,
56: -- if > 0, then no points will be given a lifting value
57: -- larger than maxli, eventually flattening will be applied;
58: -- mixsub regular mixed subdivision of the lifted points;
59: -- fs the face structures of the lower hulls of the lifted
60: -- points, necessary to re-start the algorithm efficiently;
61: -- nbsucc number of successful face-face combinations;
62: -- nbfail number of unsuccessful face-face combinations.
63:
64: -- ON RETURN :
65: -- mixsub regular mixed subdivision of the lifted points;
66: -- fs face structures of the updated lower hulls;
67: -- nbsucc updated number of successful face-face combinations;
68: -- nbfail updated number of unsuccessful face-face combinations.
69:
70: -- EXTENDED VERSIONS : WITH OUTPUT GENERICS
71:
72: generic
73: with procedure Before_Flattening
74: ( mixsub : in out Mixed_Subdivision; fs : in Face_Structures );
75:
76: -- DESCRIPTION :
77: -- Before flattening, the current mixed subdivision and face
78: -- structures are given as parameter to the procedure above.
79:
80: procedure Dynamic_Lifting_with_Flat
81: ( n : in natural; mix : in Vector; points : in Array_of_Lists;
82: order,inter,conmv : in boolean; maxli : in natural;
83: mixsub : in out Mixed_Subdivision;
84: fs : in out Face_Structures;
85: nbsucc,nbfail : in out Standard_Floating_Vectors.Vector );
86:
87: -- DESCRIPTION :
88: -- Application of the dynamic lifting algorithm to the points.
89: -- Before flattening, the generic procedure will be invoked.
90: -- The parameters have the same meaning as in the basic version.
91:
92: generic
93: with procedure Process_New_Cells
94: ( mixsub : in out Mixed_Subdivision;
95: i : in natural; point : in vector );
96:
97: -- DESCRIPTION :
98: -- After the addition of a new point to the ith component,
99: -- this lifted point together with the new mixed cells are returned.
100: -- After the computation of the initial cell, i=0.
101:
102: procedure Dynamic_Lifting_with_New
103: ( n : in natural; mix : in Vector; points : in Array_of_Lists;
104: order,inter,conmv : in boolean; maxli : in natural;
105: mixsub : in out Mixed_Subdivision;
106: fs : in out Face_Structures;
107: nbsucc,nbfail : in out Standard_Floating_Vectors.Vector );
108:
109: -- DESCRIPTION :
110: -- Application of the dynamic lifting algorithm to the points.
111: -- After each addition of a point, the generic procedure will
112: -- be invoked.
113: -- The parameters have the same meaning as in the basic version.
114:
115: generic
116: with procedure Before_Flattening
117: ( mixsub : in out Mixed_Subdivision; fs : in Face_Structures );
118:
119: -- DESCRIPTION :
120: -- Before flattening, the current mixed subdivision with
121: -- the current lists of lifted points are given.
122:
123: with procedure Process_New_Cells
124: ( mixsub : in out Mixed_Subdivision;
125: i : in natural; point : in vector );
126:
127: -- DESCRIPTION :
128: -- After the addition of a new point to the ith component,
129: -- this lifted point together with the new simplices are returned.
130: -- After the computation of the initial cell, i=0.
131:
132: procedure Dynamic_Lifting_with_Flat_and_New
133: ( n : in natural; mix : in Vector; points : in Array_of_Lists;
134: order,inter,conmv : in boolean; maxli : in natural;
135: mixsub : in out Mixed_Subdivision;
136: fs : in out Face_Structures;
137: nbsucc,nbfail : in out Standard_Floating_Vectors.Vector );
138:
139: -- DESCRIPTION :
140: -- Application of the dynamic lifting algorithm to the list l.
141: -- Before flattening, the first generic procedure will be invoked.
142: -- After each addition of a point, the second generic procedure
143: -- will be invoked.
144: -- The parameters have the same meaning as in the basic version.
145:
146: end Dynamic_Mixed_Subdivisions;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>