5 #include <eigen3/Eigen/Core> 18 return this->mData[std::make_pair(d0, d1)];
23 return this->mData.at(std::make_pair(d0, d1));
29 for (
auto& entry : rhs.mData)
31 if (mData.find(entry.first) != mData.end())
32 mData[entry.first] += entry.second;
34 mData[entry.first] = entry.second;
41 for (
auto& entry : mData)
42 entry.second *= scalar;
63 for (
auto& entry : rhs.mData)
65 if (mData.find(entry.first) != mData.end())
66 mData[entry.first] += entry.second * scalar;
68 mData[entry.first] = entry.second * scalar;
72 friend std::ostream& operator<<(std::ostream& out, const DofMatrixContainer<T>& dofMatrix)
74 for (
auto& entry : dofMatrix.mData)
76 auto& dofs = entry.first;
77 out <<
"=== " << dofs.first.GetName() <<
" " << dofs.second.GetName() <<
" ===" << std::endl;
78 out << entry.second << std::endl;
80 out <<
"====" << std::endl;
86 std::vector<DofType> dofTypes;
87 for (
const auto& data : mData)
89 AddUnique(&dofTypes, data.first.first);
90 AddUnique(&dofTypes, data.first.second);
96 static void AddUnique(std::vector<DofType>* dofTypes,
DofType dofType)
99 for (
const auto&
d : *dofTypes)
100 if (
d.
Id() == dofType.
Id())
106 dofTypes->push_back(dofType);
109 using DofPair = std::pair<DofType, DofType>;
110 struct CompareDofPairs
112 bool operator()(
const DofPair& a,
const DofPair& b)
const 115 if (a.first.Id() == b.first.Id())
116 return a.second.Id() < b.second.Id();
118 return a.first.Id() < b.first.Id();
121 std::map<DofPair, T, CompareDofPairs> mData;
const NuTo::DofType d("...", 1)
T & operator()(DofType d0, DofType d1)
Definition: DofMatrixContainer.h:16
void AddScaled(const DofMatrixContainer &rhs, double scalar)
calculates (*this) += rhs * scalar
Definition: DofMatrixContainer.h:61
DofMatrixContainer & operator*=(double scalar)
Definition: DofMatrixContainer.h:39
int Id() const
Definition: UniqueId.h:18
std::vector< DofType > DofTypes() const
Definition: DofMatrixContainer.h:84
friend DofMatrixContainer operator+(DofMatrixContainer lhs, const DofMatrixContainer &rhs)
Definition: DofMatrixContainer.h:46
const T & operator()(DofType d0, DofType d1) const
Definition: DofMatrixContainer.h:21
DofMatrixContainer & operator+=(const DofMatrixContainer &rhs)
performs uninitialized addition that resizes the data to the length of rhs
Definition: DofMatrixContainer.h:27
dof container that is also capable of performing calculations.
Definition: DofMatrixContainer.h:13
Definition: Exception.h:6
rhs
Definition: SparseDirectSolverMKLDSS.py:46
friend DofMatrixContainer operator*(DofMatrixContainer lhs, double scalar)
Definition: DofMatrixContainer.h:52