|
AbstractLinAlgPack: C++ Interfaces For Vectors, Matrices And Related Linear Algebra Objects
Version of the Day
|
Simple BasisSystem subclass the case where the client sets up seperate C and N matrices.
More...
#include <AbstractLinAlgPack_BasisSystemComposite.hpp>

Public types | |
| typedef Teuchos::RCP< const Teuchos::AbstractFactory < MatrixOp > > | fcty_Gc_ptr_t |
| | |
| typedef Teuchos::RCP < MatrixOpNonsing > | C_ptr_t |
| | |
| typedef Teuchos::RCP< MatrixOp > | N_ptr_t |
| | |
Static member functions | |
| static void | initialize_space_x (const VectorSpace::space_ptr_t &space_xD, const VectorSpace::space_ptr_t &space_xI, Range1D *var_dep, Range1D *var_indep, VectorSpace::space_ptr_t *space_x) |
Initialize the composite vector space for x = [ xD; xI ] as well as var_dep and var_indep. | |
| static const fcty_Gc_ptr_t | factory_Gc () |
Return a matrix factory object for the composte Gc matrix object. | |
| static void | initialize_Gc (const VectorSpace::space_ptr_t &space_x, const Range1D &var_dep, const Range1D &var_indep, const VectorSpace::space_ptr_t &space_c, const C_ptr_t &C, const N_ptr_t &N, MatrixOp *Gc) |
Initialize the Gc matrix object given created from space_Gc()->create(). | |
| static void | get_C_N (MatrixOp *Gc, MatrixOpNonsing **C, MatrixOp **N) |
Get the non-const aggregate matrices C and N (or NULL pointers if not initialized). | |
| static void | get_C_N (const MatrixOp &Gc, const MatrixOpNonsing **C, const MatrixOp **N) |
| Get the const aggregate matrices C and N. | |
Constructors / initializers | |
| BasisSystemComposite () | |
| BasisSystemComposite (const VectorSpace::space_ptr_t &space_x, const VectorSpace::space_ptr_t &space_c, const mat_nonsing_fcty_ptr_t &factory_C, const mat_sym_fcty_ptr_t &factory_transDtD, const mat_sym_nonsing_fcty_ptr_t &factory_S) | |
Calls this->initialize() in a way that is consistant with above helper functions. | |
| BasisSystemComposite (const VectorSpace::space_ptr_t &space_x, const Range1D &var_dep, const Range1D &var_indep, const VectorSpace::space_ptr_t &space_c, const mat_nonsing_fcty_ptr_t &factory_C, const mat_sym_fcty_ptr_t &factory_transDtD, const mat_sym_nonsing_fcty_ptr_t &factory_S, const mat_fcty_ptr_t &factory_D=Teuchos::null) | |
Calls this->initialize() | |
| void | initialize (const VectorSpace::space_ptr_t &space_x, const Range1D &var_dep, const Range1D &var_indep, const VectorSpace::space_ptr_t &space_c, const mat_nonsing_fcty_ptr_t &factory_C, const mat_sym_fcty_ptr_t &factory_transDtD, const mat_sym_nonsing_fcty_ptr_t &factory_S, const mat_fcty_ptr_t &factory_D=Teuchos::null) |
| Initialize. | |
| virtual void | set_uninitialized () |
| Set uninitialized. | |
Access | |
| const VectorSpace::space_ptr_t & | space_x () const |
| | |
| const VectorSpace::space_ptr_t & | space_c () const |
| | |
To be overridden by subclasses | |
| virtual void | update_D (const MatrixOpNonsing &C, const MatrixOp &N, MatrixOp *D, EMatRelations mat_rel) const |
Overridden by subclasses to update D if a specialized implementation is needed. | |
Overridden from BasisSystem | |
| const mat_nonsing_fcty_ptr_t | factory_C () const |
| | |
| const mat_fcty_ptr_t | factory_D () const |
| | |
| Range1D | var_dep () const |
| | |
| Range1D | var_indep () const |
| | |
| void | update_basis (const MatrixOp &Gc, MatrixOpNonsing *C, MatrixOp *D, MatrixOp *GcUP, EMatRelations mat_rel, std::ostream *out) const |
| | |
Simple BasisSystem subclass the case where the client sets up seperate C and N matrices.
This interface is based an implementation where C and N are manipulated by the application and are concatenated into Gc = [ C'; N' ]. Here, there are no undecomposed equality constraints allowed.
For this implementation, the basis matrix C must override the method MatrixOp::operator=() for correct behavior. A smart implementation of the basis matrix subclass will use lazy evaluation and not copy data inside of MatrixOp::operator=() unless necessary later on.
Definition at line 60 of file AbstractLinAlgPack_BasisSystemComposite.hpp.
| typedef Teuchos::RCP<const Teuchos::AbstractFactory<MatrixOp> > AbstractLinAlgPack::BasisSystemComposite::fcty_Gc_ptr_t |
Definition at line 69 of file AbstractLinAlgPack_BasisSystemComposite.hpp.
Definition at line 71 of file AbstractLinAlgPack_BasisSystemComposite.hpp.
Definition at line 73 of file AbstractLinAlgPack_BasisSystemComposite.hpp.
Default constructor.
Definition at line 291 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
| AbstractLinAlgPack::BasisSystemComposite::BasisSystemComposite | ( | const VectorSpace::space_ptr_t & | space_x, |
| const VectorSpace::space_ptr_t & | space_c, | ||
| const mat_nonsing_fcty_ptr_t & | factory_C, | ||
| const mat_sym_fcty_ptr_t & | factory_transDtD, | ||
| const mat_sym_nonsing_fcty_ptr_t & | factory_S | ||
| ) |
Calls this->initialize() in a way that is consistant with above helper functions.
Definition at line 295 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
| AbstractLinAlgPack::BasisSystemComposite::BasisSystemComposite | ( | const VectorSpace::space_ptr_t & | space_x, |
| const Range1D & | var_dep, | ||
| const Range1D & | var_indep, | ||
| const VectorSpace::space_ptr_t & | space_c, | ||
| const mat_nonsing_fcty_ptr_t & | factory_C, | ||
| const mat_sym_fcty_ptr_t & | factory_transDtD, | ||
| const mat_sym_nonsing_fcty_ptr_t & | factory_S, | ||
| const mat_fcty_ptr_t & | factory_D = Teuchos::null |
||
| ) |
Calls this->initialize()
Definition at line 312 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
| void AbstractLinAlgPack::BasisSystemComposite::initialize_space_x | ( | const VectorSpace::space_ptr_t & | space_xD, |
| const VectorSpace::space_ptr_t & | space_xI, | ||
| Range1D * | var_dep, | ||
| Range1D * | var_indep, | ||
| VectorSpace::space_ptr_t * | space_x | ||
| ) | [static] |
Initialize the composite vector space for x = [ xD; xI ] as well as var_dep and var_indep.
| space_xD | [in/out] Vector space for the dependent variables. On output space_xD.count() will be incremented by 1. |
| space_xI | [in/out] Vector space for the independent variables. It is allowed for space_xI.get()==NULL in which case there are no independent variables. If space_xI.get()!=NULL then on output space_xI.count() will be incremented by 1. |
| var_dep | [out] Range for dependent variables in output space_x |
| var_indep | [out] Range for independent variables in output space_x. Only applicable if space_xI.get()!=NULL. |
| space_x | [out] If space_xI.get()!=NULL then on output this will be the newly formed composite vector space space_x = [ space_xD; space_xI ]. The object *space_x will be dependent on the objects *space_xD *space_xI. If the client wants *space_x to be independent from these vector space objects then space_x->clone() can be used. If space_xI.get()==NULL then on output *space_x=space_xD will just be performed. |
Preconditions:
space_xD.get() != NULL (throw std::invalid_argument) var_dep != NULL (throw std::invalid_argument) space_xI.get() != NULL] var_indep != NULL (throw std::invalid_argument) Postconditions:
var_dep->size() == space_xD->dim() space_xI.get()!=NULL] var_indep->size() == space_xI->dim() space_xI.get()!=NULL] var_dep and var_indep are non-overlapping ranges. space_xI.get()!=NULL] space_x->dim() == var_dep->size() + var_indep->size() [space_xI.get()!=NULL] space_x->sub_space(*var_dep).get() == space_xD.get() [space_xI.get()!=NULL] space_x->sub_space(*var_indep).get() == space_xI.get() [space_xI.get()==NULL] space_x->dim() == var_dep->size() [space_xI.get()-=NULL] space_x->sub_space(*var_dep).get() == space_xD.get() Definition at line 86 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
| const BasisSystemComposite::fcty_Gc_ptr_t AbstractLinAlgPack::BasisSystemComposite::factory_Gc | ( | ) | [static] |
Return a matrix factory object for the composte Gc matrix object.
Definition at line 123 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
| void AbstractLinAlgPack::BasisSystemComposite::initialize_Gc | ( | const VectorSpace::space_ptr_t & | space_x, |
| const Range1D & | var_dep, | ||
| const Range1D & | var_indep, | ||
| const VectorSpace::space_ptr_t & | space_c, | ||
| const C_ptr_t & | C, | ||
| const N_ptr_t & | N, | ||
| MatrixOp * | Gc | ||
| ) | [static] |
Initialize the Gc matrix object given created from space_Gc()->create().
Initializes the composite matrix object:
Gc = [ C'; N' ]
| space_x | [in] Vector space for the variables (returned from initialize_space_x()). |
| var_dep | [in] Range for dependent variables in space_x. |
| var_indep | [in] Range for independent variables in space_x. |
| space_c | [in] Vector space for the equality constraints. |
| C | [in/out] Nonsingular basis matrix, initialized and ready to go. On output C.count() will be incremented by 1. |
| N | [in/out] Non-basis matrix, initialized and ready to go. On output N.count() will be incremented by 1. |
| Gc | [in/out] Composite matrix object that on output is initialized with. C and N. |
Preconditions:
space_x.get() != NULL (throw std::invalid_argument) space_c.get() != NULL (throw std::invalid_argument) C.get() != NULL (throw std::invalid_argument) space_x->dim() > space_c->dim()] N.get() != NULL (throw std::invalid_argument) space_x->dim() == space_c->dim()] N.get() == NULL (throw std::invalid_argument) Gc != NULL (throw std::invalid_argument) Postconditions:
&return->space_cols() == space_x.get() &return->space_rows() == space_c.get() Definition at line 129 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
| void AbstractLinAlgPack::BasisSystemComposite::get_C_N | ( | MatrixOp * | Gc, |
| MatrixOpNonsing ** | C, | ||
| MatrixOp ** | N | ||
| ) | [static] |
Get the non-const aggregate matrices C and N (or NULL pointers if not initialized).
| Gc | [in] Composite matrix object Gc = [ C'; N' ] |
| C | [out] Pointer to basis matrix object C. If Gc has not been initialized then *C == NULL on output. |
| N | [out] Pointer to nonbasis matrix object N. If Gc has not been initialized then *N == NULL on output. Preconditions:
|
Definition at line 201 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
| void AbstractLinAlgPack::BasisSystemComposite::get_C_N | ( | const MatrixOp & | Gc, |
| const MatrixOpNonsing ** | C, | ||
| const MatrixOp ** | N | ||
| ) | [static] |
Get the const aggregate matrices C and N.
| Gc | [in] Composite matrix object Gc = [ C'; N' ]. If this matrix object has not been initialized with C and N matrix objects then an exception is thown. |
| C | [out] Pointer to basis matrix object C. |
| N | [out] Pointer to nonbasis matrix object N. |
Preconditions:
Gc is setup with non-null C and N matrix objects (throw std::logic_error). C != NULL (throw std::invalid_argument) Gc->rows() < Gc->cols()] N != NULL (throw std::invalid_argument) Gc->rows() == Gc->cols()] N == NULL (throw std::invalid_argument) Definition at line 247 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
| void AbstractLinAlgPack::BasisSystemComposite::initialize | ( | const VectorSpace::space_ptr_t & | space_x, |
| const Range1D & | var_dep, | ||
| const Range1D & | var_indep, | ||
| const VectorSpace::space_ptr_t & | space_c, | ||
| const mat_nonsing_fcty_ptr_t & | factory_C, | ||
| const mat_sym_fcty_ptr_t & | factory_transDtD, | ||
| const mat_sym_nonsing_fcty_ptr_t & | factory_S, | ||
| const mat_fcty_ptr_t & | factory_D = Teuchos::null |
||
| ) |
Initialize.
| space_x | [in] Smart pointer to vector space for x. |
| var_dep | [in] Range for dependent variables xD. |
| var_indep | [in] Range for independent variables xI. |
| factory_C | [in] Smart pointer to factory object for basis matrix C. |
| factory_transDtD | [in] Smart point to the factory object for the matrix J = D'*D. Only valid if var_dep.size() < space_x->dim(). |
| factory_S | [in] Smart point to the factory object for the matrix S = I + D'*D. Only valid if var_dep.size() < space_x->dim(). |
| factory_D | [in] Smart pointer to factory object for direct sensitivity matrix D. If factory_D == NULL then an AbstractFactoryStd<> object will be used which calls space_xD->create_members(space_xI->dim()). which in turn of course creates MultiVectorMutable objects. Only valid if var_dep.size() < space_x->dim(). |
Preconditions:
space_xD.get() != NULL (throw std::invalid_argument) space_xI.get() != NULL (throw std::invalid_argument) factory_C.get() != NULL (throw std::invalid_argument) var_dep.size() < space_x->dim()] factory_S.get() != NULL (throw std::invalid_argument) Postconditions:
this->var_dep() == [1,space_xD->dim()] var_dep.size() < space_x->dim()] this->var_indep() == [space_xD->dim()+1,space_xD->dim()+space_xI->dim() this->equ_decomp() == [1,space_xD->dim()] this->equ_undecomp().size() == 0 this->factory_C().get() != NULL var_dep.size() < space_x->dim()] this->factory_S().get() == factory_S.get() var_dep.size() == space_x->dim()] this->factory_S().get() == NULL var_dep.size() < space_x->dim()] this->factory_D().get() != NULL var_dep.size() == space_x->dim()] this->factory_D().get() == NULL Definition at line 330 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
Set uninitialized.
Postconditions:
this->var_dep().size() == 0 this->var_indep().size() == 0 this->equ_decomp().size() == 0 this->equ_undecomp().size() == 0 this->inequ_decomp().size() == 0 this->equ_undecomp().size() == 0 this->factory_C().get() == NULL this->factory_D().get() == NULL this->factory_GcUP().get() == NULL this->factory_GhUP().get() == NULL Definition at line 381 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
| const VectorSpace::space_ptr_t & AbstractLinAlgPack::BasisSystemComposite::space_x | ( | ) | const |
Definition at line 393 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
| const VectorSpace::space_ptr_t & AbstractLinAlgPack::BasisSystemComposite::space_c | ( | ) | const |
Definition at line 399 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
| void AbstractLinAlgPack::BasisSystemComposite::update_D | ( | const MatrixOpNonsing & | C, |
| const MatrixOp & | N, | ||
| MatrixOp * | D, | ||
| EMatRelations | mat_rel | ||
| ) | const [virtual] |
Overridden by subclasses to update D if a specialized implementation is needed.
The default implementation just relies on the MultiVectorMutable interface and the M_StInvMtV() method.
Definition at line 406 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
| const BasisSystem::mat_nonsing_fcty_ptr_t AbstractLinAlgPack::BasisSystemComposite::factory_C | ( | ) | const [virtual] |
Implements AbstractLinAlgPack::BasisSystem.
Definition at line 420 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
| const BasisSystem::mat_fcty_ptr_t AbstractLinAlgPack::BasisSystemComposite::factory_D | ( | ) | const [virtual] |
Implements AbstractLinAlgPack::BasisSystem.
Definition at line 426 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
| Range1D AbstractLinAlgPack::BasisSystemComposite::var_dep | ( | ) | const [virtual] |
Implements AbstractLinAlgPack::BasisSystem.
Definition at line 431 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
| Range1D AbstractLinAlgPack::BasisSystemComposite::var_indep | ( | ) | const [virtual] |
Implements AbstractLinAlgPack::BasisSystem.
Definition at line 436 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
| void AbstractLinAlgPack::BasisSystemComposite::update_basis | ( | const MatrixOp & | Gc, |
| MatrixOpNonsing * | C, | ||
| MatrixOp * | D, | ||
| MatrixOp * | GcUP, | ||
| EMatRelations | mat_rel, | ||
| std::ostream * | out | ||
| ) | const [virtual] |
Implements AbstractLinAlgPack::BasisSystem.
Definition at line 441 of file AbstractLinAlgPack_BasisSystemComposite.cpp.
1.7.6.1