/** * @file mg.hpp * @author Julian Iseringhausen * @date Mon Apr 18 13:01:13 2011 * * @brief Header file for the VMG main class. * */ #ifndef MG_HPP_ #define MG_HPP_ #include #include "base/command_factory.hpp" #include "base/factory.hpp" namespace VMG { class Comm; class Discretization; class Grid; class Interface; class LevelOperator; class Multigrid; class Smoother; class Solver; class Stencil; class TempGrid; class MG { public: static MG* Instance() { static MG mgs; return &mgs; } static void SetInterface(Interface* interface, Comm* comm); static VMG::Comm* GetComm(); static VMG::Discretization* GetDiscretization(); static VMG::Interface* GetInterface(); static VMG::LevelOperator* GetLevelOperator(); static VMG::Multigrid* GetRhs(); static VMG::Multigrid* GetSol(); static VMG::Grid& GetRhsMaxLevel(); static VMG::Grid& GetSolMaxLevel(); static VMG::Smoother* GetSmoother(); static VMG::Solver* GetSolver(); static VMG::TempGrid* GetTempGrid(); static VMG::Factory& GetFactory(); static VMG::CommandFactory& GetCommands(); static void PostInit(); static void Solve(); static void Destroy(); static bool IsInitialized(); static void SetState(const int& key); private: MG(); virtual ~MG(); void RegisterLibraryCommands(); vmg_float ComputeVectorNorm(const Multigrid& vec); static VMG::CommandFactory command_factory; std::map factories; int state; }; } #endif