16 #include "neml2/tensors/tensors.h" 17 #include "neml2/base/Factory.h" 18 #include "neml2/models/Model.h" 55 std::shared_ptr<neml2::Model>
56 getModel(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};
110 template <
typename T>
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);
135 template <
typename T>
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 ",
147 " with different number of elements.");
148 auto dest_tensor = at::from_blob(reinterpret_cast<Real *>(&dest),
150 at::TensorOptions().dtype(neml2::kFloat64));
155 ============================================================================== 156 To debug NEML2 related issues: 157 1. Build and run MOOSE in dbg mode. 158 2. Re-run the simulation using the dbg executable, and often times 159 NEML2 will provide a more helpful error message. 160 3. 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 163 4. 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 ============================================================================== 168 #endif // NEML2_ENABLED 176 std::string
docstring(
const std::string & desc);
std::string name(const ElemQuality q)
RankFourTensorTempl is designed to handle any N-dimensional fourth order tensor, C.
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
bool shouldCompute(const SubProblem &)
Determine whether the NEML2 material model should be evaluated.
static std::string NEML2_help_message
std::string stringify(MOOSEIOType type)
Every object that can be built by the factory should be derived from this class.
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 docstring(const std::string &desc)
Augment docstring if NEML2 is not enabled.
std::string demangle(const char *name)
void assertNEML2Enabled()
Assert that NEML2 is enabled.
std::shared_ptr< neml2::Model > getModel(neml2::Factory &factory, const std::string &name, neml2::Dtype dtype=neml2::kFloat64)
Get the NEML2 Model.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
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.