Skip to content
Snippets Groups Projects
Forked from agnumpde / dune-tectonic
211 commits behind the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
mybody.hh 1.77 KiB
#ifndef MY_BODY_HH
#define MY_BODY_HH

#include <dune/common/fvector.hh>

#include <dune/fufem/functions/constantfunction.hh>

#include <dune/tectonic/body.hh>
#include <dune/tectonic/gravity.hh>

#include "mygeometry.hh"

template <int dimension> class MyBody : public Body<dimension> {
  using typename Body<dimension>::ScalarFunction;
  using typename Body<dimension>::VectorField;
  using MyConstantFunction = ConstantFunction<
      Dune::FieldVector<double, dimension>, Dune::FieldVector<double, 1>>;

public:
  MyBody(Dune::ParameterTree const &parset, MyGeometry const &mygeometry)
      : poissonRatio_(parset.get<double>("body.poissonRatio")),
        youngModulus_(parset.get<double>("body.youngModulus")),
        shearViscosityField_(parset.get<double>("body.shearViscosity")),
        bulkViscosityField_(parset.get<double>("body.bulkViscosity")),
        densityField_(parset.get<double>("body.density")),
        gravityField_(densityField_, mygeometry.zenith,
                      parset.get<double>("gravity")) {}

  double getPoissonRatio() const override { return poissonRatio_; }

  double getYoungModulus() const override { return youngModulus_; }

  ScalarFunction const &getShearViscosityField() const override {
    return shearViscosityField_;
  }
  ScalarFunction const &getBulkViscosityField() const override {
    return bulkViscosityField_;
  }

  ScalarFunction const &getDensityField() const override {
    return densityField_;
  }
  VectorField const &getGravityField() const override { return gravityField_; }

private:
  double const poissonRatio_;
  double const youngModulus_;
  MyConstantFunction const shearViscosityField_;
  MyConstantFunction const bulkViscosityField_;
  MyConstantFunction const densityField_;
  Gravity<dimension> const gravityField_;
};

#endif