00001 #pragma once 00002 00003 #include <iostream> 00004 #include <memory> 00005 #include <algorithm> 00006 #include <sstream> 00007 #include <unistd.h> // for command line parsing 00008 #include <fstream> 00009 #include <memory> 00010 #include <vector> 00011 #include <fstream> 00012 #include <sstream> 00013 #include <string> 00014 00015 #include "basics.hh" 00016 #include "basics/outputMatlab.hh" 00017 #include "geometry.hh" 00018 #include "space.hh" 00019 #include "graphics.hh" 00020 #include "toolbox.hh" 00021 #include "function.hh" 00022 #include "operator.hh" 00023 #include "integration.hh" 00024 #include "graphics.hh" 00025 #include "linearFEM.hh" 00026 #include "linDG1D.hh" 00027 #include "hp2D.hh" 00028 #include "toolbox/inputParam.hh" 00029 #include "l2projection.hh" 00030 00034 class Ell_UC_Solver { 00035 public: 00036 Ell_UC_Solver(const concepts::Space<concepts::Real>& space, double epsilon, 00037 const concepts::Formula<concepts::Real>& heat_coeff_F, 00038 const concepts::Formula<concepts::Real>& mass_coeff_F, 00039 const concepts::BoundaryConditions& bc); 00040 00041 void setEpsilon(double epsilon); 00042 00043 void setRhs(const std::string& rhs_r, const std::string& rhs_i); 00044 //TODO: implement methods taking Formula or ElementFormula instances 00045 00046 void solve(concepts::Cmplx k1, concepts::Cmplx k2, 00047 concepts::Vector<concepts::Cmplx>& sol ); 00048 00049 private: 00050 const concepts::Space<concepts::Real>& space; 00051 concepts::BoundaryConditions bc; 00052 double epsilon; 00053 00054 static concepts::PiecewiseConstFormula<concepts::Real> zero_F; 00055 hp2D::Laplace<concepts::Real> lap_BF; 00056 hp2D::Advection<concepts::Real> adv_BF_1; 00057 hp2D::Advection<concepts::Real> adv_BF_2; 00058 hp2D::Identity<Real> id_heat_BF; 00059 hp2D::Identity<Real> id_mass_BF; 00060 00061 concepts::Vector<concepts::Cmplx> rhs; 00062 concepts::SparseMatrix<concepts::Real> lap_M; 00063 concepts::SparseMatrix<concepts::Real> id_mass_M; 00064 concepts::SparseMatrix<concepts::Real> id_heat_M; 00065 concepts::SparseMatrix<concepts::Real> adv_M_1; 00066 concepts::SparseMatrix<concepts::Real> adv_M_2; 00067 00068 };