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_PITCHFORK_MOORESPENCE_EXTENDEDGROUP_H
00043 #define LOCA_PITCHFORK_MOORESPENCE_EXTENDEDGROUP_H
00044
00045 #include "Teuchos_RCP.hpp"
00046
00047 #include "LOCA_MultiContinuation_AbstractGroup.H"
00048 #include "LOCA_Extended_MultiAbstractGroup.H"
00049 #include "LOCA_Pitchfork_MooreSpence_ExtendedVector.H"
00050 #include "LOCA_Pitchfork_MooreSpence_ExtendedMultiVector.H"
00051
00052 namespace LOCA {
00053 class ParameterVector;
00054 class GlobalData;
00055 namespace Parameter {
00056 class SublistParser;
00057 }
00058
00059 namespace Pitchfork {
00060 namespace MooreSpence {
00061 class AbstractGroup;
00062 class SolverStrategy;
00063 }
00064 }
00065 }
00066 namespace LOCA {
00067
00068 namespace Pitchfork {
00069
00070 namespace MooreSpence {
00071
00140 class ExtendedGroup
00141 : public virtual LOCA::Extended::MultiAbstractGroup,
00142 public virtual LOCA::MultiContinuation::AbstractGroup {
00143
00144 public:
00145
00149 ExtendedGroup(
00150 const Teuchos::RCP<LOCA::GlobalData>& global_data,
00151 const Teuchos::RCP<LOCA::Parameter::SublistParser>& topParams,
00152 const Teuchos::RCP<Teuchos::ParameterList>& pfParams,
00153 const Teuchos::RCP<LOCA::Pitchfork::MooreSpence::AbstractGroup>& g);
00154
00156 ExtendedGroup(const ExtendedGroup& source,
00157 NOX::CopyType type = NOX::DeepCopy);
00158
00160 virtual ~ExtendedGroup();
00161
00166
00168 virtual NOX::Abstract::Group&
00169 operator=(const NOX::Abstract::Group& source);
00170
00172 virtual Teuchos::RCP<NOX::Abstract::Group>
00173 clone(NOX::CopyType type = NOX::DeepCopy) const;
00174
00176 virtual void setX(const NOX::Abstract::Vector& y);
00177
00179 virtual void computeX(const NOX::Abstract::Group& g,
00180 const NOX::Abstract::Vector& d,
00181 double step);
00182
00184
00202 virtual NOX::Abstract::Group::ReturnType computeF();
00203
00205
00224 virtual NOX::Abstract::Group::ReturnType computeJacobian();
00225
00227 virtual NOX::Abstract::Group::ReturnType computeGradient();
00228
00230 virtual NOX::Abstract::Group::ReturnType
00231 computeNewton(Teuchos::ParameterList& params);
00232
00234
00266 virtual NOX::Abstract::Group::ReturnType
00267 applyJacobian(const NOX::Abstract::Vector& input,
00268 NOX::Abstract::Vector& result) const;
00269
00271 virtual NOX::Abstract::Group::ReturnType
00272 applyJacobianTranspose(const NOX::Abstract::Vector& input,
00273 NOX::Abstract::Vector& result) const;
00274
00283 virtual NOX::Abstract::Group::ReturnType
00284 applyJacobianInverse(Teuchos::ParameterList& params,
00285 const NOX::Abstract::Vector& input,
00286 NOX::Abstract::Vector& result) const;
00287
00289 virtual NOX::Abstract::Group::ReturnType
00290 applyJacobianMultiVector(const NOX::Abstract::MultiVector& input,
00291 NOX::Abstract::MultiVector& result) const;
00292
00294 virtual NOX::Abstract::Group::ReturnType
00295 applyJacobianTransposeMultiVector(
00296 const NOX::Abstract::MultiVector& input,
00297 NOX::Abstract::MultiVector& result) const;
00298
00300
00305 virtual NOX::Abstract::Group::ReturnType
00306 applyJacobianInverseMultiVector(
00307 Teuchos::ParameterList& params,
00308 const NOX::Abstract::MultiVector& input,
00309 NOX::Abstract::MultiVector& result) const;
00310
00312 virtual bool isF() const;
00313
00315 virtual bool isJacobian() const;
00316
00318 virtual bool isGradient() const;
00319
00321 virtual bool isNewton() const;
00322
00324 virtual const NOX::Abstract::Vector& getX() const;
00325
00327 virtual const NOX::Abstract::Vector& getF() const;
00328
00330 virtual double getNormF() const;
00331
00333 virtual const NOX::Abstract::Vector& getGradient() const;
00334
00336 virtual const NOX::Abstract::Vector& getNewton() const;
00337
00339 virtual double getNormNewtonSolveResidual() const;
00340
00342
00348
00350 virtual
00351 Teuchos::RCP<const LOCA::MultiContinuation::AbstractGroup>
00352 getUnderlyingGroup() const;
00353
00355 virtual
00356 Teuchos::RCP<LOCA::MultiContinuation::AbstractGroup>
00357 getUnderlyingGroup();
00358
00360
00366
00368 virtual void copy(const NOX::Abstract::Group& source);
00369
00371 virtual void setParamsMulti(
00372 const vector<int>& paramIDs,
00373 const NOX::Abstract::MultiVector::DenseMatrix& vals);
00374
00376 virtual void setParams(const ParameterVector& p);
00377
00379 virtual void setParam(int paramID, double val);
00380
00382 virtual void setParam(string paramID, double val);
00383
00385 virtual const ParameterVector& getParams() const;
00386
00388 virtual double getParam(int paramID) const;
00389
00391 virtual double getParam(string paramID) const;
00392
00399 virtual NOX::Abstract::Group::ReturnType
00400 computeDfDpMulti(const vector<int>& paramIDs,
00401 NOX::Abstract::MultiVector& dfdp,
00402 bool isValidF);
00403
00405
00409 virtual void
00410 preProcessContinuationStep(
00411 LOCA::Abstract::Iterator::StepStatus stepStatus);
00412
00414
00418 virtual void
00419 postProcessContinuationStep(
00420 LOCA::Abstract::Iterator::StepStatus stepStatus);
00421
00423 virtual void projectToDraw(const NOX::Abstract::Vector& x,
00424 double *px) const;
00425
00427 virtual int projectToDrawDimension() const;
00428
00438 virtual void printSolution(const double conParam) const;
00439
00449 virtual void printSolution(const NOX::Abstract::Vector& x_,
00450 const double conParam) const;
00451
00453 double getBifParam() const;
00454
00456 double lTransNorm(const NOX::Abstract::Vector& n) const;
00457
00459
00462 void lTransNorm(const NOX::Abstract::MultiVector& n,
00463 NOX::Abstract::MultiVector::DenseMatrix& result) const;
00464
00465 protected:
00466
00468 void setBifParam(double param);
00469
00471 void setupViews();
00472
00474 void init(bool perturbSoln = false, double perturbSize = 0.0);
00475
00476 private:
00477
00479 ExtendedGroup& operator=(const ExtendedGroup&);
00480
00481 protected:
00482
00484 Teuchos::RCP<LOCA::GlobalData> globalData;
00485
00487 Teuchos::RCP<LOCA::Parameter::SublistParser> parsedParams;
00488
00490 Teuchos::RCP<Teuchos::ParameterList> pitchforkParams;
00491
00493 Teuchos::RCP<LOCA::Pitchfork::MooreSpence::AbstractGroup> grpPtr;
00494
00496 LOCA::Pitchfork::MooreSpence::ExtendedMultiVector xMultiVec;
00497
00499 LOCA::Pitchfork::MooreSpence::ExtendedMultiVector fMultiVec;
00500
00502 LOCA::Pitchfork::MooreSpence::ExtendedMultiVector newtonMultiVec;
00503
00505 Teuchos::RCP<NOX::Abstract::MultiVector> asymMultiVec;
00506
00508 Teuchos::RCP<NOX::Abstract::MultiVector> lengthMultiVec;
00509
00511 Teuchos::RCP<LOCA::Pitchfork::MooreSpence::ExtendedVector> xVec;
00512
00514 Teuchos::RCP<LOCA::Pitchfork::MooreSpence::ExtendedVector> fVec;
00515
00517 Teuchos::RCP<LOCA::Pitchfork::MooreSpence::ExtendedMultiVector> ffMultiVec;
00518
00520 Teuchos::RCP<LOCA::Pitchfork::MooreSpence::ExtendedMultiVector> dfdpMultiVec;
00521
00523 Teuchos::RCP<LOCA::Pitchfork::MooreSpence::ExtendedVector> newtonVec;
00524
00526 Teuchos::RCP<NOX::Abstract::Vector> asymVec;
00527
00529 Teuchos::RCP<NOX::Abstract::Vector> lengthVec;
00530
00532 Teuchos::RCP<LOCA::Pitchfork::MooreSpence::SolverStrategy> solverStrategy;
00533
00535 vector<int> index_f;
00536
00538 vector<int> index_dfdp;
00539
00541 vector<int> bifParamID;
00542
00544 bool isValidF;
00545
00547 bool isValidJacobian;
00548
00550 bool isValidNewton;
00551
00552 };
00553
00554 }
00555
00556 }
00557
00558 }
00559
00560 #endif