40#ifndef MADNESS_CHEM_SCF_H__INCLUDED
41#define MADNESS_CHEM_SCF_H__INCLUDED
62#include <madness/tensor/tensor_json.hpp>
67typedef std::shared_ptr<WorldDCPmapInterface<Key<3> > >
pmapT;
69typedef std::shared_ptr<FunctionFunctorInterface<double, 3> >
functorT;
71typedef std::vector<functionT>
vecfuncT;
83template<
typename T,
int NDIM>
91 if (key.
level() < 1) {
112 x = (x * x * (3. - 2. * x));
119 double x = rsim[0], y = rsim[1], z = rsim[2];
120 double lo = 0.0625, hi = 1.0 -
lo, result = 1.0;
121 double rlo = 1.0 /
lo;
124 result *=
mask1(x * rlo);
126 result *=
mask1((1.0 - x) * rlo);
128 result *=
mask1(y * rlo);
130 result *=
mask1((1.0 - y) * rlo);
132 result *=
mask1(z * rlo);
134 result *=
mask1((1.0 - z) * rlo);
140class DipoleFunctor :
public FunctionFunctorInterface<double, 3> {
162 double xi = 1.0, yj = 1.0, zk = 1.0;
163 for (
int p = 0;
p <
i; ++
p)
xi *= r[0];
164 for (
int p = 0;
p <
j; ++
p) yj *= r[1];
165 for (
int p = 0;
p <
k; ++
p) zk *= r[2];
172 std::map<std::string, std::vector<double>>
e_data;
184 void add_data(std::map<std::string, double> values);
222 std::vector<std::shared_ptr<real_derivative_3d> >
gradop;
232 work_dir = std::filesystem::current_path();
242 print(
"The moldft code computes Hartree-Fock and DFT energies and gradients, It is the fastest code in MADNESS");
243 print(
"and considered the reference implementation. No nuclear correlation factor can be used");
244 print(
"SCF orbitals are the basis for post-SCF calculations like");
245 print(
"excitation energies (cis), correlation energies (cc2), local potentials (oep), etc\n\n");
246 print(
"You can print all available calculation parameters by running\n");
247 print(
"moldft --print_parameters\n");
248 print(
"You can perform a simple calculation by running\n");
249 print(
"moldft --geometry=h2o.xyz\n");
250 print(
"provided you have an xyz file in your directory.");
256 print(
"default parameters for the moldft program are");
258 print(
"\n\nthe molecular geometry must be specified in a separate block:");
264 template<std::
size_t NDIM>
270 else if (
thresh >= 0.9e-4)
272 else if (
thresh >= 0.9e-6)
274 else if (
thresh >= 0.9e-8)
300 gradop = gradient_operator<double, 3>(world);
304 for (
int i = 0; i < 3; ++i) (*
gradop[i]).set_bspline1();
306 for (
int i = 0; i < 3; ++i) (*
gradop[i]).set_ble1();
359 const tensorT& occ,
const int nmo)
const;
400 const functionT& vlocal,
double& exc,
double& enl,
int ispin);
411 double& maxabsval)
const;
418 double& ekinetic)
const;
442 const double thresh_degenerate)
const;
466 int lo,
int nfunc,
double trantol)
const;
469 int lo,
int nfunc,
double trantol)
const;
475 double& bsh_residual,
double& update_residual);
487 vecfuncT& mo_new, std::string spin)
const;
503 const tensorT &dipole_T)
const;
519 std::string
name()
const {
return "Molecularenerg"; }
526 double xsq = x.
sumsq();
534 print(
"thresh changed from protocol[0], resetting to protocol[0]");
568 int nvalpha_start, nv_old;
571 if (proto == 0 && nvalpha > 0) {
574 nvalpha_start = nvalpha;
577 nv_old = nvalpha_start;
579 for (
int nv = nvalpha_start; nv >= nvalpha; nv -= nvalpha) {
581 if (nv > 0 &&
world.
rank() == 0) std::cout <<
"Running with " << nv <<
" virtual states" << std::endl;
586 if (nvbeta == nvalpha) {
648 rho.
gaxpy(1.0, brho, 1.0);
661 rho.
gaxpy(1.0, brho, 1.0);
668 nlohmann::json j = {};
669 vec_pair_ints int_vals;
670 vec_pair_T<double> double_vals;
671 vec_pair_tensor_T<double> double_tensor_vals;
675 nlohmann::json calc_precision={ };
684 int_vals.push_back({
"calcinfo_nmo",
param.nmo_alpha() +
param.nmo_beta()});
685 int_vals.push_back({
"calcinfo_nalpha",
param.nalpha()});
686 int_vals.push_back({
"calcinfo_nbeta",
param.nbeta()});
693 double_tensor_vals.push_back({
"scf_eigenvalues_a",
calc.
aeps});
694 if (
param.nbeta() != 0 && !
param.spin_restricted()) {
695 double_tensor_vals.push_back({
"scf_eigenvalues_b",
calc.
beps});
698 to_json(j, double_tensor_vals);
702 j[
"precision"]=calc_precision;
703 j[
"molecule"]=mol_json;
void to_json(json &j, const FunctionIOData< T, NDIM > &p)
Definition FunctionIO.h:274
Operators for the molecular HF and DFT code.
A MADNESS functor to compute either x, y, or z.
Definition preal.cc:115
Contracted Gaussian basis.
Definition madness/chem/molecularbasis.h:469
void read_file(std::string filename)
read the atomic basis set from file
Definition molecularbasis.cc:119
DipoleFunctor(int axis)
Definition SCF.h:144
double operator()(const coordT &x) const
Definition SCF.h:146
const int axis
Definition solver.h:167
Manages data associated with a row/column/block distributed array.
Definition distributed_matrix.h:388
FunctionDefaults holds default paramaters as static class members.
Definition funcdefaults.h:100
static int get_k()
Returns the default wavelet order.
Definition funcdefaults.h:164
static void set_apply_randomize(bool value)
Sets the random load balancing for integral operators flag.
Definition funcdefaults.h:295
static void set_thresh(double value)
Sets the default threshold.
Definition funcdefaults.h:184
static void set_k(int value)
Sets the default wavelet order.
Definition funcdefaults.h:171
static const double & get_thresh()
Returns the default threshold.
Definition funcdefaults.h:177
static void set_autorefine(bool value)
Sets the default adaptive autorefinement flag.
Definition funcdefaults.h:261
static void set_project_randomize(bool value)
Sets the random load balancing for projection flag.
Definition funcdefaults.h:306
static void set_initial_level(int value)
Sets the default initial projection level.
Definition funcdefaults.h:201
static void set_cubic_cell(double lo, double hi)
Sets the user cell to be cubic with each dimension having range [lo,hi].
Definition funcdefaults.h:374
static void set_refine(bool value)
Sets the default adaptive refinement flag.
Definition funcdefaults.h:249
FunctionFactory implements the named-parameter idiom for Function.
Definition function_factory.h:86
Abstract base class interface required for functors used as input to Functions.
Definition function_interface.h:68
FunctionNode holds the coefficients, etc., at each node of the 2^NDIM-tree.
Definition funcimpl.h:127
bool is_leaf() const
Returns true if this does not have children.
Definition funcimpl.h:213
A multiresolution adaptive numerical function.
Definition mra.h:139
T trace() const
Returns global value of int(f(x),x) ... global comm required.
Definition mra.h:1244
Function< T, NDIM > & gaxpy(const T &alpha, const Function< Q, NDIM > &other, const R &beta, bool fence=true)
Inplace, general bi-linear operation in wavelet basis. No communication except for optional fence.
Definition mra.h:1115
Key is the index for a node of the 2^NDIM-tree.
Definition key.h:70
Level level() const
Definition key.h:169
bool selftest()
Definition SCF.h:521
bool provides_gradient() const
Override this to return true if the derivative is implemented.
Definition SCF.h:523
double value(const Tensor< double > &x)
Should return the value of the objective function.
Definition SCF.h:525
World & world
Definition SCF.h:511
SCF & calc
Definition SCF.h:512
double coords_sum
Definition SCF.h:513
void output_calc_info_schema()
Definition SCF.h:667
madness::Tensor< double > gradient(const Tensor< double > &x)
Should return the derivative of the function.
Definition SCF.h:641
void energy_and_gradient(const Molecule &molecule, double &energy, Tensor< double > &gradient)
Definition SCF.h:654
std::string name() const
Definition SCF.h:519
MolecularEnergy(World &world, SCF &calc)
Definition SCF.h:516
Definition molecule.h:129
void set_all_coords(const madness::Tensor< double > &newcoords)
Definition molecule.cc:474
madness::Tensor< double > get_all_coords() const
Definition molecule.cc:452
size_t natom() const
Definition molecule.h:457
static void print_parameters()
Definition molecule.cc:120
json to_json() const
Definition molecule.cc:512
GeometryParameters parameters
Definition molecule.h:328
A MADNESS functor to compute the cartesian moment x^i * y^j * z^k (i, j, k integer and >= 0)
Definition SCF.h:153
const int j
Definition SCF.h:155
double operator()(const coordT &r) const
Definition SCF.h:161
MomentFunctor(int i, int j, int k)
Definition SCF.h:157
const int i
Definition SCF.h:155
MomentFunctor(const std::vector< int > &x)
Definition SCF.h:159
const int k
Definition SCF.h:155
interface class to the PCMSolver library
Definition pcm.h:52
void set_user_defined_value(const std::string &key, const T &value)
Definition chem/QCCalculationParametersBase.h:542
T get(const std::string key) const
Definition chem/QCCalculationParametersBase.h:306
void print(const std::string header="", const std::string footer="") const
print all parameters
Definition QCCalculationParametersBase.cc:32
class implementing properties of QC models
Definition QCPropertyInterface.h:11
void copy_data(World &world, const SCF &other)
Definition SCF.cc:267
void do_plots(World &world)
Definition SCF.cc:503
tensorT derivatives(World &world, const functionT &rho) const
Definition SCF.cc:1452
void save_mos(World &world)
Definition SCF.cc:281
void output_scf_info_schema(const std::map< std::string, double > &vals, const tensorT &dipole_T) const
Definition SCF.cc:143
static vecfuncT project_ao_basis_only(World &world, const AtomicBasisSet &aobasis, const Molecule &molecule)
Definition SCF.cc:616
const tensorT & get_aocc() const
getter for the occupation numbers, alpha spin
Definition SCF.h:323
std::shared_ptr< GTHPseudopotential< double > > gthpseudopotential
Definition SCF.h:194
void make_nuclear_potential(World &world)
Definition SCF.cc:591
void get_initial_orbitals(World &world)
get the initial orbitals for a calculation
Definition SCF.cc:453
std::vector< int > aset
Definition SCF.h:209
static void print_parameters()
Definition SCF.h:254
AtomicBasisSet aobasis
Definition SCF.h:199
SCF(World &world, const commandlineparser &parser)
forwarding constructor
Definition SCF.h:230
vecfuncT ao
MRA projection of the minimal basis set.
Definition SCF.h:212
scf_data e_data
Definition SCF.h:202
void initial_guess(World &world)
Definition SCF.cc:1004
vecfuncT apply_potential(World &world, const tensorT &occ, const vecfuncT &amo, const functionT &vlocal, double &exc, double &enl, int ispin)
Definition SCF.cc:1361
vecfuncT amo
alpha and beta molecular orbitals
Definition SCF.h:205
vecfuncT compute_residual(World &world, tensorT &occ, tensorT &fock, const vecfuncT &psi, vecfuncT &Vpsi, double &err)
Definition SCF.cc:1563
const tensorT & get_bocc() const
getter for the occupation numbers, alpha spin
Definition SCF.h:326
std::vector< int > at_to_bf
Definition SCF.h:214
std::vector< int > bset
Definition SCF.h:209
distmatT kinetic_energy_matrix(World &world, const vecfuncT &v) const
Definition SCF.cc:688
tensorT bocc
Definition SCF.h:217
double vtol
Definition SCF.h:223
tensorT dipole(World &world, const functionT &rho) const
compute the total dipole moment of the molecule
Definition SCF.cc:1525
PCM pcm
Definition SCF.h:198
bool is_spin_restricted() const
Definition SCF.h:328
poperatorT coulop
Definition SCF.h:221
double make_dft_energy(World &world, const vecfuncT &vf, int ispin)
Definition SCF.h:393
void output_calc_info_schema() const
Definition SCF.cc:158
static void help()
Definition SCF.h:240
void update_subspace(World &world, vecfuncT &Vpsia, vecfuncT &Vpsib, tensorT &focka, tensorT &fockb, subspaceT &subspace, tensorT &Q, double &bsh_residual, double &update_residual)
Definition SCF.cc:1918
Molecule molecule
Definition SCF.h:195
void load_mos(World &world)
Definition SCF.cc:321
tensorT beps
Definition SCF.h:220
tensorT diag_fock_matrix(World &world, tensorT &fock, vecfuncT &psi, vecfuncT &Vpsi, tensorT &evals, const tensorT &occ, const double thresh) const
diagonalize the fock matrix, taking care of degenerate states
Definition SCF.cc:1816
const vecfuncT & get_amo() const
getter for the molecular orbitals, alpha spin
Definition SCF.h:317
static void analyze_vectors(World &world, const vecfuncT &mo, const vecfuncT &ao, double vtol, const Molecule &molecule, const int print_level, const AtomicBasisSet &aobasis, const tensorT &occ=tensorT(), const tensorT &energy=tensorT(), const std::vector< int > &set=std::vector< int >())
Definition SCF.cc:630
XCfunctional xc
Definition SCF.h:197
void initial_load_bal(World &world)
Definition SCF.cc:1271
std::vector< int > at_nbf
Definition SCF.h:214
double do_step_restriction(World &world, const vecfuncT &mo, vecfuncT &mo_new, std::string spin) const
perform step restriction following the KAIN solver
Definition SCF.cc:2060
std::vector< std::shared_ptr< real_derivative_3d > > gradop
Definition SCF.h:222
void set_print_timings(const bool value)
Definition SCF.cc:263
double converged_for_dconv
mos are converged for this density
Definition SCF.h:226
tensorT get_fock_transformation(World &world, const tensorT &overlap, tensorT &fock, tensorT &evals, const tensorT &occ, const double thresh_degenerate) const
compute the unitary transformation that diagonalizes the fock matrix
Definition SCF.cc:1785
bool restart_aos(World &world)
Definition SCF.cc:718
tensorT aeps
orbital energies for alpha and beta orbitals
Definition SCF.h:220
functionT make_coulomb_potential(const functionT &rho) const
make the Coulomb potential given the total density
Definition SCF.h:421
tensorT make_fock_matrix(World &world, const vecfuncT &psi, const vecfuncT &Vpsi, const tensorT &occ, double &ekinetic) const
Definition SCF.cc:1697
double converged_for_tconv
derivatives of mos are converged for this threshold
Definition SCF.h:227
Tensor< double > twoint(World &world, const vecfuncT &psi) const
Compute the two-electron integrals over the provided set of orbitals.
Definition SCF.cc:1755
tensorT aocc
occupation numbers for alpha and beta orbitals
Definition SCF.h:217
void set_protocol(World &world, double thresh)
Definition SCF.h:265
static functionT make_lda_potential(World &world, const functionT &arho)
Definition SCF.cc:1353
functionT make_density(World &world, const tensorT &occ, const vecfuncT &v) const
Definition SCF.cc:1288
void rotate_subspace(World &world, const tensorT &U, subspaceT &subspace, int lo, int nfunc, double trantol) const
Definition SCF.cc:1884
void reset_aobasis(const std::string &aobasisname)
Definition SCF.h:347
void project(World &world)
Definition SCF.cc:569
double converged_for_thresh
mos are converged for this threshold
Definition SCF.h:225
CalculationParameters param
Definition SCF.h:196
double current_energy
Definition SCF.h:224
void loadbal(World &world, functionT &arho, functionT &brho, functionT &arho_old, functionT &brho_old, subspaceT &subspace)
Definition SCF.cc:1849
void vector_stats(const std::vector< double > &v, double &rms, double &maxabsval) const
Definition SCF.cc:1551
vecfuncT project_ao_basis(World &world, const AtomicBasisSet &aobasis)
Definition SCF.cc:608
std::vector< int > group_orbital_sets(World &world, const tensorT &eps, const tensorT &occ, const int nmo) const
group orbitals into sets of similar orbital energies for localization
Definition SCF.cc:1246
void initial_guess_from_nwchem(World &world)
Definition SCF.cc:771
functionT mask
Definition SCF.h:200
std::shared_ptr< PotentialManager > potentialmanager
Definition SCF.h:193
static std::vector< poperatorT > make_bsh_operators(World &world, const tensorT &evals, const CalculationParameters ¶m)
Definition SCF.cc:1329
const vecfuncT & get_bmo() const
getter for the molecular orbitals, beta spin
Definition SCF.h:320
vecfuncT bmo
Definition SCF.h:205
void solve(World &world)
Definition SCF.cc:2159
void orthonormalize(World &world, vecfuncT &amo_new) const
orthonormalize the vectors
Definition SCF.cc:2132
std::filesystem::path work_dir
Definition SCF.h:192
Convolutions in separated form (including Gaussian)
Definition operator.h:139
A tensor is a multidimensional array.
Definition tensor.h:318
Tensor< T > reshape(int ndimnew, const long *d)
Returns new view/tensor reshaping size/number of dimensions to conforming tensor.
Definition tensor.h:1385
T sumsq() const
Returns the sum of the squares of the elements.
Definition tensor.h:1670
Tensor< T > flat()
Returns new view/tensor rehshaping to flat (1-d) tensor.
Definition tensor.h:1556
A simple, fixed dimension vector.
Definition vector.h:64
void fence(bool debug=false)
Synchronizes all processes in communicator AND globally ensures no pending AM or tasks.
Definition worldgop.cc:176
A parallel world class.
Definition world.h:132
ProcessID rank() const
Returns the process rank in this World (same as MPI_Comm_rank()).
Definition world.h:320
WorldGopInterface & gop
Global operations.
Definition world.h:207
Simplified interface to XC functionals.
Definition xcfunctional.h:48
std::map< std::string, std::vector< double > > e_data
Definition SCF.h:172
void add_gradient(const Tensor< double > &grad)
Definition SCF.cc:229
int iter
Definition SCF.h:175
void to_json(json &j) const
Definition SCF.cc:212
void add_data(std::map< std::string, double > values)
Definition SCF.cc:189
json hessian
Definition SCF.h:174
json gradient
Definition SCF.h:173
scf_data()
Definition SCF.cc:199
void print_data()
Definition SCF.cc:225
Declaration of core potential related class.
double(* energy)()
Definition derivatives.cc:58
char * p(char *buf, const char *name, int k, int initial_level, double thresh, int order)
Definition derivatives.cc:72
static double lo
Definition dirac-hatom.cc:23
double psi(const Vector< double, 3 > &r)
Definition hatom_energy.cc:78
static const double v
Definition hatom_sf_dirac.cc:20
Main include file for MADNESS and defines Function interface.
Namespace for all elements and tools of MADNESS.
Definition DFParameters.h:10
void print_header2(const std::string &s)
medium section heading
Definition print.cc:54
Vector< double, 3 > coordT
Definition corepotential.cc:54
static void user_to_sim(const Vector< double, NDIM > &xuser, Vector< double, NDIM > &xsim)
Convert user coords (cell[][]) to simulation coords ([0,1]^ndim)
Definition funcdefaults.h:455
Tensor< double > tensorT
Definition distpm.cc:21
Function< std::complex< double >, 3 > complex_functionT
Definition SCF.h:79
std::vector< pairvecfuncT > subspaceT
Definition SCF.h:73
double mask1(double x)
Definition SCF.h:102
DistributedMatrix< double > distmatT
Definition SCF.h:75
std::pair< vecfuncT, vecfuncT > pairvecfuncT
Definition SCF.h:72
void print(const T &t, const Ts &... ts)
Print items to std::cout (items separated by spaces) and terminate with a new line.
Definition print.h:226
FunctionFactory< double, 3 > factoryT
Definition corepotential.cc:57
nlohmann::json json
Definition chem/QCCalculationParametersBase.h:30
std::shared_ptr< operatorT> poperatorT
Definition SCF.h:78
Function< double, 3 > functionT
Definition corepotential.cc:56
NDIM & f
Definition mra.h:2604
std::shared_ptr< FunctionFunctorInterface< double, 3 > > functorT
Definition corepotential.cc:55
std::vector< complex_functionT > cvecfuncT
Definition SCF.h:80
static SeparatedConvolution< double, 3 > * CoulombOperatorPtr(World &world, double lo, double eps, const std::array< LatticeRange, 3 > &lattice_ranges=FunctionDefaults< 3 >::get_bc().lattice_range(), int k=FunctionDefaults< 3 >::get_k())
Factory function generating separated kernel for convolution with 1/r in 3D.
Definition operator.h:1776
vector< functionT > vecfuncT
Definition corepotential.cc:58
CCPairFunction< T, NDIM > apply(const SeparatedConvolution< T, NDIM/2 > &op, const CCPairFunction< T, NDIM > &arg)
apply the operator to the argument
Definition ccpairfunction.h:896
static double mask3(const coordT &ruser)
Definition SCF.h:116
std::shared_ptr< WorldDCPmapInterface< Key< 3 > > > pmapT
Definition SCF.h:67
std::vector< Function< T, NDIM > > grad(const Function< T, NDIM > &f, bool refine=false, bool fence=true)
shorthand gradient operator
Definition vmra.h:2059
SeparatedConvolution< double, 3 > operatorT
Definition SCF.h:77
static const size_t nfunc
Definition pcr.cc:63
Declaration of molecule-related classes and functions.
double Q(double a)
Definition relops.cc:20
static const double thresh
Definition rk.cc:45
static const long k
Definition rk.cc:44
const double xi
Exponent for delta function approx.
Definition siam_example.cc:60
Defines interfaces for optimization and non-linear equation solvers.
Definition CalculationParameters.h:51
std::vector< double > protocol() const
Definition CalculationParameters.h:213
int nv_factor() const
Definition CalculationParameters.h:176
int k() const
Definition CalculationParameters.h:188
int nmo_alpha() const
Definition CalculationParameters.h:178
bool save() const
Definition CalculationParameters.h:214
double dconv() const
Definition CalculationParameters.h:151
double econv() const
Definition CalculationParameters.h:150
int print_level() const
Definition CalculationParameters.h:197
std::string deriv() const
Definition CalculationParameters.h:202
double L() const
Definition CalculationParameters.h:187
std::string aobasis() const
Definition CalculationParameters.h:211
int nalpha() const
Definition CalculationParameters.h:171
int nbeta() const
Definition CalculationParameters.h:172
int nmo_beta() const
Definition CalculationParameters.h:179
bool no_compute() const
Definition CalculationParameters.h:184
bool spin_restricted() const
Definition CalculationParameters.h:183
double lo() const
Definition CalculationParameters.h:186
std::string pcm_data() const
Definition CalculationParameters.h:204
Definition convolution1d.h:989
double eprec() const
Definition molecule.h:300
The interface to be provided by functions to be optimized.
Definition solvers.h:176
very simple command line parser
Definition commandlineparser.h:28
double parent_value
Definition SCF.h:86
lbcost(double leaf_value=1.0, double parent_value=0.0)
Definition SCF.h:88
double leaf_value
Definition SCF.h:85
double operator()(const Key< NDIM > &key, const FunctionNode< T, NDIM > &node) const
Definition SCF.h:90
Class to compute the energy functional.
Definition xcfunctional.h:365
InputParameters param
Definition tdse.cc:203
constexpr std::size_t NDIM
Definition testgconv.cc:54
static Molecule molecule
Definition testperiodicdft.cc:39
static Subspace * subspace
Definition testperiodicdft.cc:41