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