Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef TSFHOMOGENEOUSLYBLOCKEDLINEAROP_HPP
00030 #define TSFHOMOGENEOUSLYBLOCKEDLINEAROP_HPP
00031
00032 #include "SundanceDefs.hpp"
00033 #include "TSFSimplifiedLinearOpBase.hpp"
00034
00035 namespace TSFExtended
00036 {
00037 using namespace Teuchos;
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 template <class Scalar>
00048 class HomogeneouslyBlockedLinearOp :
00049 public virtual LinearOpBase<Scalar>
00050 {
00051 public:
00052
00053
00054
00055
00056
00057 HomogeneouslyBlockedLinearOp(
00058 const VectorSpace<Scalar>& singleBlockDomain,
00059 int numDomainBlocks,
00060 const VectorSpace<Scalar>& singleBlockRange,
00061 int numRangeBlocks
00062 )
00063 : singleBlockDomain_(singleBlockDomain),
00064 numDomainBlocks_(numDomainBlocks),
00065 singleBlockRange_(singleBlockRange),
00066 numRangeBlocks_(numRangeBlocks),
00067 domain_(),
00068 range_()
00069 {
00070 Array<VectorSpace<Scalar> > d(numDomainBlocks_, singleBlockDomain_);
00071 Array<VectorSpace<Scalar> > r(numRangeBlocks_, singleBlockRange_);
00072 domain_ = productSpace(d);
00073 range_ = productSpace(r);
00074 }
00075
00076
00077
00078
00079
00080 Teuchos::RCP< const Thyra::VectorSpaceBase<Scalar> > range() const
00081 {
00082 return range_;
00083 }
00084
00085
00086
00087 Teuchos::RCP< const Thyra::VectorSpaceBase<Scalar> > domain() const
00088 {
00089 return domain_;
00090 }
00091
00092 protected:
00093
00094
00095 int numBlockRows() const {return numRangeBlocks_;}
00096
00097
00098 int numBlockCols() const {return numDomainBlocks_;}
00099
00100
00101
00102 const VectorSpace<Scalar>& singleBlockDomain() const
00103 {
00104 return singleBlockDomain_;
00105 }
00106
00107
00108
00109 const VectorSpace<Scalar>& singleBlockRange() const
00110 {
00111 return singleBlockRange_;
00112 }
00113
00114 private:
00115 VectorSpace<Scalar> singleBlockDomain_;
00116 int numDomainBlocks_;
00117 VectorSpace<Scalar> singleBlockRange_;
00118 int numRangeBlocks_;
00119 Teuchos::RCP< const Thyra::VectorSpaceBase<Scalar> > domain_;
00120 Teuchos::RCP< const Thyra::VectorSpaceBase<Scalar> > range_;
00121 };
00122 }
00123
00124 #endif