MeshKit
1.0
|
00001 // IASolver.hpp 00002 // Interval Assignment for Meshkit 00003 // Meshkit calls this class function to find the intervals 00004 // this class calls underlying solvers 00005 // 00006 #ifndef MESHKIT_IA_IASOLVERINT_HP 00007 #define MESHKIT_IA_IASOLVERINT_HP 00008 00009 #include <map> 00010 00011 #include "meshkit/IASolverToolInt.hpp" 00012 #include "meshkit/IPData.hpp" 00013 00014 namespace MeshKit { 00015 00016 class IAData; 00017 class IASolution; 00018 class IAIntWaveNlp; 00019 00020 class IASolverInt : public IASolverToolInt 00021 { 00022 public: 00024 IASolverInt(const IAData * ia_data_ptr, IASolution *relaxed_solution_ptr, const bool set_silent = true); 00025 00027 virtual ~IASolverInt(); 00028 00029 bool solve(); 00030 // return true if solved; false if not solved (e.g. infeasible) 00031 00032 private: 00033 // hide untrusted default methods 00035 IASolverInt(const IASolverInt&); 00036 IASolverInt& operator=(const IASolverInt&); 00038 00039 // debug 00040 const bool silent; 00041 const bool debugging; 00042 00043 00044 void cleanup(); 00045 00046 // top level 00047 // several different problem formulations and their solutions are possible 00048 enum SolverType {ROUNDING, BEND, COS, PARABOLA}; 00049 bool solve_round(); 00050 bool solve_wave(const SolverType solver_type); 00051 // workhorse, lower level routines 00052 bool solve_wave_workhorse(IAIntWaveNlp *mynlp); 00053 00054 }; 00055 00056 } // namespace MeshKit 00057 00058 #endif