27#include "neml2/tensors/Scalar.h"
31#include <unordered_map>
61template <std::
size_t N>
80 : _output_parameterization(output_parameterization),
81 _deriv_requested(deriv_requested)
83 assert_ascending(output_parameterization);
84 assert_ascending(input_parameterization);
85 if (!table.count(input_parameterization))
87 "Parameterization not found in the conversion table. This typically means that the "
88 "given combination of Lame parameters is not yet supported.");
89 _converters = table.at(input_parameterization);
96 for (std::size_t i = 0; i < N; ++i)
97 ret[i] = _converters[i](input, _deriv_requested);
105 for (std::size_t i = 0; i < N; ++i)
106 input_values[i] = *input[i];
113 return _converters[find_index(p)](input, _deriv_requested);
120 for (std::size_t i = 0; i < N; ++i)
121 input_values[i] = *input[i];
122 return convert(input_values, p);
129 for (std::size_t i = 1; i < N; ++i)
130 if (
static_cast<std::uint8_t
>(ps[i]) <=
static_cast<std::uint8_t
>(ps[i - 1]))
132 "Internal error: ElasticityConverters only accept Lame parameters sorted in the "
133 "following order: LAME_LAMBDA, BULK_MODULUS, SHEAR_MODULUS, YOUNGS_MODULUS, "
134 "POISSONS_RATIO, P_WAVE_MODULUS.");
140 auto it = std::find(_output_parameterization.begin(), _output_parameterization.end(), p);
141 if (it == _output_parameterization.end())
143 "Internal error: Lame parameter not found in the output parameterization.");
144 return std::distance(_output_parameterization.begin(), it);
154 std::array<ConverterType, N> _converters;
std::array< Scalar, N > DerivativeType
Definition ElasticityConverter.h:68
ResultType convert(const InputPtrType &input) const
Convert input to independent elastic constants with derivatives.
Definition ElasticityConverter.h:102
ConversionType convert(const InputPtrType &input, const ElasticConstant p) const
Convert input to a single elastic constant with derivatives.
Definition ElasticityConverter.h:117
ElasticityConverter(const ConversionTableType &table, const ConverterKey &output_parameterization, const ConverterKey &input_parameterization, const DerivativeFlagType &deriv_requested)
Definition ElasticityConverter.h:76
std::array< const Scalar *, N > InputPtrType
Definition ElasticityConverter.h:66
std::array< Scalar, N > InputType
Definition ElasticityConverter.h:65
std::array< bool, N > DerivativeFlagType
Definition ElasticityConverter.h:67
ConversionType convert(const InputType &input, const ElasticConstant p) const
Convert input to a single elastic constant with derivatives.
Definition ElasticityConverter.h:111
std::array< ConversionType, N > ResultType
Definition ElasticityConverter.h:70
std::pair< Scalar, DerivativeType > ConversionType
Definition ElasticityConverter.h:69
ResultType convert(const InputType &input) const
Convert input to independent elastic constants with derivatives.
Definition ElasticityConverter.h:93
std::map< ConverterKey, std::array< ConverterType, N > > ConversionTableType
Definition ElasticityConverter.h:74
std::array< ElasticConstant, N > ConverterKey
Definition ElasticityConverter.h:72
ConversionType(*)(const InputType &, const DerivativeFlagType &) ConverterType
Definition ElasticityConverter.h:73
Definition DiagnosticsInterface.cxx:30
ElasticConstant
Definition ElasticityConverter.h:38
@ CUBIC_C1
Definition ElasticityConverter.h:48
@ P_WAVE_MODULUS
Definition ElasticityConverter.h:46
@ SHEAR_MODULUS
Definition ElasticityConverter.h:43
@ POISSONS_RATIO
Definition ElasticityConverter.h:45
@ BULK_MODULUS
Definition ElasticityConverter.h:42
@ YOUNGS_MODULUS
Definition ElasticityConverter.h:44
@ LAME_LAMBDA
Definition ElasticityConverter.h:41
@ CUBIC_C3
Definition ElasticityConverter.h:50
@ INVALID
Definition ElasticityConverter.h:39
@ CUBIC_C2
Definition ElasticityConverter.h:49
std::string name(ElasticConstant p)
Definition ElasticityConverter.cxx:30