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
00026
00031 class ModelNotSolved : public concepts::ExceptionBase {};
00032
00033
00034
00039 class MatrixNotBuilt : public concepts::ExceptionBase {};
00040
00041
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
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 }
00189
00190 #endif // hp2DModels_hh