include/deal.II/lac/slepc_spectral_transformation.h

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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

deal.II documentation generated on Wed May 23 2012 06:07:39 by doxygen 1.7.3