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_HOPF_MOORESPENCE_EXTENDEDGROUP_H
00043 #define LOCA_HOPF_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_Hopf_MooreSpence_ExtendedVector.H"
00050 #include "LOCA_Hopf_MooreSpence_ExtendedMultiVector.H"
00051
00052 namespace LOCA {
00053 class ParameterVector;
00054 class GlobalData;
00055 namespace Parameter {
00056 class SublistParser;
00057 }
00058
00059 namespace Hopf {
00060 namespace MooreSpence {
00061 class AbstractGroup;
00062 class SolverStrategy;
00063 }
00064 }
00065 }
00066 namespace LOCA {
00067
00068 namespace Hopf {
00069
00070 namespace MooreSpence {
00071
00143 class ExtendedGroup
00144 : public virtual LOCA::Extended::MultiAbstractGroup,
00145 public virtual LOCA::MultiContinuation::AbstractGroup {
00146
00147 public:
00148
00152 ExtendedGroup(
00153 const Teuchos::RCP<LOCA::GlobalData>& global_data,
00154 const Teuchos::RCP<LOCA::Parameter::SublistParser>& topParams,
00155 const Teuchos::RCP<Teuchos::ParameterList>& hopfParams,
00156 const Teuchos::RCP<LOCA::Hopf::MooreSpence::AbstractGroup>& g);
00157
00159 ExtendedGroup(const ExtendedGroup& source,
00160 NOX::CopyType type = NOX::DeepCopy);
00161
00163 virtual ~ExtendedGroup();
00164
00169
00171 virtual NOX::Abstract::Group&
00172 operator=(const NOX::Abstract::Group& source);
00173
00175 virtual Teuchos::RCP<NOX::Abstract::Group>
00176 clone(NOX::CopyType type = NOX::DeepCopy) const;
00177
00179 virtual void setX(const NOX::Abstract::Vector& y);
00180
00182 virtual void computeX(const NOX::Abstract::Group& g,
00183 const NOX::Abstract::Vector& d,
00184 double step);
00185
00187 virtual NOX::Abstract::Group::ReturnType computeF();
00188
00190 virtual NOX::Abstract::Group::ReturnType computeJacobian();
00191
00193 virtual NOX::Abstract::Group::ReturnType computeGradient();
00194
00196 virtual NOX::Abstract::Group::ReturnType
00197 computeNewton(Teuchos::ParameterList& params);
00198
00200 virtual NOX::Abstract::Group::ReturnType
00201 applyJacobian(const NOX::Abstract::Vector& input,
00202 NOX::Abstract::Vector& result) const;
00203
00205 virtual NOX::Abstract::Group::ReturnType
00206 applyJacobianTranspose(const NOX::Abstract::Vector& input,
00207 NOX::Abstract::Vector& result) const;
00208
00217 virtual NOX::Abstract::Group::ReturnType
00218 applyJacobianInverse(Teuchos::ParameterList& params,
00219 const NOX::Abstract::Vector& input,
00220 NOX::Abstract::Vector& result) const;
00221
00223 virtual NOX::Abstract::Group::ReturnType
00224 applyJacobianMultiVector(const NOX::Abstract::MultiVector& input,
00225 NOX::Abstract::MultiVector& result) const;
00226
00228 virtual NOX::Abstract::Group::ReturnType
00229 applyJacobianTransposeMultiVector(
00230 const NOX::Abstract::MultiVector& input,
00231 NOX::Abstract::MultiVector& result) const;
00232
00234
00239 virtual NOX::Abstract::Group::ReturnType
00240 applyJacobianInverseMultiVector(
00241 Teuchos::ParameterList& params,
00242 const NOX::Abstract::MultiVector& input,
00243 NOX::Abstract::MultiVector& result) const;
00244
00246 virtual bool isF() const;
00247
00249 virtual bool isJacobian() const;
00250
00252 virtual bool isGradient() const;
00253
00255 virtual bool isNewton() const;
00256
00258 virtual const NOX::Abstract::Vector& getX() const;
00259
00261 virtual const NOX::Abstract::Vector& getF() const;
00262
00264 virtual double getNormF() const;
00265
00267 virtual const NOX::Abstract::Vector& getGradient() const;
00268
00270 virtual const NOX::Abstract::Vector& getNewton() const;
00271
00273 virtual double getNormNewtonSolveResidual() const;
00274
00276
00282
00284 virtual
00285 Teuchos::RCP<const LOCA::MultiContinuation::AbstractGroup>
00286 getUnderlyingGroup() const;
00287
00289 virtual
00290 Teuchos::RCP<LOCA::MultiContinuation::AbstractGroup>
00291 getUnderlyingGroup();
00292
00294
00300
00302 virtual void copy(const NOX::Abstract::Group& source);
00303
00305 virtual void setParamsMulti(
00306 const vector<int>& paramIDs,
00307 const NOX::Abstract::MultiVector::DenseMatrix& vals);
00308
00310 virtual void setParams(const ParameterVector& p);
00311
00313 virtual void setParam(int paramID, double val);
00314
00316 virtual void setParam(string paramID, double val);
00317
00319 virtual const ParameterVector& getParams() const;
00320
00322 virtual double getParam(int paramID) const;
00323
00325 virtual double getParam(string paramID) const;
00326
00333 virtual NOX::Abstract::Group::ReturnType
00334 computeDfDpMulti(const vector<int>& paramIDs,
00335 NOX::Abstract::MultiVector& dfdp,
00336 bool isValidF);
00337
00339
00343 virtual void
00344 preProcessContinuationStep(
00345 LOCA::Abstract::Iterator::StepStatus stepStatus);
00346
00348
00352 virtual void
00353 postProcessContinuationStep(
00354 LOCA::Abstract::Iterator::StepStatus stepStatus);
00355
00357 virtual void projectToDraw(const NOX::Abstract::Vector& x,
00358 double *px) const;
00359
00361 virtual int projectToDrawDimension() const;
00362
00372 virtual void printSolution(const double conParam) const;
00373
00383 virtual void printSolution(const NOX::Abstract::Vector& x_,
00384 const double conParam) const;
00385
00387 double getBifParam() const;
00388
00390 double getFrequency() const;
00391
00393 double lTransNorm(const NOX::Abstract::Vector& z) const;
00394
00396
00399 void lTransNorm(const NOX::Abstract::MultiVector& z,
00400 NOX::Abstract::MultiVector::DenseMatrix& result) const;
00401
00402 protected:
00403
00405 void setBifParam(double param);
00406
00408 void setupViews();
00409
00411 void init(bool perturbSoln = false, double perturbSize = 0.0);
00412
00413 private:
00414
00416 ExtendedGroup& operator=(const ExtendedGroup&);
00417
00418 protected:
00419
00421 Teuchos::RCP<LOCA::GlobalData> globalData;
00422
00424 Teuchos::RCP<LOCA::Parameter::SublistParser> parsedParams;
00425
00427 Teuchos::RCP<Teuchos::ParameterList> hopfParams;
00428
00430 Teuchos::RCP<LOCA::Hopf::MooreSpence::AbstractGroup> grpPtr;
00431
00433 LOCA::Hopf::MooreSpence::ExtendedMultiVector xMultiVec;
00434
00436 LOCA::Hopf::MooreSpence::ExtendedMultiVector fMultiVec;
00437
00439 LOCA::Hopf::MooreSpence::ExtendedMultiVector newtonMultiVec;
00440
00442 Teuchos::RCP<NOX::Abstract::MultiVector> lengthMultiVec;
00443
00445 Teuchos::RCP<LOCA::Hopf::MooreSpence::ExtendedVector> xVec;
00446
00448 Teuchos::RCP<LOCA::Hopf::MooreSpence::ExtendedVector> fVec;
00449
00451 Teuchos::RCP<LOCA::Hopf::MooreSpence::ExtendedMultiVector> ffMultiVec;
00452
00454 Teuchos::RCP<LOCA::Hopf::MooreSpence::ExtendedMultiVector> dfdpMultiVec;
00455
00457 Teuchos::RCP<LOCA::Hopf::MooreSpence::ExtendedVector> newtonVec;
00458
00460 Teuchos::RCP<NOX::Abstract::Vector> lengthVec;
00461
00463 Teuchos::RCP<NOX::Abstract::MultiVector> massTimesY;
00464
00469 Teuchos::RCP<NOX::Abstract::MultiVector> minusMassTimesZ;
00470
00472 Teuchos::RCP<LOCA::Hopf::MooreSpence::SolverStrategy> solverStrategy;
00473
00475 vector<int> index_f;
00476
00478 vector<int> index_dfdp;
00479
00481 vector<int> bifParamID;
00482
00484 bool isValidF;
00485
00487 bool isValidJacobian;
00488
00490 bool isValidNewton;
00491
00492 };
00493
00494 }
00495
00496 }
00497
00498 }
00499
00500 #endif