JDFTx  1.4.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Coulomb Class Referenceabstract

Abstract base class for the (optionally truncated) Coulomb interaction. More...

#include <Coulomb.h>

Inheritance diagram for Coulomb:
CoulombCylindrical CoulombIsolated CoulombPeriodic CoulombSlab CoulombSpherical CoulombWire

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 &params)
 
void initExchangeEval ()
 
virtual ScalarFieldTilde apply (ScalarFieldTilde &&) const =0
 
virtual std::shared_ptr< EwaldcreateEwald (matrix3<> R, size_t nAtoms) const =0
 

Protected Attributes

const CoulombParamsparams
 
const GridInfogInfo
 embedding grid, which is 2x larger in truncated directions if params.embed == true
 
std::shared_ptr< Ewaldewald
 
std::map< double,
std::shared_ptr< struct
ExchangeEval > > 
exchangeEval
 

Friends

struct ExchangeEval
 
struct FluidSolver
 
struct SlabEpsilon
 
struct ChargedDefect
 

Detailed Description

Abstract base class for the (optionally truncated) Coulomb interaction.

Member Enumeration Documentation

Special point-charge handling mode when using embedded truncation.

Enumerator
PointChargeNone 

smooth charge distributions, no handling required

PointChargeLeft 

point charge distribution on left end of operator (use for pointCharge^ K smooth)

PointChargeRight 

point charge distribution on right end of operator (use for smooth^ K pointCharge, hermitian conjugate of PointChargeLeft)

Member Function Documentation

virtual ScalarFieldTilde Coulomb::apply ( ScalarFieldTilde &&  ) const
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.

virtual std::shared_ptr<Ewald> Coulomb::createEwald ( matrix3<>  R,
size_t  nAtoms 
) const
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)

void Coulomb::initExchangeEval ( )
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)


The documentation for this class was generated from the following file: