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_ANASAZIOPERATOR_SHIFTINVERT_H
00043 #define LOCA_ANASAZIOPERATOR_SHIFTINVERT_H
00044
00045 #include "Teuchos_RCP.hpp"
00046
00047 #include "LOCA_AnasaziOperator_AbstractStrategy.H"
00048 #include "LOCA_TimeDependent_AbstractGroup.H"
00049
00050
00051 namespace LOCA {
00052 class GlobalData;
00053 namespace Parameter {
00054 class SublistParser;
00055 }
00056 }
00057
00058 namespace LOCA {
00059
00060 namespace AnasaziOperator {
00061
00090 class ShiftInvert : public LOCA::AnasaziOperator::AbstractStrategy {
00091
00092 public:
00093
00095
00099 ShiftInvert(
00100 const Teuchos::RCP<LOCA::GlobalData>& global_data,
00101 const Teuchos::RCP<LOCA::Parameter::SublistParser>& topParams,
00102 const Teuchos::RCP<Teuchos::ParameterList>& eigenParams,
00103 const Teuchos::RCP<Teuchos::ParameterList>& solverParams,
00104 const Teuchos::RCP<LOCA::TimeDependent::AbstractGroup>& grp);
00105
00107 virtual ~ShiftInvert();
00108
00112 virtual const string& label() const;
00113
00123 virtual void
00124 apply(const NOX::Abstract::MultiVector& input,
00125 NOX::Abstract::MultiVector& output) const;
00126
00133 virtual void
00134 transformEigenvalue(double& ev_r, double& ev_i) const;
00135
00142 virtual NOX::Abstract::Group::ReturnType
00143 rayleighQuotient(const NOX::Abstract::Vector& evec_r,
00144 const NOX::Abstract::Vector& evec_i,
00145 double& rq_r, double& rq_i) const;
00146
00147 protected:
00148
00150 Teuchos::RCP<LOCA::GlobalData> globalData;
00151
00153 string myLabel;
00154
00156 Teuchos::RCP<Teuchos::ParameterList> eigenParams;
00157
00159 Teuchos::RCP<Teuchos::ParameterList> solverParams;
00160
00162 Teuchos::RCP<LOCA::TimeDependent::AbstractGroup> grp;
00163
00165 mutable Teuchos::RCP<NOX::Abstract::MultiVector> tmp_r;
00166
00168 mutable Teuchos::RCP<NOX::Abstract::MultiVector> tmp_i;
00169
00171 double shift;
00172
00173 };
00174 }
00175 }
00176
00177 #endif