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 THYRA_DESCRIBE_LINEAR_OP_HPP
00030 #define THYRA_DESCRIBE_LINEAR_OP_HPP
00031
00032 #include "Thyra_describeLinearOpDecl.hpp"
00033 #include "Thyra_LinearOpBase.hpp"
00034 #include "Thyra_MultiVectorBase.hpp"
00035 #include "Thyra_VectorStdOps.hpp"
00036 #include "Thyra_AssertOp.hpp"
00037 #include "Thyra_AssertOp.hpp"
00038
00039 template<class RangeScalar, class DomainScalar>
00040 void Thyra::describeLinearOp(
00041 const LinearOpBase<RangeScalar,DomainScalar> &A
00042 ,Teuchos::FancyOStream &out_arg
00043 ,const Teuchos::EVerbosityLevel verbLevel
00044 )
00045 {
00046 using Teuchos::RCP;
00047 using Teuchos::FancyOStream;
00048 using Teuchos::OSTab;
00049 typedef Teuchos::ScalarTraits<DomainScalar> DST;
00050 RCP<FancyOStream> out = rcp(&out_arg,false);
00051 OSTab tab(out);
00052 *out << A.description() << "\n";
00053 const Teuchos::RCP<const VectorSpaceBase<RangeScalar> >
00054 range = A.range();
00055 const Teuchos::RCP<const VectorSpaceBase<DomainScalar> >
00056 domain = A.domain();
00057 if(!range.get()) {
00058 return;
00059 }
00060 const Index dimDomain = domain->dim(), dimRange = range->dim();
00061 if ( dimDomain > 0 && dimRange > 0 && verbLevel >= Teuchos::VERB_EXTREME ) {
00062
00063 Teuchos::RCP<VectorBase<DomainScalar> > e_j = createMember(domain);
00064 Teuchos::RCP<VectorBase<RangeScalar> > t = createMember(range);
00065 RTOpPack::ConstSubVectorView<RangeScalar> sv;
00066 std::vector<RangeScalar> Md( dimRange * dimDomain );
00067 const Index
00068 cs = 1,
00069 rs = dimRange;
00070 Index i, j;
00071 OSTab tab2(out);
00072 for( j = 0; j < dimDomain; ++j ) {
00073 Thyra::assign( e_j.get(), DST::zero() );
00074 Thyra::set_ele( j, DST::one(), e_j.get() );
00075 apply(A,NONCONJ_ELE,*e_j,t.get());
00076 t->acquireDetachedView(Range1D(),&sv);
00077 for( i = 0; i < dimRange; ++i ) Md[ i*cs + j*rs ] = sv(i);
00078 t->releaseDetachedView(&sv);
00079 }
00080
00081 for( i = 0; i < dimRange; ++i ) {
00082 for( j = 0; j < dimDomain; ++j )
00083 *out << " " << i << ":" << j << ":" << Md[ i + j*dimRange ];
00084 *out << std::endl;
00085 }
00086 }
00087 }
00088
00089 #endif // THYRA_DESCRIBE_LINEAR_OP_HPP