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_CAYLEY_H
00043 #define LOCA_ANASAZIOPERATOR_CAYLEY_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
00091 class Cayley : public LOCA::AnasaziOperator::AbstractStrategy {
00092
00093 public:
00094
00096
00100 Cayley(
00101 const Teuchos::RCP<LOCA::GlobalData>& global_data,
00102 const Teuchos::RCP<LOCA::Parameter::SublistParser>& topParams,
00103 const Teuchos::RCP<Teuchos::ParameterList>& eigenParams,
00104 const Teuchos::RCP<Teuchos::ParameterList>& solverParams,
00105 const Teuchos::RCP<LOCA::TimeDependent::AbstractGroup>& grp);
00106
00108 virtual ~Cayley();
00109
00113 virtual const string& label() const;
00114
00124 virtual void
00125 apply(const NOX::Abstract::MultiVector& input,
00126 NOX::Abstract::MultiVector& output) const;
00127
00134 virtual void
00135 preProcessSeedVector(NOX::Abstract::MultiVector& ivec);
00136
00143 virtual void
00144 transformEigenvalue(double& ev_r, double& ev_i) const;
00145
00152 virtual NOX::Abstract::Group::ReturnType
00153 rayleighQuotient(const NOX::Abstract::Vector& evec_r,
00154 const NOX::Abstract::Vector& evec_i,
00155 double& rq_r, double& rq_i) const;
00156
00157 protected:
00158
00160 Teuchos::RCP<LOCA::GlobalData> globalData;
00161
00163 string myLabel;
00164
00166 Teuchos::RCP<Teuchos::ParameterList> eigenParams;
00167
00169 Teuchos::RCP<Teuchos::ParameterList> solverParams;
00170
00172 Teuchos::RCP<LOCA::TimeDependent::AbstractGroup> grp;
00173
00175 mutable Teuchos::RCP<NOX::Abstract::MultiVector> tmp_r;
00176
00178 mutable Teuchos::RCP<NOX::Abstract::MultiVector> tmp_i;
00179
00181 double sigma;
00182
00184 double mu;
00185
00186 };
00187 }
00188 }
00189
00190 #endif