28#ifndef _chemistry_qc_wfn_density_h
29#define _chemistry_qc_wfn_density_h
31#include <math/isosurf/volume.h>
32#include <chemistry/qc/wfn/wfn.h>
33#include <chemistry/qc/basis/extent.h>
34#include <chemistry/molecule/molrender.h>
35#include <chemistry/molecule/molecule.h>
36#include <math/mmisc/grid.h>
50 virtual void boundingbox(
double valuemin,
94 bool need_hessian_, need_gradient_;
95 bool need_basis_hessian_, need_basis_gradient_;
97 bool using_shared_data_;
100 virtual void init_common_data();
103 virtual void init_scratch_data();
104 void compute_basis_values(
const SCVector3&r);
105 void compute_spin_density(
const double *RESTRICT dmat,
106 double *RESTRICT rho,
107 double *RESTRICT grad,
108 double *RESTRICT hess);
114 enum {
X=0,
Y=1, Z=2};
116 enum {XX=0, YX=1, YY=2, ZX=3, ZY=4, ZZ=5};
118 BatchElectronDensity(
const Ref<KeyVal>&);
119 BatchElectronDensity(
const Ref<GaussianBasisSet> &basis,
120 const Ref<Integral> &integral,
121 double accuracy=DBL_EPSILON);
122 BatchElectronDensity(
const Ref<Wavefunction> &wfn,
123 double accuracy=DBL_EPSILON);
135 bool reference_parent_data=
false);
148 double *alpha_density,
149 double *alpha_density_grad,
150 double *alpha_density_hessian,
151 double *beta_density,
152 double *beta_density_grad,
153 double *beta_density_hessian);
202 {
return (spin_polarized_?beta_dmat_:alpha_dmat_); }
203 int ncontrib() {
return ncontrib_; }
204 int *contrib() {
return contrib_; }
205 int ncontrib_bf() {
return ncontrib_bf_; }
206 int *contrib_bf() {
return contrib_bf_; }
207 double *bs_values() {
return bs_values_; }
208 double *bsg_values() {
return bsg_values_; }
209 double *bsh_values() {
return bsh_values_; }
213 void set_need_basis_hessian(
bool b) { need_basis_hessian_ = b; }
221 double df_alpha(
double alpha,
double beta);
222 double df_beta(
double alpha,
double beta);
223 double df_sum(
double alpha,
double beta);
224 double df_spin(
double alpha,
double beta);
This a more highly optimized than ElectronDensity since everything is precomputed.
Definition density.h:60
virtual void init()
This is called to finish initialization of the object.
void set_linear_scaling(bool b)
Turn linear scaling algorithm on/off.
Definition density.h:181
BatchElectronDensity(const Ref< BatchElectronDensity > &d, bool reference_parent_data=false)
This will construct copies of this.
virtual void set_densities(const RefSymmSCMatrix &aden, const RefSymmSCMatrix &bden=0)
This will fill in the internal copies of the density matrices with new values.
bool spin_polarized() const
Return true if the densities are spin polarized.
Definition density.h:191
double * alpha_density_matrix()
Return the alpha density matrix.
Definition density.h:199
virtual void compute()
Recompute at least the results that have compute true and are not already computed.
void set_accuracy(double a)
Sets the accuracy.
Definition density.h:184
double * beta_density_matrix()
Return the beta density matrix.
Definition density.h:201
void set_need_basis_gradient(bool b)
To ensure that that the basis functions gradients are computed, use this.
Definition density.h:212
virtual void set_densities(const Ref< Wavefunction > &wfn)
Use the given Wavefunction object to set the electron density matrices.
void compute_density(const SCVector3 &r, double *alpha_density, double *alpha_density_grad, double *alpha_density_hessian, double *beta_density, double *beta_density_grad, double *beta_density_hessian)
This is a alternate to the Volume interface that avoids some of the overhead of that interface.
void clear()
This will cause all stratch storage to be released.
virtual void boundingbox(double valuemin, double valuemax, SCVector3 &p1, SCVector3 &p2)
Returns the bounding box.
void set_use_dmat_bound(bool b)
Turn use of density matrix bounds on/off.
Definition density.h:187
This is a Volume that computes the electron density.
Definition density.h:42
virtual void compute()
Recompute at least the results that have compute true and are not already computed.
This holds scratch data needed to compute basis function values.
Definition gaussbas.h:261
Definition molrender.h:77
The RefSymmSCMatrix class is a smart pointer to an SCSymmSCMatrix specialization.
Definition matrix.h:265
A template class that maintains references counts.
Definition ref.h:361
a 3-element version of SCVector
Definition vector3.h:44
A Volume is a Function of three variables.
Definition volume.h:38
The WriteElectronDensity class writes the electron density at user defined grid points to the standar...
Definition density.h:219
void initialize()
Prepares some pre-caculated values before the repetitive grid calculations are perfomed.
double calculate_value(SCVector3 point)
Returns the value of the scalar function at the given coordinate.
Ref< Molecule > get_molecule()
Returns the molecule around which the grid values are calculated.
void label(char *buffer)
A label that identifies the scalar function evaluated at the grid points, is written to the buffer ar...
WriteElectronDensity(const Ref< KeyVal > &)
The KeyVal constructor.
The abstract WriteGrid class provides an interface for writing the value of a scalar function evaluat...
Definition grid.h:85
Contains all MPQC code up to version 3.
Definition mpqcin.h:14