MADNESS 0.10.1
Public Member Functions | Private Attributes | List of all members
madness::NuclearDensityFunctor Class Reference

Default functor for evaluating nuclear density at a given point in space. More...

#include <potentialmanager.h>

Inheritance diagram for madness::NuclearDensityFunctor:
Inheritance graph
[legend]
Collaboration diagram for madness::NuclearDensityFunctor:
Collaboration graph
[legend]

Public Member Functions

 NuclearDensityFunctor (const Molecule &atoms, const BoundaryConditions< 3 > &bc=FunctionDefaults< 3 >::get_bc(), const Tensor< double > &cell=FunctionDefaults< 3 >::get_cell(), int special_level=15, double rscale=1.0)
 Constructs a NuclearDensityFunctor for evaluating nuclear densities.
 
double operator() (const coord_3d &x) const final
 
NuclearDensityFunctorset_rscale (double rscale)
 
Level special_level () const final
 Override this to change the minimum level of refinement at special points (default is 6)
 
std::vector< coord_3dspecial_points () const final
 Override this to return list of special points to be refined more deeply.
 
- Public Member Functions inherited from madness::FunctionFunctorInterface< double, 3 >
 FunctionFunctorInterface ()
 
virtual ~FunctionFunctorInterface ()
 
virtual coeffT coeff (const keyT &) const
 
virtual void operator() (const Vector< double *, 1 > &xvals, double *fvals, int npts) const
 
virtual void operator() (const Vector< double *, 2 > &xvals, double *fvals, int npts) const
 
virtual void operator() (const Vector< double *, 3 > &xvals, double *fvals, int npts) const
 
virtual void operator() (const Vector< double *, 4 > &xvals, double *fvals, int npts) const
 
virtual void operator() (const Vector< double *, 5 > &xvals, double *fvals, int npts) const
 
virtual void operator() (const Vector< double *, 6 > &xvals, double *fvals, int npts) const
 
virtual double operator() (const Vector< double, NDIM > &x) const=0
 You should implement this to return f(x)
 
virtual bool provides_coeff () const
 does this functor directly provide sum coefficients? or only function values?
 
virtual bool screened (const Vector< double, NDIM > &c1, const Vector< double, NDIM > &c2) const
 Can we screen this function based on the bounding box information?
 
void set_length_scale (double lo)
 adapt the special level to resolve the smallest length scale
 
virtual bool supports_vectorized () const
 Does the interface support a vectorized operator()?
 
virtual coeffT values (const keyT &key, const Tensor< double > &tensor) const
 

Private Attributes

const Moleculeatoms
 
BoundaryConditions< 3 > bc_
 
Tensor< double > cell
 
int maxR
 
double rscale = 1.0
 
int special_level_ = 15
 
std::vector< coord_3dspecial_points_
 

Additional Inherited Members

- Public Types inherited from madness::FunctionFunctorInterface< double, 3 >
typedef GenTensor< double > coeffT
 
typedef Key< NDIMkeyT
 
typedef double value_type
 
- Public Attributes inherited from madness::FunctionFunctorInterface< double, 3 >
Level special_level_
 

Detailed Description

Default functor for evaluating nuclear density at a given point in space.

This class implements a functor that computes the nuclear density for a given molecule, supporting both open and periodic boundary conditions. It can be used to evaluate the nuclear density at any point in 3D space, and provides special points and refinement level information for adaptive algorithms.

Constructor & Destructor Documentation

◆ NuclearDensityFunctor()

madness::NuclearDensityFunctor::NuclearDensityFunctor ( const Molecule atoms,
const BoundaryConditions< 3 > &  bc = FunctionDefaults<3>::get_bc(),
const Tensor< double > &  cell = FunctionDefaults<3>::get_cell(),
int  special_level = 15,
double  rscale = 1.0 
)

Constructs a NuclearDensityFunctor for evaluating nuclear densities.

This constructor can handle both open and periodic boundary conditions.

Parameters
atomsReference to the molecule containing the atoms.
bcBoundary conditions for the simulation (default: open boundaries).
cellSimulation cell tensor (unit cell, if periodic; default: identity).
special_levelThe initial refinement level for special points (default: 15).
rscaleScaling factor for the nuclear radius. Setting rscale > 1 increases the effective size of a nucleus by this factor (i.e., rcut is divided by rscale).

References bc_, cell, madness::BaseTensor::dim(), MADNESS_ASSERT, maxR, and madness::BaseTensor::ndim().

Member Function Documentation

◆ operator()()

double madness::NuclearDensityFunctor::operator() ( const coord_3d x) const
final

◆ set_rscale()

NuclearDensityFunctor & madness::NuclearDensityFunctor::set_rscale ( double  rscale)

References rscale.

◆ special_level()

Level madness::NuclearDensityFunctor::special_level ( ) const
finalvirtual

Override this to change the minimum level of refinement at special points (default is 6)

Reimplemented from madness::FunctionFunctorInterface< double, 3 >.

References special_level_.

◆ special_points()

std::vector< coord_3d > madness::NuclearDensityFunctor::special_points ( ) const
finalvirtual

Override this to return list of special points to be refined more deeply.

Reimplemented from madness::FunctionFunctorInterface< double, 3 >.

References special_points_.

Member Data Documentation

◆ atoms

const Molecule& madness::NuclearDensityFunctor::atoms
private

Referenced by operator()().

◆ bc_

BoundaryConditions<3> madness::NuclearDensityFunctor::bc_
private

Referenced by NuclearDensityFunctor().

◆ cell

Tensor<double> madness::NuclearDensityFunctor::cell
private

◆ maxR

int madness::NuclearDensityFunctor::maxR
private

◆ rscale

double madness::NuclearDensityFunctor::rscale = 1.0
private

Referenced by operator()(), and set_rscale().

◆ special_level_

int madness::NuclearDensityFunctor::special_level_ = 15
private

◆ special_points_

std::vector<coord_3d> madness::NuclearDensityFunctor::special_points_
private

Referenced by special_points().


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