00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <stdio.h>
00019 #include <string.h>
00020 #include <stdlib.h>
00021
00022 #include <polylib/polylib.h>
00023
00024
00025 int main( int argc, char **argv)
00026 {
00027 int i;
00028 const char **param_name;
00029 Matrix *C1, *P1;
00030 Polyhedron *P, *C;
00031 Enumeration *e, *en;
00032
00033 Matrix * Validity_Lattice;
00034 int nb_parms;
00035
00036 #ifdef EP_EVALUATION
00037 Value *p, *tmp;
00038 int k;
00039 #endif
00040
00041 P1 = Matrix_Read();
00042 C1 = Matrix_Read();
00043 nb_parms = C1->NbColumns-2;
00044 if(nb_parms < 0) {
00045 fprintf( stderr, "Not enough parameters !\n" );
00046 exit(0);
00047 }
00048
00049
00050 param_name = Read_ParamNames(stdin,nb_parms);
00051
00052
00053
00054 mpolyhedron_deflate(P1,nb_parms);
00055
00056
00057 e = Ehrhart_Quick_Apx(P1, C1, &Validity_Lattice, 1024);
00058
00059 Matrix_Free(C1);
00060 Matrix_Free(P1);
00061
00062 printf("============ Ehrhart polynomial quick polynomial lower bound ============\n");
00063 show_matrix(Validity_Lattice);
00064 for( en=e ; en ; en=en->next ) {
00065 Print_Domain(stdout,en->ValidityDomain, param_name);
00066 print_evalue(stdout,&en->EP, param_name);
00067 printf( "\n-----------------------------------\n" );
00068 }
00069
00070 #ifdef EP_EVALUATION
00071 if( isatty(0) && nb_parms != 0)
00072 {
00073 printf("Evaluation of the Ehrhart polynomial :\n");
00074 p = (Value *)malloc(sizeof(Value) * (nb_parms));
00075 for(i=0;i<nb_parms;i++)
00076 value_init(p[i]);
00077 FOREVER {
00078 fflush(stdin);
00079 printf("Enter %d parameters : ",nb_parms);
00080 for(k=0;k<nb_parms;++k) {
00081 scanf("%s",str);
00082 value_read(p[k],str);
00083 }
00084 fprintf(stdout,"EP( ");
00085 value_print(stdout,VALUE_FMT,p[0]);
00086 for(k=1;k<nb_parms;++k) {
00087 fprintf(stdout,",");
00088 value_print(stdout,VALUE_FMT,p[k]);
00089 }
00090 fprintf(stdout," ) = ");
00091 value_print(stdout,VALUE_FMT,*(tmp=compute_poly(en,p)));
00092 free(tmp);
00093 fprintf(stdout,"\n");
00094 }
00095 }
00096 #endif
00097
00098 while( e )
00099 {
00100 free_evalue_refs( &(e->EP) );
00101 Polyhedron_Free( e->ValidityDomain );
00102 en = e ->next;
00103 free( e );
00104 e = en;
00105 }
00106 Free_ParamNames(param_name, nb_parms);
00107 return 0;
00108 }