MADNESS  0.10.1
molecular_functors.h
Go to the documentation of this file.
1 //
2 // Created by Florian Bischoff on 5/25/22.
3 //
4 #ifndef MADNESS_MOLECULAR_FUNCTORS_H
5 #define MADNESS_MOLECULAR_FUNCTORS_H
6 
9 #include<madness/mra/mra.h>
11 namespace madchem {
12 
13 
14 
16 private:
19 public:
22 
23  double operator()(const madness::coord_3d& x) const {
24  return aobasis.eval_guess_density(molecule, x[0], x[1], x[2]);
25  }
26 
27  std::vector<madness::coord_3d> special_points() const {return molecule.get_all_coords_vec();}
28 };
29 
30 
32 private:
34 
35 public:
37  : aofunc(aofunc)
38  {}
39 
40  double operator()(const madness::coord_3d& x) const {
41  return aofunc(x[0], x[1], x[2]);
42  }
43 
44  std::vector<madness::coord_3d> special_points() const {
45  return std::vector<madness::coord_3d>(1,aofunc.get_coords_vec());
46  }
47 };
48 
49 
51 private:
53  const int iatom;
54 
55 public:
58 
59  double operator()(const madness::coord_3d& x) const {
60  const madness::Atom& atom=molecule.get_atom(iatom);
61  const madness::coord_3d coord={atom.x,atom.y,atom.z};
62  double r = (x-coord).normf();
65  }
66 
67  std::vector<madness::coord_3d> special_points() const {
68  return std::vector<madness::coord_3d>(1,molecule.get_atom(iatom).get_coords());
69  }
70 };
71 
73 private:
75  const int atom;
76  const int axis;
77 
78 public:
81  {}
82 
83  double operator()(const madness::coord_3d& x) const {
84  return molecule.nuclear_attraction_potential_derivative(atom, axis, x[0], x[1], x[2]);
85  }
86 
87  std::vector<madness::coord_3d> special_points() const {
88  return std::vector<madness::coord_3d>(1,molecule.get_atom(atom).get_coords());
89  }
90 };
91 
93 private:
95  const int atom;
96  const int iaxis, jaxis;
97 
98 public:
100  int iaxis, int jaxis)
102  {}
103 
104  double operator()(const madness::coord_3d& x) const {
106  iaxis, jaxis, x[0], x[1], x[2]);
107  }
108 
109  std::vector<madness::coord_3d> special_points() const {
110  return std::vector<madness::coord_3d>(1,molecule.get_atom(atom).get_coords());
111  }
112 };
113 
114 
116 private:
118  const int atom;
119  const int axis;
120  std::vector<madness::coord_3d> specialpt;
121 public:
123  : molecule(molecule), atom(atom), axis(axis) {}
124 
125  double operator()(const madness::coord_3d& r) const {
126  return molecule.core_potential_derivative(atom, axis, r[0], r[1], r[2]);
127  }
128 };
129 
130 
131 
132 }
133 #endif //MADNESS_MOLECULAR_FUNCTORS_H
Definition: molecular_functors.h:50
std::vector< madness::coord_3d > special_points() const
Override this to return list of special points to be refined more deeply.
Definition: molecular_functors.h:67
const madness::Molecule & molecule
Definition: molecular_functors.h:52
const int iatom
Definition: molecular_functors.h:53
AtomicAttractionFunctor(const madness::Molecule &molecule, int iatom)
Definition: molecular_functors.h:56
double operator()(const madness::coord_3d &x) const
Definition: molecular_functors.h:59
Definition: molecular_functors.h:31
AtomicBasisFunctor(const madness::AtomicBasisFunction &aofunc)
Definition: molecular_functors.h:36
std::vector< madness::coord_3d > special_points() const
Override this to return list of special points to be refined more deeply.
Definition: molecular_functors.h:44
double operator()(const madness::coord_3d &x) const
Definition: molecular_functors.h:40
const madness::AtomicBasisFunction aofunc
Definition: molecular_functors.h:33
Definition: molecular_functors.h:115
CorePotentialDerivativeFunctor(const madness::Molecule &molecule, int atom, int axis)
Definition: molecular_functors.h:122
double operator()(const madness::coord_3d &r) const
Definition: molecular_functors.h:125
const int atom
Definition: molecular_functors.h:118
const int axis
Definition: molecular_functors.h:119
std::vector< madness::coord_3d > specialpt
Definition: molecular_functors.h:120
const madness::Molecule & molecule
Definition: molecular_functors.h:117
Definition: molecular_functors.h:72
double operator()(const madness::coord_3d &x) const
Definition: molecular_functors.h:83
const int atom
Definition: molecular_functors.h:75
const madness::Molecule & molecule
Definition: molecular_functors.h:74
const int axis
Definition: molecular_functors.h:76
std::vector< madness::coord_3d > special_points() const
Override this to return list of special points to be refined more deeply.
Definition: molecular_functors.h:87
MolecularDerivativeFunctor(const madness::Molecule &molecule, int atom, int axis)
Definition: molecular_functors.h:79
Definition: molecular_functors.h:15
const madness::Molecule & molecule
Definition: molecular_functors.h:17
const madness::AtomicBasisSet & aobasis
Definition: molecular_functors.h:18
std::vector< madness::coord_3d > special_points() const
Override this to return list of special points to be refined more deeply.
Definition: molecular_functors.h:27
double operator()(const madness::coord_3d &x) const
Definition: molecular_functors.h:23
MolecularGuessDensityFunctor(const madness::Molecule &molecule, const madness::AtomicBasisSet &aobasis)
Definition: molecular_functors.h:20
Definition: molecular_functors.h:92
double operator()(const madness::coord_3d &x) const
Definition: molecular_functors.h:104
const int jaxis
Definition: molecular_functors.h:96
MolecularSecondDerivativeFunctor(const madness::Molecule &molecule, int atom, int iaxis, int jaxis)
Definition: molecular_functors.h:99
const int atom
Definition: molecular_functors.h:95
const int iaxis
Definition: molecular_functors.h:96
const madness::Molecule & molecule
Definition: molecular_functors.h:94
std::vector< madness::coord_3d > special_points() const
Override this to return list of special points to be refined more deeply.
Definition: molecular_functors.h:109
Definition: molecule.h:58
double y
Definition: molecule.h:60
double x
Definition: molecule.h:60
double z
Definition: molecule.h:60
madness::Vector< double, 3 > get_coords() const
Definition: molecule.h:99
double q
Coordinates and charge in atomic units.
Definition: molecule.h:60
Used to represent one basis function from a shell on a specific center.
Definition: madness/chem/molecularbasis.h:405
madness::Vector< double, 3 > get_coords_vec() const
Definition: madness/chem/molecularbasis.h:455
Contracted Gaussian basis.
Definition: madness/chem/molecularbasis.h:465
double eval_guess_density(const Molecule &molecule, double x, double y, double z) const
Evaluates the guess density.
Definition: madness/chem/molecularbasis.h:642
Abstract base class interface required for functors used as input to Functions.
Definition: function_interface.h:68
Definition: molecule.h:124
std::vector< madness::Vector< double, 3 > > get_all_coords_vec() const
Definition: molecule.cc:408
const Atom & get_atom(unsigned int i) const
Definition: molecule.cc:447
double nuclear_attraction_potential_second_derivative(int atom, int iaxis, int jaxis, double x, double y, double z) const
the second derivative of the (smoothed) nuclear potential Z/r
Definition: molecule.cc:1039
double core_potential_derivative(int atom, int axis, double x, double y, double z) const
Definition: molecule.cc:1131
double nuclear_attraction_potential_derivative(int atom, int axis, double x, double y, double z) const
Definition: molecule.cc:1008
std::vector< double > get_rcut() const
Definition: molecule.h:415
Provides typedefs to hide use of templates and to increase interoperability.
Main include file for MADNESS and defines Function interface.
Definition: molecular_functors.h:11
double smoothed_potential(double r)
Smoothed 1/r potential.
Definition: atomutil.cc:220