Skip to content
Snippets Groups Projects
Commit 6de7438e authored by podlesny's avatar podlesny
Browse files

return alpha in correct dimensions, previously alpha[i] for bodies without friction patch was empty

parent 5b07828c
No related branches found
No related tags found
No related merge requests found
......@@ -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:
......
......@@ -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_;
......
......@@ -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_;
......
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment