ergo
|
Streamlined, abstract grid generation class. More...
Public Member Functions | |
bool | saveToFile (const char *fname, int noOfThreads) |
Generates the grid and saves it to the file with given name. More... | |
Stream (ActiveBfShells &abs, RadialScheme *rs, real radint, int angmin, int angmax, real boxSize, bool forceCubic) | |
The Stream constructor. More... | |
~Stream () | |
unsigned | getPointCount () const |
Public Attributes | |
real | boxSize |
Dft::SparsePattern * | sparsePattern |
Protected Member Functions | |
bool | saveAtomsRecursively (StreamSaveContext &ssc, const Box &box, unsigned cnt, const unsigned atoms[], int depth) const |
This is a recursive procedure that generates the grid points that lie in the specified bounding box. More... | |
unsigned | saveAtomGridInBox (unsigned iAtom, const Box &box, BoxPartitioner &partitioner, unsigned cnt, const unsigned atoms[], int(*shlBlocks)[2], FILE *stream) const |
Method saves all grid points associated with specified atom, located in the specified box. More... | |
unsigned | noOfAtoms () const |
const AtomicGrid & | getAtomicGrid (unsigned i) const |
void | addAtom (const real coor[3], int charge, int atomNo) |
void | addAtom (const Atom &at, int atomNo) |
unsigned | saveBatch (unsigned batchLength, real(*coor)[3], real *weight, unsigned nBlocks, int(*shlBlocks)[2], FILE *f) const |
Saves a batch of grid points to given file. More... | |
Static Protected Member Functions | |
static void * | saveThread (void *data) |
Protected Attributes | |
bool | forceCubic |
Private Attributes | |
std::vector< RadialGrid * > | atomTypes |
We store just one entry per atom type - there is no reason to have thousands identical copies. More... | |
std::vector< AtomicGrid > | atoms |
ActiveBfShells & | activeShells |
RadialScheme * | radialScheme |
real | radialThreshold |
int | angularMin |
int | angularMax |
unsigned | savedPoints |
unsigned | expectedPoints |
int | noOfThreads |
Static Private Attributes | |
static pthread_mutex_t | fileSaveMutex = PTHREAD_MUTEX_INITIALIZER |
Streamlined, abstract grid generation class.
This class does not depend explicitly on the representation of the basis set and molecule. All such dependence is abstracted away in case the grid generator is to be used with another program.
Stream::Stream | ( | ActiveBfShells & | abs, |
RadialScheme * | rs, | ||
real | radint, | ||
int | angmin, | ||
int | angmax, | ||
real | boxSize_, | ||
bool | forceCubic_ | ||
) |
The Stream constructor.
Takes over the radial scheme object, which has to be allocated dynamically.
Stream::~Stream | ( | ) |
References atomTypes, do_output(), expectedPoints, LOG_AREA_DFT, LOG_CAT_INFO, radialScheme, and savedPoints.
|
inlineprotected |
References addAtom(), Atom::charge, and Atom::coords.
|
protected |
References angularMax, angularMin, atoms, atomTypes, charge, do_output(), expectedPoints, RadialGrid::getPointCount(), AtomicGrid::getPointCount(), RadialGrid::getRadius(), RadialScheme::init(), LOG_AREA_DFT, LOG_CAT_INFO, RadialGrid::noOfRadPoints, radialScheme, and radialThreshold.
Referenced by addAtom().
|
protected |
References atoms.
Referenced by saveAtomsRecursively().
|
inline |
References savedPoints.
|
inlineprotected |
References atoms.
Referenced by saveToFile().
|
protected |
Method saves all grid points associated with specified atom, located in the specified box.
It will also save the associated auxiliary information (usually a list of active orbitals) - this is why we pass an atom list. FIXME: this probably needs to be thought through: what factor decides the atom radius, really? Is it max(auxiliaryRadius, gridRadius)?
References activeShells, atoms, AtomicGrid::center, Box::contains(), Box::getDistanceTo(), AtomicGrid::getRadialGrid(), Box::hi, ll_sphere(), Box::lo, RadialGrid::nAngular, RadialGrid::noOfRadPoints, BoxPartitioner::process(), RadialGrid::rad, saveBatch(), savedPoints, ActiveBfShells::setForBox(), Vector3D::v, and RadialGrid::weights.
Referenced by saveAtomsRecursively().
|
protected |
This is a recursive procedure that generates the grid points that lie in the specified bounding box.
As an optimization, a list of atoms that may overlap with given grid is passed so that linear scaling can be achieved. This goal is achieved by recursive division of the bounding box until there are no atoms that can overlap with it, or the minimal size is achieved. In the latter case, all atoms are iterated over and the grid points associated with them that lie in the bounding box are saved. An associated auxiliary information is saved as well.
An atom is considered relevant for given box, if its Voronoi polyhedra (+safety margin) overlaps with the box.
ssc | the saving context containing information about selected partitioner and other grid generation specifics. |
box | save only the points within the box. |
atomCount | the number of potentially relevant atoms that have grids overlapping with the box in question.. |
atomIndices | ... and their indices in the global array. |
depth | the recursion depth for logging purposes. |
randomly chosen parameter. We need in general a better way to determing whether the voronoi polyhedra associated with a given atom overlaps with the box in question...
References StreamSaveContext::boxCount, boxSize, AtomicGrid::center, getAtomicGrid(), Box::getMaxDim(), Box::hi, Box::lo, StreamSaveContext::myRank, noOfThreads, Box::overlapsWith(), StreamSaveContext::partitioner, AtomicGrid::radius(), saveAtomGridInBox(), StreamSaveContext::savedPoints, savedPoints, StreamSaveContext::shlBlocks, Box::size(), StreamSaveContext::stream, and Vector3D::v.
Referenced by saveThread(), and saveToFile().
|
protected |
Saves a batch of grid points to given file.
References fileSaveMutex, and sparsePattern.
Referenced by saveAtomGridInBox().
|
staticprotected |
References activeShells, ThreadInfo::atomCnt, ThreadInfo::atoms, ThreadInfo::box, do_output(), ThreadInfo::f, ActiveBfShells::getMaxShells(), LOG_AREA_DFT, LOG_CAT_ERROR, ThreadInfo::myRank, ThreadInfo::res, saveAtomsRecursively(), StreamSaveContext::savedPoints, ThreadInfo::savedPoints, and ThreadInfo::stream.
Referenced by saveToFile().
bool Stream::saveToFile | ( | const char * | fname, |
int | noOfThreads | ||
) |
Generates the grid and saves it to the file with given name.
References activeShells, atoms, boxSize, forceCubic, getBoundingBox(), ActiveBfShells::getMaxShells(), Box::hi, Box::lo, noOfAtoms(), noOfThreads, saveAtomsRecursively(), StreamSaveContext::savedPoints, savedPoints, and saveThread().
|
private |
Referenced by saveAtomGridInBox(), saveThread(), and saveToFile().
|
private |
Referenced by addAtom().
|
private |
Referenced by addAtom().
|
private |
Referenced by addAtom(), getAtomicGrid(), noOfAtoms(), saveAtomGridInBox(), and saveToFile().
|
private |
real Stream::boxSize |
Referenced by saveAtomsRecursively(), and saveToFile().
|
staticprivate |
Referenced by saveBatch().
|
protected |
Referenced by saveToFile().
|
private |
Referenced by saveAtomsRecursively(), and saveToFile().
|
private |
|
private |
Referenced by getPointCount(), saveAtomGridInBox(), saveAtomsRecursively(), saveToFile(), and ~Stream().
Dft::SparsePattern* Stream::sparsePattern |
Referenced by saveBatch().