NOX::Abstract::Group::ReturnType LOCA::Homotopy::Group::computeNewton(Teuchos::ParameterList& params) { if (isValidNewton) return NOX::Abstract::Group::Ok; string callingFunction = "LOCA::Homotopy::Group::computeNewton()"; NOX::Abstract::Group::ReturnType status, finalStatus; if (newtonVecPtr == Teuchos::null) newtonVecPtr = gVecPtr->clone(NOX::ShapeCopy); finalStatus = computeF(); globalData->locaErrorCheck->checkReturnType(finalStatus, callingFunction); status = computeJacobian(); finalStatus = globalData->locaErrorCheck->combineAndCheckReturnTypes(status, finalStatus, callingFunction); status = applyJacobianInverse(params, *gVecPtr, *newtonVecPtr); finalStatus = globalData->locaErrorCheck->combineAndCheckReturnTypes(status, finalStatus, callingFunction); newtonVecPtr->scale(-1.0); isValidNewton = true; return finalStatus; }
NOX::Abstract::Group::ReturnType NOX::Belos::Group::computeNewton(NOX::Parameter::List& params) { if (isValidNewton) return NOX::Abstract::Group::Ok; if (!isF()) { std::cerr << "ERROR: NOX::Belos::Group::computeNewton() - invalid RHS" << std::endl; throw "NOX Error"; } if (!isJacobian()) { std::cerr << "ERROR: NOX::Belos::Group::computeNewton() - invalid Jacobian" << std::endl; throw "NOX Error"; } Abstract::Group::ReturnType status; // zero out newton vec -- used as initial guess for some linear solvers newtonVecPtr->init(0.0); status = applyJacobianInverse(params, getF(), *newtonVecPtr); newtonVecPtr->scale(-1.0); // Update state EVEN IF LINEAR SOLVE FAILED // We still may want to use the vector even it it just missed it's isValidNewton = true; return status; }
NOX::Abstract::Group::ReturnType NOX::LAPACK::Group::applyJacobianInverse(Teuchos::ParameterList& p, const Abstract::Vector& input, NOX::Abstract::Vector& result) const { const Vector& lapackinput = dynamic_cast<const Vector&> (input); Vector& lapackresult = dynamic_cast<Vector&> (result); return applyJacobianInverse(p, lapackinput, lapackresult); }
NOX::Abstract::Group::ReturnType LOCA::PhaseTransition::ExtendedGroup::applyJacobianInverse(Teuchos::ParameterList& p, const NOX::Abstract::Vector& input, NOX::Abstract::Vector& result) const { const LOCA::PhaseTransition::ExtendedVector& lapackinput = dynamic_cast<const LOCA::PhaseTransition::ExtendedVector&> (input); LOCA::PhaseTransition::ExtendedVector& lapackresult = dynamic_cast<LOCA::PhaseTransition::ExtendedVector&> (result); return applyJacobianInverse(p, lapackinput, lapackresult); }
NOX::Abstract::Group::ReturnType NOX::LAPACK::Group::computeNewton(Teuchos::ParameterList& p) { if (isNewton()) return NOX::Abstract::Group::Ok; if (!isF()) { std::cerr << "ERROR: NOX::Example::Group::computeNewton() - invalid F" << std::endl; throw "NOX Error"; } if (!isJacobian()) { std::cerr << "ERROR: NOX::Example::Group::computeNewton() - invalid Jacobian" << std::endl; throw "NOX Error"; } NOX::Abstract::Group::ReturnType status = applyJacobianInverse(p, fVector, newtonVector); isValidNewton = (status == NOX::Abstract::Group::Ok); // Scale soln by -1 newtonVector.scale(-1.0); // Return solution return status; }
NOX::Abstract::Group::ReturnType LOCA::PhaseTransition::ExtendedGroup::computeNewton(Teuchos::ParameterList& p) { if (isNewton()) return NOX::Abstract::Group::Ok; if (!isF()) { cerr << "ERROR: NOX::Example::Group::computeNewton() - invalid F" << endl; throw "NOX Error"; } if (!isJacobian()) { cerr << "ERROR: NOX::Example::Group::computeNewton() - invalid Jacobian" << endl; throw "NOX Error"; } NOX::Abstract::Group::ReturnType status = applyJacobianInverse(p, *fVector, *newtonVector); isValidNewton = (status == NOX::Abstract::Group::Ok); // Scale soln by -1 newtonVector->scale(-1.0); // Return solution return status; }