42 #ifndef MATRIX_SYM_ADD_DEL_UPDATEABLE_H
43 #define MATRIX_SYM_ADD_DEL_UPDATEABLE_H
45 #include "AbstractLinAlgPack_Types.hpp"
46 #include "AbstractLinAlgPack_MatrixBase.hpp"
48 namespace AbstractLinAlgPack {
135 enum EEigenValType { EIGEN_VAL_POS, EIGEN_VAL_NEG, EIGEN_VAL_ZERO, EIGEN_VAL_UNKNOWN };
142 enum { UNKNOWN = -1 };
144 int neg_eigen_vals = UNKNOWN
145 ,
int zero_eigen_vals = UNKNOWN
146 ,
int pos_eigen_vals = UNKNOWN
163 enum { UNKNOWN = -1 };
170 value_type _warning_tol
171 ,value_type _singular_tol
172 ,value_type _wrong_inertia_tol
189 : std::logic_error(what_arg), gamma(_gamma) {}
196 : std::logic_error(what_arg), gamma(_gamma) {}
203 : std::logic_error(what_arg), gamma(_gamma) {}
257 ,
bool force_factorization
259 ,PivotTolerances pivot_tols = PivotTolerances()
264 virtual size_type
max_size()
const = 0;
271 virtual Inertia
inertia()
const = 0;
324 ,
bool force_refactorization =
true
326 ,PivotTolerances pivot_tols = PivotTolerances()
365 ,
bool force_refactorization =
true
367 ,PivotTolerances pivot_tols = PivotTolerances()
376 #endif // MATRIX_SYM_ADD_DEL_UPDATEABLE_H
Base class for all polymorphic matrices.
virtual void delete_update(size_type jd, bool force_refactorization=true, EEigenValType drop_eigen_val=EIGEN_VAL_UNKNOWN, PivotTolerances pivot_tols=PivotTolerances())=0
Update by deleteing a symmetric row and column.
Thrown if matrix has the wrong inertia from what was expected.
virtual void augment_update(const DVectorSlice *t, value_type alpha, bool force_refactorization=true, EEigenValType add_eigen_val=EIGEN_VAL_UNKNOWN, PivotTolerances pivot_tols=PivotTolerances())=0
Update by adding a symmetric row and column.
Mix-in Interface for updating a serial symmetric matrix by adding and deleting rows and columns...
Thrown if the maximum size is exceeded in augment_update(...).
virtual void initialize(value_type alpha, size_type max_size)=0
Initialize to a 1x1 matrix.
virtual ~MatrixSymAddDelUpdateable()
virtual Inertia inertia() const =0
Return the inertia of the matrix (if it is known). If any of the members of the inertia is not known ...
value_type wrong_inertia_tol
virtual void set_uninitialized()=0
Set the matrix to uninitialized.
Struct for pivot tolerances to be used when initializing, and augmenting and deleting rows and column...
Thrown if the matrix is singular and should not have been.
Struct for the inertia of the matrix.
virtual size_type max_size() const =0
Return the maximum size the matrix is allowed to become.
Thrown if the matrix is near singular as a warning.