From 6de7438e234813c78ad632441b2d688eb67f6f1f Mon Sep 17 00:00:00 2001 From: podlesny <podlesny@zedat.fu-berlin.de> Date: Fri, 26 Feb 2021 15:21:37 +0100 Subject: [PATCH] return alpha in correct dimensions, previously alpha[i] for bodies without friction patch was empty --- dune/tectonic/time-stepping/state.cc | 7 ++++++- .../time-stepping/state/ageinglawstateupdater.cc | 2 +- .../time-stepping/state/sliplawstateupdater.cc | 2 +- dune/tectonic/time-stepping/state/stateupdater.hh | 11 ++++++++++- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/dune/tectonic/time-stepping/state.cc b/dune/tectonic/time-stepping/state.cc index 4184f3d7..44c745e4 100644 --- a/dune/tectonic/time-stepping/state.cc +++ b/dune/tectonic/time-stepping/state.cc @@ -16,7 +16,12 @@ auto initStateUpdater( assert(contactCouplings.size() == couplings.size()); - auto stateUpdater = std::make_shared<StateUpdater<ScalarVector, Vector>>(); + std::vector<size_t> leafVertexCounts(alpha_initial.size(), 0); + for (size_t i=0; i<leafVertexCounts.size(); i++) { + leafVertexCounts[i] = alpha_initial[i].size(); + } + + auto stateUpdater = std::make_shared<StateUpdater<ScalarVector, Vector>>(leafVertexCounts); switch (model) { case Config::AgeingLaw: diff --git a/dune/tectonic/time-stepping/state/ageinglawstateupdater.cc b/dune/tectonic/time-stepping/state/ageinglawstateupdater.cc index 3d1feef2..9766b160 100644 --- a/dune/tectonic/time-stepping/state/ageinglawstateupdater.cc +++ b/dune/tectonic/time-stepping/state/ageinglawstateupdater.cc @@ -57,7 +57,7 @@ void AgeingLawStateUpdater<ScalarVector, Vector>::solve(const Vector& velocity_f for (size_t i=0; i<alpha_.size(); ++i) { auto tangentVelocity = velocity_field[localToGlobal_[i]]; - tangentVelocity[0] = 0; + tangentVelocity[0] = 0.0; double const V = tangentVelocity.two_norm(); double const mtoL = -tau_ / L_; diff --git a/dune/tectonic/time-stepping/state/sliplawstateupdater.cc b/dune/tectonic/time-stepping/state/sliplawstateupdater.cc index a024744c..6aeba104 100644 --- a/dune/tectonic/time-stepping/state/sliplawstateupdater.cc +++ b/dune/tectonic/time-stepping/state/sliplawstateupdater.cc @@ -43,7 +43,7 @@ void SlipLawStateUpdater<ScalarVector, Vector>::solve( for (size_t i=0; i<alpha_.size(); ++i) { auto tangentVelocity = velocity_field[localToGlobal_[i]]; - tangentVelocity[0] = 0; + tangentVelocity[0] = 0.0; double const V = tangentVelocity.two_norm(); double const mtVoL = -tau_ * V / L_; diff --git a/dune/tectonic/time-stepping/state/stateupdater.hh b/dune/tectonic/time-stepping/state/stateupdater.hh index 016e08c0..5e347b78 100644 --- a/dune/tectonic/time-stepping/state/stateupdater.hh +++ b/dune/tectonic/time-stepping/state/stateupdater.hh @@ -34,6 +34,9 @@ template <class ScalarVectorTEMPLATE, class Vector> class StateUpdater { using ScalarVector = ScalarVectorTEMPLATE; using LocalStateUpdater = LocalStateUpdater<ScalarVector, Vector>; + StateUpdater(const std::vector<size_t>& leafVertexCounts) : + leafVertexCounts_(leafVertexCounts) {} + void addLocalUpdater(std::shared_ptr<LocalStateUpdater> localStateUpdater) { localStateUpdaters_.emplace_back(localStateUpdater); } @@ -58,6 +61,11 @@ template <class ScalarVectorTEMPLATE, class Vector> class StateUpdater { } void extractAlpha(std::vector<ScalarVector>& alpha) { + alpha.resize(leafVertexCounts_.size()); + for (size_t i=0; i<alpha.size(); i++) { + alpha[i].resize(leafVertexCounts_[i], 0.0); + } + for (size_t i=0; i<localStateUpdaters_.size(); i++) { auto& localStateUpdater = localStateUpdaters_[i]; localStateUpdater->extractAlpha(alpha[localStateUpdater->bodyIndex()]); @@ -65,7 +73,7 @@ template <class ScalarVectorTEMPLATE, class Vector> class StateUpdater { } std::shared_ptr<StateUpdater<ScalarVector, Vector>> virtual clone() const { - auto updater = std::make_shared<StateUpdater<ScalarVector, Vector>>(); + auto updater = std::make_shared<StateUpdater<ScalarVector, Vector>>(leafVertexCounts_); for (size_t i=0; i<localStateUpdaters_.size(); i++) { auto localUpdater = localStateUpdaters_[i]->clone(); @@ -75,6 +83,7 @@ template <class ScalarVectorTEMPLATE, class Vector> class StateUpdater { } private: + std::vector<size_t> leafVertexCounts_; std::vector<std::shared_ptr<LocalStateUpdater>> localStateUpdaters_; }; #endif -- GitLab