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_MULTIPREDICTOR_ABSTRACTSTRATEGY_H
00043 #define LOCA_MULTIPREDICTOR_ABSTRACTSTRATEGY_H
00044
00045 #include "Teuchos_RCP.hpp"
00046
00047 #include "NOX_Abstract_Group.H"
00048
00049
00050 namespace LOCA {
00051 namespace MultiContinuation {
00052 class ExtendedGroup;
00053 class ExtendedVector;
00054 class ExtendedMultiVector;
00055 }
00056 }
00057
00058 namespace LOCA {
00059
00061 namespace MultiPredictor {
00062
00064
00095 class AbstractStrategy {
00096
00097 public:
00098
00100 AbstractStrategy() {}
00101
00103 virtual ~AbstractStrategy() {}
00104
00106 virtual LOCA::MultiPredictor::AbstractStrategy&
00107 operator=(const LOCA::MultiPredictor::AbstractStrategy& source) = 0;
00108
00110 virtual Teuchos::RCP<LOCA::MultiPredictor::AbstractStrategy>
00111 clone(NOX::CopyType type = NOX::DeepCopy) const = 0;
00112
00123 virtual NOX::Abstract::Group::ReturnType
00124 compute(bool baseOnSecant, const vector<double>& stepSize,
00125 LOCA::MultiContinuation::ExtendedGroup& grp,
00126 const LOCA::MultiContinuation::ExtendedVector& prevXVec,
00127 const LOCA::MultiContinuation::ExtendedVector& xVec) = 0;
00128
00130
00135 virtual NOX::Abstract::Group::ReturnType
00136 evaluate(const vector<double>& stepSize,
00137 const LOCA::MultiContinuation::ExtendedVector& xVec,
00138 LOCA::MultiContinuation::ExtendedMultiVector& result) const = 0;
00139
00141
00144 virtual NOX::Abstract::Group::ReturnType
00145 computeTangent(LOCA::MultiContinuation::ExtendedMultiVector& tangent)= 0;
00146
00148
00152 virtual bool isTangentScalable() const = 0;
00153
00154 protected:
00155
00170 virtual void
00171 setPredictorOrientation(
00172 bool baseOnSecant,
00173 const vector<double>& stepSize,
00174 const LOCA::MultiContinuation::ExtendedGroup& grp,
00175 const LOCA::MultiContinuation::ExtendedVector& prevXVec,
00176 const LOCA::MultiContinuation::ExtendedVector& xVec,
00177 LOCA::MultiContinuation::ExtendedVector& secant,
00178 LOCA::MultiContinuation::ExtendedMultiVector& tangent);
00179
00180 };
00181
00182 }
00183
00184 }
00185
00186 #endif