diff --git a/MaterialLib/MPL/Properties/Constant.cpp b/MaterialLib/MPL/Properties/Constant.cpp index fcff143af39fcf9467c81e14fc8970dc74c7388d..112de01d1e4ea4be750b1040f772cc60e57307d6 100644 --- a/MaterialLib/MPL/Properties/Constant.cpp +++ b/MaterialLib/MPL/Properties/Constant.cpp @@ -12,14 +12,47 @@ #include "Constant.h" + namespace MaterialPropertyLib { +struct ZeroInitPropertyDataType +{ + PropertyDataType operator()(double) const { return 0.; } + + PropertyDataType operator()(Eigen::Vector2d) const + { + return Eigen::Vector2d::Zero().eval(); + } + + PropertyDataType operator()(Eigen::Vector3d) const + { + return Eigen::Vector3d::Zero().eval(); + } + + PropertyDataType operator()(Eigen::Matrix<double, 2, 2>) const + { + return Eigen::Matrix<double, 2, 2>::Zero().eval(); + } + PropertyDataType operator()(Eigen::Matrix<double, 3, 3>) const + { + return Eigen::Matrix<double, 3, 3>::Zero().eval(); + } + + PropertyDataType operator()(Eigen::Matrix<double, 4, 1>) const + { + return Eigen::Matrix<double, 4, 1>::Zero().eval(); + } + + PropertyDataType operator()(Eigen::Matrix<double, 6, 1>) const + { + return Eigen::Matrix<double, 6, 1>::Zero().eval(); + } +}; + Constant::Constant(std::string name, PropertyDataType const& v) { name_ = std::move(name); value_ = v; - dvalue_ = std::visit( - [](auto const& value) -> PropertyDataType { return decltype(value){}; }, - v); + dvalue_ = std::visit(ZeroInitPropertyDataType{}, v); }; } // namespace MaterialPropertyLib