Skip to content
Snippets Groups Projects
Forked from agnumpde / dune-tectonic
155 commits ahead of the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
globalfrictiondata.hh 1.12 KiB
#ifndef DUNE_TECTONIC_GLOBALFRICTIONDATA_HH
#define DUNE_TECTONIC_GLOBALFRICTIONDATA_HH

#include <dune/common/function.hh>
#include <dune/common/fvector.hh>

#include "frictiondata.hh"

template <class DomainType>
double evaluateScalarFunction(
    Dune::VirtualFunction<DomainType, Dune::FieldVector<double, 1>> const &f,
    DomainType const &x) {
  Dune::FieldVector<double, 1> ret;
  f.evaluate(x, ret);
  return ret;
};

template <int dimension> class GlobalFrictionData {
public:
  FrictionData operator()(Dune::FieldVector<double, dimension> const &x) const {
    return FrictionData(C(), L(), V0(), evaluateScalarFunction(a(), x),
                        evaluateScalarFunction(b(), x), mu0());
  }

protected:
  using VirtualFunction =
      Dune::VirtualFunction<Dune::FieldVector<double, dimension>,
                            Dune::FieldVector<double, 1>>;

public:
  double virtual const &C() const = 0;
  double virtual const &L() const = 0;
  double virtual const &V0() const = 0;
  VirtualFunction virtual const &a() const = 0;
  VirtualFunction virtual const &b() const = 0;
  double virtual const &mu0() const = 0;
};
#endif