void ExampleBasisSystem::update_D( const MatrixOpNonsing &C ,const MatrixOp &N ,MatrixOp *D ,EMatRelations mat_rel ) const { using Teuchos::dyn_cast; TEUCHOS_TEST_FOR_EXCEPTION( D == NULL, std::logic_error ,"ExampleBasisSystem::update_D(...): Error!" ); const MatrixSymDiagStd &C_aggr = dyn_cast<const MatrixSymDiagStd>(C), &N_aggr = dyn_cast<const MatrixSymDiagStd>(N); MatrixSymDiagStd &D_sym_diag = dyn_cast<MatrixSymDiagStd>(*D); if( D_sym_diag.rows() != C.rows() ) D_sym_diag.initialize( this->space_x()->sub_space(this->var_dep())->create_member() ); AbstractLinAlgPack::ele_wise_divide( // D_diag = - N_diag ./ C_diag -1.0, N_aggr.diag(), C_aggr.diag(), &D_sym_diag.diag() ); // ... }
void LinAlgOpPack::V_InvMtV( DVector* y, const MatrixOpNonsing& M ,BLAS_Cpp::Transp M_trans, const SpVectorSlice& x ) { y->resize(M.rows()); LinAlgOpPack::V_InvMtV( &(*y)(), M, M_trans, x ); }