class ntcFoliation : public vtkObject

Description:

ntcFoliation is a class that contains the basic functions needed to deal with codimension-1 foliations of surfaces embedded in the 3-torus coming from a smooth 1-form on the 3-torus

Inheritance:


Public Fields

int LoopHom[2][3]

Public Methods

ntcFoliation()
~ntcFoliation()
static ntcFoliation* New()
const char* GetClassName()
void SetMagneticField( ntcOmega *Omega )
ntcOmega* GetMagneticField()
void SetOneForm( ntcOmega *Omega )
ntcOmega* GetOneForm()
void SetHamiltonian( ntcFermiFunction* F )
ntcFermiFunction* GetHamiltonian()
void SetDispersionRelations( ntcImplicitFunction* f )
ntcImplicitFunction* GetDispersionRelations()
void SetDispersionRelations( ntcFUNC f )
void SetDispersionRelationsGradient( ntcFUNC fx, ntcFUNC fy, ntcFUNC fz )
void SetDispersionRelationsHessian( ntcFUNC fxx, ntcFUNC fyy, ntcFUNC fzz, ntcFUNC fxy, ntcFUNC fyz, ntcFUNC fzx )
void SetDispersionRelationsHomologyMethods( ntcHomFUNC *Hom )
void SetDispersionRelationsHomologyMethod( ntcHomMet *Hom )
void SetDispersionRelationsHomologyMethods( ntcHOM *Homol )
void SetFermiEnergy( float En )
void SetFermiSurfaceSampleDimensions( float l, float m, float n )
void SetFermiSurface( int i = 0 )
vtkPolyData* GetFermiSurface()
int GetDirectLatticeType()
void VisualizeFermiSurface()
void SetCriticalCurves()
vtkPolyData* GetCriticalCurves()
virtual void SetCriticalPoints()
int EvaluateIndexOf( ntcPoint *crPoint )
int GetNumberOfSaddles()
float* GetCriticalSaddlePoint( int i )
int GetNumberOfCenters()
float* GetCriticalCenterPoint( int i )
int SetCriticalLeaf( float crPoint[3], int Hz = 100, float xMin = 0, float xMax = 1, float yMin = 0, float yMax = 1, float zMin = 0, float zMax = 1 )
int FindHomology( int *Hom )
void SetHomologyClass( int Hom[3] )
void GetHomologyClass( int Hom[3] )
int FindPrimitiveCell( float criticalPoint[3], int type )
void SetPrimitiveCell( vtkPolyData* geom )
ntcPrimitiveCell* GetPrimitiveCell()
void WritePrimitiveCell( char *name )
ntcPrimitiveCell* GetCriticalLeaf()
ntcPrimitiveCell* GetCriticalLeaf( int n )
int ConvertLeafToFCC( ntcPrimitiveCell *Leaf, int type = NTC_GENERIC_LEAF, int keep = NTC_DO_NOT_KEEP_ALSO_OUTSIDE_SEGMENTS )
int IncreaseResolution()
void DecreaseResolution()
int GetResolution()
void SetResolution( int Resolution )
int EliminatePointsOutsideBrillouinZone( float center[3], int itIsTheSecondTime=0 )
int EliminatePointsOutsideBrillouinZone( float c0=.5, float c1=.5, float c2=.5, int itIsTheSecondTime=0 )
int ConvertCriticalLeafToFCC( ntcPrimitiveCell *criticalLeaf )

Protected Fields

float Dim[3]
float Energy
int HomologyClass[3]
ntcImplicitFunction* DispersionRelations
vtkPolyData* FermiSurface
vtkPolyData* CriticalCurves
vtkPoints* CriticalSaddlePoints
vtkPoints* CriticalCenterPoints
ntcPrimitiveCell* PrimitiveCell
int NumberOfSaddles
int NumberOfCenters
int LatticeType
ntcLattice* Lattice
ntcPrimitiveCell* criticalLeaf
ntcPrimitiveCell* criticalLeaves[2]
int Resolution

Private Fields

ntcOmega* Omega

Documentation

ntcFoliation is a class that contains the basic functions needed to deal with codimension-1 foliations of surfaces embedded in the 3-torus coming from a smooth 1-form on the 3-torus.
The surface is generated as the level set of a function that must be provided to this class through a
ntcFunction.
The 1-form is provided in the generic case through a ntcOmega and in the constant case, when the ntcPlaneFoliation is used instead of this one, through the 3 components of the form.

Two different kinds of algorithms are implemented:

  1. a "2D" method that is good only for foliations coming from constant 1-forms, in other words for plane sections of a 3-ply periodic function in the 3-space;
  2. a 3D one that is good to study the general case.

In the first one, a plane section of the surface is taken and restricted to a fundamental domain.

In the second the surface inside the cube [0,1]3 is sliced by the right number of planes so that we get exactly the intersection between plane (2-torus) and surface inside the cube with the opposite sides glued.

The methods we are interested in, in other words the ones we implemented, are: generating a level set for the function, generating a leaf for the foliation, generating a critical leaf for the foliation (including here methods for reconstructing a neighborhood of the critical point that for obvious numerical reasons is never an "X" shape as it should be) and evaluating the homology class (in the 3-torus and in the surface) of a close leaf (here we consider closed also the critical loops as we glue to the the critical point.

In particular, taking a critical slice is possible to evaluate the homology classes of the 2 critical loops of the "figure eigth" corresponding to any saddle point.

At this time the routines relative to forms with non constant coefficients are not implemented so this class is simply a general purpose super class for ntcPlaneFoliation.

ntcFoliation()
~ntcFoliation()
static ntcFoliation* New()
const char* GetClassName()
void SetMagneticField( ntcOmega *Omega )
Set the 1-form
ntcOmega* GetMagneticField()
Set the 1-form
void SetOneForm( ntcOmega *Omega )
Set the 1-form
ntcOmega* GetOneForm()
Set the 1-form
void SetHamiltonian( ntcFermiFunction* F )
Set the Fermi Energy Function
ntcFermiFunction* GetHamiltonian()
Get the Fermi Energy Function
void SetDispersionRelations( ntcImplicitFunction* f )
Set the Fermi Energy Function
ntcImplicitFunction* GetDispersionRelations()
Return the Fermi Energy Function
void SetDispersionRelations( ntcFUNC f )
Set the Fermi Energy Function from a pointer to a function
void SetDispersionRelationsGradient( ntcFUNC fx, ntcFUNC fy, ntcFUNC fz )
Set Fermi Energy Gradient
void SetDispersionRelationsHessian( ntcFUNC fxx, ntcFUNC fyy, ntcFUNC fzz, ntcFUNC fxy, ntcFUNC fyz, ntcFUNC fzx )
Set Fermi Energy Hessian
void SetDispersionRelationsHomologyMethods( ntcHomFUNC *Hom )
Set the Fermi Energy homology methods for the 2D routines. It _won't_ work with the 3D routines!!!
void SetDispersionRelationsHomologyMethod( ntcHomMet *Hom )
Set the Fermi Energy homology methods for the 3D routines. It _won't_ work with the 2D routines!!!
void SetDispersionRelationsHomologyMethods( ntcHOM *Homol )
Old way to set the Fermi Energy homology methods. Obsolete. Do not use!!!
void SetFermiEnergy( float En )
Set the value of the Energy
void SetFermiSurfaceSampleDimensions( float l, float m, float n )
Set the dimensions of the lattice that will be used to sample the cube [0,1]x[0,1]x[0,1] and find a simplicial decomposition of the Fermi Surface f at energy En
void SetFermiSurface( int i = 0 )
Find a simplicial decomposition of the Fermi Surface f at energy En
vtkPolyData* GetFermiSurface()
Retrieve the simplicial decomposition evaluated with the previous command
int GetDirectLatticeType()
Get the lattice type
void VisualizeFermiSurface()
Visualize the Fermi Surface in the cube [0,1]3
void SetCriticalCurves()
Find the Critical Curves, i.e. the solutions of the equation dF x H = 0.
vtkPolyData* GetCriticalCurves()
virtual void SetCriticalPoints()
Find the critical points at energy En. Not yet implemented for non constant 1-forms.
int EvaluateIndexOf( ntcPoint *crPoint )
int GetNumberOfSaddles()
Return number of saddle type critical points ( you must run SetCriticalCurves() first!!!)
float* GetCriticalSaddlePoint( int i )
Return the coordinates of the i-th saddle point. There is no control about its existence so you must call GetNumberOfSaddles() in conjunction with it ( and you must run SetCriticalPoints() first!!!)
int GetNumberOfCenters()
Return number of center type critical points ( you must run SetCriticalPoints() first!!!)
float* GetCriticalCenterPoint( int i )
Return the coordinates of the i-th center. There is no control about its existence so you must call GetNumberOfCenters() in conjunction with it ( and you must run SetCriticalPoints() first!!!)
int SetCriticalLeaf( float crPoint[3], int Hz = 100, float xMin = 0, float xMax = 1, float yMin = 0, float yMax = 1, float zMin = 0, float zMax = 1 )
int FindHomology( int *Hom )
Finds the homology class of the 2-torus (if any) [you must run SetCriticalPoints() first!!!]. Still to be implemented for non constant 1-forms. Not yet implemented for non constant 1-forms.
void SetHomologyClass( int Hom[3] )
Set the 3-components field HomologyClass to Hom. Used internally only!!!
void GetHomologyClass( int Hom[3] )
Return the 2-dim homology class of the 2-torus if it exist. The existence of the 2-tori decomposition of the surface for some 1-form H at some energy En must be checked by the driver program. The condition under which it exist can be found for example here. You must run FindHomologyClass() first!!!
int FindPrimitiveCell( float criticalPoint[3], int type )
Finds the Primitive Cell, i.e. a fundamental 2-dim domain on the intersection between the plane perpendicular to H and the Fermi Surface. Not yet implemented for non constant 1-forms.
void SetPrimitiveCell( vtkPolyData* geom )
Set the Primitive Cell. Used internally only!!!
ntcPrimitiveCell* GetPrimitiveCell()
Return the Primitive Cell
void WritePrimitiveCell( char *name )
Writes the simplicial decomposition od the Primitive Cell in the file name
ntcPrimitiveCell* GetCriticalLeaf()
Get the simplicial decomposition inside the cube [0,1]^3 of the critical loop homologous to zero in the 3-torus (when it exist) of the 2 loops of the figure eight passing through a critical point.
ntcPrimitiveCell* GetCriticalLeaf( int n )
When both loops of the figure eight are non homologous to 0, here are stored both loops in order to be able to evaluate the homology class of the loop homologous to 0 in the 3-Torus formed by their union. Not clear whether is useful or not.
int ConvertLeafToFCC( ntcPrimitiveCell *Leaf, int type = NTC_GENERIC_LEAF, int keep = NTC_DO_NOT_KEEP_ALSO_OUTSIDE_SEGMENTS )
Restrict Leaf to the first brillouin zone for the FCC type lattice.
int IncreaseResolution()
Increase by 30 the resolution at which is scanned the Fermi Surface and the two surfaces used for retrieving the critical points. All different Fermi Surfaces found are automatically stored and retrieved to avoid CPU wastes. It has been used in the scanning of the [0,1]x[0,1] square of directions for H at a resolution of 1000x1000 to avoid using a too high resolution in cases (the bigger part) in which a very low resolution is enough
void DecreaseResolution()
Bring back the resolution to the default value
int GetResolution()
Get the current resoution
void SetResolution( int Resolution )
Set the default resolution
int EliminatePointsOutsideBrillouinZone( float center[3], int itIsTheSecondTime=0 )
When critical points are too close to the boundary of the Brillouin zone the program can easily miss one of them or put one too much. So what we do is to consider all critical points in the [-1,2]^3 cube and then retrieve all critical points inside the first Brillouin zone centered in center (probably different form (.5,.5,.5)...)
int EliminatePointsOutsideBrillouinZone( float c0=.5, float c1=.5, float c2=.5, int itIsTheSecondTime=0 )
This is used as the default call...
int ConvertCriticalLeafToFCC( ntcPrimitiveCell *criticalLeaf )
For legacy compatibility use only. Do _NOT_ use!!!
int LoopHom[2][3]
Here are stored the homology classes of the 2 loops coming out from a critical point.
float Dim[3]
Sampling Dimensions
float Energy
Fermi Energy of the metal
int HomologyClass[3]
Homology class of the 2-torus
ntcImplicitFunction* DispersionRelations
vtkPolyData* FermiSurface
Simplicial decomposition of the Fermi Surface
vtkPolyData* CriticalCurves
Simplicial decomposition of the Critical Curves
vtkPoints* CriticalSaddlePoints
Saddle Points
vtkPoints* CriticalCenterPoints
Centers
ntcPrimitiveCell* PrimitiveCell
Basic cell on the 2-torus generated by the intersection between a plane orthogonal to the magnetic field and the Fermi Surface.
int NumberOfSaddles
int NumberOfCenters
int LatticeType
ntcLattice* Lattice
ntcPrimitiveCell* criticalLeaf
ntcPrimitiveCell* criticalLeaves[2]
int Resolution
ntcOmega* Omega

Direct child classes:
ntcPlaneFoliation
Author:
Roberto De Leo

alphabetic index hierarchy of classes


this page has been generated automatically by doc++

(c)opyright by Malte Zöckler, Roland Wunderling
contact: doc++@zib.de