Abstract base class for the (optionally truncated) Coulomb interaction. More...
#include <Coulomb.h>
Public Types | |
enum | PointChargeMode { PointChargeNone, PointChargeLeft, PointChargeRight } |
Special point-charge handling mode when using embedded truncation. More... | |
Public Member Functions | |
ScalarFieldTilde | operator() (ScalarFieldTilde &&, PointChargeMode pointChargeMode=PointChargeNone) const |
ScalarFieldTilde | operator() (const ScalarFieldTilde &, PointChargeMode pointChargeMode=PointChargeNone) const |
Apply Coulomb kernel (parameters same as destructible input version above) | |
double | energyAndGrad (std::vector< Atom > &atoms) const |
ScalarField | getEfieldPotential () const |
Generate the potential due to the Efield (if any) (Requires embedded truncation) | |
complexScalarFieldTilde | operator() (complexScalarFieldTilde &&, vector3<> kDiff, double omega) const |
complexScalarFieldTilde | operator() (const complexScalarFieldTilde &, vector3<> kDiff, double omega) const |
Protected Member Functions | |
Coulomb (const GridInfo &gInfoOrig, const CoulombParams ¶ms) | |
void | initExchangeEval () |
virtual ScalarFieldTilde | apply (ScalarFieldTilde &&) const =0 |
virtual std::shared_ptr< Ewald > | createEwald (matrix3<> R, size_t nAtoms) const =0 |
Protected Attributes | |
const CoulombParams & | params |
const GridInfo & | gInfo |
embedding grid, which is 2x larger in truncated directions if params.embed == true | |
std::shared_ptr< Ewald > | ewald |
std::map< double, std::shared_ptr< struct ExchangeEval > > | exchangeEval |
Friends | |
struct | ExchangeEval |
struct | FluidSolver |
struct | SlabEpsilon |
struct | ChargedDefect |
Abstract base class for the (optionally truncated) Coulomb interaction.
Special point-charge handling mode when using embedded truncation.
|
protectedpure virtual |
Apply the Coulomb operator (on optionally embedded grid) with appropriate truncation Embedding is handled in base class wrapper functions above
Implemented in CoulombSpherical, CoulombCylindrical, CoulombIsolated, CoulombWire, CoulombPeriodic, and CoulombSlab.
|
protectedpure virtual |
Each implementation must create and return the corresponding Ewald evaluator for the supplied lattice vectors R which may correspond to a supercell of gInfo.R along the periodic directions (the truncated directions will be identical) The number of atoms may be used for choosing the optimum gaussian width sigma
Implemented in CoulombSpherical, CoulombCylindrical, CoulombIsolated, CoulombWire, CoulombPeriodic, and CoulombSlab.
double Coulomb::energyAndGrad | ( | std::vector< Atom > & | atoms | ) | const |
Create the appropriate Ewald class, if required, and call Ewald::energyAndGrad Includes interaction with Efield, if present (Requires embedded truncation)
|
protected |
Call to initialize exchangeEval if exact exchange is required NOTE: this must be called from the end of each derived class constructor
ScalarFieldTilde Coulomb::operator() | ( | ScalarFieldTilde && | , |
PointChargeMode | pointChargeMode = PointChargeNone |
||
) | const |
Apply Coulomb kernel (destructible input). Pass appropriate pointChargeMode when applying to nucelar densities for special handling of high-frequency components necessary in the non-translationally invariant scheme i.e. when params.embed==true
complexScalarFieldTilde Coulomb::operator() | ( | complexScalarFieldTilde && | , |
vector3<> | kDiff, | ||
double | omega | ||
) | const |
Apply regularized coulomb kernel for exchange integral with k-point difference kDiff and optionally screened with range parameter omega (destructible input)
complexScalarFieldTilde Coulomb::operator() | ( | const complexScalarFieldTilde & | , |
vector3<> | kDiff, | ||
double | omega | ||
) | const |
Apply regularized coulomb kernel for exchange integral with k-point difference kDiff and optionally screened with range parameter omega (destructible input)