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_TURNINGPOINT_MINIMALLYAUGMENTED_EXTENDEDGROUP_H
00043 #define LOCA_TURNINGPOINT_MINIMALLYAUGMENTED_EXTENDEDGROUP_H
00044
00045 #include "Teuchos_RCP.hpp"
00046
00047 #include "LOCA_MultiContinuation_AbstractGroup.H"
00048 #include "LOCA_Extended_MultiAbstractGroup.H"
00049 #include "LOCA_BorderedSystem_AbstractGroup.H"
00050 #include "LOCA_Abstract_TransposeSolveGroup.H"
00051
00052 namespace LOCA {
00053 class GlobalData;
00054 namespace Parameter {
00055 class SublistParser;
00056 }
00057 namespace TurningPoint {
00058 namespace MinimallyAugmented {
00059 class AbstractGroup;
00060 class Constraint;
00061 }
00062 }
00063 namespace MultiContinuation {
00064 class ConstrainedGroup;
00065 }
00066 }
00067 namespace LOCA {
00068
00069 namespace TurningPoint {
00070
00071 namespace MinimallyAugmented {
00072
00203 class ExtendedGroup
00204 : public virtual LOCA::Extended::MultiAbstractGroup,
00205 public virtual LOCA::MultiContinuation::AbstractGroup,
00206 public virtual LOCA::BorderedSystem::AbstractGroup,
00207 public virtual LOCA::Abstract::TransposeSolveGroup {
00208
00209 public:
00210
00214 ExtendedGroup(
00215 const Teuchos::RCP<LOCA::GlobalData>& global_data,
00216 const Teuchos::RCP<LOCA::Parameter::SublistParser>& topParams,
00217 const Teuchos::RCP<Teuchos::ParameterList>& tpParams,
00218 const Teuchos::RCP<LOCA::TurningPoint::MinimallyAugmented::AbstractGroup>& g);
00219
00221 ExtendedGroup(const ExtendedGroup& source,
00222 NOX::CopyType type = NOX::DeepCopy);
00223
00225 virtual ~ExtendedGroup();
00226
00231
00233 virtual NOX::Abstract::Group&
00234 operator=(const NOX::Abstract::Group& source);
00235
00237 virtual Teuchos::RCP<NOX::Abstract::Group>
00238 clone(NOX::CopyType type = NOX::DeepCopy) const;
00239
00241 virtual void setX(const NOX::Abstract::Vector& y);
00242
00244 virtual void computeX(const NOX::Abstract::Group& g,
00245 const NOX::Abstract::Vector& d,
00246 double step);
00247
00249
00260 virtual NOX::Abstract::Group::ReturnType computeF();
00261
00263
00274 virtual NOX::Abstract::Group::ReturnType computeJacobian();
00275
00277 virtual NOX::Abstract::Group::ReturnType computeGradient();
00278
00280 virtual NOX::Abstract::Group::ReturnType
00281 computeNewton(Teuchos::ParameterList& params);
00282
00284 virtual NOX::Abstract::Group::ReturnType
00285 applyJacobian(const NOX::Abstract::Vector& input,
00286 NOX::Abstract::Vector& result) const;
00287
00289 virtual NOX::Abstract::Group::ReturnType
00290 applyJacobianTranspose(const NOX::Abstract::Vector& input,
00291 NOX::Abstract::Vector& result) const;
00292
00294 virtual NOX::Abstract::Group::ReturnType
00295 applyJacobianInverse(Teuchos::ParameterList& params,
00296 const NOX::Abstract::Vector& input,
00297 NOX::Abstract::Vector& result) const;
00298
00300 virtual NOX::Abstract::Group::ReturnType
00301 applyJacobianMultiVector(const NOX::Abstract::MultiVector& input,
00302 NOX::Abstract::MultiVector& result) const;
00303
00305 virtual NOX::Abstract::Group::ReturnType
00306 applyJacobianTransposeMultiVector(
00307 const NOX::Abstract::MultiVector& input,
00308 NOX::Abstract::MultiVector& result) const;
00309
00311 virtual NOX::Abstract::Group::ReturnType
00312 applyJacobianInverseMultiVector(
00313 Teuchos::ParameterList& params,
00314 const NOX::Abstract::MultiVector& input,
00315 NOX::Abstract::MultiVector& result) const;
00316
00318 virtual bool isF() const;
00319
00321 virtual bool isJacobian() const;
00322
00324 virtual bool isGradient() const;
00325
00327 virtual bool isNewton() const;
00328
00330 virtual const NOX::Abstract::Vector& getX() const;
00331
00333 virtual const NOX::Abstract::Vector& getF() const;
00334
00336 virtual double getNormF() const;
00337
00339 virtual const NOX::Abstract::Vector& getGradient() const;
00340
00342 virtual const NOX::Abstract::Vector& getNewton() const;
00343
00345 virtual double getNormNewtonSolveResidual() const;
00346
00348
00354
00356 virtual
00357 Teuchos::RCP<const LOCA::MultiContinuation::AbstractGroup>
00358 getUnderlyingGroup() const;
00359
00361 virtual
00362 Teuchos::RCP<LOCA::MultiContinuation::AbstractGroup>
00363 getUnderlyingGroup();
00364
00366
00372
00374 virtual void copy(const NOX::Abstract::Group& source);
00375
00377 virtual void setParamsMulti(
00378 const vector<int>& paramIDs,
00379 const NOX::Abstract::MultiVector::DenseMatrix& vals);
00380
00382 virtual void setParams(const ParameterVector& p);
00383
00385 virtual void setParam(string paramID, double val);
00386
00388 virtual void setParam(int paramID, double val);
00389
00391 virtual const ParameterVector& getParams() const;
00392
00394 virtual double getParam(int paramID) const;
00395
00397 virtual double getParam(string paramID) const;
00398
00405 virtual NOX::Abstract::Group::ReturnType
00406 computeDfDpMulti(const vector<int>& paramIDs,
00407 NOX::Abstract::MultiVector& dfdp,
00408 bool isValidF);
00409
00411
00415 virtual void
00416 preProcessContinuationStep(
00417 LOCA::Abstract::Iterator::StepStatus stepStatus);
00418
00420
00424 virtual void
00425 postProcessContinuationStep(
00426 LOCA::Abstract::Iterator::StepStatus stepStatus);
00427
00429 virtual void projectToDraw(const NOX::Abstract::Vector& x,
00430 double *px) const;
00431
00433 virtual int projectToDrawDimension() const;
00434
00444 virtual void printSolution(const double conParam) const;
00445
00455 virtual void printSolution(const NOX::Abstract::Vector& x_,
00456 const double conParam) const;
00457
00459
00465
00467 virtual int getBorderedWidth() const;
00468
00470 virtual Teuchos::RCP<const NOX::Abstract::Group>
00471 getUnborderedGroup() const;
00472
00474 virtual bool isCombinedAZero() const;
00475
00477 virtual bool isCombinedBZero() const;
00478
00480 virtual bool isCombinedCZero() const;
00481
00486 virtual void
00487 extractSolutionComponent(const NOX::Abstract::MultiVector& v,
00488 NOX::Abstract::MultiVector& v_x) const;
00489
00495 virtual void
00496 extractParameterComponent(
00497 bool use_transpose,
00498 const NOX::Abstract::MultiVector& v,
00499 NOX::Abstract::MultiVector::DenseMatrix& v_p) const;
00500
00506 virtual void
00507 loadNestedComponents(
00508 const NOX::Abstract::MultiVector& v_x,
00509 const NOX::Abstract::MultiVector::DenseMatrix& v_p,
00510 NOX::Abstract::MultiVector& v) const;
00511
00513 virtual void fillA(NOX::Abstract::MultiVector& A) const;
00514
00516 virtual void fillB(NOX::Abstract::MultiVector& B) const;
00517
00519 virtual void fillC(NOX::Abstract::MultiVector::DenseMatrix& C) const;
00520
00522
00528
00530 virtual NOX::Abstract::Group::ReturnType
00531 applyJacobianTransposeInverse(Teuchos::ParameterList& params,
00532 const NOX::Abstract::Vector& input,
00533 NOX::Abstract::Vector& result) const;
00534
00536 virtual NOX::Abstract::Group::ReturnType
00537 applyJacobianTransposeInverseMultiVector(
00538 Teuchos::ParameterList& params,
00539 const NOX::Abstract::MultiVector& input,
00540 NOX::Abstract::MultiVector& result) const;
00541
00543
00545 double getBifParam() const;
00546
00548 Teuchos::RCP<const NOX::Abstract::Vector>
00549 getLeftNullVec() const;
00550
00552 Teuchos::RCP<const NOX::Abstract::Vector>
00553 getRightNullVec() const;
00554
00555 protected:
00556
00558 void setBifParam(double param);
00559
00561 void getInitialVectors(
00562 Teuchos::RCP<NOX::Abstract::Vector>& aVecPtr,
00563 Teuchos::RCP<NOX::Abstract::Vector>& bVecPtr,
00564 bool isSymmetric);
00565
00566 private:
00567
00569 ExtendedGroup& operator=(const ExtendedGroup&);
00570
00571 protected:
00572
00574 Teuchos::RCP<LOCA::GlobalData> globalData;
00575
00577 Teuchos::RCP<LOCA::Parameter::SublistParser> parsedParams;
00578
00580 Teuchos::RCP<Teuchos::ParameterList> turningPointParams;
00581
00583 Teuchos::RCP<LOCA::TurningPoint::MinimallyAugmented::AbstractGroup> grpPtr;
00584
00586 Teuchos::RCP<LOCA::TurningPoint::MinimallyAugmented::Constraint> constraint;
00587
00589 Teuchos::RCP<LOCA::MultiContinuation::ConstrainedGroup> conGroup;
00590
00592 int bifParamID;
00593
00594 };
00595
00596 }
00597
00598 }
00599
00600 }
00601
00602 #endif