Simulation grid descriptor. More...
#include <GridInfo.h>
Public Types | |
| enum | LatticeType {  Manual, Triclinic, Monoclinic, Orthorhombic, Tetragonal, Rhombohedral, Hexagonal, Cubic }  | 
| Print the reciprocal lattice vectors.  More... | |
| enum | LatticeModification { Simple, BodyCentered, BaseCentered, FaceCentered } | 
| enum | PlanType {  PlanForward, PlanInverse, PlanForwardInPlace, PlanInverseInPlace, PlanRtoC, PlanCtoR }  | 
Public Member Functions | |
| void | update () | 
| void | printLattice () | 
| Update the grid information on changing the lattice vectors.  | |
| void | printReciprocalLattice () | 
| Print the lattice vectors.  | |
| void | setLatticeVectors () | 
| Set lattice vectors based on lattice type, modification and parameters above.  | |
| void | initialize (bool skipHeader=false, const std::vector< matrix3< int > > sym=std::vector< matrix3< int > >(1, matrix3< int >(1, 1, 1))) | 
| fftw_plan | getPlan (PlanType planType, int nThreads) const | 
| vector3< int > | wrapGcoords (const vector3< int > iG) const | 
| < wrap negative G-indices to the positive side  | |
| int | fullRindex (const vector3< int > iR) const | 
| < Index into the full real-space box:  | |
| int | fullGindex (const vector3< int > iG) const | 
| < Index into the full reciprocal-space box:  | |
| int | halfGindex (const vector3< int > iG) const | 
| < Index into the half-reduced reciprocal-space box:  | |
Public Attributes | |
| enum GridInfo::LatticeType | latticeType | 
| enum GridInfo::LatticeModification | latticeModification | 
| double | a | 
| double | b | 
| double | c | 
| double | alpha | 
| double | beta | 
| double | gamma | 
| lattice specified by type, modification and standard side lengths, angles in degrees  | |
| vector3 | lattScale | 
| Remember lattice scale specified at input (Note R always includes scale, once latt-scale has processed)  | |
| matrix3 | R | 
| directly specified lattice vectors  | |
| double | Gmax | 
| radius of wavefunction G-sphere, whole density sphere (double the radius) must be inscribable within the FFT box  | |
| double | GmaxRho | 
| if non-zero, override the FFT box inscribable sphere radius  | |
| vector3< int > | S | 
| sample points in each dimension (if 0, will be determined automatically based on Gmax)  | |
| double | detR | 
| cell volume  | |
| matrix3 | RT | 
| matrix3 | RTR | 
| matrix3 | invR | 
| matrix3 | invRT | 
| matrix3 | invRTR | 
| various combinations of lattice-vectors  | |
| matrix3 | G | 
| matrix3 | GT | 
| matrix3 | GGT | 
| matrix3 | invGGT | 
| various combinations of reciporcal lattice-vectors  | |
| double | dV | 
| volume per grid point  | |
| vector3 | h [3] | 
| real space sample vectors  | |
| int | nr | 
| position space grid count = S[0]*S[1]*S[2]  | |
| int | nG | 
| reciprocal lattice count = S[0]*S[1]*(S[2]/2+1) [on account of using r2c and c2r ffts]  | |
| double | dGradial | 
| recommended spacing of radial G functions  | |
| double | GmaxSphere | 
| recommended maximum G-vector for radial functions for the wavefunction sphere  | |
| double | GmaxGrid | 
| recommended maximum G-vector for radial functions for the density grid  | |
| int | irStart | 
| int | irStop | 
| int | iGstart | 
| int | iGstop | 
| cufftHandle | planZ2Z | 
| CUFFT plan for all the complex transforms.  | |
| cufftHandle | planD2Z | 
| CUFFT plan for R -> G.  | |
| cufftHandle | planZ2D | 
| CUFFT plan for G -> R.  | |
| cufftHandle | planZ2Dcompat | 
| CUFFT plan for G -> R in FFTW compatibility mode (required when nyquist component is assymetric)  | |
Static Public Attributes | |
| static const double | maxAllowedStrain | 
| maximum strain allowed when updating lattice vectors and using update()  | |
Simulation grid descriptor.
To setup a simulation grid, create a blank GridInfo object, set the public data members S and R, and call initialize().
This sets up all the auxilliary grid information, and a bunch of shared utilities such as a random number generator, plans for Fourier transforms etc.
| enum GridInfo::PlanType | 
| void GridInfo::initialize | ( | bool | skipHeader = false,  | 
        
| const std::vector< matrix3< int > > | sym = std::vector< matrix3< int > >(1, matrix3< int >(1, 1, 1))  | 
        ||
| ) | 
Initialize the dependent quantities below. If S is specified and is too small for the given Gmax, the call will abort. If skipHeader=true, the "initializing the grid" banner will be supressed (useful for auxiliary grids in calculation) If sym is specified, then auto-computed S will be ensured commensurate with those symmetries