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 LOCA_HOMOTOPY_GROUP_H
00043 #define LOCA_HOMOTOPY_GROUP_H
00044
00045 #include "Teuchos_RCP.hpp"
00046
00047 #include "LOCA_MultiContinuation_AbstractGroup.H"
00048 #include "LOCA_Extended_MultiAbstractGroup.H"
00049
00050 #include "LOCA_Parameter_Vector.H"
00051
00052 namespace LOCA {
00053 class GlobalData;
00054 namespace Homotopy {
00055 class AbstractGroup;
00056 }
00057 }
00058
00059 namespace LOCA {
00060
00061 namespace Homotopy {
00062
00111 class Group :
00112 public LOCA::MultiContinuation::AbstractGroup,
00113 public LOCA::Extended::MultiAbstractGroup {
00114
00115 public:
00116
00156 Group(
00157 Teuchos::ParameterList& locaSublist,
00158 const Teuchos::RCP<LOCA::GlobalData>& global_data,
00159 const Teuchos::RCP<LOCA::Homotopy::AbstractGroup>& g,
00160 double scaleRandom = 1.0,
00161 double scaleInitialGuess = 0.0);
00162
00164 Group(
00165 Teuchos::ParameterList& locaSublist,
00166 const Teuchos::RCP<LOCA::GlobalData>& global_data,
00167 const Teuchos::RCP<LOCA::Homotopy::AbstractGroup>& g,
00168 const NOX::Abstract::Vector& randomVector);
00169
00171 Group(const Group& source, NOX::CopyType type = NOX::DeepCopy);
00172
00174 virtual ~Group();
00175
00180
00182 virtual NOX::Abstract::Group&
00183 operator=(const NOX::Abstract::Group& source);
00184
00186 virtual Teuchos::RCP<NOX::Abstract::Group>
00187 clone(NOX::CopyType type = NOX::DeepCopy) const;
00188
00190 virtual void setX(const NOX::Abstract::Vector& y);
00191
00193 virtual void computeX(const NOX::Abstract::Group& g,
00194 const NOX::Abstract::Vector& d,
00195 double step);
00196
00198 virtual NOX::Abstract::Group::ReturnType computeF();
00199
00201 virtual NOX::Abstract::Group::ReturnType computeJacobian();
00202
00204 virtual NOX::Abstract::Group::ReturnType computeGradient();
00205
00207 virtual NOX::Abstract::Group::ReturnType
00208 computeNewton(Teuchos::ParameterList& params);
00209
00211 virtual NOX::Abstract::Group::ReturnType
00212 applyJacobian(const NOX::Abstract::Vector& input,
00213 NOX::Abstract::Vector& result) const;
00214
00216 virtual NOX::Abstract::Group::ReturnType
00217 applyJacobianTranspose(const NOX::Abstract::Vector& input,
00218 NOX::Abstract::Vector& result) const;
00219
00221 virtual NOX::Abstract::Group::ReturnType
00222 applyJacobianInverse(Teuchos::ParameterList& params,
00223 const NOX::Abstract::Vector& input,
00224 NOX::Abstract::Vector& result) const;
00225
00227 virtual NOX::Abstract::Group::ReturnType
00228 applyJacobianMultiVector(const NOX::Abstract::MultiVector& input,
00229 NOX::Abstract::MultiVector& result) const;
00230
00232 virtual NOX::Abstract::Group::ReturnType
00233 applyJacobianTransposeMultiVector(
00234 const NOX::Abstract::MultiVector& input,
00235 NOX::Abstract::MultiVector& result) const;
00236
00238 virtual NOX::Abstract::Group::ReturnType
00239 applyJacobianInverseMultiVector(
00240 Teuchos::ParameterList& params,
00241 const NOX::Abstract::MultiVector& input,
00242 NOX::Abstract::MultiVector& result) const;
00243
00245 virtual bool isF() const;
00246
00248 virtual bool isJacobian() const;
00249
00251 virtual bool isGradient() const;
00252
00254 virtual bool isNewton() const;
00255
00257 virtual const NOX::Abstract::Vector& getX() const;
00258
00260 virtual const NOX::Abstract::Vector& getF() const;
00261
00263 virtual double getNormF() const;
00264
00266 virtual const NOX::Abstract::Vector& getGradient() const;
00267
00269 virtual const NOX::Abstract::Vector& getNewton() const;
00270
00272
00278
00280 virtual
00281 Teuchos::RCP<const LOCA::MultiContinuation::AbstractGroup>
00282 getUnderlyingGroup() const;
00283
00285 virtual
00286 Teuchos::RCP<LOCA::MultiContinuation::AbstractGroup>
00287 getUnderlyingGroup();
00288
00290
00296
00298 virtual void copy(const NOX::Abstract::Group& source);
00299
00301 virtual void setParamsMulti(
00302 const vector<int>& paramIDs,
00303 const NOX::Abstract::MultiVector::DenseMatrix& vals);
00304
00306 virtual void setParams(const ParameterVector& p);
00307
00309 virtual void setParam(int paramID, double val);
00310
00312 virtual void setParam(string paramID, double val);
00313
00315 virtual const ParameterVector& getParams() const;
00316
00318 virtual double getParam(int paramID) const;
00319
00321 virtual double getParam(string paramID) const;
00322
00329 virtual NOX::Abstract::Group::ReturnType
00330 computeDfDpMulti(const vector<int>& paramIDs,
00331 NOX::Abstract::MultiVector& dfdp,
00332 bool isValidF);
00333
00335
00339 virtual void
00340 preProcessContinuationStep(
00341 LOCA::Abstract::Iterator::StepStatus stepStatus);
00342
00344
00348 virtual void
00349 postProcessContinuationStep(
00350 LOCA::Abstract::Iterator::StepStatus stepStatus);
00351
00353 virtual void projectToDraw(const NOX::Abstract::Vector& x,
00354 double *px) const;
00355
00357 virtual int projectToDrawDimension() const;
00358
00363 virtual void printSolution(const double conParam) const;
00364
00369 virtual void printSolution(const NOX::Abstract::Vector& x_,
00370 const double conParam) const;
00371
00373
00374 protected:
00375
00377
00380 void resetIsValidFlags();
00381
00383 void setStepperParameters(Teuchos::ParameterList& params);
00384
00385 private:
00386
00388 Group& operator=(const Group&);
00389
00390 protected:
00391
00393 Teuchos::RCP<LOCA::GlobalData> globalData;
00394
00396 Teuchos::RCP<LOCA::Homotopy::AbstractGroup> grpPtr;
00397
00399 Teuchos::RCP<NOX::Abstract::Vector> gVecPtr;
00400
00402 Teuchos::RCP<NOX::Abstract::Vector> randomVecPtr;
00403
00408 Teuchos::RCP<NOX::Abstract::Vector> newtonVecPtr;
00409
00414 Teuchos::RCP<NOX::Abstract::Vector> gradVecPtr;
00415
00417 bool isValidF;
00418
00420 bool isValidJacobian;
00421
00423 bool isValidNewton;
00424
00426 bool isValidGradient;
00427
00429
00430 LOCA::ParameterVector paramVec;
00431
00433
00436 double conParam;
00437
00439 int conParamID;
00440
00445 const string conParamLabel;
00446
00453 bool augmentJacForHomotopyNotImplemented;
00454
00455 };
00456
00457 }
00458
00459 }
00460
00461 #endif