diff --git a/Sources/Core/LinearAlgebra/GlobalMatrix.hpp b/Sources/Core/LinearAlgebra/GlobalMatrix.hpp index 6ba54fd16e34a60a2b90518717126d89702ef07b..86fb9e9da963ef366a5d3175a4892b48a4e5011b 100644 --- a/Sources/Core/LinearAlgebra/GlobalMatrix.hpp +++ b/Sources/Core/LinearAlgebra/GlobalMatrix.hpp @@ -84,7 +84,11 @@ namespace HappyHeart const NumberingSubset& GetColNumberingSubset() const; - private: + private: + + // =========================================================================== + // \attention Do not forget to update Swap() if a new data member is added! + // ============================================================================= //! Numbering subset used to describe rows. const NumberingSubset& row_numbering_subset_; diff --git a/Sources/Core/LinearAlgebra/GlobalVector.cpp b/Sources/Core/LinearAlgebra/GlobalVector.cpp index 6583934c46e4f4fd91552dfc9281bfe2a313d560..d74ffb020b0ba1ed7e104e26377585dd4ee180a5 100644 --- a/Sources/Core/LinearAlgebra/GlobalVector.cpp +++ b/Sources/Core/LinearAlgebra/GlobalVector.cpp @@ -7,21 +7,29 @@ // #include "Core/LinearAlgebra/GlobalVector.hpp" +#include "Core/NumberingSubset.hpp" namespace HappyHeart { + GlobalVector::GlobalVector(const NumberingSubset& numbering_subset) + : numbering_subset_(numbering_subset) + { } + + + GlobalVector::GlobalVector(const GlobalVector& rhs) - : Parent(rhs) + : Parent(rhs), + numbering_subset_(rhs.numbering_subset_) { } void Swap(GlobalVector& A, GlobalVector& B) { - // \todo #527 Add assert about numbering subset! + assert(A.GetNumberingSubset() == B.GetNumberingSubset()); using Parent = GlobalVector::Parent; diff --git a/Sources/Core/LinearAlgebra/GlobalVector.hpp b/Sources/Core/LinearAlgebra/GlobalVector.hpp index f7012b01cf06c3fc2d74ec8faca8529c5c4626d6..c2de172f4f1c2c84fd4974d2ca5168db3df4e8a7 100644 --- a/Sources/Core/LinearAlgebra/GlobalVector.hpp +++ b/Sources/Core/LinearAlgebra/GlobalVector.hpp @@ -56,7 +56,7 @@ namespace HappyHeart ///@{ //! Constructor. - explicit GlobalVector() = default; + explicit GlobalVector(const NumberingSubset& numbering_subset); //! Destructor. ~GlobalVector() = default; @@ -75,9 +75,17 @@ namespace HappyHeart ///@} + //! Numbering subset used to describe vector. + const NumberingSubset& GetNumberingSubset() const; + private: - - + + // =========================================================================== + // \attention Do not forget to update Swap() if a new data member is added! + // ============================================================================= + + //! Numbering subset used to describe vector. + const NumberingSubset& numbering_subset_; }; diff --git a/Sources/Core/LinearAlgebra/GlobalVector.hxx b/Sources/Core/LinearAlgebra/GlobalVector.hxx index c2286fa2fca4bf7a087297f1656effcdea00c57a..8c19d02e5c11ef32d586543d0d428046a238e520 100644 --- a/Sources/Core/LinearAlgebra/GlobalVector.hxx +++ b/Sources/Core/LinearAlgebra/GlobalVector.hxx @@ -14,7 +14,10 @@ namespace HappyHeart { - + inline const NumberingSubset& GlobalVector::GetNumberingSubset() const + { + return numbering_subset_; + } } // namespace HappyHeart diff --git a/Sources/FormulationSolver/Private/Impl/GlobalVectorWithNumberingSubset.cpp b/Sources/FormulationSolver/Private/Impl/GlobalVectorWithNumberingSubset.cpp index db30610e5231ad81008386d932c60e594e997d02..22ad0c53e56ef88799448ef22262dff84d49c587 100644 --- a/Sources/FormulationSolver/Private/Impl/GlobalVectorWithNumberingSubset.cpp +++ b/Sources/FormulationSolver/Private/Impl/GlobalVectorWithNumberingSubset.cpp @@ -29,7 +29,7 @@ namespace HappyHeart GlobalVectorWithNumberingSubset ::GlobalVectorWithNumberingSubset(const NumberingSubset& a_numbering_subset) - : global_vector(std::make_unique<GlobalVector>()), + : global_vector(std::make_unique<GlobalVector>(a_numbering_subset)), numbering_subset(a_numbering_subset) { } diff --git a/Sources/ModelInstances/Hyperelasticity/VariationalFormulationHyperElasticity.hxx b/Sources/ModelInstances/Hyperelasticity/VariationalFormulationHyperElasticity.hxx index b14e84eab9ec58abe6a13a184733298171900a37..2539cdfd9720da805d3b8d6e4ac26de1914e0661 100644 --- a/Sources/ModelInstances/Hyperelasticity/VariationalFormulationHyperElasticity.hxx +++ b/Sources/ModelInstances/Hyperelasticity/VariationalFormulationHyperElasticity.hxx @@ -46,8 +46,8 @@ namespace HappyHeart { current_velocity.Scale(-1., __FILE__, __LINE__); - GlobalVector diff_displ; // \todo #527 Awful! Store it once! - diff_displ.DuplicateLayout(system_solution, __FILE__, __LINE__); + std::lock_guard<std::mutex> lock(this->GetMutex()); + auto& diff_displ = this->GetNonCstHelperGlobalVector<0>(); { diff_displ.Copy(system_solution, __FILE__, __LINE__);