Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • podlesny/dune-tectonic
  • agnumpde/dune-tectonic
2 results
Show changes
#ifndef SRC_TIME_STEPPING_STATE_HH
#define SRC_TIME_STEPPING_STATE_HH
#include <memory>
#include <dune/common/bitsetvector.hh>
#include "../enums.hh"
#include "state/ageinglawstateupdater.hh"
#include "state/sliplawstateupdater.hh"
#include "state/stateupdater.hh"
template <class ScalarVector, class Vector>
std::shared_ptr<StateUpdater<ScalarVector, Vector>> initStateUpdater(
Config::stateModel model, ScalarVector const &alpha_initial,
Dune::BitSetVector<1> const &frictionalNodes, double L, double V0);
#endif
#ifndef SRC_TIME_STEPPING_STATE_AGEINGLAWSTATEUPDATER_HH
#define SRC_TIME_STEPPING_STATE_AGEINGLAWSTATEUPDATER_HH
#include "stateupdater.hh"
template <class ScalarVector, class Vector>
class AgeingLawStateUpdater : public StateUpdater<ScalarVector, Vector> {
public:
AgeingLawStateUpdater(ScalarVector const &_alpha_initial,
Dune::BitSetVector<1> const &_nodes, double _L,
double _V0);
void nextTimeStep() override;
void setup(double _tau) override;
void solve(Vector const &velocity_field) override;
void extractAlpha(ScalarVector &) override;
std::shared_ptr<StateUpdater<ScalarVector, Vector>> clone() const override;
private:
ScalarVector alpha_o;
ScalarVector alpha;
Dune::BitSetVector<1> const &nodes;
double const L;
double const V0;
double tau;
};
#endif
#ifndef SRC_TIME_STEPPING_STATE_SLIPLAWSTATEUPDATER_HH
#define SRC_TIME_STEPPING_STATE_SLIPLAWSTATEUPDATER_HH
#include "stateupdater.hh"
template <class ScalarVector, class Vector>
class SlipLawStateUpdater : public StateUpdater<ScalarVector, Vector> {
public:
SlipLawStateUpdater(ScalarVector const &_alpha_initial,
Dune::BitSetVector<1> const &_nodes, double _L,
double _V0);
void nextTimeStep() override;
void setup(double _tau) override;
void solve(Vector const &velocity_field) override;
void extractAlpha(ScalarVector &) override;
std::shared_ptr<StateUpdater<ScalarVector, Vector>> clone() const override;
private:
ScalarVector alpha_o;
ScalarVector alpha;
Dune::BitSetVector<1> const &nodes;
double const L;
double const V0;
double tau;
};
#endif
#ifndef SRC_TIME_STEPPING_STATE_STATEUPDATER_HH
#define SRC_TIME_STEPPING_STATE_STATEUPDATER_HH
template <class ScalarVectorTEMPLATE, class Vector> class StateUpdater {
public:
using ScalarVector = ScalarVectorTEMPLATE;
void virtual nextTimeStep() = 0;
void virtual setup(double _tau) = 0;
void virtual solve(Vector const &velocity_field) = 0;
void virtual extractAlpha(ScalarVector &alpha) = 0;
std::shared_ptr<StateUpdater<ScalarVector, Vector>> virtual clone() const = 0;
};
#endif
#include "../explicitvectors.hh"
template std::shared_ptr<StateUpdater<ScalarVector, Vector>>
initStateUpdater<ScalarVector, Vector>(
Config::stateModel model, ScalarVector const &alpha_initial,
Dune::BitSetVector<1> const &frictionalNodes, double L, double V0);
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <dune/grid/io/file/vtk/vtkwriter.hh>
#include <dune/fufem/functions/vtkbasisgridfunction.hh>
#include "vtk.hh"
template <class VertexBasis, class CellBasis>
MyVTKWriter<VertexBasis, CellBasis>::MyVTKWriter(
CellBasis const &_cellBasis, VertexBasis const &_vertexBasis,
std::string _prefix)
: cellBasis(_cellBasis), vertexBasis(_vertexBasis), prefix(_prefix) {}
template <class VertexBasis, class CellBasis>
template <class Vector, class ScalarVector>
void MyVTKWriter<VertexBasis, CellBasis>::write(
size_t record, Vector const &u, Vector const &v, ScalarVector const &alpha,
ScalarVector const &stress) const {
Dune::VTKWriter<typename VertexBasis::GridView> writer(
vertexBasis.getGridView());
auto const displacementPointer =
std::make_shared<VTKBasisGridFunction<VertexBasis, Vector> const>(
vertexBasis, u, "displacement");
writer.addVertexData(displacementPointer);
auto const velocityPointer =
std::make_shared<VTKBasisGridFunction<VertexBasis, Vector> const>(
vertexBasis, v, "velocity");
writer.addVertexData(velocityPointer);
auto const AlphaPointer =
std::make_shared<VTKBasisGridFunction<VertexBasis, ScalarVector> const>(
vertexBasis, alpha, "Alpha");
writer.addVertexData(AlphaPointer);
auto const stressPointer =
std::make_shared<VTKBasisGridFunction<CellBasis, ScalarVector> const>(
cellBasis, stress, "stress");
writer.addCellData(stressPointer);
std::string const filename = prefix + std::to_string(record);
writer.write(filename.c_str(), Dune::VTK::appendedraw);
}
template <class VertexBasis, class CellBasis>
void MyVTKWriter<VertexBasis, CellBasis>::writeGrid() const {
Dune::VTKWriter<typename VertexBasis::GridView> writer(
vertexBasis.getGridView());
std::string const filename = prefix + "_grid";
writer.write(filename.c_str(), Dune::VTK::appendedraw);
}
#include "vtk_tmpl.cc"
#ifndef SRC_VTK_HH
#define SRC_VTK_HH
#include <string>
template <class VertexBasis, class CellBasis> class MyVTKWriter {
CellBasis const &cellBasis;
VertexBasis const &vertexBasis;
std::string const prefix;
public:
MyVTKWriter(CellBasis const &cellBasis, VertexBasis const &vertexBasis,
std::string prefix);
template <class Vector, class ScalarVector>
void write(size_t record, Vector const &u, Vector const &v,
ScalarVector const &alpha, ScalarVector const &stress) const;
void writeGrid() const;
};
#endif
#ifndef MY_DIM
#error MY_DIM unset
#endif
#include "explicitgrid.hh"
#include "explicitvectors.hh"
#include <dune/fufem/functionspacebases/p0basis.hh>
#include <dune/fufem/functionspacebases/p1nodalbasis.hh>
using MyP0Basis = P0Basis<GridView, double>;
using P1Basis = P1NodalBasis<GridView, double>;
template class MyVTKWriter<P1Basis, MyP0Basis>;
template void MyVTKWriter<P1Basis, MyP0Basis>::write<Vector, ScalarVector>(
size_t record, Vector const &u, Vector const &v, ScalarVector const &alpha,
ScalarVector const &stress) const;
File added