MADNESS 0.10.1
|
Switches between positive values Vint
and Vext
with special log derivative.
More...
#include <molecularmask.h>
Public Member Functions | |
MolecularVolumeExponentialSwitch (double sigma, double Vint, double Vext, const std::vector< double > atomic_radii, const std::vector< madness::coord_3d > atomic_coords) | |
virtual double | operator() (const madness::coord_3d &r) const |
std::vector< madness::Vector< double, 3 > > | special_points () const |
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 Level | special_level () |
Override this change level refinement for special points (default is 6) | |
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 MolecularVolumeComplementMask | cmask |
const double | fac |
const double | Vext |
const double | Vint |
Additional Inherited Members | |
Public Types inherited from madness::FunctionFunctorInterface< double, 3 > | |
typedef GenTensor< double > | coeffT |
typedef Key< NDIM > | keyT |
typedef double | value_type |
Public Attributes inherited from madness::FunctionFunctorInterface< double, 3 > | |
Level | special_level_ |
Switches between positive values Vint
and Vext
with special log derivative.
Switches between positive values Vint
on the interior and Vext
on the interior. It has value
where is the regular volume mask provided by MolecularVolumeMask, and is its complement. Its log-derivative is precisely located in the surface with value
with already being computed by MolecularVolumeMaskGrad. The advantage of this is that if is big, the log derivative of the regular volume mask ( ) is displaced from the surface (perhaps by multiple values of ). This leads to slow convergence w.r.t and potential inaccuracies depending how the numerical representation is computed. The surface charge in dielectric problems is controlled by and hence the dielectric should employ this form of the switch.
|
inline |
|
inlinevirtual |
|
inlinevirtual |
Override this to return list of special points to be refined more deeply.
Reimplemented from madness::FunctionFunctorInterface< double, 3 >.
References cmask, and MolecularVolumeComplementMask::special_points().
|
private |
Referenced by operator()(), and special_points().
|
private |
Referenced by operator()().
|
private |
Referenced by MolecularVolumeExponentialSwitch(), and operator()().
|
private |
Referenced by MolecularVolumeExponentialSwitch(), and operator()().