Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

MpsReader.h

00001 /* OOQP                                                               *
00002  * Authors: E. Michael Gertz, Stephen J. Wright                       *
00003  * (C) 2001 University of Chicago. See Copyright Notification in OOQP */
00004 
00005 #ifndef MPSREADER
00006 #define MPSREADER
00007 
00008 #include "OoqpVectorHandle.h"
00009 #include "DoubleMatrixHandle.h"
00010 #include "SimpleVectorHandle.h"
00011 #include "stdio.h"
00012 #include "hash.h"
00013 
00014 struct MpsRowInfo;
00015 struct MpsColInfo;
00016 
00017 #ifdef TESTING
00018 class MpsReaderTester;
00019 #endif
00020 
00038 class MpsReader {
00039 #ifdef TESTING
00040   friend MpsReaderTester;
00041 #endif
00042 private:
00043   void insertElt( int irow[], int len, int jcol[],
00044                   double dval[], int& ne,
00045                   int row, int col, double val, int& ier );
00046   void stuffMatrix( GenMatrix& A,
00047                     int irow[], int nnz, int jcol[], double dA[] );
00048   void stuffMatrix( SymMatrix& A,
00049                     int irow[], int nnz, int jcol[], double dA[] );
00050 protected:
00052   char * infilename;
00054   int iline;
00055 
00057   int nnzA, nnzC, nnzQ; 
00059   int my, mz;
00060 
00062   FILE * file;
00063 
00066   char    *boundType;
00067 
00068   MpsRowInfo * rowInfo;
00069   int * rowRemap;
00070   int totalRows;
00071   
00072   MpsColInfo * colInfo;
00073   int totalCols;
00074   int firstColumnLine;
00075   int columnFilePosition;
00076 
00077   char problemName[16];
00078   char objectiveName[16];
00079   char RHSName[16];
00080   //  char rangeName[10];
00081   char boundName[16];
00082 
00084   HashTable *rowTable;
00085 
00087   HashTable *colTable;
00088 
00089   double objminus;
00094   MpsReader() {};
00095   
00100   MpsReader( FILE * file );
00101 
00112   virtual void scanFile( int& iErr );
00113 
00114   virtual int GetLine_old(char * line );
00115   virtual int GetLine(char * line );
00116 
00117   virtual int ParseHeaderLine( char line[], char entry1[] );
00118   virtual int ParseHeaderLine2( char line[], char entry1[] );
00119   virtual int ParseBoundsLine( char line[], int& code, char name1[],
00120                                char name2[], double * val );
00121   virtual int ParseBoundsLine2( char line[], int& code, char name1[],
00122                                char name2[], double * val );
00123   virtual int ParseRowsLine( char line[], char code[], char name1[] );
00124   virtual int ParseRowsLine2( char line[], char code[], char name1[] );
00125   virtual void expectHeader( int kindOfLine, const char expectName[],
00126                             char line[], int& ierr );
00127   virtual void expectHeader2( int kindOfLine, const char expectName[],
00128                             char line[], int& ierr );
00129   virtual void remapRows();
00130   virtual int acceptHeader( int kindOfLine, const char expectName[],
00131                             char line[], int& ierr );
00132   virtual int acceptHeader2( int kindOfLine, const char expectName[],
00133                             char line[], int& ierr );
00134   virtual int ParseDataLine2( char line[], char code[], char name1[], 
00135                              char name2[], double * val1, int& hasSecondValue,
00136                              char name3[], double * val2);
00137 
00138   virtual int ParseDataLine( char line[], char code[], char name1[], 
00139                              char name2[], double * val1, int& hasSecondValue,
00140                              char name3[], double * val2);
00141 
00142   virtual int string_copy( char dest[], char string[], int max);
00143   
00144   virtual void readProblemName( char line[], int& iErr, int kindOfLine );
00145   virtual void readProblemName2( char line[], int& iErr, int kindOfLine );
00146 
00147   virtual void readObjectiveSense( char line[], int& iErr, int kindOfLine );
00148   virtual void readRowsSection( char line[62], 
00149                 int& iErr, int& return_getline );
00150   virtual void scanColsSection( char line[62], 
00151                 int& iErr, int& return_getline );
00152   virtual void scanRangesSection( char line[62], 
00153                   int& iErr, int& return_getline );
00154   virtual void rowHasRange( int rownum, double val, int& iErr );
00155   virtual void scanHessSection( char line[62], 
00156                 int& iErr, int& return_getline );
00157 
00158   virtual void readColsSection( OoqpVector& c,
00159                                 GenMatrix& A, GenMatrix& C,
00160                                 char line[62], 
00161                                 int& iErr, int& return_getline );
00162   virtual void readColsSection( double  c[],
00163                                 int irowA[], int jcolA[], double dA[],
00164                                 int irowC[], int jcolC[], double dC[],
00165                                 char line[62], 
00166                                 int& iErr, int& return_getline );
00167   virtual void readRHSSection( OoqpVector&  b,
00168                                SimpleVector& clow, OoqpVector& iclow,
00169                                SimpleVector& cupp, OoqpVector& icupp,
00170                                char line[], int& ierr, int& kindOfLine );
00171   virtual void readRHSSection( double b[],
00172                                double clow[], char iclow[],
00173                                double cupp[], char icupp[],
00174                                char line[], int& ierr, int& kindOfLine );
00175   virtual void readRangesSection( SimpleVector& clow, SimpleVector& cupp,
00176                                   char line[], int& ierr, int& kindOfLine );
00177   virtual void readRangesSection( double clow[], double cupp[],
00178                                   char line[], int& ierr, int& kindOfLine );
00179   virtual void readBoundsSection( OoqpVector& xlow, OoqpVector& ixlow,
00180                                   OoqpVector& xupp, OoqpVector& ixupp,
00181                                   char line[], int& ierr, int& kindOfLine );
00182   virtual void defaultBounds( double xlow[], char ixlow[],
00183                               double xupp[], char ixupp[] );
00184   virtual void defaultBounds( OoqpVector& xlow, OoqpVector& ixlow,
00185                               OoqpVector& xupp, OoqpVector& ixupp );
00186   virtual void readBoundsSection( double xlow[], char ixlow[],
00187                                   double xupp[], char ixupp[],
00188                                   char line[], int& ierr, int& kindOfLine );
00189   virtual void readHessSection( SymMatrix& Q,
00190                                 char line[], int& ierr, int& kindOfLine );
00191   virtual void readHessSection( int irowQ[], int jcolQ[], double dQ[],
00192                                 char line[], int& ierr, int& kindOfLine );
00193 
00194 public:
00201   int scalingOption; 
00202 
00206   char objectiveSense[3]; /* MAX or MIN */
00207 
00208    
00218   static MpsReader * newReadingFile( char filename[], int& iErr );
00219 
00223   static  void findFile( FILE*& file, char *& resolvedName,
00224                          char filename[] );
00231   void numberOfNonZeros( int& nnzQ, int& nnzA, int& nnzC );
00232   void numbersOfNonZeros( int nnzQ[], int nnzA[], int nnzC[] );
00241   virtual void readQpBound( OoqpVector& c, SymMatrix& Q,
00242                             OoqpVector& xlow, OoqpVector& ixlow,
00243                             OoqpVector& xupp, OoqpVector& ixupp,
00244                             int &ierr );
00251   virtual void readQpGen( OoqpVector& c, SymMatrix& Q,
00252                           OoqpVector& xlow, OoqpVector& ixlow,
00253                           OoqpVector& xupp, OoqpVector& ixupp,
00254                           GenMatrix& A, OoqpVector& b,
00255                           GenMatrix& C, 
00256                           OoqpVector& clow, OoqpVector& iclow,
00257                           OoqpVector& cupp, OoqpVector& icupp,
00258                           int& ierr );
00259 
00269   virtual void readQpGen( double     c[],  
00270                           int    irowQ[],  int  jcolQ[],  double dQ[],
00271                           double  xlow[],  char ixlow[],
00272                           double  xupp[],  char ixupp[],
00273                           int    irowA[],  int  jcolA[],  double dA[],
00274                           double     b[],
00275                           int    irowC[],  int  jcolC[],  double dC[],
00276                           double  clow[],  char  iclow[],
00277                           double  cupp[],  char  icupp[],
00278                           int&    ierr );
00286   virtual void getSizes( int& nx, int& my, int& mz );
00287 
00298   virtual void releaseFile( int& ierr );
00299   
00301   virtual ~MpsReader();
00302 
00304   // Output section
00306 
00307   double objconst() { return -objminus; }
00308 
00313   void printSolution( double x[],      int     nx,
00314                       double xlow[],   char    ixlow[],
00315                       double xupp[],   char    ixupp[],
00316                       double gamma[],  double  phi[],
00317                       double y[],      int     my,
00318                       double s[],      int     mz,
00319                       double clow[],   char    iclow[],
00320                       double cupp[],   char    icupp[],
00321                       double lambda[], double  pi[],
00322                       double z[],      double  objectiveValue,
00323                       int& iErr );
00324   char * defaultOutputFilename( int& iErr );
00325 
00326 };
00327 
00328 enum { mpsok = 0,
00329        mpsunknownerr    = -1, // Someone didn't set the error code properly.
00330        mpsfileopenerr   = -2, // Couldn't open the given file
00331        mpsioerr         = -3, // There was an i/o error.
00332        mpssyntaxerr     = -4, // There was a mps syntax error.
00333        mpsmemoryerr     = -5  // We couldn't allocate the necessary memory
00334 };
00335 
00336 #endif

Generated on Mon May 24 17:40:46 2004 for OOQP by doxygen1.2.18