Institut de Robòtica i Informàtica Industrial
KRD Group

The CuikSuite Project

parameters.c

Go to the documentation of this file.
00001 #include "parameters.h"
00002 
00003 #include "error.h"
00004 #include "filename.h"
00005 #include "boolean.h"
00006 #include "defines.h"
00007 
00008 #include <stdlib.h>
00009 
00031 boolean ReadParameters(char *file,Tparameters *p);
00032 
00033 /*
00034  * Inits a parameter structure and defines all parameters equal to 0
00035  */
00036 void InitParameters(Tparameters *p)
00037 {
00038   unsigned int i;
00039 
00040   for(i=0;i<NPARAMETERS;i++)
00041     {
00042       (*p)[i].name=NULL;
00043       (*p)[i].value=0.0;
00044     }
00045 }
00046 
00047 /*
00048  * Inits a parameter structure from the given file
00049  */
00050 void InitParametersFromFile(char *file,Tparameters *p)
00051 {
00052   Tfilename dp;
00053 
00054   InitParameters(p);
00055  
00056   /* The existence of a default parameter file in directory
00057      share is optional */
00058   CreateFileName(_CUIK_SUITE_MAIN_DIR,DEFAULT_PARAMS,NULL,PARAM_EXT,&dp);
00059   ReadParameters(GetFileFullName(&dp),p);
00060   DeleteFileName(&dp);
00061 
00062   /* The existence of the parameter file associated with the
00063      problem is compulsatory */
00064   if (!ReadParameters(file,p))
00065     {
00066       char ErrorText[500];
00067 
00068       sprintf(ErrorText,"File %s does not exists",file);
00069       Error(ErrorText);
00070     }
00071 }
00072 
00073 /*
00074  * Returns the value of parameter number 'n'
00075  */
00076 double GetParameter(unsigned int n,Tparameters *p)
00077 {
00078   if (n<NPARAMETERS)
00079     {
00080       if ((*p)[n].name==NULL)
00081          Error("Undefined parameter");
00082       else
00083         return((*p)[n].value);
00084     }
00085   else
00086     Error("Number of parameter out of range");
00087   return(0.0);
00088 }
00089 
00090 /*
00091  * Sets a new parameter with identifier 'n', with name 'name', and with value 'v'
00092  */
00093 void SetParameter(unsigned int n,char *name,double v,Tparameters *p)
00094 {
00095   if (n<NPARAMETERS)
00096     {
00097       if ((*p)[n].name!=NULL)
00098         ChangeParameter(n,v,p);
00099       else
00100         {
00101           (*p)[n].name=name;
00102           (*p)[n].value=v;
00103         }
00104     }
00105   else
00106     Error("Number of parameter out of range");
00107 }
00108 
00109 /*
00110  * Changes the value of parameter 'n'
00111  */
00112 void ChangeParameter(unsigned int n,double v,Tparameters *p)
00113 {
00114   if (n<NPARAMETERS)
00115     {
00116       if ((*p)[n].name==NULL)
00117         {
00118           /*we are adding new paremeter but without a explicit name*/
00119           NEW((*p)[n].name,10,char);
00120           sprintf((*p)[n].name,"p%u",n);
00121         }
00122       
00123       (*p)[n].value=v;
00124     }
00125   else
00126     Error("Number of parameter out of range");
00127 }
00128 
00129 /*
00130  * Prints a set of parameters.
00131  * Only those explicitly used are shown.
00132  */
00133 void PrintParameters(FILE *f,Tparameters *p)
00134 {
00135   unsigned int i;
00136 
00137   fprintf(f,"%%COMPILATION FLAGS:\n");
00138   fprintf(f,"%%   SIMPLEX ENGINE: %s\n",(_SIMPLEX_ENGINE==_GLPK?"glpk":(_SIMPLEX_ENGINE==_CLP?"clp":"lp_solve")));
00139   fprintf(f,"%%   MPI: %u\n",_USE_MPI);
00140   fprintf(f,"%%   DEBUG: %u\n",_DEBUG);
00141   fprintf(f,"%%   PROFILE: %u\n",_PROFILE);
00142   fprintf(f,"%%==========================================================================\n");
00143   fprintf(f,"%%PARAMETERS:\n");
00144   for(i=0;i<NPARAMETERS;i++)
00145     {
00146       if ((*p)[i].name!=NULL)
00147         fprintf(f,"   %s= %g\n",(*p)[i].name,(*p)[i].value); /*all parameters are definied (if not an error is
00148                                                                issued after parameter initialization)*/
00149     }
00150 }
00151 
00152 void DeleteParameters(Tparameters *p)
00153 {
00154 }