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 #ifndef NOX_ABSTRACT_GROUP_H
00043 #define NOX_ABSTRACT_GROUP_H
00044
00045 #include "NOX_Abstract_Vector.H"
00046 #include "NOX_Common.H"
00047 #include "Teuchos_RCP.hpp"
00048
00049 namespace Teuchos {
00050 class ParameterList;
00051 }
00052 namespace NOX {
00053 namespace Abstract {
00054 class MultiVector;
00055 }
00056 }
00057
00058 namespace NOX {
00059 namespace Abstract {
00060
00081 class Group {
00082
00083 public:
00084
00093 enum ReturnType {
00094
00096 Ok,
00097
00099 NotDefined,
00100
00102 BadDependency,
00103
00105 NotConverged,
00106
00108 Failed
00109
00110 };
00111
00113
00117 Group() {};
00118
00120 virtual ~Group() {};
00121
00129 virtual NOX::Abstract::Group& operator=(const NOX::Abstract::Group& source) = 0;
00130
00132
00134
00145 virtual void setX(const NOX::Abstract::Vector& y) = 0;
00146
00148
00167 virtual void computeX(const NOX::Abstract::Group& grp,
00168 const NOX::Abstract::Vector& d, double step) = 0;
00169
00171
00182 virtual NOX::Abstract::Group::ReturnType computeF() = 0;
00183
00185
00208 virtual NOX::Abstract::Group::ReturnType computeJacobian();
00209
00211
00230 virtual NOX::Abstract::Group::ReturnType computeGradient();
00231
00233
00259 virtual NOX::Abstract::Group::ReturnType computeNewton(Teuchos::ParameterList& params);
00260
00262
00269
00271
00284 virtual NOX::Abstract::Group::ReturnType
00285 applyJacobian(const NOX::Abstract::Vector& input,
00286 NOX::Abstract::Vector& result) const;
00287
00289
00303 virtual NOX::Abstract::Group::ReturnType
00304 applyJacobianTranspose(const NOX::Abstract::Vector& input,
00305 NOX::Abstract::Vector& result) const;
00306
00335 virtual NOX::Abstract::Group::ReturnType
00336 applyJacobianInverse(Teuchos::ParameterList& params,
00337 const NOX::Abstract::Vector& input,
00338 NOX::Abstract::Vector& result) const;
00339
00341
00374 virtual NOX::Abstract::Group::ReturnType
00375 applyRightPreconditioning(bool useTranspose,
00376 Teuchos::ParameterList& params,
00377 const NOX::Abstract::Vector& input,
00378 NOX::Abstract::Vector& result) const;
00380
00387
00389
00394 virtual NOX::Abstract::Group::ReturnType
00395 applyJacobianMultiVector(const NOX::Abstract::MultiVector& input,
00396 NOX::Abstract::MultiVector& result) const;
00397
00399
00404 virtual NOX::Abstract::Group::ReturnType
00405 applyJacobianTransposeMultiVector(const NOX::Abstract::MultiVector& input,
00406 NOX::Abstract::MultiVector& result) const;
00407
00409
00414 virtual NOX::Abstract::Group::ReturnType
00415 applyJacobianInverseMultiVector(Teuchos::ParameterList& params,
00416 const NOX::Abstract::MultiVector& input,
00417 NOX::Abstract::MultiVector& result) const;
00418
00420
00425 virtual NOX::Abstract::Group::ReturnType
00426 applyRightPreconditioningMultiVector(
00427 bool useTranspose,
00428 Teuchos::ParameterList& params,
00429 const NOX::Abstract::MultiVector& input,
00430 NOX::Abstract::MultiVector& result) const;
00431
00433
00442
00444 virtual bool isF() const = 0;
00445
00447
00448 virtual bool isJacobian() const;
00449
00451
00452 virtual bool isGradient() const;
00453
00455
00456 virtual bool isNewton() const;
00458
00465
00467 virtual const NOX::Abstract::Vector& getX() const = 0;
00468
00470 virtual const NOX::Abstract::Vector& getF() const = 0;
00471
00473
00474 virtual double getNormF() const = 0;
00475
00477 virtual const NOX::Abstract::Vector& getGradient() const = 0;
00478
00480 virtual const NOX::Abstract::Vector& getNewton() const = 0;
00481
00495 virtual NOX::Abstract::Group::ReturnType
00496 getNormLastLinearSolveResidual(double& residual) const;
00497
00499
00500
00502
00516 virtual Teuchos::RCP<NOX::Abstract::Group>
00517 clone(NOX::CopyType type = NOX::DeepCopy) const = 0;
00518
00520
00521 private:
00522
00523 };
00524 }
00525 }
00526
00527 #endif