void LOCA::BorderedSolver::HouseholderQR::applyCompactWY( const NOX::Abstract::MultiVector::DenseMatrix& Y1, const NOX::Abstract::MultiVector& Y2, const NOX::Abstract::MultiVector::DenseMatrix& T, const NOX::Abstract::MultiVector::DenseMatrix* input1, const NOX::Abstract::MultiVector* input2, NOX::Abstract::MultiVector::DenseMatrix& result1, NOX::Abstract::MultiVector& result2, bool useTranspose) const { bool isZeroX1 = (input1 == NULL); bool isZeroX2 = (input2 == NULL); if (!isZeroX1) result1.assign(*input1); if (!isZeroX2) result2 = *input2; applyCompactWY(Y1, Y2, T, result1, result2, isZeroX1, isZeroX2, useTranspose); }
int LOCA::Epetra::CompactWYOp::Apply(const Epetra_MultiVector& Input, Epetra_MultiVector& Result) const { if (tmpMat1 == NULL || tmpMV == NULL) { globalData->locaErrorCheck->throwError( "LOCA::Epetra::CompactWYOp::Apply()", "Must call init() before Apply()!"); return -1; } // Apply Householder transformation using temporary vector applyCompactWY(Input, *tmpMV, *tmpMat1); // Compute J*tmpMV J->Apply(*tmpMV, Result); // Compute J*tmpMV + A*tmpMat1 if (A.get() != NULL) Result.Multiply('N', 'N', 1.0, *A, *tmpMat1, 1.0); return 0; }