00001 #ifndef BRILLOUIN_HH_ 00002 #define BRILLOUIN_HH_ 00003 00004 #include <fstream> 00005 #include <memory> 00006 #include <vector> 00007 #include <complex> 00008 #include "basics/outputMatlab.hh" 00009 #include "basics/exceptions.hh" 00010 //#include "basics/ 00011 #include "hp2D/spacePreBuilder.hh" 00012 #include "geometry/meshImport2Dgeneral.hh" 00013 #include "graphics/matlab.hh" 00014 #include "basics/outputMatlab.hh" 00015 #include "basics/exceptions.hh" 00016 #include "hp2D/hpAdaptiveSpaceH1.hh" 00017 #include "hp2D/bilinearForm.hh" 00018 #include "operator/sparseMatrix.hh" 00019 #include "operator/denseMatrix.hh" 00020 //#include "graphics.hh" 00021 #include "operator/superLU.hh" 00022 #include "eigensolver/ARPACK.hh" 00023 #include "space/formula.hh" 00024 #include "toolbox/resourceMonitor.hh" 00025 00026 namespace phc{ 00027 00028 using concepts::Real; 00029 using concepts::Cmplx; 00030 00031 // ********************************************************** Brillouin_Base ** 00032 /* Derive from this class to implement a new Brillouin zone. 00033 @param i The number of points per line on the boundary of the irreducible 00034 Brillouin zone used in the computation of the band structure. 00035 */ 00036 class Brillouin_Base { 00037 public: 00038 virtual ~Brillouin_Base(){} 00039 // This returns the array of k-vectors: 00040 virtual concepts::Array<concepts::Real2d*> get_k(uint i) = 0; 00041 /* These are the lattice vectors. Be carefull to match this with the 00042 space building in PHC4: For v_1 you need the vector pointing to the 00043 corner of spc3_ and for v_2 the one pointing to the corner of spc2_. 00044 */ 00045 virtual concepts::Array<Real> get_v_1() = 0; 00046 virtual concepts::Array<Real> get_v_2() = 0; 00047 00048 }; 00049 00050 // ************************************************************** Brillouin1 ** 00051 00052 class Brillouin1 : public Brillouin_Base { 00053 public: 00054 virtual concepts::Array<concepts::Real2d*> get_k(uint i); 00055 virtual concepts::Array<Real> get_v_1(); 00056 virtual concepts::Array<Real> get_v_2(); 00057 }; 00058 00059 // ************************************************************** Brillouin2 ** 00060 00061 class Brillouin2 : public Brillouin_Base { 00062 public: 00063 virtual concepts::Array<concepts::Real2d*> get_k(uint i); 00064 virtual concepts::Array<Real> get_v_1(); 00065 virtual concepts::Array<Real> get_v_2(); 00066 }; 00067 00068 } // namespace phc 00069 00070 #endif /*BRILLOUIN_HH_*/ 00071