PSCF v1.4.0
Pscf::Prdc Namespace Reference

Periodic fields and crystallography. More...

Namespaces

namespace  Cpu
 Fields and FFTs for periodic boundary conditions (CPU)
namespace  Cuda
 Fields, FFTs, and utilities for periodic boundary conditions (CUDA).

Classes

class  Basis
 Symmetry-adapted Fourier basis for pseudo-spectral SCFT. More...
class  BFieldComparison
 Comparator for fields in symmetry-adapted basis format. More...
struct  BWave
 Wave struct designed for use within Basis construction. More...
struct  BWaveMinComp
 Comparator for BWave objects, based on BWave::indicesMin. More...
struct  BWaveNormComp
 Comparator for BWave objects, based on BWave::sqNorm. More...
struct  BWaveStdComp
 Comparator for BWave objects, based on BWave::indicesStd. More...
class  Environment
 Base class mask and external field generator for variable-cell SCFT. More...
class  FieldGenerator
 Base class field generator for MixAndMatchEnv in variable-cell SCFT. More...
class  FieldState
 Record of a state of a periodic system (fields + unit cell). More...
class  FilmFieldGenExtBase
 Base class Field Generator for external fields in thin-film systems. More...
class  FilmFieldGenMaskBase
 Base class Field Generator for thin-film masks. More...
class  MixAndMatchEnv
 Environment that can mix and match field generators in variable-cell SCFT. More...
class  SpaceGroup
 Crystallographic space group. More...
class  SpaceSymmetry
 A SpaceSymmetry represents a crystallographic space group symmetry. More...
class  SymmetryGroup
 Class template for a group of elements. More...
class  UnitCell
 Base template for UnitCell<D> classes, D=1, 2 or 3. More...
class  UnitCell< 1 >
 1D crystal unit cell. More...
class  UnitCell< 2 >
 2D crystal unit cell. More...
class  UnitCell< 3 >
 3D crystal unit cell. More...
class  UnitCellBase
 Base class template for a crystallographic unit cell. More...

Functions

std::string makeGroupFileName (int D, std::string groupName)
 Generates the file name from a group name.
template<int D>
bool hasVariableAngle (typename UnitCell< D >::LatticeSystem lattice)
 Return true if lattice type has variable angle parameters.
template<int D>
int convertFullParamIdToReduced (const int fullId, const typename UnitCell< D >::LatticeSystem lattice)
 Convert full lattice parameter index to a reduced index.
template<int D>
int convertReducedParamIdToFull (const int reducedId, const typename UnitCell< D >::LatticeSystem lattice)
 Convert reduced lattice parameter index to a full index.
template<>
void replicateUnitCell (IntVec< 1 > const &replicas, UnitCell< 1 > const &cellIn, UnitCell< 1 > &cellOut)
 Create a replicated UnitCell<1>.
template<>
void replicateUnitCell (IntVec< 2 > const &replicas, UnitCell< 2 > const &cellIn, UnitCell< 2 > &cellOut)
 Create a replicated UnitCell<2>.
template<>
void replicateUnitCell (IntVec< 3 > const &replicas, UnitCell< 3 > const &cellIn, UnitCell< 3 > &cellOut)
 Create a replicated UnitCell<3>.
template<int D>
void replicateUnitCell (IntVec< D > const &replicas, UnitCell< D > const &cellIn, UnitCell< D > &cellOut)
 Create a replicated UnitCell<D> (base template).
template<>
void replicateUnitCell (IntVec< 1 > const &replicas, UnitCell< 1 > const &cellIn, UnitCell< 1 > &cellOut)
 Create a replicated UnitCell<1>.
template<>
void replicateUnitCell (IntVec< 2 > const &replicas, UnitCell< 2 > const &cellIn, UnitCell< 2 > &cellOut)
 Create a replicated UnitCell<2>.
template<>
void replicateUnitCell (IntVec< 3 > const &replicas, UnitCell< 3 > const &cellIn, UnitCell< 3 > &cellOut)
 Create a replicated UnitCell<3>.
template<int D>
IntVec< D > shiftToMinimum (IntVec< D > const &v, IntVec< D > const &d, UnitCell< D > const &cell)
 Returns minimum magnitude image of DFT wavevector.
template<int D>
void sortWaves (UnitCell< D > const &cell, IntVec< D > const &meshDimensions, std::vector< Sort::Item< double > > &items, GArray< Sort::Bunch > &bunches, double epsilon, bool isRealField)
 Sorted waves and identify bunches of equal magnitude.
template<int D>
std::ostream & operator<< (std::ostream &out, SpaceGroup< D > const &g)
 Output stream inserter operator for a SpaceGroup<D>.
template<int D>
std::istream & operator>> (std::istream &in, SpaceGroup< D > &g)
 Input stream extractor operator for a SpaceGroup<D>.
template<int D>
void readGroup (std::string groupName, SpaceGroup< D > &group)
 Open and read a group file.
template<int D>
void writeGroup (std::string filename, SpaceGroup< D > const &group)
 Open and write a group file.
template<int D>
bool operator== (const SpaceSymmetry< D > &A, const SpaceSymmetry< D > &B)
 Are two SpaceSymmetry objects equivalent?
template<int D>
bool operator!= (const SpaceSymmetry< D > &A, const SpaceSymmetry< D > &B)
 Are two SpaceSymmetry objects not equivalent?
template<int D>
SpaceSymmetry< D > operator* (const SpaceSymmetry< D > &A, const SpaceSymmetry< D > &B)
 Return the product A*B of two symmetry objects.
template<int D>
IntVec< D > operator* (const SpaceSymmetry< D > &S, const IntVec< D > &V)
 Return the IntVec<D> product S*V of a rotation matrix and an IntVec<D>.
template<int D>
IntVec< D > operator* (const IntVec< D > &V, const SpaceSymmetry< D > &S)
 Return the IntVec<D> product V*S of an IntVec<D> and a rotation matrix.
template<int D>
std::ostream & operator<< (std::ostream &out, const SpaceSymmetry< D > &A)
 Output stream inserter for a SpaceSymmetry<D>
template<int D>
std::istream & operator>> (std::istream &in, SpaceSymmetry< D > &A)
 Input stream extractor for a SpaceSymmetry<D>
template<int D>
std::istream & operator>> (std::istream &in, UnitCell< D > &cell)
 istream input extractor for a UnitCell<D>.
template<int D>
std::ostream & operator<< (std::ostream &out, UnitCell< D > const &cell)
 ostream output inserter for a UnitCell<D>.
template<class Archive, int D>
void serialize (Archive &ar, UnitCell< D > &cell, const unsigned int version)
 Serialize to/from an archive.
std::istream & operator>> (std::istream &in, UnitCell< 1 >::LatticeSystem &lattice)
 istream extractor for a 1D UnitCell<1>::LatticeSystem.
std::ostream & operator<< (std::ostream &out, UnitCell< 1 >::LatticeSystem lattice)
 ostream inserter for a 1D UnitCell<1>::LatticeSystem.
template<class Archive>
void serialize (Archive &ar, UnitCell< 1 >::LatticeSystem &lattice, const unsigned int version)
 Serialize a UnitCell<1>::LatticeSystem enumeration value.
std::istream & operator>> (std::istream &in, UnitCell< 2 >::LatticeSystem &lattice)
 istream extractor for a 2D UnitCell<2>::LatticeSystem.
std::ostream & operator<< (std::ostream &out, UnitCell< 2 >::LatticeSystem lattice)
 ostream inserter for a 2D UnitCell<2>::LatticeSystem.
template<class Archive>
void serialize (Archive &ar, UnitCell< 2 >::LatticeSystem &lattice, const unsigned int version)
 Serialize a UnitCell<2>::LatticeSystem enumeration value.
std::istream & operator>> (std::istream &in, UnitCell< 3 >::LatticeSystem &lattice)
 istream extractor for a 3D UnitCell<3>::LatticeSystem.
std::ostream & operator<< (std::ostream &out, UnitCell< 3 >::LatticeSystem lattice)
 ostream inserter for an 3D UnitCell<3>::LatticeSystem.
template<class Archive>
void serialize (Archive &ar, UnitCell< 3 >::LatticeSystem &lattice, const unsigned int version)
 Serialize a UnitCell<3>::LatticeSystem enumeration value.
template<int D>
void readUnitCellHeader (std::istream &in, UnitCell< D > &cell)
 Read UnitCell<D> from a field file header (fortran PSCF format).
template<int D>
void writeUnitCellHeader (std::ostream &out, UnitCell< D > const &cell)
 Write UnitCell<D> to a field file header (fortran PSCF format).
template<int D, class AT>
void readCFieldsData (std::istream &in, DArray< AT > &fields, IntVec< D > const &dimensions)
 Read data for an array of complex fields, with no header section.
template<int D, class AT>
void readCFieldData (std::istream &in, AT &field, IntVec< D > const &dimensions)
 Read data for a single complex field, with no header section.
template<int D, class AT, typename CT, typename RT>
void writeCFieldsData (std::ostream &out, DArray< AT > const &fields, IntVec< D > const &dimensions)
 Write data for an array of complex fields, with no header section.
template<int D, class AT, typename CT, typename RT>
void writeCFieldData (std::ostream &out, AT const &field, IntVec< D > const &dimensions)
 Write data for a single complex field, with no header section.
template<int D, class FT>
void allocateFields (DArray< FT > &fields, int n, IntVec< D > const &dimension)
 Allocate a DArray of fields.
template<int D, class FT>
void checkAllocateField (FT &field, IntVec< D > const &dimensions)
 Check allocation of a single field, allocate if necessary.
template<int D, class FT>
void checkAllocateFields (DArray< FT > &fields, int nMonomer, IntVec< D > const &dimensions)
 Check allocation of an array of fields, allocate if necessary.
template<int D, class FT>
void inspectFields (DArray< FT > const &fields, int &nMonomer, IntVec< D > &dimensions)
 Inspect dimensions of a DArray of fields, each of type FT.
template<class AT>
void allocateArrays (DArray< AT > &arrays, int n, int capacity)
 Allocate an array of arrays.
template<int D, class AT>
void checkAllocateArrays (DArray< AT > &arrays, int nMonomer, int capacity)
 Check allocation of a DArray of 1D arrays, allocate if necessary.
template<class AT>
void inspectArrays (DArray< AT > const &arrays, int &nMonomer, int &capacity)
 Inspect dimensions of a DArray of 1D arrays, each of type AT.
template<class OAT, class IAT>
void copyArrays (DArray< OAT > &out, DArray< IAT > const &in)
 Copy a DArray of 1D arrays.
template<int D>
void readFieldHeader (std::istream &in, int &ver1, int &ver2, UnitCell< D > &cell, std::string &groupName, int &nMonomer)
 Read common part of field header (fortran PSCF format).
template<int D>
void writeFieldHeader (std::ostream &out, int ver1, int ver2, UnitCell< D > const &cell, std::string const &groupName, int nMonomer)
 Write common part of field header (fortran PSCF format).
template<int D>
void readMeshDimensions (std::istream &in, IntVec< D > const &meshDimensions)
 Read mesh dimensions from a field file header.
template<int D>
void writeMeshDimensions (std::ostream &out, IntVec< D > const &meshDimensions)
 Write mesh dimensions to a field file header.
int readNBasis (std::istream &in)
 Read the number of basis functions from a basis field file header.
void writeNBasis (std::ostream &out, int nBasis)
 Write the number of basis functions to a basis field file header.
template<int D, class AT>
void readRGridData (std::istream &in, DArray< AT > &fields, int nMonomer, IntVec< D > const &dimensions)
 Read data for array of r-grid fields, with no header section.
template<int D, class AT>
void readRGridData (std::istream &in, AT &field, IntVec< D > const &dimensions)
 Read data for a single r-grid field, with no header section.
template<int D, class AT>
void writeRGridData (std::ostream &out, DArray< AT > const &fields, int nMonomer, IntVec< D > const &dimensions)
 Write data for array of r-grid fields, with no header section.
template<int D, class AT>
void writeRGridData (std::ostream &out, AT const &field, IntVec< D > const &dimensions)
 Write data for a single r-grid field, with no header section.
template<int D, class AT>
void readKGridData (std::istream &in, DArray< AT > &fields, int nMonomer, IntVec< D > const &dftDimensions)
 Read data for array of k-grid fields, with no header section.
template<int D, class AT>
void readKGridData (std::istream &in, AT &field, IntVec< D > const &dftDimensions)
 Read data for a single k-grid field, with no header section.
template<int D, class AT>
void writeKGridData (std::ostream &out, DArray< AT > const &fields, int nMonomer, IntVec< D > const &dftDimensions)
 Write data for array of k-grid fields, with no header section.
template<int D, class AT>
void writeKGridData (std::ostream &in, AT const &field, IntVec< D > const &dftDimensions)
 Write data for a single k-grid field, with no header section.
template<int D>
void readBasisData (std::istream &in, DArray< DArray< double > > &fields, UnitCell< D > const &unitCell, Mesh< D > const &mesh, Basis< D > const &basis, int nStarIn)
 Read an array of fields in basis format, without a header.
template<int D>
void readBasisData (std::istream &in, DArray< double > &field, UnitCell< D > const &unitCell, Mesh< D > const &mesh, Basis< D > const &basis, int nStarIn)
 Read data section of a single field in basis format.
template<int D>
void writeBasisData (std::ostream &out, DArray< DArray< double > > const &fields, Basis< D > const &basis)
 Write data section of an array of fields in basis format.
template<int D>
void writeBasisData (std::ostream &out, DArray< double > const &field, Basis< D > const &basis)
 Write data section of a single field in basis format.
template<int D, class AT>
void convertBasisToKGrid (DArray< double > const &components, AT &dft, Basis< D > const &basis, IntVec< D > const &dftDimensions)
 Convert a real field from symmetrized basis to Fourier grid.
template<int D, class AT>
void convertKGridToBasis (AT const &in, DArray< double > &out, Basis< D > const &basis, IntVec< D > const &dftDimensions, bool checkSymmetry=true, double epsilon=1.0e-8)
 Convert a real field from Fourier grid to symmetrized basis.
template<int D, class AT>
bool hasSymmetry (AT const &in, Basis< D > const &basis, IntVec< D > const &dftDimensions, double epsilon=1.0e-8, bool verbose=true)
 Check if a k-grid field has the declared space group symmetry.
template<int D, class AT>
void replicateUnitCell (std::ostream &out, DArray< AT > const &fields, IntVec< D > const &meshDimensions, UnitCell< D > const &unitCell, IntVec< D > const &replicas)
 Write r-grid fields in a replicated unit cell to std::ostream.
template<int D, class AT>
void expandRGridDimension (std::ostream &out, DArray< AT > const &fields, IntVec< D > const &meshDimensions, UnitCell< D > const &unitCell, int d, DArray< int > newGridDimensions)
 Expand the dimensionality of space from D to d.

Detailed Description

Periodic fields and crystallography.

Function Documentation

◆ hasVariableAngle()

template<int D>
bool Pscf::Prdc::hasVariableAngle ( typename UnitCell< D >::LatticeSystem lattice)

Return true if lattice type has variable angle parameters.

This base template is not defined, but explicit specializations are defined for D=1, 2, and 3.

Parameters
latticelattice system enumeration value
Returns
true iff lattice type has variable angles

References hasVariableAngle().

Referenced by Pscf::Prdc::Cpu::WaveList< D >::clearUnitCellData(), Pscf::Prdc::Cuda::WaveList< D >::clearUnitCellData(), and hasVariableAngle().

◆ serialize() [1/3]

template<class Archive>
void Pscf::Prdc::serialize ( Archive & ar,
UnitCell< 1 >::LatticeSystem & lattice,
const unsigned int version )
inline

Serialize a UnitCell<1>::LatticeSystem enumeration value.

Parameters
ararchive
latticeenumeration data to be serialized
versionversion id

Definition at line 235 of file UnitCell.h.

References Util::serializeEnum().

◆ operator<<()

std::ostream & Pscf::Prdc::operator<< ( std::ostream & out,
UnitCell< 2 >::LatticeSystem lattice )

ostream inserter for a 2D UnitCell<2>::LatticeSystem.

Parameters
outoutput stream
latticeUnitCell<2>::LatticeSystem to be written
Returns
modified output stream

Definition at line 248 of file UnitCell2.cpp.

References UTIL_THROW.

◆ serialize() [2/3]

template<class Archive>
void Pscf::Prdc::serialize ( Archive & ar,
UnitCell< 2 >::LatticeSystem & lattice,
const unsigned int version )
inline

Serialize a UnitCell<2>::LatticeSystem enumeration value.

Parameters
ararchive
latticeenumeration data to be serialized
versionversion id

Definition at line 377 of file UnitCell.h.

References Util::serializeEnum().

◆ serialize() [3/3]

template<class Archive>
void Pscf::Prdc::serialize ( Archive & ar,
UnitCell< 3 >::LatticeSystem & lattice,
const unsigned int version )
inline

Serialize a UnitCell<3>::LatticeSystem enumeration value.

Parameters
ararchive
latticeenumeration data to be serialized
versionversion id

Definition at line 538 of file UnitCell.h.

References Util::serializeEnum().

◆ allocateFields()

template<int D, class FT>
void Pscf::Prdc::allocateFields ( DArray< FT > & fields,
int n,
IntVec< D > const & dimension )

Allocate a DArray of fields.

Parameters
fieldsDArray of fields of type FT
nnumber of inner arrays
dimensionmesh dimensions

Definition at line 24 of file fieldCheck.tpp.

References Util::DArray< Data >::allocate(), Util::DArray< Data >::isAllocated(), and UTIL_CHECK.

Referenced by Pscf::Cp::FieldIo< D, CFT, FFT >::convertKGridToRGrid(), and Pscf::Cp::FieldIo< D, CFT, FFT >::convertRGridToKGrid().

◆ allocateArrays()

template<class AT>
void Pscf::Prdc::allocateArrays ( DArray< AT > & arrays,
int n,
int capacity )