13 #define registerNEML2ToMOOSEMaterialProperty(alias) \ 14 registerMooseObject("MooseApp", NEML2ToMOOSE##alias##MaterialProperty) 28 params.addClassDescription(
"Provide an output (or its derivative) from a NEML2 model as a MOOSE " 29 "material property of type " +
32 params.addRequiredParam<UserObjectName>(
"neml2_executor",
33 "User object managing the execution of the NEML2 model.");
34 params.addRequiredParam<MaterialPropertyName>(
36 "MOOSE material property used to store the NEML2 output variable (or its derivative)");
37 params.addRequiredParam<std::string>(
"from_neml2",
"NEML2 output variable to read from");
38 params.addParam<std::string>(
39 "neml2_input_derivative",
41 "If supplied return the derivative of the NEML2 output variable with respect to this");
42 params.addParam<std::string>(
43 "neml2_parameter_derivative",
44 "If supplied return the derivative of neml2_variable with respect to this");
48 params.addParam<MaterialPropertyName>(
"moose_material_property_init",
49 "Optional material property as the initial condition");
60 _prop(declareProperty<T>(getParam<MaterialPropertyName>(
"to_moose"))),
61 _prop0(isParamValid(
"moose_material_property_init")
62 ? &getMaterialProperty<T>(
"moose_material_property_init")
64 _value(!isParamValid(
"neml2_input_derivative")
65 ? (!isParamValid(
"neml2_parameter_derivative")
66 ? _execute_neml2_model.getOutput(getParam<
std::string>(
"from_neml2"))
67 : _execute_neml2_model.getOutputParameterDerivative(
68 getParam<
std::string>(
"from_neml2"),
69 getParam<
std::string>(
"neml2_parameter_derivative")))
70 : _execute_neml2_model.getOutputDerivative(
71 getParam<
std::string>(
"from_neml2"),
72 getParam<
std::string>(
"neml2_input_derivative")))
85 if (_t_step == 0 && _prop0)
87 _prop.set() = _prop0->get();
91 if (!_execute_neml2_model.outputReady())
95 const auto i = _execute_neml2_model.getBatchIndex(_current_elem->id());
96 for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
97 if (_value.batch_dim())
104 #define instantiateNEML2ToMOOSEMaterialProperty(T) template class NEML2ToMOOSEMaterialProperty<T> std::string name(const ElemQuality q)
RankFourTensorTempl is designed to handle any N-dimensional fourth order tensor, C.
static InputParameters validParams()
void computeProperties() override
Performs the quadrature point loop, calling computeQpProperties.
NEML2ToMOOSEMaterialProperty(const InputParameters ¶ms)
instantiateNEML2ToMOOSEMaterialProperty(Real)
static InputParameters validParams()
void copyTensorToMOOSEData(const at::Tensor &src, T &dest)
Directly copy a contiguous chunk of memory of a at::Tensor to a MOOSE data of type T...
std::string demangle(const char *name)
Materials compute MaterialProperties.
void assertNEML2Enabled()
Assert that NEML2 is enabled.
NEML2ModelExecutor executes a NEML2 model.
registerNEML2ToMOOSEMaterialProperty(Real)
SymmetricRankFourTensorTempl is designed to handle an N-dimensional fourth order tensor with minor sy...