00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #include "NOX_Abstract_Group.H"
00043
00044 #include "NOX_Abstract_MultiVector.H"
00045 #include "Teuchos_ParameterList.hpp"
00046
00047 NOX::Abstract::Group::ReturnType
00048 NOX::Abstract::Group::computeJacobian()
00049 {
00050 return NOX::Abstract::Group::NotDefined;
00051 }
00052
00053 NOX::Abstract::Group::ReturnType
00054 NOX::Abstract::Group::computeGradient()
00055 {
00056 return NOX::Abstract::Group::NotDefined;
00057 }
00058
00059 NOX::Abstract::Group::ReturnType
00060 NOX::Abstract::Group::computeNewton(Teuchos::ParameterList& params)
00061 {
00062 return NOX::Abstract::Group::NotDefined;
00063 }
00064
00065 NOX::Abstract::Group::ReturnType
00066 NOX::Abstract::Group::applyJacobian(const NOX::Abstract::Vector& input,
00067 NOX::Abstract::Vector& result) const
00068 {
00069 return NOX::Abstract::Group::NotDefined;
00070 }
00071
00072 NOX::Abstract::Group::ReturnType
00073 NOX::Abstract::Group::applyJacobianTranspose(const NOX::Abstract::Vector& input,
00074 NOX::Abstract::Vector& result) const
00075 {
00076 return NOX::Abstract::Group::NotDefined;
00077 }
00078
00079 NOX::Abstract::Group::ReturnType
00080 NOX::Abstract::Group::applyJacobianInverse(Teuchos::ParameterList& params,
00081 const NOX::Abstract::Vector& input,
00082 NOX::Abstract::Vector& result) const
00083 {
00084 return NOX::Abstract::Group::NotDefined;
00085 }
00086
00087 NOX::Abstract::Group::ReturnType
00088 NOX::Abstract::Group::applyRightPreconditioning(bool useTranspose,
00089 Teuchos::ParameterList& params,
00090 const NOX::Abstract::Vector& input,
00091 NOX::Abstract::Vector& result
00092 ) const
00093 {
00094 return NOX::Abstract::Group::NotDefined;
00095 }
00096
00097 NOX::Abstract::Group::ReturnType
00098 NOX::Abstract::Group::applyJacobianMultiVector(
00099 const NOX::Abstract::MultiVector& input,
00100 NOX::Abstract::MultiVector& result) const
00101 {
00102 NOX::Abstract::Group::ReturnType status, finalStatus;
00103 finalStatus = NOX::Abstract::Group::Ok;
00104
00105 for (int i=0; i<input.numVectors(); i++) {
00106 status = applyJacobian(input[i], result[i]);
00107
00108 if (status == NotDefined || status == BadDependency)
00109 return status;
00110 else if (status == Failed)
00111 finalStatus = Failed;
00112 else if (status == NotConverged && finalStatus != Failed)
00113 finalStatus = NotConverged;
00114 }
00115
00116 return finalStatus;
00117 }
00118
00119 NOX::Abstract::Group::ReturnType
00120 NOX::Abstract::Group::applyJacobianTransposeMultiVector(
00121 const NOX::Abstract::MultiVector& input,
00122 NOX::Abstract::MultiVector& result) const
00123 {
00124 NOX::Abstract::Group::ReturnType status, finalStatus;
00125 finalStatus = NOX::Abstract::Group::Ok;
00126
00127 for (int i=0; i<input.numVectors(); i++) {
00128 status = applyJacobianTranspose(input[i], result[i]);
00129
00130 if (status == NotDefined || status == BadDependency)
00131 return status;
00132 else if (status == Failed)
00133 finalStatus = Failed;
00134 else if (status == NotConverged && finalStatus != Failed)
00135 finalStatus = NotConverged;
00136 }
00137
00138 return finalStatus;
00139 }
00140
00141 NOX::Abstract::Group::ReturnType
00142 NOX::Abstract::Group::applyJacobianInverseMultiVector(
00143 Teuchos::ParameterList& params,
00144 const NOX::Abstract::MultiVector& input,
00145 NOX::Abstract::MultiVector& result) const
00146 {
00147 NOX::Abstract::Group::ReturnType status, finalStatus;
00148 finalStatus = NOX::Abstract::Group::Ok;
00149
00150 for (int i=0; i<input.numVectors(); i++) {
00151 status = applyJacobianInverse(params, input[i], result[i]);
00152
00153 if (status == NotDefined || status == BadDependency)
00154 return status;
00155 else if (status == Failed)
00156 finalStatus = Failed;
00157 else if (status == NotConverged && finalStatus != Failed)
00158 finalStatus = NotConverged;
00159 }
00160
00161 return finalStatus;
00162 }
00163
00164 NOX::Abstract::Group::ReturnType
00165 NOX::Abstract::Group::applyRightPreconditioningMultiVector(
00166 bool useTranspose,
00167 Teuchos::ParameterList& params,
00168 const NOX::Abstract::MultiVector& input,
00169 NOX::Abstract::MultiVector& result) const
00170 {
00171 NOX::Abstract::Group::ReturnType status, finalStatus;
00172 finalStatus = NOX::Abstract::Group::Ok;
00173
00174 for (int i=0; i<input.numVectors(); i++) {
00175 status = applyRightPreconditioning(useTranspose, params, input[i],
00176 result[i]);
00177
00178 if (status == NotDefined || status == BadDependency)
00179 return status;
00180 else if (status == Failed)
00181 finalStatus = Failed;
00182 else if (status == NotConverged && finalStatus != Failed)
00183 finalStatus = NotConverged;
00184 }
00185
00186 return finalStatus;
00187 }
00188
00189 bool NOX::Abstract::Group::isJacobian() const
00190 {
00191 return false;
00192 }
00193
00194 bool NOX::Abstract::Group::isGradient() const
00195 {
00196 return false;
00197 }
00198
00199 bool NOX::Abstract::Group::isNewton() const
00200 {
00201 return false;
00202 }
00203
00204 NOX::Abstract::Group::ReturnType
00205 NOX::Abstract::Group::getNormLastLinearSolveResidual(double& residual) const
00206 {
00207 return NOX::Abstract::Group::NotDefined;
00208 }
00209