16#include "neml2/tensors/tensors.h"
17#include "neml2/base/Factory.h"
18#include "neml2/models/Model.h"
55std::shared_ptr<neml2::Model>
56getModel(neml2::Factory & factory,
const std::string & name, neml2::Dtype dtype = neml2::kFloat64);
65 static constexpr std::array<neml2::Size, 0> shape{};
66 static constexpr std::array<neml2::Size, 1> strides{1};
71 static constexpr std::array<neml2::Size, 1> shape{3};
72 static constexpr std::array<neml2::Size, 2> strides{3, 1};
77 static constexpr std::array<neml2::Size, 2> shape{3, 3};
78 static constexpr std::array<neml2::Size, 3> strides{9, 3, 1};
83 static constexpr std::array<neml2::Size, 1> shape{6};
84 static constexpr std::array<neml2::Size, 2> strides{6, 1};
89 static constexpr std::array<neml2::Size, 4> shape{3, 3, 3, 3};
90 static constexpr std::array<neml2::Size, 5> strides{81, 27, 9, 3, 1};
95 static constexpr std::array<neml2::Size, 2> shape{6, 6};
96 static constexpr std::array<neml2::Size, 3> strides{36, 6, 1};
116 const auto torch_tensor = at::from_blob(
const_cast<T *
>(data.data()),
118 at::TensorOptions().dtype(neml2::kFloat64));
119 return neml2::Tensor(torch_tensor, 1);
139 if (src.dtype() != neml2::kFloat64)
141 "Cannot copy at::Tensor with dtype ", src.dtype(),
" into ", demangle(
typeid(T).name()));
143 mooseError(
"Cannot copy at::Tensor with shape ",
146 demangle(
typeid(T).name()),
147 " with different number of elements.");
148 auto dest_tensor = at::from_blob(
reinterpret_cast<Real *
>(&dest),
150 at::TensorOptions().dtype(neml2::kFloat64));
155==============================================================================
156To debug NEML2 related issues:
1571. Build and run MOOSE in dbg mode.
1582. Re-run the simulation using the dbg executable, and often times
159 NEML2 will provide a more helpful error message.
1603. If the error message is not helpful, or if there is still no error message,
161 run the simulation through a debugger: See
162 https://mooseframework.inl.gov/application_development/debugging.html
1634. If the issue is due to a NEML2 bug, feel free to report it at
164 https://github.com/applied-material-modeling/neml2/issues
165==============================================================================
176std::string
docstring(
const std::string & desc);
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
Every object that can be built by the factory should be derived from this class.
RankFourTensorTempl is designed to handle any N-dimensional fourth order tensor, C.
Generic class for solving transient nonlinear problems.
SymmetricRankFourTensorTempl is designed to handle an N-dimensional fourth order tensor with minor sy...
neml2::Tensor fromBlob(const std::vector< T > &data)
Map from std::vector<T> to neml2::Tensor without copying the data.
std::shared_ptr< neml2::Model > getModel(neml2::Factory &factory, const std::string &name, neml2::Dtype dtype=neml2::kFloat64)
Get the NEML2 Model.
std::string docstring(const std::string &desc)
Augment docstring if NEML2 is not enabled.
bool shouldCompute(const SubProblem &)
Determine whether the NEML2 material model should be evaluated.
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.
void assertNEML2Enabled()
Assert that NEML2 is enabled.
std::string stringify(MOOSEIOType type)
static std::string NEML2_help_message