NOX::Abstract::Group::ReturnType LOCA::Homotopy::Group::computeGradient() { if (isValidGradient) return NOX::Abstract::Group::Ok; string callingFunction = "LOCA::Homotopy::Group::computeGradient()"; NOX::Abstract::Group::ReturnType status, finalStatus; if (gradVecPtr == Teuchos::null) gradVecPtr = gVecPtr->clone(NOX::ShapeCopy); finalStatus = computeF(); globalData->locaErrorCheck->checkReturnType(finalStatus, callingFunction); status = computeJacobian(); finalStatus = globalData->locaErrorCheck->combineAndCheckReturnTypes(status, finalStatus, callingFunction); status = applyJacobianTranspose(*gVecPtr, *gradVecPtr); finalStatus = globalData->locaErrorCheck->combineAndCheckReturnTypes(status, finalStatus, callingFunction); return finalStatus; }
NOX::Abstract::Group::ReturnType NOX::LAPACK::Group::applyJacobianTranspose(const NOX::Abstract::Vector& input, NOX::Abstract::Vector& result) const { const Vector& lapackinput = dynamic_cast<const Vector&> (input); Vector& lapackresult = dynamic_cast<Vector&> (result); return applyJacobianTranspose(lapackinput, lapackresult); }
NOX::Abstract::Group::ReturnType LOCA::Homotopy::DeflatedGroup:: computeGradient() { if (isValidGradient) return NOX::Abstract::Group::Ok; string callingFunction = "LOCA::Homotopy::DeflatedGroup::computeGradient()"; NOX::Abstract::Group::ReturnType finalStatus = NOX::Abstract::Group::Ok; NOX::Abstract::Group::ReturnType status; // Make sure F is valid if (!isF()) { status = computeF(); finalStatus = globalData->locaErrorCheck->combineAndCheckReturnTypes(status, finalStatus, callingFunction); } // Make sure Jacobian is valid if (!isJacobian()) { status = computeJacobian(); finalStatus = globalData->locaErrorCheck->combineAndCheckReturnTypes(status, finalStatus, callingFunction); } // Compute J^T*f for homotopy group status = applyJacobianTranspose(*fVec, *gradientVec); finalStatus = globalData->locaErrorCheck->combineAndCheckReturnTypes(status, finalStatus, callingFunction); isValidGradient = true; return finalStatus; }