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_ABSTRACT_GROUP_H
00043 #define LOCA_ABSTRACT_GROUP_H
00044
00045 #include "Teuchos_RCP.hpp"
00046
00047 #include "LOCA_Homotopy_AbstractGroup.H"
00048 #include "LOCA_TurningPoint_MinimallyAugmented_FiniteDifferenceGroup.H"
00049 #include "LOCA_Pitchfork_MinimallyAugmented_AbstractGroup.H"
00050 #include "LOCA_Hopf_MinimallyAugmented_FiniteDifferenceGroup.H"
00051
00052 namespace LOCA {
00053
00055 namespace Abstract {
00056
00070 class Group :
00071 public virtual LOCA::Homotopy::AbstractGroup,
00072 public virtual LOCA::TurningPoint::MinimallyAugmented::FiniteDifferenceGroup,
00073 public virtual LOCA::Pitchfork::MinimallyAugmented::AbstractGroup,
00074 public virtual LOCA::Hopf::MinimallyAugmented::FiniteDifferenceGroup
00075 {
00076
00077 public:
00078
00080 Group(const Teuchos::RCP<LOCA::GlobalData>& global_data);
00081
00083 Group(const Teuchos::RCP<LOCA::GlobalData>& global_data,
00084 const Teuchos::RCP<LOCA::DerivUtils>& deriv);
00085
00087 Group(const Group& source, NOX::CopyType type = NOX::DeepCopy);
00088
00090 virtual ~Group();
00091
00096
00105 virtual NOX::Abstract::Group::ReturnType
00106 augmentJacobianForHomotopy(double a, double b);
00107
00109
00114
00116
00120 virtual NOX::Abstract::Group::ReturnType
00121 computeShiftedMatrix(double alpha, double beta);
00122
00124
00128 virtual NOX::Abstract::Group::ReturnType
00129 applyShiftedMatrix(const NOX::Abstract::Vector& input,
00130 NOX::Abstract::Vector& result) const;
00131
00133
00137 virtual NOX::Abstract::Group::ReturnType
00138 applyShiftedMatrixMultiVector(
00139 const NOX::Abstract::MultiVector& input,
00140 NOX::Abstract::MultiVector& result) const;
00141
00150 virtual NOX::Abstract::Group::ReturnType
00151 applyShiftedMatrixInverseMultiVector(
00152 Teuchos::ParameterList& params,
00153 const NOX::Abstract::MultiVector& input,
00154 NOX::Abstract::MultiVector& result) const;
00155
00157
00162
00164
00167 virtual bool isComplex() const;
00168
00170
00174 virtual NOX::Abstract::Group::ReturnType
00175 computeComplex(double frequency);
00176
00178
00182 virtual NOX::Abstract::Group::ReturnType
00183 applyComplex(const NOX::Abstract::Vector& input_real,
00184 const NOX::Abstract::Vector& input_imag,
00185 NOX::Abstract::Vector& result_real,
00186 NOX::Abstract::Vector& result_imag) const;
00187
00189
00193 virtual NOX::Abstract::Group::ReturnType
00194 applyComplexMultiVector(const NOX::Abstract::MultiVector& input_real,
00195 const NOX::Abstract::MultiVector& input_imag,
00196 NOX::Abstract::MultiVector& result_real,
00197 NOX::Abstract::MultiVector& result_imag) const;
00198
00200
00204 virtual NOX::Abstract::Group::ReturnType
00205 applyComplexInverseMultiVector(
00206 Teuchos::ParameterList& params,
00207 const NOX::Abstract::MultiVector& input_real,
00208 const NOX::Abstract::MultiVector& input_imag,
00209 NOX::Abstract::MultiVector& result_real,
00210 NOX::Abstract::MultiVector& result_imag) const;
00211
00213
00218
00227 virtual NOX::Abstract::Group::ReturnType
00228 applyComplexTranspose(const NOX::Abstract::Vector& input_real,
00229 const NOX::Abstract::Vector& input_imag,
00230 NOX::Abstract::Vector& result_real,
00231 NOX::Abstract::Vector& result_imag) const;
00232
00237 virtual NOX::Abstract::Group::ReturnType
00238 applyComplexTransposeMultiVector(
00239 const NOX::Abstract::MultiVector& input_real,
00240 const NOX::Abstract::MultiVector& input_imag,
00241 NOX::Abstract::MultiVector& result_real,
00242 NOX::Abstract::MultiVector& result_imag) const;
00243
00245 virtual NOX::Abstract::Group::ReturnType
00246 applyComplexTransposeInverseMultiVector(
00247 Teuchos::ParameterList& params,
00248 const NOX::Abstract::MultiVector& input_real,
00249 const NOX::Abstract::MultiVector& input_imag,
00250 NOX::Abstract::MultiVector& result_real,
00251 NOX::Abstract::MultiVector& result_imag) const;
00252
00254
00259
00261 virtual void copy(const NOX::Abstract::Group& source);
00262
00264 virtual void
00265 setParamsMulti(const vector<int>& paramIDs,
00266 const NOX::Abstract::MultiVector::DenseMatrix& vals);
00267
00270 virtual void notifyCompletedStep();
00271
00273
00278
00279 virtual NOX::Abstract::Group&
00280 operator=(const NOX::Abstract::Group& source);
00281
00283
00284 private:
00285
00287 Group& operator=(const Group& source);
00288
00289 protected:
00290
00292 Teuchos::RCP<LOCA::GlobalData> globalData;
00293
00294 };
00295 }
00296 }
00297
00298 #endif