[BACK]Return to phc6.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / phc

Diff for /OpenXM/src/phc/phc6.c between version 1.5 and 1.6

version 1.5, 2002/05/02 11:54:33 version 1.6, 2019/01/01 07:17:52
Line 1 
Line 1 
 /*  phc6.c ,  yama:1999/sm1-prog/phc6.c */  /*  phc6.c ,  yama:1999/sm1-prog/phc6.c */
 /* $OpenXM: OpenXM/src/phc/phc6.c,v 1.4 2002/05/02 02:51:37 takayama Exp $ */  /* $OpenXM: OpenXM/src/phc/phc6.c,v 1.5 2002/05/02 11:54:33 takayama Exp $ */
 /* This is a simple C interface to the black-box solver of phc.  /* This is a simple C interface to the black-box solver of phc.
 ** Requirements:  ** Requirements:
 **  1) executable version of phc will be searched in the following order:  **  1) executable version of phc will be searched in the following order:
Line 14 
Line 14 
 #include <sys/stat.h>  #include <sys/stat.h>
 #include <unistd.h>  #include <unistd.h>
 #include <stdlib.h>  #include <stdlib.h>
   #include <string.h>
   #include  "gc.h"
   
 /* Definition of class identifiers. */  /* Definition of class identifiers. */
 #define Snull             0  #define Snull             0
Line 37  struct phc_object{
Line 39  struct phc_object{
 /* Memory allocation function.  /* Memory allocation function.
    Use your favorite memory allocation function.     Use your favorite memory allocation function.
    I recommend not to use malloc and to use gc4.14 for large applications. */     I recommend not to use malloc and to use gc4.14 for large applications. */
 #define sGC_malloc(n)   malloc(n)  //#define sGC_malloc(n)   malloc(n)
   #define sGC_malloc(n)   GC_malloc(n)
   
 /********** macros to use Sarray **************/  /********** macros to use Sarray **************/
 /* put to Object Array */  /* put to Object Array */
Line 61  struct phc_object phc_complexTo(double r, double i);
Line 64  struct phc_object phc_complexTo(double r, double i);
   
 int phc_scan_for_string(FILE *fp, char str[]);  int phc_scan_for_string(FILE *fp, char str[]);
 struct phc_object phc_scan_solutions(FILE *fp, int npaths, int dim );  struct phc_object phc_scan_solutions(FILE *fp, int npaths, int dim );
 struct phc_object phc_scan_output_of_phc(char *fname);  struct phc_object phc_scan_output_of_phc(FILE *fp);
 struct phc_object phc_call_phc(char *sys);  struct phc_object phc_call_phc(char *sys);
   
 int phc_verbose = 0;  int phc_verbose = 0;
 int phc_overwrite = 1;  /* Always use tmp.input.0 and tmp.output.0  int phc_overwrite = 1;  /* Always use tmp.input.0 and tmp.output.0
                            for work files. */                             for work files. */
   
 main(int argc, char *argv[]) {  int main(int argc, char *argv[]) {
   struct phc_object ob;    struct phc_object ob;
     struct phc_object ob2;
     int n2;
   int n,i,dim;    int n,i,dim;
 #define INPUTSIZE 4096  #define INPUTSIZE 4096
   char input[INPUTSIZE];    char input[INPUTSIZE];
Line 77  main(int argc, char *argv[]) {
Line 82  main(int argc, char *argv[]) {
 #define A_SIZE 1024  #define A_SIZE 1024
   char a[A_SIZE];    char a[A_SIZE];
   int message = 0;    int message = 0;
     FILE *fp;
   for (i=1; i<argc; i++) {    for (i=1; i<argc; i++) {
     if (strcmp(argv[i],"-v") == 0) {      if (strcmp(argv[i],"-v") == 0) {
       phc_verbose = 1; message=1;        phc_verbose = 1; message=1;
Line 86  main(int argc, char *argv[]) {
Line 92  main(int argc, char *argv[]) {
       /* For debugging. */        /* For debugging. */
       i++;        i++;
       strncpy(fname,argv[i],INPUTSIZE-1);        strncpy(fname,argv[i],INPUTSIZE-1);
       ob = phc_scan_output_of_phc(fname);        fp = fopen(fname,"r");
         if (fp == NULL) {
           fprintf(stderr,"File %s is not found.\n",fname);
           return(-1);
         }
         ob = phc_scan_output_of_phc(fp);  /* stable mixed vol,  out of torus */
       n = phc_getoaSize(ob);        n = phc_getoaSize(ob);
         ob2 = phc_scan_output_of_phc(fp); /* in torus */
         n2 = phc_getoaSize(ob2);
         if (phc_verbose) fprintf(stderr,"n=%d, n2=%d\n",n,n2);
       printf("[\n");        printf("[\n");
       for (i=0; i<n; i++) {        for (i=0; i<n; i++) {
         phc_printObject(stdout,phc_getoa(ob,i));          phc_printObject(stdout,phc_getoa(ob,i));
         if (i != n-1) printf(" ,\n"); else printf(" \n");          if ((i != n-1) || (n2 > 0)) printf(" ,\n"); else printf(" \n");
       }        }
         for (i=0; i<n2; i++) {
           phc_printObject(stdout,phc_getoa(ob2,i));
           if (i != n2-1) printf(" ,\n"); else printf(" \n");
         }
       printf("]\n");        printf("]\n");
       exit(0);        return(0);
     }else if (strcmp(argv[i],"-i") == 0) {      }else if (strcmp(argv[i],"-i") == 0) {
       ob = phc_call_phc(argv[i+1]);        ob = phc_call_phc(argv[i+1]);
       n = phc_getoaSize(ob);        n = phc_getoaSize(ob);
Line 142  main(int argc, char *argv[]) {
Line 160  main(int argc, char *argv[]) {
     }      }
     printf("]\n");      printf("]\n");
   }    }
     return(0);
 }  }
   
 int phc_scan_for_string(FILE *fp, char s[])  int phc_scan_for_string(FILE *fp, char s[])
Line 164  int phc_scan_for_string(FILE *fp, char s[])
Line 183  int phc_scan_for_string(FILE *fp, char s[])
         buf[i] = fgetc(fp); buf[i+1]='\0';          buf[i] = fgetc(fp); buf[i+1]='\0';
         if (buf[i] == EOF) return 0;          if (buf[i] == EOF) return 0;
   }    }
   if (strcmp(s,buf) == 0) return 0;    if (strcmp(s,buf) == 0) return 1;
   while ((c=fgetc(fp)) != EOF) {    while ((c=fgetc(fp)) != EOF) {
         for (i=0; i<n; i++) {          for (i=0; i<n; i++) {
           buf[i] = buf[i+1];            buf[i] = buf[i+1];
Line 249  struct phc_object phc_scan_solutions(FILE *fp, int npa
Line 268  struct phc_object phc_scan_solutions(FILE *fp, int npa
   double imagparts[npaths][dim]; */    double imagparts[npaths][dim]; */
   double *realparts;    double *realparts;
   double *imagparts;    double *imagparts;
     double *res_list;
   char buf[BUFSIZE];    char buf[BUFSIZE];
   nsols = 0;    nsols = 0;
   realparts = (double *)sGC_malloc(sizeof(double)*(npaths*dim+1));    realparts = (double *)sGC_malloc(sizeof(double)*(npaths*dim+1));
   imagparts = (double *)sGC_malloc(sizeof(double)*(npaths*dim+1));    imagparts = (double *)sGC_malloc(sizeof(double)*(npaths*dim+1));
     res_list = (double *)sGC_malloc(sizeof(double)*npaths+1);
   while ((ch = fgetc(fp)) != EOF)    while ((ch = fgetc(fp)) != EOF)
     {      {
       fnd = phc_scan_for_string(fp,"start residual :");        fnd = phc_scan_for_string(fp,"start residual :");
       if (fnd==1)        if (fnd==1)
         {          {
                   fgets(buf,BUFSIZE-1,fp);            fgets(buf,BUFSIZE-1,fp);
           sscanf(buf,"%le",&res);            sscanf(buf,"%le",&res);
                   if (phc_verbose) {            if (phc_verbose) {
              fprintf(stderr,"res in string: %s\n",buf);              fprintf(stderr,"res in string: %s\n",buf);
              fprintf(stderr," residual = "); fprintf(stderr,"%le\n",res);              fprintf(stderr," residual = "); fprintf(stderr,"%le\n",res);
                   }            }
             nsols++;
             /*
           if (res < 1.0E-12) {            if (res < 1.0E-12) {
             nsols = nsols+1;              nsols = nsols+1;
             if (nsols > npaths) {              if (nsols > npaths) {
Line 272  struct phc_object phc_scan_solutions(FILE *fp, int npa
Line 295  struct phc_object phc_scan_solutions(FILE *fp, int npa
               exit(-1);                exit(-1);
             }              }
           }            }
             */
           fnd = phc_scan_for_string(fp,"the solution for t :");            fnd = phc_scan_for_string(fp,"the solution for t :");
             res_list[nsols-1] = res;
           for (i=0;i<dim;i++)            for (i=0;i<dim;i++)
             {              {
               fnd = phc_scan_for_string(fp,":");                fnd = phc_scan_for_string(fp,":");
                           fgets(buf,BUFSIZE-1,fp);                fgets(buf,BUFSIZE-1,fp);
                           sscanf(buf,"%le %le",&realpart,&imagpart);                sscanf(buf,"%le %le",&realpart,&imagpart);
                           if (phc_verbose) fprintf(stderr,"sols in string: %s\n",buf);                if (phc_verbose) fprintf(stderr,"sols in string: %s\n",buf);
               /*fscanf(fp,"%le",&realpart);                /*fscanf(fp,"%le",&realpart);
               fscanf(fp,"%le",&imagpart);*/                  fscanf(fp,"%le",&imagpart);*/
               if (res < 1.0E-12)                realparts[(nsols-1)*dim+i] = realpart;
                 {                imagparts[(nsols-1)*dim+i] = imagpart;
                   /*realparts[nsols-1][i] = realpart;  
                   imagparts[nsols-1][i] = imagpart;*/  
                   realparts[(nsols-1)*dim+i] = realpart;  
                   imagparts[(nsols-1)*dim+i] = imagpart;  
                 }  
             }              }
             if (nsols >= npaths) break;
         }          }
     }      }
     if (nsols < npaths) {
       fprintf(stderr,"Warning: nsols < npaths. Check tmp.output.*\n");
     }
   if(phc_verbose) fprintf(stderr,"  number of solutions = %i\n",nsols);    if(phc_verbose) fprintf(stderr,"  number of solutions = %i\n",nsols);
   rob = phc_newObjectArray(nsols);    rob = phc_newObjectArray(nsols);
   for (i=0;i<nsols;i++)    for (i=0;i<nsols;i++)
Line 314  struct phc_object phc_scan_solutions(FILE *fp, int npa
Line 338  struct phc_object phc_scan_solutions(FILE *fp, int npa
         }          }
       phc_putoa(rob,i,sob);        phc_putoa(rob,i,sob);
     }      }
     /* Todo, res_list[] is not returned. */
   return(rob);    return(rob);
 }  }
 struct phc_object phc_scan_output_of_phc(char *fname)  struct phc_object phc_scan_output_of_phc(FILE *fp)
      /*       /*
   **  Scans the file "output" of phc in two stages to get    **  Scans the file "output" of phc in two stages to get
   **   1) the number of paths and the dimension;    **   1) the number of paths and the dimension;
Line 326  struct phc_object phc_scan_output_of_phc(char *fname)
Line 351  struct phc_object phc_scan_output_of_phc(char *fname)
   FILE *otp;    FILE *otp;
   char ch;    char ch;
   int fnd,npaths,dim,i,nsols;    int fnd,npaths,dim,i,nsols;
   otp = fopen(fname,"r");    struct phc_object rob;
     otp = fp;
   if (otp == NULL) {    if (otp == NULL) {
     fprintf(stderr,"The file %d is not found.\n",fname);      fprintf(stderr,"Error: the file is not found.\n");
     exit(0);      exit(0);
   }    }
   if (phc_verbose) fprintf(stderr,"Scanning the %s of phc.\n",fname);  
   fnd = phc_scan_for_string(otp,"THE SOLUTIONS :");    fnd = phc_scan_for_string(otp,"THE SOLUTIONS :");
     if (fnd < 1) {
       if (phc_verbose) fprintf(stderr,"No more THE SOLUTIONS\n");
       rob = phc_newObjectArray(0);
       return(rob);
     }
   fscanf(otp,"%i",&npaths);    fscanf(otp,"%i",&npaths);
   if (phc_verbose) fprintf(stderr,"  number of paths traced = %i\n",npaths);    if (phc_verbose) fprintf(stderr,"  number of paths traced = %i\n",npaths);
   fscanf(otp,"%i",&dim);    fscanf(otp,"%i",&dim);
Line 347  struct phc_object phc_call_phc(char *sys)  /* call phc
Line 377  struct phc_object phc_call_phc(char *sys)  /* call phc
   char *w;    char *w;
   struct phc_object phc_NullObject ;    struct phc_object phc_NullObject ;
   struct stat statbuf;    struct stat statbuf;
     FILE *fp;
     struct phc_object ob;
     struct phc_object ob2;
     struct phc_object ob_all;
     int i,n,n2;
   
   phc_NullObject.tag = Snull;    phc_NullObject.tag = Snull;
   f = phc_generateUniqueFileName("tmp.input");    f = phc_generateUniqueFileName("tmp.input");
Line 357  struct phc_object phc_call_phc(char *sys)  /* call phc
Line 392  struct phc_object phc_call_phc(char *sys)  /* call phc
     system(cmd);      system(cmd);
   }    }
   inp = fopen(f,"w");    inp = fopen(f,"w");
   fprintf(inp,sys);    fprintf(inp,"%s",sys);
   fclose(inp);    fclose(inp);
   if ((w = phc_which("phc")) != NULL) {    if ((w = phc_which("phc")) != NULL) {
     sprintf(cmd,"%s -b %s %s",w,f,outf);      sprintf(cmd,"%s -b %s %s",w,f,outf);
Line 371  struct phc_object phc_call_phc(char *sys)  /* call phc
Line 406  struct phc_object phc_call_phc(char *sys)  /* call phc
     return(phc_NullObject);      return(phc_NullObject);
   }else{    }else{
     if (phc_verbose) fprintf(stderr,"See the file %s for results.\n",outf);      if (phc_verbose) fprintf(stderr,"See the file %s for results.\n",outf);
     return(phc_scan_output_of_phc(outf));      fp = fopen(outf,"r");
       ob=phc_scan_output_of_phc(fp);
       n = phc_getoaSize(ob);
       ob2=phc_scan_output_of_phc(fp);
       n2 = phc_getoaSize(ob2);
       ob_all=phc_newObjectArray(n+n2);
       if (phc_verbose) fprintf(stderr,"n=%d, n2=%d\n",n,n2);
       for (i=0; i<n; i++) phc_putoa(ob_all,i,phc_getoa(ob,i));
       for (i=0; i<n2; i++) phc_putoa(ob_all,n+i,phc_getoa(ob2,i));
       return(ob_all);
   }    }
 }  }
   

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>