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_MULTICONTINUATION_EXTENDEDGROUP_H
00043 #define LOCA_MULTICONTINUATION_EXTENDEDGROUP_H
00044
00045 #include "Teuchos_RCP.hpp"
00046
00047 #include "LOCA_MultiContinuation_AbstractStrategy.H"
00048 #include "LOCA_BorderedSystem_AbstractGroup.H"
00049 #include "LOCA_MultiContinuation_ExtendedVector.H"
00050 #include "LOCA_MultiContinuation_ExtendedMultiVector.H"
00051
00052
00053 namespace Teuchos {
00054 class ParameterList;
00055 }
00056 namespace LOCA {
00057 class GlobalData;
00058 namespace Parameter {
00059 class SublistParser;
00060 }
00061 namespace MultiContinuation {
00062 class AbstractGroup;
00063 class ConstraintInterface;
00064 class ConstrainedGroup;
00065 }
00066 namespace MultiPredictor {
00067 class AbstractStrategy;
00068 }
00069 }
00070
00071 namespace LOCA {
00072
00073 namespace MultiContinuation {
00074
00111 class ExtendedGroup :
00112 public virtual LOCA::MultiContinuation::AbstractStrategy,
00113 public virtual LOCA::BorderedSystem::AbstractGroup {
00114
00115 public:
00116
00118 ExtendedGroup(const ExtendedGroup& source,
00119 NOX::CopyType type = NOX::DeepCopy);
00120
00122 virtual ~ExtendedGroup();
00123
00128
00130 virtual NOX::Abstract::Group&
00131 operator=(const NOX::Abstract::Group& source);
00132
00134 virtual Teuchos::RCP<NOX::Abstract::Group>
00135 clone(NOX::CopyType type = NOX::DeepCopy) const;
00136
00138 virtual void setX(const NOX::Abstract::Vector& y);
00139
00144 virtual void computeX(const NOX::Abstract::Group& g,
00145 const NOX::Abstract::Vector& d,
00146 double step);
00147
00149 virtual NOX::Abstract::Group::ReturnType computeF();
00150
00152 virtual NOX::Abstract::Group::ReturnType computeJacobian();
00153
00155 virtual NOX::Abstract::Group::ReturnType computeGradient();
00156
00158 virtual NOX::Abstract::Group::ReturnType
00159 computeNewton(Teuchos::ParameterList& params);
00160
00162 virtual NOX::Abstract::Group::ReturnType
00163 applyJacobian(const NOX::Abstract::Vector& input,
00164 NOX::Abstract::Vector& result) const;
00165
00167 virtual NOX::Abstract::Group::ReturnType
00168 applyJacobianTranspose(const NOX::Abstract::Vector& input,
00169 NOX::Abstract::Vector& result) const;
00170
00172 virtual NOX::Abstract::Group::ReturnType
00173 applyJacobianInverse(Teuchos::ParameterList& params,
00174 const NOX::Abstract::Vector& input,
00175 NOX::Abstract::Vector& result) const;
00176
00178 virtual NOX::Abstract::Group::ReturnType
00179 applyJacobianMultiVector(const NOX::Abstract::MultiVector& input,
00180 NOX::Abstract::MultiVector& result) const;
00181
00183 virtual NOX::Abstract::Group::ReturnType
00184 applyJacobianTransposeMultiVector(
00185 const NOX::Abstract::MultiVector& input,
00186 NOX::Abstract::MultiVector& result) const;
00187
00189 virtual NOX::Abstract::Group::ReturnType
00190 applyJacobianInverseMultiVector(
00191 Teuchos::ParameterList& params,
00192 const NOX::Abstract::MultiVector& input,
00193 NOX::Abstract::MultiVector& result) const;
00194
00196 virtual bool isF() const;
00197
00199 virtual bool isJacobian() const;
00200
00202 virtual bool isGradient() const;
00203
00205 virtual bool isNewton() const;
00206
00208 virtual const NOX::Abstract::Vector& getX() const;
00209
00211 virtual const NOX::Abstract::Vector& getF() const;
00212
00214 virtual double getNormF() const;
00215
00217 virtual const NOX::Abstract::Vector& getGradient() const;
00218
00220 virtual const NOX::Abstract::Vector& getNewton() const;
00221
00223 virtual double getNormNewtonSolveResidual() const;
00224
00226
00232
00234 virtual
00235 Teuchos::RCP<const LOCA::MultiContinuation::AbstractGroup>
00236 getUnderlyingGroup() const;
00237
00239 virtual
00240 Teuchos::RCP<LOCA::MultiContinuation::AbstractGroup>
00241 getUnderlyingGroup();
00242
00244
00250
00252 virtual void copy(const NOX::Abstract::Group& source);
00253
00255 virtual int getNumParams() const;
00256
00258
00262 virtual void
00263 preProcessContinuationStep(
00264 LOCA::Abstract::Iterator::StepStatus stepStatus);
00265
00267
00271 virtual void
00272 postProcessContinuationStep(
00273 LOCA::Abstract::Iterator::StepStatus stepStatus);
00274
00276 virtual NOX::Abstract::Group::ReturnType
00277 computePredictor();
00278
00280 virtual bool isPredictor() const;
00281
00283 virtual void scaleTangent();
00284
00286
00290 virtual void
00291 setPredictorTangentDirection(
00292 const LOCA::MultiContinuation::ExtendedVector& v,
00293 int i);
00294
00296 virtual const LOCA::MultiContinuation::ExtendedMultiVector&
00297 getPredictorTangent() const;
00298
00300 virtual const LOCA::MultiContinuation::ExtendedMultiVector&
00301 getScaledPredictorTangent() const;
00302
00304 virtual void setPrevX(const NOX::Abstract::Vector& y);
00305
00307 virtual const LOCA::MultiContinuation::ExtendedVector&
00308 getPrevX() const ;
00309
00311 virtual void setStepSize(double deltaS, int i = 0);
00312
00314 virtual double getStepSize(int i = 0) const;
00315
00317 virtual void setContinuationParameter(double val, int i = 0);
00318
00320 virtual double getContinuationParameter(int i = 0) const;
00321
00323 virtual int getContinuationParameterID(int i = 0) const;
00324
00326 virtual const vector<int>& getContinuationParameterIDs() const;
00327
00329 virtual string getContinuationParameterName(int i = 0) const;
00330
00332 virtual double getStepSizeScaleFactor(int i = 0) const;
00333
00335 virtual void printSolution() const;
00336
00338 virtual double computeScaledDotProduct(
00339 const NOX::Abstract::Vector& x,
00340 const NOX::Abstract::Vector& y) const;
00341
00343 virtual int projectToDrawDimension() const;
00344
00346 virtual void projectToDraw(
00347 const LOCA::MultiContinuation::ExtendedVector& x,
00348 double *px) const;
00349
00351
00357
00359 virtual int getBorderedWidth() const;
00360
00362 virtual Teuchos::RCP<const NOX::Abstract::Group>
00363 getUnborderedGroup() const;
00364
00366 virtual bool isCombinedAZero() const;
00367
00369 virtual bool isCombinedBZero() const;
00370
00372 virtual bool isCombinedCZero() const;
00373
00378 virtual void
00379 extractSolutionComponent(const NOX::Abstract::MultiVector& v,
00380 NOX::Abstract::MultiVector& v_x) const;
00381
00387 virtual void
00388 extractParameterComponent(
00389 bool use_transpose,
00390 const NOX::Abstract::MultiVector& v,
00391 NOX::Abstract::MultiVector::DenseMatrix& v_p) const;
00392
00398 virtual void
00399 loadNestedComponents(const NOX::Abstract::MultiVector& v_x,
00400 const NOX::Abstract::MultiVector::DenseMatrix& v_p,
00401 NOX::Abstract::MultiVector& v) const;
00402
00404 virtual void fillA(NOX::Abstract::MultiVector& A) const;
00405
00407 virtual void fillB(NOX::Abstract::MultiVector& B) const;
00408
00410 virtual void fillC(NOX::Abstract::MultiVector::DenseMatrix& C) const;
00411
00413
00414 protected:
00415
00417 ExtendedGroup(
00418 const Teuchos::RCP<LOCA::GlobalData>& global_data,
00419 const Teuchos::RCP<LOCA::Parameter::SublistParser>& topParams,
00420 const Teuchos::RCP<Teuchos::ParameterList>& continuationParams,
00421 const Teuchos::RCP<LOCA::MultiContinuation::AbstractGroup>& grp,
00422 const Teuchos::RCP<LOCA::MultiPredictor::AbstractStrategy>& pred,
00423 const vector<int>& paramIDs);
00424
00426
00430 virtual void setConstraints(const Teuchos::RCP<LOCA::MultiContinuation::ConstraintInterface>& constraints, bool skip_dfdp);
00431
00432 private:
00433
00435 ExtendedGroup& operator=(const ExtendedGroup& source);
00436
00437 protected:
00438
00440 Teuchos::RCP<LOCA::GlobalData> globalData;
00441
00443 Teuchos::RCP<LOCA::Parameter::SublistParser> parsedParams;
00444
00446 Teuchos::RCP<Teuchos::ParameterList> continuationParams;
00447
00449 Teuchos::RCP<LOCA::MultiContinuation::AbstractGroup> grpPtr;
00450
00452 Teuchos::RCP<LOCA::MultiPredictor::AbstractStrategy> predictor;
00453
00455 Teuchos::RCP<LOCA::MultiContinuation::ConstrainedGroup> conGroup;
00456
00458 int numParams;
00459
00461 LOCA::MultiContinuation::ExtendedMultiVector tangentMultiVec;
00462
00464 LOCA::MultiContinuation::ExtendedMultiVector scaledTangentMultiVec;
00465
00466
00468 LOCA::MultiContinuation::ExtendedVector prevXVec;
00469
00471 vector<int> conParamIDs;
00472
00474 vector<double> stepSize;
00475
00477 vector<double> stepSizeScaleFactor;
00478
00480 bool isValidPredictor;
00481
00483 bool baseOnSecant;
00484
00485 };
00486
00487 }
00488 }
00489
00490 #endif