30#include "neml2/misc/types.h"
31#include "neml2/tensors/jit.h"
32#include "neml2/equation_systems/SparseMatrix.h"
33#include "neml2/equation_systems/SparseVector.h"
57 using DerivSparsity = std::vector<std::pair<VariableBase *, const VariableBase *>>;
59 std::vector<std::tuple<VariableBase *, const VariableBase *, const VariableBase *>>;
107 const std::optional<std::vector<std::pair<VariableName, VariableName>>> &
110 return _requested_derivs;
140 const std::vector<std::pair<VariableName, VariableName>> & derivs);
157 template <
typename T>
168 template <
typename T>
170 bool allow_duplicate =
false);
179 template <
typename T>
189 template <
typename T>
194 std::optional<VariableName> new_name = std::nullopt);
198 std::optional<VariableName> new_name = std::nullopt);
213 template <
typename T>
218 template <
typename T>
221 bool allow_duplicate =
false);
236 std::map<VariableName, Size> _input_intmd_dims;
239 std::map<VariableName, Size> _output_intmd_dims;
242 std::optional<DerivSparsity> _deriv_sparsity = std::nullopt;
245 std::optional<SecDerivSparsity> _secderiv_sparsity = std::nullopt;
248 std::optional<DerivSparsity> _deriv_sparsity_nl_sys = std::nullopt;
251 std::optional<SecDerivSparsity> _secderiv_sparsity_nl_sys = std::nullopt;
254 std::optional<std::vector<std::pair<VariableName, VariableName>>> _requested_derivs =
258 std::optional<std::vector<std::pair<VariableName, VariableName>>> _requested_derivs_nl_sys =
The base class for all constitutive models.
Definition Model.h:82
Base class of variable.
Definition VariableBase.h:58
SparseMatrix collect_output_derivatives(const AxisLayout &, const AxisLayout &) const
VariableBase & output_variable(const VariableName &)
void assign_output(const SparseVector &)
Assign output variable values.
SparseVector collect_output(const AxisLayout &) const
VariableBase * clone_output_variable(const VariableBase &var, std::optional< VariableName > new_name=std::nullopt)
Clone a variable and put it on the output axis.
void assign_input(const SparseVector &, bool allow_nonexistent=false)
ValueMap collect_output() const
Collect output variable values.
std::vector< std::tuple< VariableBase *, const VariableBase *, const VariableBase * > > SecDerivSparsity
Definition VariableStore.h:58
const std::optional< DerivSparsity > & derivative_sparsity() const
Derivative sparsity.
virtual ~VariableStore()=default
void assign_input(const ValueMap &, bool allow_nonexistent=false)
void cache_derivative_sparsity()
void assign_output_derivatives(const SparseMatrix &)
Assign variable derivatives.
Variable< T > & declare_output_variable(const VariableName &name)
Declare an output variable.
virtual void send_variables_to(const TensorOptions &options)
Send padding variables to options.
std::vector< std::pair< VariableBase *, const VariableBase * > > DerivSparsity
Definition VariableStore.h:57
SecDerivMap collect_output_second_derivatives() const
Collect variable second derivatives.
VariableStore(Model *object)
void assign_output_stack(jit::Stack &stack, bool out, bool dout, bool d2out)
Assign stack to output variables and derivatives.
Variable< T > & declare_output_variable(const char *name)
Declare an output variable.
VariableStorage & output_variables()
Definition VariableStore.h:65
friend const T & resolve_tensor_name(const TensorName< T > &, Model *, const std::string &)
VariableBase & input_variable(const VariableName &)
const std::optional< SecDerivSparsity > & second_derivative_sparsity() const
Second derivative sparsity.
VariableStore(const VariableStore &)=delete
jit::Stack collect_output_stack(bool out, bool dout, bool d2out) const
Collect stack from output variables and derivatives.
const std::optional< std::vector< std::pair< VariableName, VariableName > > > & requested_output_derivatives() const
The currently active output derivative filter, or nullopt if all derivatives are requested.
Definition VariableStore.h:108
DerivMap collect_output_derivatives() const
Collect variable derivatives.
void set_output_derivative_filter_nl_sys(const std::vector< std::pair< VariableName, VariableName > > &derivs)
virtual void clear_derivatives()
virtual void clear_input()
SparseVector collect_input(const AxisLayout &) const
const VariableStorage & input_variables() const
Definition VariableStore.h:64
std::map< VariableName, std::unique_ptr< VariableBase > > VariableStorage
Definition VariableStore.h:56
jit::Stack collect_input_stack() const
Collect stack from input variables.
virtual void clear_output()
VariableStore & operator=(const VariableStore &)=delete
const VariableStorage & output_variables() const
Definition VariableStore.h:66
const Variable< T > & declare_input_variable(const char *name, bool allow_duplicate=false)
Declare an input variable.
VariableStore & operator=(VariableStore &&)=delete
void cache_second_derivative_sparsity()
Cache sparsity of second derivatives.
VariableStorage & input_variables()
Definition VariableStore.h:63
void set_output_derivative_filter(const std::vector< std::pair< VariableName, VariableName > > &derivs)
const VariableBase & input_variable(const VariableName &) const
const Variable< T > & declare_input_variable(const VariableName &name, bool allow_duplicate=false)
Declare an input variable.
VariableStore(VariableStore &&)=delete
const TensorOptions & variable_options() const
Current tensor options for variables.
Definition VariableStore.h:78
void assign_input_stack(jit::Stack &stack)
virtual void zero_undefined_input()
Fill undefined input variables with zeros.
const VariableBase * clone_input_variable(const VariableBase &var, std::optional< VariableName > new_name=std::nullopt)
Clone a variable and put it on the input axis.
const VariableBase & output_variable(const VariableName &) const
Concrete definition of a variable.
Definition Variable.h:37
Definition DiagnosticsInterface.h:31
std::map< VariableName, ValueMap > DerivMap
Definition Tensor.h:40
std::string name(ElasticConstant p)
std::map< VariableName, Tensor > ValueMap
Definition Tensor.h:39
std::map< VariableName, DerivMap > SecDerivMap
Definition Tensor.h:41
std::string VariableName
Definition types.h:75
c10::TensorOptions TensorOptions
Definition types.h:66
Definition AxisLayout.h:34
Sparse representation of a matrix consisting of a 2D-list of tensors and their layout.
Definition SparseMatrix.h:36
Sparse representation of a vector consisting of a list of tensors and their layout.
Definition SparseVector.h:36
The name of a tensor object that can be referenced in the input files.
Definition TensorName.h:47