|
#define | COPYRIGHT1 "(C) Benno Bueeler and Andreas Enge, {bueeler,enge}@ifor.math.ethz.ch" |
|
#define | COPYRIGHT2 " Developed in the ETHZ-EPFL project on Optimisation and Computational" |
|
#define | COPYRIGHT3 " Geometry with Komei Fukuda" |
|
#define | VERSION "1" |
|
#define | VERSION_DATE "March 1998" |
|
#define | T01 "The package computes the volume of a polytope whose vertices, defining" |
|
#define | T02 "hyperplanes and/or incidences of vertices and facettes are stored in files" |
|
#define | T03 "following Avis' and Fukuda's polytope format. The vertices are supposed to" |
|
#define | T04 "be in a file with extension '.ine', the hyperplanes in '.ext' and the" |
|
#define | T05 "incidences in '.icd' (see the sample files 'square.ext', 'square.icd' and" |
|
#define | T06 "'square.ine').\n" |
|
#define | T07 "Its basic call is 'vinci file' where 'file' stands for the polyhedron file" |
|
#define | T08 "name without extension, e. g. 'vinci square'. In this case the existing files" |
|
#define | T09 "and installed additional packages are analysed and according to the problem" |
|
#define | T10 "type an appropriate volume computation method is chosen automatically." |
|
#define | T11 "" |
|
#define | T12 "The following additional parameters are possible:" |
|
#define | T13 "-m followed by the label of a specific volume computation method; to see a" |
|
#define | T14 " list of the implemented methods, use 'vinci -m' without any label." |
|
#define | T15 "-p1, -p2 or -p3 which are valid for some methods. They determine the space" |
|
#define | T16 " and time complexity. Higher values lead to more space consume and a fast-" |
|
#define | T17 " er execution. If none of the parameters is specified the value" |
|
#define | T18 " DEFAULT_PRECOMP defined in 'vinci.h' is chosen." |
|
#define | T19 "-s directly followed by a natural integer. The value determines for how many" |
|
#define | T20 " recursion levels intermediate results are stored. A higher value speeds" |
|
#define | T21 " up certain methods considerably while needing more storage space." |
|
#define | T22 "-r directly followed by an integer. The value sets the random seed used for" |
|
#define | T23 " determining the objective function for Lawrence's formula." |
|
#define | T24 "\nFor more information please consult the manual." |
|
#define | LRS_EXEC "lrs" |
|
#define | CDD_EXEC "cddf+" |
|
#define | QHULL_EXEC "qhull" |
|
#define | QHULL_OPTIONS "d i Q0 Qz" |
|
#define | PIVOTING 1 |
|
#define | MIN_PIVOT 0.5 |
|
#define | PIVOTING_LASS 0 |
|
#define | MIN_PIVOT_LASS 0.1 |
|
#define | MAX_PRECOMP 3 |
|
#define | DEFAULT_PRECOMP 1 |
|
#define | DEFAULT_STORAGE 20 |
|
#define | STATISTICS |
|
#define | NO_RATIONAL |
|
#define | NO_COG |
|
#define | EPSILON 1e-10 |
|
#define | ARRAYSIZESTEP 5 |
|
#define | FALSE 0 |
|
#define | TRUE 1 |
|
#define | EOLN 10 /* end of line character */ |
|
#define | NONE 0 /* constants for data types in files */ |
|
#define | INTEGER_T 1 |
|
#define | REAL_T 2 |
|
#define | RATIONAL_T 3 |
|
#define | RCH 1 /* constants for the volume computation methods */ |
|
#define | GS 2 |
|
#define | GSH 3 |
|
#define | HOT 4 |
|
#define | HOTH 5 |
|
#define | CDDP 6 |
|
#define | CDDM 7 |
|
#define | QHULL 8 |
|
#define | LAWD 9 |
|
#define | LAWND 10 |
|
#define | RLASS 11 |
|
#define | LRS 12 |
|
#define | PREPARE 1 /* constants for precomputation of hyperplane intersections */ |
|
#define | RETRIEVE 2 |
|
#define | FREE 3 |
|
#define | KEY_PLANES 1 /* constants for the key type actually used in the balanced */ |
|
#define | KEY_VERTICES 2 /* tree routines */ |
|
#define | KEY_PLANES_VAR 3 |
|
#define | SCHMIDT 1 /* constants for the orthonormalisation technique used */ |
|
#define | HOUSEHOLDER 2 |
|
#define | STAT_SMALLEST_EXP -200 |
|
#define | STAT_BIGGEST_EXP 200 |
|
|
void * | my_malloc (long int size) |
|
void * | my_realloc (void *pointer, long int new_size, long int size_diff) |
|
void | my_free (void *pointer, long int size) |
|
T_Vertex * | create_vertex () |
|
void | free_vertex (T_Vertex *v) |
|
void | create_hyperplanes () |
|
void | free_hyperplanes () |
|
void | create_incidence () |
|
void | free_incidence () |
|
T_VertexSet * | create_faces () |
|
void | free_faces (T_VertexSet *face) |
|
rational *** | create_basis () |
|
void | free_basis (rational ***basis) |
|
rational * | create_fact () |
|
void | free_fact (rational *fact) |
|
rational * | create_vector () |
|
void | free_vector (rational *v) |
|
int * | create_int_vector (int n) |
|
void | free_int_vector (int *v, int n) |
|
rational ** | create_matrix (int m, int n) |
|
void | redim_matrix (rational ***A, int m_alt, int m_neu, int n) |
|
void | free_matrix (rational **A, int m, int n) |
|
void | create_key (T_Key *key, int key_choice) |
|
void | free_key (T_Key key, int key_choice) |
|
void | tree_out (T_Tree **ppr, int *pi_balance, T_Key key, rational **volume, T_Key **keyfound, int key_choice) |
|
void | add_hypervar (T_LassInt hyperplane, T_LassInt variable, T_Key *key) |
|
void | delete_hypervar (T_LassInt hyperplane, T_LassInt variable, T_Key *key) |
|
T_VertexSet | create_empty_set (void) |
|
T_VertexSet | duplicate_set (T_VertexSet s) |
|
rational | normalise_vertices () |
|
void | print_set (FILE *f, T_VertexSet s) |
|
boolean | empty (T_VertexSet s) |
|
boolean | is_in_set (T_Vertex *e, T_VertexSet s) |
|
boolean | is_contained (T_VertexSet s1, T_VertexSet s2) |
|
boolean | are_equal_sets (T_VertexSet s1, T_VertexSet s2) |
|
void | add_element (T_VertexSet *s, T_Vertex *e) |
|
boolean | delete_element (T_VertexSet *s, T_Vertex *e) |
|
void | intersect (T_VertexSet s1, T_VertexSet s2, T_VertexSet *inter) |
|
T_VertexSuperset * | create_empty_superset (void) |
|
void | free_superset (T_VertexSuperset **S) |
|
void | print_superset (FILE *f, T_VertexSuperset *S) |
|
boolean | is_in_superset (T_VertexSet s, T_VertexSuperset *S) |
|
void | add_superelement (T_VertexSuperset **S, T_VertexSet s) |
|
rational | factorial (int n) |
|
rational | det_and_invert (rational **A, int rows, int columns, boolean verbose) |
|
void | simplex_volume (T_VertexSet S, rational *volume, boolean verbose) |
|
T_VertexSet * | do_intersections (int precomp, int i1, int i2, int i3, int action) |
|
rational | add_orthonormal_schmidt (int d, T_VertexSet face, rational **B, T_Vertex *vertex) |
|
rational | orthonormal_schmidt (int d, T_VertexSet face, rational **B) |
|
rational | add_orthonormal_householder (int d, T_VertexSet face, rational **H, T_Vertex *vertex) |
|
rational | orthonormal_householder (int d, T_VertexSet face, rational **H) |
|
void | volume_ch_file (rational *volume, char vertexfile[255], char incidencefile[255]) |
|
void | volume_ortho_file (rational *volume, char vertexfile[255], char incidencefile[255], int key_choice, int ortho_choice) |
|
void | volume_cdd_file (rational *volume, int direction, char vertexfile[255]) |
|
void | volume_qhull_file (rational *volume, char vertexfile[255]) |
|
void | volume_lawrence_file (rational *volume, char vertexfile[255], char planesfile[255], char incidencefile[255]) |
|
void | volume_lawrence_lrs_file (rational *volume, char planesfile[255]) |
|
void | volume_lrs_file (rational *volume, char *rational_volume, char vertexfile[255]) |
|
void | volume_lasserre_file (double planes2[7][4], rational *volume) |
|
Definition at line 870 of file vinci_lass.c.
References compare_key(), create_key(), T_Key::d, duplicate_set(), FALSE, G_d, G_Minus1, G_OutOfMem, G_Storage, T_Key::hyperplanes, T_Key::hypervar, if(), key, KEY_PLANES, KEY_PLANES_VAR, KEY_VERTICES, my_malloc(), p1, T_Key::set, T_Tree::tree_b, T_Tree::tree_l, tree_out(), T_Tree::tree_r, TRUE, T_Key::variables, T_Key::vertices, and T_Tree::vol.
895 (*ppr) -> tree_l = NULL;
896 (*ppr) -> tree_r = NULL;
897 (*ppr) -> tree_b = 0;
904 (
G_d + 1) * sizeof (
int));
918 *
volume = &((*ppr) -> vol);
924 cmp =
compare_key ((*ppr) -> key, key, key_choice);
929 tree_out (&((*ppr) -> tree_l), pi_balance, key,
volume, keyfound, key_choice);
932 switch ((*ppr) -> tree_b)
936 (*ppr) -> tree_b = 0;
941 (*ppr) -> tree_b = -1;
944 p1 = (*ppr) -> tree_l;
945 if (p1 -> tree_b == -1)
947 (*ppr) -> tree_l = p1->
tree_r;
948 p1 -> tree_r = (*ppr);
949 (*ppr) -> tree_b = 0;
955 p1 -> tree_r = p2 -> tree_l;
957 (*ppr) -> tree_l = p2 -> tree_r;
958 p2 -> tree_r = (*ppr);
959 if (p2 -> tree_b == -1)
960 (*ppr) -> tree_b = 1;
961 else (*ppr) -> tree_b = 0;
964 else p1 -> tree_b = 0;
967 (*ppr) -> tree_b = 0;
976 tree_out (&((*ppr) -> tree_r), pi_balance, key,
volume, keyfound, key_choice);
979 switch ((*ppr) -> tree_b)
982 (*ppr) -> tree_b = 0;
989 p1 = (*ppr) -> tree_r;
990 if (p1 -> tree_b == 1)
992 (*ppr) -> tree_r = p1 -> tree_l;
993 p1 -> tree_l = (*ppr);
994 (*ppr) -> tree_b = 0;
1000 p1 -> tree_l = p2 -> tree_r;
1002 (*ppr) -> tree_r = p2 -> tree_l;
1003 p2 -> tree_l = (*ppr);
1004 if (p2 -> tree_b == 1)
1005 (*ppr) -> tree_b = -1;
1006 else (*ppr) -> tree_b = 0;
1007 if (p2 -> tree_b == -1)
1009 else p1 -> tree_b = 0;
1012 (*ppr) -> tree_b = 0;
1013 *pi_balance =
FALSE;
1021 *pi_balance =
FALSE;
1022 *
volume = &((*ppr) -> vol);
1023 *keyfound = &((*ppr) ->
key);
struct T_Key::@39 vertices
void * my_malloc(long int size)
void tree_out(T_Tree **ppr, int *pi_balance, T_Key key, rational **volume, T_Key **keyfound, int key_choice)
T_VertexSet duplicate_set(T_VertexSet s)
int volume(const block *b)
struct T_Key::@40 hypervar
void create_key(T_Key *key, int key_choice)
static int compare_key(T_Key key1, T_Key key2, int key_choice)