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( ...@@ -16,7 +16,12 @@ auto initStateUpdater(
assert(contactCouplings.size() == couplings.size()); 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) { switch (model) {
case Config::AgeingLaw: case Config::AgeingLaw:
......
...@@ -57,7 +57,7 @@ void AgeingLawStateUpdater<ScalarVector, Vector>::solve(const Vector& velocity_f ...@@ -57,7 +57,7 @@ void AgeingLawStateUpdater<ScalarVector, Vector>::solve(const Vector& velocity_f
for (size_t i=0; i<alpha_.size(); ++i) { for (size_t i=0; i<alpha_.size(); ++i) {
auto tangentVelocity = velocity_field[localToGlobal_[i]]; auto tangentVelocity = velocity_field[localToGlobal_[i]];
tangentVelocity[0] = 0; tangentVelocity[0] = 0.0;
double const V = tangentVelocity.two_norm(); double const V = tangentVelocity.two_norm();
double const mtoL = -tau_ / L_; double const mtoL = -tau_ / L_;
......
...@@ -43,7 +43,7 @@ void SlipLawStateUpdater<ScalarVector, Vector>::solve( ...@@ -43,7 +43,7 @@ void SlipLawStateUpdater<ScalarVector, Vector>::solve(
for (size_t i=0; i<alpha_.size(); ++i) { for (size_t i=0; i<alpha_.size(); ++i) {
auto tangentVelocity = velocity_field[localToGlobal_[i]]; auto tangentVelocity = velocity_field[localToGlobal_[i]];
tangentVelocity[0] = 0; tangentVelocity[0] = 0.0;
double const V = tangentVelocity.two_norm(); double const V = tangentVelocity.two_norm();
double const mtVoL = -tau_ * V / L_; double const mtVoL = -tau_ * V / L_;
......
...@@ -34,6 +34,9 @@ template <class ScalarVectorTEMPLATE, class Vector> class StateUpdater { ...@@ -34,6 +34,9 @@ template <class ScalarVectorTEMPLATE, class Vector> class StateUpdater {
using ScalarVector = ScalarVectorTEMPLATE; using ScalarVector = ScalarVectorTEMPLATE;
using LocalStateUpdater = LocalStateUpdater<ScalarVector, Vector>; using LocalStateUpdater = LocalStateUpdater<ScalarVector, Vector>;
StateUpdater(const std::vector<size_t>& leafVertexCounts) :
leafVertexCounts_(leafVertexCounts) {}
void addLocalUpdater(std::shared_ptr<LocalStateUpdater> localStateUpdater) { void addLocalUpdater(std::shared_ptr<LocalStateUpdater> localStateUpdater) {
localStateUpdaters_.emplace_back(localStateUpdater); localStateUpdaters_.emplace_back(localStateUpdater);
} }
...@@ -58,6 +61,11 @@ template <class ScalarVectorTEMPLATE, class Vector> class StateUpdater { ...@@ -58,6 +61,11 @@ template <class ScalarVectorTEMPLATE, class Vector> class StateUpdater {
} }
void extractAlpha(std::vector<ScalarVector>& alpha) { 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++) { for (size_t i=0; i<localStateUpdaters_.size(); i++) {
auto& localStateUpdater = localStateUpdaters_[i]; auto& localStateUpdater = localStateUpdaters_[i];
localStateUpdater->extractAlpha(alpha[localStateUpdater->bodyIndex()]); localStateUpdater->extractAlpha(alpha[localStateUpdater->bodyIndex()]);
...@@ -65,7 +73,7 @@ template <class ScalarVectorTEMPLATE, class Vector> class StateUpdater { ...@@ -65,7 +73,7 @@ template <class ScalarVectorTEMPLATE, class Vector> class StateUpdater {
} }
std::shared_ptr<StateUpdater<ScalarVector, Vector>> virtual clone() const { 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++) { for (size_t i=0; i<localStateUpdaters_.size(); i++) {
auto localUpdater = localStateUpdaters_[i]->clone(); auto localUpdater = localStateUpdaters_[i]->clone();
...@@ -75,6 +83,7 @@ template <class ScalarVectorTEMPLATE, class Vector> class StateUpdater { ...@@ -75,6 +83,7 @@ template <class ScalarVectorTEMPLATE, class Vector> class StateUpdater {
} }
private: private:
std::vector<size_t> leafVertexCounts_;
std::vector<std::shared_ptr<LocalStateUpdater>> localStateUpdaters_; std::vector<std::shared_ptr<LocalStateUpdater>> localStateUpdaters_;
}; };
#endif #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