00001 //--------------------------------------------------------------------------- 00002 // @f$Id: slepc_spectral_transformation.h 25345 2012-03-31 08:37:04Z bangerth @f$ 00003 // Author: Toby D. Young, Polish Academy of Sciences, 2009 00004 // 00005 // Copyright (C) 2009, 2012 by the deal.II authors 00006 // 00007 // This file is subject to QPL and may not be distributed 00008 // without copyright and license information. Please refer 00009 // to the file deal.II/doc/license.html for the text and 00010 // further information on this license. 00011 // 00012 //--------------------------------------------------------------------------- 00013 00014 #ifndef __deal2__slepc_spectral_transformation_h 00015 #define __deal2__slepc_spectral_transformation_h 00016 00017 00018 #include <deal.II/base/config.h> 00019 00020 #ifdef DEAL_II_USE_SLEPC 00021 00022 # include <deal.II/base/std_cxx1x/shared_ptr.h> 00023 # include <deal.II/lac/exceptions.h> 00024 00025 # include <petscksp.h> 00026 # include <slepceps.h> 00027 00028 DEAL_II_NAMESPACE_OPEN 00029 00030 00031 namespace SLEPcWrappers 00032 { 00033 00042 class TransformationBase 00043 { 00044 public: 00045 00049 TransformationBase (); 00050 00054 virtual ~TransformationBase (); 00055 00060 void set_context (EPS &eps); 00061 00062 protected: 00063 00064 virtual void set_transformation_type (ST &st) const = 0; 00065 00066 private: 00067 00081 struct TransformationData 00082 { 00083 00087 ~TransformationData (); 00088 00093 ST st; 00094 }; 00095 00096 std_cxx1x::shared_ptr<TransformationData> transformation_data; 00097 }; 00098 00106 class TransformationShift : public TransformationBase 00107 { 00108 public: 00109 00115 struct AdditionalData 00116 { 00117 00122 AdditionalData (const double shift_parameter = 0); 00123 00127 const double shift_parameter; 00128 }; 00129 00130 00134 TransformationShift (const AdditionalData &data = AdditionalData()); 00135 00136 00137 protected: 00138 00143 const AdditionalData additional_data; 00144 00152 virtual void set_transformation_type (ST &st) const; 00153 }; 00154 00162 class TransformationShiftInvert : public TransformationBase 00163 { 00164 public: 00165 00171 struct AdditionalData 00172 { 00177 AdditionalData (const double shift_parameter = 0); 00178 00182 const double shift_parameter; 00183 }; 00184 00185 00189 TransformationShiftInvert (const AdditionalData &data = AdditionalData()); 00190 00191 protected: 00192 00197 const AdditionalData additional_data; 00198 00206 virtual void set_transformation_type (ST &st) const; 00207 }; 00208 00216 class TransformationSpectrumFolding : public TransformationBase 00217 { 00218 public: 00219 00225 struct AdditionalData 00226 { 00231 AdditionalData (const double shift_parameter = 0); 00232 00236 const double shift_parameter; 00237 }; 00238 00239 00243 TransformationSpectrumFolding (const AdditionalData &data = AdditionalData()); 00244 00245 protected: 00246 00251 const AdditionalData additional_data; 00252 00260 virtual void set_transformation_type (ST &st) const; 00261 }; 00262 00270 class TransformationCayley : public TransformationBase 00271 { 00272 public: 00273 00278 struct AdditionalData 00279 { 00284 AdditionalData (const double shift_parameter = 0, 00285 const double antishift_parameter = 0); 00286 00290 const double shift_parameter; 00291 const double antishift_parameter; 00292 }; 00293 00294 00298 TransformationCayley (const double shift, 00299 const double antishift); 00300 00301 protected: 00302 00307 const AdditionalData additional_data; 00308 00316 virtual void set_transformation_type (ST &st) const; 00317 }; 00318 00319 } 00320 00321 DEAL_II_NAMESPACE_CLOSE 00322 00323 #endif // DEAL_II_USE_SLEPC 00324 00325 /*-------------------- slepc_spectral_transformation.h ------------------*/ 00326 00327 #endif 00328 00329 /*-------------------- slepc_spectral_transformation.h ------------------*/ 00330
documentation generated on Wed May 23 2012 06:07:39 by
doxygen
1.7.3