Skip to content
Snippets Groups Projects

Piotr's Tutorial 7 on hyperbolic problems

Merged Dominic Kempf requested to merge Piotr/tutorial07 into master
4 unresolved threads
Files
4
@@ -13,6 +13,75 @@
template<int dim, typename PROBLEM>
class Model ;
template<typename PROBLEM>
class Model<1,PROBLEM>
{
public:
static constexpr int dim = 1; // space dimension
static constexpr int m = dim+1; // system size
static constexpr int mplus = 1; // number of positive eigenvalues
static constexpr int mminus = 1; // number of negative eigenvalues
static constexpr int mstar = mplus+mminus; // number of nonzero eigenvalues
using RangeField = typename PROBLEM::RangeField;
Model (PROBLEM& p)
: problem(p)
{
}
template<typename E, typename X, typename T2, typename T3>
void eigenvectors (const E& e, const X& x,
const Dune::FieldVector<T2,dim>& n,
Dune::FieldMatrix<T3,m,m>& RT) const
{
auto c = 1.;
RT[0][0] = 1; RT[1][0] = c*n[0];
RT[0][1] = -1; RT[1][1] = c*n[0];
}
template<typename E, typename X, typename RF>
void diagonal (const E& e, const X& x, Dune::FieldMatrix<RF,m,m>& D) const
{
auto c = 1.; //problem.c(e,x);
D[0][0] = c; D[0][1] = 0.0;
D[1][0] = 0.0; D[1][1] = -c ;
}
template<typename RF>
static void max_eigenvalue (const Dune::FieldVector<RF,m>& u_s,
const Dune::FieldVector<RF,m>& u_n,
const Dune::FieldVector<RF,dim>& n_F,
RF& alpha)
{
alpha = 1.0;
}
//Flux function
template<typename E, typename X, typename RF>
void flux (const E& e, const X& x,
const Dune::FieldVector<RF,m>& u,
Dune::FieldMatrix<RF,m,dim>& F) const
{
auto c = 1.;//problem.c(e,x);
F[0][0] = u[1] ;
F[1][0] = c*c*u[0];
}
const PROBLEM& problem;
};//1d
template<typename PROBLEM>
class Model<2,PROBLEM>
{
@@ -76,6 +145,6 @@ public:
}
const PROBLEM& problem;
};
};//2d
#endif //ACOUSTICS_MODEL
Loading