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_SCALED_ADJOINT_LINEAR_OP_BASE_HPP
00030 #define THYRA_SCALED_ADJOINT_LINEAR_OP_BASE_HPP
00031
00032 #include "Thyra_ScaledAdjointLinearOpBaseDecl.hpp"
00033 #include "Thyra_LinearOpBase.hpp"
00034
00035 template<class Scalar>
00036 void Thyra::unwrap(
00037 const LinearOpBase<Scalar> &Op
00038 ,Scalar *scalar
00039 ,ETransp *transp
00040 ,const LinearOpBase<Scalar>* *origOp
00041 )
00042 {
00043 #ifdef TEUCHOS_DEBUG
00044 TEST_FOR_EXCEPT( scalar==NULL );
00045 TEST_FOR_EXCEPT( transp==NULL );
00046 TEST_FOR_EXCEPT( origOp==NULL );
00047 #endif
00048 typedef Teuchos::ScalarTraits<Scalar> ST;
00049 const ScaledAdjointLinearOpBase<Scalar>
00050 *saOp = dynamic_cast<const ScaledAdjointLinearOpBase<Scalar>*>(&Op);
00051 if(saOp) {
00052 *scalar = saOp->overallScalar();
00053 *transp = saOp->overallTransp();
00054 *origOp = &*saOp->getOrigOp();
00055 }
00056 else {
00057 *scalar = ST::one();
00058 *transp = NOTRANS;
00059 *origOp = &Op;
00060 }
00061 }
00062
00063 template<class Scalar>
00064 void Thyra::unwrap(
00065 const Teuchos::RefCountPtr<const LinearOpBase<Scalar> > &Op
00066 ,Scalar *scalar
00067 ,ETransp *transp
00068 ,Teuchos::RefCountPtr<const LinearOpBase<Scalar> > *origOp
00069 )
00070 {
00071 #ifdef TEUCHOS_DEBUG
00072 TEST_FOR_EXCEPT( scalar==NULL );
00073 TEST_FOR_EXCEPT( transp==NULL );
00074 TEST_FOR_EXCEPT( origOp==NULL );
00075 #endif
00076 typedef Teuchos::ScalarTraits<Scalar> ST;
00077 Teuchos::RefCountPtr<const ScaledAdjointLinearOpBase<Scalar> >
00078 saOp = Teuchos::rcp_dynamic_cast<const ScaledAdjointLinearOpBase<Scalar> >(Op);
00079 if(saOp.get()) {
00080 *scalar = saOp->overallScalar();
00081 *transp = saOp->overallTransp();
00082 *origOp = saOp->getOrigOp();
00083 }
00084 else {
00085 *scalar = ST::one();
00086 *transp = NOTRANS;
00087 *origOp = Op;
00088 }
00089 }
00090
00091 #endif // THYRA_SCALED_ADJOINT_LINEAR_OP_BASE_HPP