27#include "neml2/base/LabeledAxisAccessor.h"
28#include "neml2/misc/types.h"
51 std::
size_t m() const;
53 std::
size_t n() const;
55 std::
size_t p() const;
The accessor containing all the information needed to access an item in a LabeledAxis.
Definition LabeledAxisAccessor.h:56
LinearSystem(const LinearSystem &)=default
SparseTensorList A()
Assemble and return the operator, A.
const std::vector< TensorShape > & blayout() const
Get the ID-to-RHS-base-shape mapping for assembly.
const std::vector< LabeledAxisAccessor > & umap() const
Get the ID-to-unknown mapping for assembly.
std::size_t m() const
Number of rows in the matrix.
std::size_t n() const
Number of columns in the matrix.
std::tuple< SparseTensorList, SparseTensorList, SparseTensorList > A_and_B_and_b()
Assemble the auxiliary matrix B = dr/dg along with A and b.
virtual void post_assemble(bool A, bool B, bool b)
Callback after assembly to perform.
virtual void assemble(SparseTensorList *A, SparseTensorList *B, SparseTensorList *b)=0
Compute the operator and right-hand side.
std::vector< TensorShape > _blayout
ID-to-RHS shape mapping.
Definition LinearSystem.h:197
bool _A_up_to_date
Flag indicating if the system matrix is up to date. Setters invalidate this.
Definition LinearSystem.h:158
const std::vector< TensorShape > & intmd_blayout() const
Get the ID-to-RHS-intermediate-shape mapping for assembly.
std::tuple< SparseTensorList, SparseTensorList > A_and_B()
Assemble the auxiliary matrix B = dr/dg along with A.
virtual std::vector< TensorShape > setup_intmd_blayout()=0
Setup the RHS intermediate layout.
const std::vector< TensorShape > & ulayout() const
Get the ID-to-unknown-base-shape mapping for assembly.
std::vector< LabeledAxisAccessor > _gmap
The ID-to-given-variable mapping.
Definition LinearSystem.h:181
bool _B_up_to_date
Flag indicating if the auxiliary matrix is up to date. Setters invalidate this.
Definition LinearSystem.h:160
std::vector< TensorShape > _ulayout
ID-to-unknown base shape mapping.
Definition LinearSystem.h:174
const std::vector< LabeledAxisAccessor > & bmap() const
Get the ID-to-RHS mapping for assembly.
std::tuple< SparseTensorList, SparseTensorList > A_and_b()
Assemble and return the right-hand side and operator.
virtual std::vector< TensorShape > setup_intmd_ulayout()=0
Setup the unknown intermediate layout.
const std::vector< TensorShape > & intmd_glayout() const
Get the ID-to-prescribed-variable-intermediate-shape mapping for assembly.
virtual SparseTensorList g() const =0
Get the given variables g from the current step.
std::vector< TensorShape > _glayout
ID-to-given base shape mapping.
Definition LinearSystem.h:185
virtual std::vector< TensorShape > setup_blayout()=0
Setup the RHS layout.
virtual void set_g(const SparseTensorList &)=0
Set the given variables g from the current step.
std::vector< LabeledAxisAccessor > _umap
The ID-to-unknown mapping.
Definition LinearSystem.h:170
std::size_t p() const
Number of columns in the auxiliary matrix.
virtual std::vector< LabeledAxisAccessor > setup_gmap()=0
Setup the given variable map.
SparseTensorList b()
Assemble and return the right-hand side, b.
virtual std::vector< LabeledAxisAccessor > setup_bmap()=0
Setup the RHS map.
virtual std::vector< TensorShape > setup_intmd_glayout()=0
Setup the given variable intermediate layout.
virtual void u_changed()
Trigger when unknown variables changed.
virtual std::vector< LabeledAxisAccessor > setup_umap()=0
Setup the unknown map.
virtual SparseTensorList u() const =0
Get the unknown u.
virtual std::vector< TensorShape > setup_glayout()=0
Setup the given variable base layout.
LinearSystem(LinearSystem &&) noexcept=default
std::optional< std::vector< TensorShape > > _intmd_ulayout
ID-to-unknown intermediate shape mapping.
Definition LinearSystem.h:172
bool _b_up_to_date
Flag indicating if the system RHS is up to date. Setters invalidate this.
Definition LinearSystem.h:162
const std::vector< TensorShape > & glayout() const
Get the ID-to-prescribed-variable-base-shape mapping for assembly.
virtual void pre_assemble(bool A, bool B, bool b)
Callback before assembly to perform.
virtual void g_changed()
Trigger when given variables changed.
std::optional< std::vector< TensorShape > > _intmd_blayout
ID-to-RHS intermediate shape mapping.
Definition LinearSystem.h:195
virtual void set_u(const SparseTensorList &)=0
Set the unknown u.
const std::vector< LabeledAxisAccessor > & gmap() const
Get the ID-to-prescribed-variable mapping for assembly.
const std::vector< TensorShape > & intmd_ulayout() const
Get the ID-to-unknown-intermediate-shape mapping for assembly.
virtual std::vector< TensorShape > setup_ulayout()=0
Setup the unknown layout.
std::vector< LabeledAxisAccessor > _bmap
The ID-to-RHS mapping.
Definition LinearSystem.h:193
std::optional< std::vector< TensorShape > > _intmd_glayout
ID-to-given intermediate shape mapping.
Definition LinearSystem.h:183
Definition DiagnosticsInterface.h:31
c10::SmallVector< Size, 8 > TensorShape
Definition types.h:72
Alias for a list of Tensors.
Definition SparseTensorList.h:42