51 m_shapeType(shapeType),
52 m_base(stdExpansion.GetBase()),
53 m_ncoeffs(stdExpansion.GetNcoeffs()),
54 m_matrixType(matrixType),
55 m_nodalPointsType(nodalType),
57 m_varcoeffs(varCoeffMap),
58 m_varcoeff_hashes(varCoeffMap.size())
62 for (
auto &x : varCoeffMap)
72 m_shapeType(
rhs.m_shapeType),
74 m_ncoeffs(
rhs.m_ncoeffs),
75 m_matrixType(matrixType),
76 m_nodalPointsType(
rhs.m_nodalPointsType),
77 m_factors(
rhs.m_factors),
78 m_varcoeffs(
rhs.m_varcoeffs),
79 m_varcoeff_hashes(
rhs.m_varcoeff_hashes)
84 m_shapeType(
rhs.m_shapeType),
86 m_ncoeffs(
rhs.m_ncoeffs),
87 m_matrixType(
rhs.m_matrixType),
88 m_nodalPointsType(
rhs.m_nodalPointsType),
89 m_factors(
rhs.m_factors),
90 m_varcoeffs(
rhs.m_varcoeffs),
91 m_varcoeff_hashes(
rhs.m_varcoeff_hashes)
98 return (
lhs.m_matrixType <
rhs.m_matrixType);
103 if(
lhs.m_matrixType <
rhs.m_matrixType)
108 if(
lhs.m_matrixType >
rhs.m_matrixType)
113 if(
lhs.m_ncoeffs <
rhs.m_ncoeffs)
118 if(
lhs.m_ncoeffs >
rhs.m_ncoeffs)
137 if(
lhs.m_base[i].get() <
rhs.m_base[i].get())
142 if(
lhs.m_base[i].get() >
rhs.m_base[i].get())
148 if(
lhs.m_factors.size() <
rhs.m_factors.size())
152 else if(
lhs.m_factors.size() >
rhs.m_factors.size())
158 for(
auto x =
lhs.m_factors.begin(), y =
rhs.m_factors.begin();
159 x !=
lhs.m_factors.end(); ++x, ++y)
161 if (x->second < y->second)
165 if (x->second > y->second)
172 if(
lhs.m_varcoeffs.size() <
rhs.m_varcoeffs.size())
177 if(
lhs.m_varcoeffs.size() >
rhs.m_varcoeffs.size())
182 for (
unsigned int i = 0; i <
lhs.m_varcoeff_hashes.size(); ++i)
184 if(
lhs.m_varcoeff_hashes[i] <
rhs.m_varcoeff_hashes[i])
188 if(
lhs.m_varcoeff_hashes[i] >
rhs.m_varcoeff_hashes[i])
194 if(
lhs.m_nodalPointsType <
rhs.m_nodalPointsType)
199 if(
lhs.m_nodalPointsType >
rhs.m_nodalPointsType)
209 if(
lhs.m_matrixType !=
rhs.m_matrixType)
214 if(
lhs.m_ncoeffs !=
rhs.m_ncoeffs)
221 if(
lhs.m_base[i].get() !=
rhs.m_base[i].get())
227 if(
lhs.m_factors.size() !=
rhs.m_factors.size())
233 return lhs.m_factors.size() ==
rhs.m_factors.size() &&
234 std::equal(
lhs.m_factors.begin(),
lhs.m_factors.end(),
235 rhs.m_factors.begin());
238 if(
lhs.m_nodalPointsType !=
rhs.m_nodalPointsType)
243 if(
lhs.m_varcoeffs.size() !=
rhs.m_varcoeffs.size())
248 for (
unsigned int i = 0; i <
lhs.m_varcoeff_hashes.size(); ++i)
250 if(
lhs.m_varcoeff_hashes[i] !=
rhs.m_varcoeff_hashes[i])
256 for (
auto &x :
lhs.m_varcoeffs)
258 auto y =
rhs.m_varcoeffs.find(x.first);
260 if (y ==
rhs.m_varcoeffs.end())
265 if (x.second != y->second)
270 for (
unsigned int i = 0; i <
lhs.m_varcoeffs.size(); ++i)
272 if(
lhs.m_varcoeff_hashes[i] !=
rhs.m_varcoeff_hashes[i])
283 os <<
"MatrixType: " <<
MatrixTypeMap[
rhs.GetMatrixType()] <<
", ShapeType: "
287 if(
rhs.GetConstFactors().size())
289 os <<
"Constants: " << endl;
290 for(
auto &x :
rhs.GetConstFactors())
295 if(
rhs.GetVarCoeffs().size())
297 os <<
"Variable coefficients: " << endl;
299 for (
auto &x :
rhs.GetVarCoeffs())
302 os <<
"\t Hash: " <<
rhs.GetVarCoeffHashes()[i++] << endl;
308 os <<
rhs.GetBase()[i]->GetBasisKey();
The base class for all shapes.
int GetTotPoints() const
This function returns the total number of quadrature points used in the element.
friend bool operator<(const StdMatrixKey &lhs, const StdMatrixKey &rhs)
Used for finding value given the key in NekManager.
friend bool operator==(const StdMatrixKey &lhs, const StdMatrixKey &rhs)
std::vector< std::size_t > m_varcoeff_hashes
const unsigned int ShapeTypeDimMap[SIZE_ShapeType]
const char *const ShapeTypeMap[]
std::map< StdRegions::VarCoeffType, Array< OneD, NekDouble > > VarCoeffMap
const char *const VarCoeffTypeMap[]
const char *const ConstFactorTypeMap[]
const char *const MatrixTypeMap[]
std::map< ConstFactorType, NekDouble > ConstFactorMap
std::ostream & operator<<(std::ostream &os, const IndexMapKey &rhs)
StandardMatrixTag boost::call_traits< LhsDataType >::const_reference rhs
std::size_t hash_range(Iter first, Iter last)
void hash_combine(std::size_t &seed)
bool operator()(const StdMatrixKey &lhs, const StdMatrixKey &rhs) const