Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)

app-kersten/Models.hh
Go to the documentation of this file.
00001 
00006 #ifndef hp2DModels_hh
00007 #define hp2DModels_hh
00008 
00009 #include "basics/exceptions.hh"
00010 #include "function/vector.hh"
00011 #include "graphics/matlab.hh"
00012 #include "hp2D/space.hh"
00013 #include "toolbox/inputOutput.hh"
00014 #include "toolbox/inputParam.hh"
00015 #include "formula/piecewiseFormula.hh"
00016 
00017 #include "basics/debug.hh"
00018 
00019 #define Models_formulaOut_D 0
00020 
00021 namespace hp2D {
00022 
00023   class InputModels;
00024 
00025   // ********************************************************* SpaceNotBuilt **
00026 
00031   class ModelNotSolved : public concepts::ExceptionBase {};
00032 
00033   // ********************************************************* SpaceNotBuilt **
00034 
00039   class MatrixNotBuilt : public concepts::ExceptionBase {};
00040 
00041   // **************************************************************** Models **
00042   
00047   template<class F>
00048   class Models : public concepts::OutputOperator {
00049   public:
00050     Models(const std::string problemName, const uint geomRefAttr = 100);
00051 
00052     virtual ~Models() {}
00055     void solve(const uint l = 0, const uint p = 1, const uint g = 0,
00056          const std::string vectorFile = "",
00057          const std::string matrixFile = "");
00058     void solve(InputModels& input);
00061     void matrixBuild(const uint l = 0, const uint p = 1, const uint g = 0,
00062          const std::string matrixFile = "");
00063     void matrixBuild(InputModels& input);
00065     void spaceBuild(const uint l = 0, const uint p = 1, const uint g = 0);
00067     virtual void loadSolution(const std::string vectorFile);
00071     virtual void loadSolution(const uint l = 0, const uint p = 1,
00072             const uint g = 0, const std::string path = "");
00077     virtual void graphicsOut(const uint numPoints,
00078            const std::string path = "") = 0;
00082     virtual void dataOut(concepts::InOutParameters& parameters,
00083        const bool store = false,
00084        const std::string path = "");
00086     void basisFunctions(const std::string path = "");
00087     const hp2D::Space* space() const { return spc_.get(); }
00088   protected:
00089     virtual std::ostream& info(std::ostream& os) const;
00091     virtual concepts::Mesh2& mesh_() = 0;
00093     virtual const std::string mshAbbr_() = 0;
00095     const std::string problemName_;
00097     const uint geomRefAttr_;
00099     std::auto_ptr<hp2D::Space> spc_;
00101     std::auto_ptr<concepts::BoundaryConditions> bc_;
00103     std::auto_ptr<concepts::Vector<F> > sol_;
00105     std::string matrixFile_;
00107     std::string vectorFile_;
00112     virtual void solve_() = 0;
00114     virtual void matrices_() = 0;
00116     virtual void dataOut_() = 0;
00118     std::string filename_(const std::string varname,
00119         const std::string subpath, const bool p = false);
00121     template<class G>
00122     void formulaOut_(const concepts::PiecewiseFormulaBase<G>& frm,
00123                      const std::string frmstr, const std::string path = "");
00125     concepts::InOutParameters parameters_;
00126   private:
00128     void refine_(uint attrib, int pMax[2]);
00137     void newfile_(std::string& name, const std::string varname,
00138       const std::string ending);
00140     uint nextCounter_(const std::string path = "") const;
00142     std::string nodenameLetter_() const;
00143   };
00144 
00145   template<class F>
00146   template<class G>
00147   void Models<F>::formulaOut_(const concepts::PiecewiseFormulaBase<G>& frm,
00148                               const std::string frmstr,
00149                               const std::string path) {
00150     if (!spc_.get()) spaceBuild();
00151     std::string dname =
00152       filename_(frmstr, path + "/" + problemName_ + "/Grafik");
00153     DEBUGL(Models_formulaOut_D,
00154      "Writing formula " << frmstr << " into " << dname << ".m");
00155     graphics::MatlabGraphics(*spc_, dname.c_str(), frm);
00156 
00157     parameters_.addString((std::string("grafik_") + frmstr).c_str(),
00158         (dname + ".m").c_str());
00159   }
00160 
00161   // *********************************************************** InputModels **
00162 
00167   class InputModels : public concepts::InputParameter {
00168   public:
00170     InputModels(concepts::InOutParameters& input);
00174     virtual std::ostream& letters(std::ostream& os) const;
00176     virtual std::ostream& arguments(std::ostream& os) const;
00178     virtual std::ostream& description(std::ostream& os) const;
00183     virtual int input(int opt, const char* optarg);
00184   protected:
00185     virtual std::ostream& info(std::ostream& os) const;
00186   };
00187 
00188 } // namespace hp2D
00189 
00190 #endif // hp2DModels_hh

Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)