NOX::Abstract::Group::ReturnType LOCA::Homotopy::DeflatedGroup:: computeNewton(Teuchos::ParameterList& params) { if (isValidNewton) return NOX::Abstract::Group::Ok; string callingFunction = "LOCA::Homotopy::DeflatedGroup::computeNewton()"; 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); } // zero out newton vec -- used as initial guess for some linear solvers newtonMultiVec.init(0.0); status = applyJacobianInverseMultiVector(params, fMultiVec, newtonMultiVec); finalStatus = globalData->locaErrorCheck->combineAndCheckReturnTypes(status, finalStatus, callingFunction); newtonMultiVec.scale(-1.0); isValidNewton = true; return finalStatus; }
NOX::Abstract::Group::ReturnType NOX::Belos::Group::applyJacobianInverse(NOX::Parameter::List& params, const NOX::Abstract::Vector& input, NOX::Abstract::Vector& result) const { // Create multivectors out of input, result Teuchos::RCP<NOX::Abstract::MultiVector> inputs = input.createMultiVector(NULL, 0, NOX::DeepCopy); Teuchos::RCP<NOX::Abstract::MultiVector> results = result.createMultiVector(NULL, 0, NOX::DeepCopy); // Call multivector version NOX::Abstract::Group::ReturnType res = applyJacobianInverseMultiVector(params, *inputs, *results); // Copy result result = (*results)[0]; return res; }
NOX::Abstract::Group::ReturnType LOCA::TurningPoint::MooreSpence::ExtendedGroup::applyJacobianInverse( Teuchos::ParameterList& params, const NOX::Abstract::Vector& input, NOX::Abstract::Vector& result) const { // Convert input, result to multivectors Teuchos::RCP<NOX::Abstract::MultiVector> mv_input = input.createMultiVector(1, NOX::DeepCopy); Teuchos::RCP<NOX::Abstract::MultiVector> mv_result = result.createMultiVector(1, NOX::DeepCopy); // Call multivector version of applyJacobianInverse NOX::Abstract::Group::ReturnType status = applyJacobianInverseMultiVector(params, *mv_input, *mv_result); // Copy result result = (*mv_result)[0]; return status; }