37#ifndef MADNESS_CHEM_SCFOPERATORS_H_
38#define MADNESS_CHEM_SCFOPERATORS_H_
50class NuclearCorrelationFactor;
52struct nemo_u1_functors;
56typedef std::vector<real_function_3d>
vecfuncT;
58template<
typename T, std::
size_t NDIM>
72 std::shared_ptr<MacroTaskQ>
taskq=0;
75 virtual std::string
info()
const = 0;
105template<
typename T, std::
size_t NDIM>
110 using implT = std::shared_ptr<ExchangeImpl>;
134 os <<
"multiworld_row";
137 os <<
"fetch_compute";
140 os <<
"unknown algorithm";
146 std::stringstream ss;
160 std::string msg=
"unknown Exchange algorithm: "+alg_string;
174 std::string
info()
const {
return "K";}
226 return inner(bra, this->
operator()(ket));
236 World& world=vket[0].world();
245template<
typename T, std::
size_t NDIM>
257 std::string
info()
const {
return "T";}
282 tensorT kinetic(vbra.size(),vket.size());
283 dkinetic.copy_to_replicated(kinetic);
289 std::vector< std::shared_ptr<Derivative<T,NDIM> > >
gradop;
298template<
typename T, std::
size_t NDIM>
310 std::string
info()
const {
return "D";}
330 const auto bra_equiv_ket = &vbra == &vket;
351template<
typename T, std::
size_t NDIM>
363 std::string
info()
const {
return "D^2";}
380 return -2.0*t(vbra,vket);
385 std::vector< std::shared_ptr< Derivative<T,NDIM> > >
gradop;
391template<
typename T, std::
size_t NDIM>
398 typedef std::tuple<const Function<double,NDIM>&,
const std::vector<Function<T,NDIM>> &>
argtupleT;
400 using resultT = std::vector<Function<T,NDIM>>;
405 const std::string
policy)
const override {
418 std::size_t n = std::get<1>(argtuple).size();
419 resultT result = zero_functions_compressed<T,NDIM>(
world, n);
442 std::string
info()
const {
return "J";}
452 std::vector<Function<T,NDIM> > vket(1,ket);
470 const auto bra_equiv_ket = &vbra == &vket;
471 std::vector<Function<T,NDIM> > vJket;
472 for (std::size_t i=0; i<vket.size(); ++i) {
473 vJket.push_back(this->
operator()(vket[i]));
512template<
typename T, std::
size_t NDIM>
526 std::string
info()
const {
return "Vnuc";}
529 std::vector<Function<T,NDIM> > vket(1,ket);
536 return inner(bra,this->
operator()(ket));
541 const auto bra_equiv_ket = &vbra == &vket;
542 std::vector<Function<T,NDIM> > vVket=this->
operator()(vket);
548 std::shared_ptr<NuclearCorrelationFactor>
ncf;
556template<
typename T, std::
size_t NDIM>
566 std::string
info()
const {
return "Lz";}
570 std::vector<Function<T,NDIM> > vket(1,ket);
579 if (vket.size()==0)
return std::vector<complex_function_3d>(0);
592 std::vector<Function<T,NDIM> > delx=
apply(
world,Dx,vket,
false);
593 std::vector<Function<T,NDIM> > dely=
apply(
world,Dy,vket,
true);
595 std::vector<Function<T,NDIM> > result1=x*dely - y*delx;
596 std::vector<complex_function_3d> cresult1=convert<T,double_complex,NDIM>(
world,result1);
597 std::vector<complex_function_3d> result=
double_complex(0.0,-1.0)*cresult1;
602 return inner(bra,this->
operator()(ket));
607 const auto bra_equiv_ket = &vbra == &vket;
608 std::vector<complex_function_3d> vVket=this->
operator()(vket);
617template<
typename T, std::
size_t NDIM>
629 std::string
info()
const {
return "DVnuc";}
632 std::vector<Function<T,NDIM>> vket(1,ket);
639 return inner(bra,this->
operator()(ket));
643 const auto bra_equiv_ket = &vbra == &vket;
644 std::vector<Function<T,NDIM>> vVket=this->
operator()(vket);
650 std::shared_ptr<NuclearCorrelationFactor>
ncf;
656template<
typename T, std::
size_t NDIM>
687 const auto bra_equiv_ket = &vbra == &vket;
698template<
typename T, std::
size_t NDIM>
709 std::string deriv=
"abgv");
713 const bool spin_polarized,
717 std::string deriv=
"abgv");
734 std::shared_ptr<NuclearCorrelationFactor> ncf_,
736 std::string deriv=
"abgv");
746 std::string
info()
const {
return "Vxc";}
766 std::vector<Function<T,3> > vket(1,ket);
767 std::vector<Function<T,3> > vKket=this->
operator()(vket);
775 std::vector<Function<T,NDIM> > vbra(1,bra), vket(1,ket);
929 std::shared_ptr<XCfunctional>
xc;
947 std::shared_ptr<NuclearCorrelationFactor>
ncf;
1028 double operator()(
const double& val) {
return log(std::max(1.e-14,val))+14.0;}
1036 template <
typename Archive>
1052 template <
typename Archive>
1059template<
typename T, std::
size_t NDIM>
1072 double number=std::get<0>(
op.second);
1075 }
else if (number!=1.0) {
1076 std::stringstream snumber;
1077 snumber << std::fixed << std::setw(2) << number;
1078 s+=
" "+snumber.str()+
" ";
1112 std::vector<Function<T,NDIM>> result = zero_functions_compressed<T, NDIM>(
world, vket.
size());
1114 result+=std::get<0>(
op.second) * (*std::get<1>(
op.second))(vket);
1120 std::vector<Function<T,NDIM>> vbra(1,bra), vket(1,ket);
1121 return (*
this)(vbra,vket)(0,0);
1131 const bool symmetric)
const {
1132 Tensor<T> fock(vbra.size(),vket.size());
1134 Tensor<T> tmp=std::get<0>(
op.second) * (*std::get<1>(
op.second))(vbra,vket);
1148 typedef std::tuple<double,std::shared_ptr<SCFOperatorBase<T,NDIM> > >
valueT;
std::complex< double > double_complex
Definition cfft.h:14
Definition SCFOperators.h:402
partitionT do_partitioning(const std::size_t &vsize1, const std::size_t &vsize2, const std::string policy) const override
override this if you want your own partitioning
Definition SCFOperators.h:404
Definition SCFOperators.h:395
std::vector< Function< T, NDIM > > resultT
Definition SCFOperators.h:400
MacroTaskCoulomb()
Definition SCFOperators.h:411
resultT allocator(World &world, const argtupleT &argtuple) const
Definition SCFOperators.h:417
std::tuple< const Function< double, NDIM > &, const std::vector< Function< T, NDIM > > & > argtupleT
Definition SCFOperators.h:398
resultT operator()(const Function< double, NDIM > &vcoul, const std::vector< Function< T, NDIM > > &arg) const
Definition SCFOperators.h:423
Definition SCFOperators.h:392
Function< T, NDIM > compute_potential(const Function< T, NDIM > &density) const
given a density compute the Coulomb potential
Definition SCFOperators.h:490
real_function_3d compute_density(const SCF *calc) const
Definition SCFOperators.cc:204
Coulomb & set_taskq(std::shared_ptr< MacroTaskQ > taskq1)
Definition SCFOperators.h:444
real_function_3d & potential()
setter for the Coulomb potential
Definition SCFOperators.h:482
World & world
Definition SCFOperators.h:505
Coulomb(World &world)
default empty ctor
Definition SCFOperators.h:429
Coulomb(World &world, const double lo, const double thresh=FunctionDefaults< 3 >::get_thresh())
default empty ctor
Definition SCFOperators.h:432
const real_function_3d & potential() const
getter for the Coulomb potential
Definition SCFOperators.h:479
std::string info() const
print some information about this operator
Definition SCFOperators.h:442
std::vector< Function< T, NDIM > > operator()(const std::vector< Function< T, NDIM > > &vket) const
Definition SCFOperators.h:456
std::shared_ptr< real_convolution_3d > poisson
Definition SCFOperators.h:506
real_function_3d vcoul
the coulomb potential
Definition SCFOperators.h:508
double lo
Definition SCFOperators.h:507
Tensor< T > operator()(const std::vector< Function< T, NDIM > > &vbra, const std::vector< Function< T, NDIM > > &vket) const
Definition SCFOperators.h:468
Function< T, NDIM > operator()(const Function< T, NDIM > &ket) const
Definition SCFOperators.h:451
void reset_poisson_operator_ptr(const double lo, const double econv)
Definition SCFOperators.cc:199
T operator()(const Function< T, NDIM > &bra, const Function< T, NDIM > &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:464
derivative of the (regularized) nuclear potential wrt nuclear displacements
Definition SCFOperators.h:618
World & world
Definition SCFOperators.h:649
std::string info() const
print some information about this operator
Definition SCFOperators.h:629
DNuclear(World &world, std::shared_ptr< NuclearCorrelationFactor > ncf, const int iatom, const int iaxis)
Definition SCFOperators.h:625
T operator()(const Function< T, NDIM > &bra, const Function< T, NDIM > &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:638
std::shared_ptr< NuclearCorrelationFactor > ncf
Definition SCFOperators.h:650
Tensor< T > operator()(const std::vector< Function< T, NDIM > > &vbra, const std::vector< Function< T, NDIM > > &vket) const
Definition SCFOperators.h:642
int iatom
index of the atom which is displaced
Definition SCFOperators.h:651
Function< T, NDIM > operator()(const Function< T, NDIM > &ket) const
Definition SCFOperators.h:631
int iaxis
x,y,z component of the atom
Definition SCFOperators.h:652
Definition SCFOperators.h:299
tensorT operator()(const vecfuncT &vbra, const vecfuncT &vket) const
compute the matrix <vbra | op | vket>
Definition SCFOperators.h:329
functionT operator()(const functionT &ket) const
Definition SCFOperators.h:312
int axis
Definition SCFOperators.h:337
DerivativeOperator(World &world, const int axis1)
Definition SCFOperators.h:306
T operator()(const functionT &bra, const functionT &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:323
std::string info() const
print some information about this operator
Definition SCFOperators.h:310
Derivative< T, NDIM > gradop
Definition SCFOperators.h:338
Tensor< T > tensorT
Definition SCFOperators.h:302
Function< T, NDIM > functionT
Definition SCFOperators.h:300
vecfuncT operator()(const vecfuncT &vket) const
apply this operator on the argument vector of functions
Definition SCFOperators.h:317
World & world
Definition SCFOperators.h:336
std::vector< functionT > vecfuncT
Definition SCFOperators.h:301
Implements derivatives operators with variety of boundary conditions on simulation domain.
Definition derivative.h:337
void set_bspline1()
Definition derivative.h:683
Manages data associated with a row/column/block distributed array.
Definition distributed_matrix.h:388
Definition exchangeoperator.h:601
Definition SCFOperators.h:106
Exchange & set_cost_aware_assignment(const bool flag)
place tasks by their measured cost rather than by counting them
Definition exchangeoperator.cc:474
Function< T, NDIM > functionT
Definition SCFOperators.h:111
Exchange & set_taskq(std::shared_ptr< MacroTaskQ > taskq1)
Definition SCFOperators.h:201
Exchange & set_printlevel(const long &level)
Definition exchangeoperator.cc:456
Exchange & set_batch_granularity(const long level)
batches per rank in the owner-pinned symmetric partition (>= 1)
Definition exchangeoperator.cc:462
Exchange & set_macro_task_info(const std::vector< std::string > &info)
Definition SCFOperators.h:184
T operator()(const Function< T, NDIM > &bra, const Function< T, NDIM > &ket) const
compute the matrix element <bra | K | ket>
Definition SCFOperators.h:225
static std::string to_string(const ExchangeAlgorithm alg)
Definition SCFOperators.h:145
ExchangeAlgorithm
Definition SCFOperators.h:118
@ fetch_compute
Definition SCFOperators.h:119
@ multiworld_efficient_row
Definition SCFOperators.h:119
@ multiworld_efficient
Definition SCFOperators.h:119
@ small_memory
Definition SCFOperators.h:119
@ large_memory
Definition SCFOperators.h:119
static ExchangeAlgorithm string2algorithm(const std::string &alg_string)
Definition SCFOperators.h:151
Tensor< T > tensorT
Definition SCFOperators.h:113
bool is_symmetric() const
Definition exchangeoperator.cc:433
Function< T, NDIM > operator()(const Function< T, NDIM > &ket) const
Definition SCFOperators.h:208
Exchange & set_symmetric(const bool flag)
Definition exchangeoperator.cc:438
implT impl
Definition SCFOperators.h:115
std::shared_ptr< ExchangeImpl > implT
Definition SCFOperators.h:110
Exchange & set_accumulation_mode(const int mode)
1 = gather tile results per subworld, 2 = also gather per node first
Definition exchangeoperator.cc:468
Tensor< T > operator()(const vecfuncT &vbra, const vecfuncT &vket) const
compute the matrix < vbra | K | vket >
Definition SCFOperators.h:234
Exchange & set_bra_and_ket(const vecfuncT &bra, const vecfuncT &ket)
Definition exchangeoperator.cc:426
std::vector< functionT > vecfuncT
Definition SCFOperators.h:112
vecfuncT operator()(const vecfuncT &vket) const
apply the exchange operator on a vector of functions
Exchange & set_macro_task_info(const MacroTaskInfo &info)
how the cloud will handle the data
Definition exchangeoperator.cc:450
std::string info() const
print some information about this operator
Definition SCFOperators.h:174
friend std::ostream & operator<<(std::ostream &os, const ExchangeAlgorithm &alg)
Definition SCFOperators.h:122
Exchange & set_algorithm(const ExchangeAlgorithm &alg)
Definition exchangeoperator.cc:444
Computes matrix representation of the Fock operator.
Definition SCFOperators.h:1060
int remove_operator(std::string name)
remove operator, returns 0 if no operator was found
Definition SCFOperators.h:1099
Fock(World &world)
Definition SCFOperators.h:1062
World & world
the world
Definition SCFOperators.h:1145
Tensor< T > operator()(const std::vector< Function< T, NDIM > > &vbra, const std::vector< Function< T, NDIM > > &vket) const
compute the Fock matrix by summing up all contributions
Definition SCFOperators.h:1125
Tensor< T > operator()(const std::vector< Function< T, NDIM > > &vbra, const std::vector< Function< T, NDIM > > &vket, const bool symmetric) const
compute the Fock matrix by summing up all contributions
Definition SCFOperators.h:1130
Fock(World &world, const OEP *nemo)
Fock(World &world, const NemoBase *nemo)
Fock(World &world, const Nemo *nemo)
std::map< std::string, valueT > operators
all the Fock operator contribution
Definition SCFOperators.h:1151
T operator()(const Function< T, NDIM > &bra, const Function< T, NDIM > &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:1119
std::tuple< double, std::shared_ptr< SCFOperatorBase< T, NDIM > > > valueT
type defining Fock operator contribution including prefactor
Definition SCFOperators.h:1148
void add_operator(std::string name, std::tuple< double, std::shared_ptr< SCFOperatorBase< T, NDIM > > > new_op)
add an operator with custom prefactor (e.g. -1.0 for the exchange, supposedly)
Definition SCFOperators.h:1094
Function< T, NDIM > operator()(const Function< T, NDIM > &ket) const
Definition SCFOperators.h:1103
std::string info() const
pretty print what this is actually computing
Definition SCFOperators.h:1069
void add_operator(std::string name, std::shared_ptr< SCFOperatorBase< T, NDIM > > new_op)
add an operator with default prefactor 1.0
Definition SCFOperators.h:1089
std::vector< Function< T, NDIM > > operator()(const std::vector< Function< T, NDIM > > &vket) const
Definition SCFOperators.h:1109
FunctionDefaults holds default paramaters as static class members.
Definition funcdefaults.h:101
A multiresolution adaptive numerical function.
Definition mra.h:144
Key is the index for a node of the 2^NDIM-tree.
Definition key.h:70
Definition SCFOperators.h:246
Tensor< T > tensorT
Definition SCFOperators.h:250
std::vector< std::shared_ptr< Derivative< T, NDIM > > > gradop
Definition SCFOperators.h:289
tensorT operator()(const vecfuncT &vbra, const vecfuncT &vket) const
compute the matrix <vbra | op | vket>
Definition SCFOperators.h:275
World & world
Definition SCFOperators.h:288
Kinetic(World &world)
Definition SCFOperators.h:253
std::vector< functionT > vecfuncT
Definition SCFOperators.h:249
Function< T, NDIM > functionT
Definition SCFOperators.h:248
std::string info() const
print some information about this operator
Definition SCFOperators.h:257
distmatT kinetic_energy_matrix(World &world, const vecfuncT &v) const
Definition SCFOperators.cc:51
DistributedMatrix< T > distmatT
Definition SCFOperators.h:247
vecfuncT operator()(const vecfuncT &vket) const
apply this operator on the argument vector of functions
Definition SCFOperators.h:264
T operator()(const functionT &bra, const functionT &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:269
functionT operator()(const functionT &ket) const
Definition SCFOperators.h:259
the Laplacian operator: \sum_i \nabla^2_i
Definition SCFOperators.h:352
T operator()(const functionT &bra, const functionT &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:372
double eps
Definition SCFOperators.h:386
Tensor< T > tensorT
Definition SCFOperators.h:355
functionT operator()(const functionT &ket) const
Definition SCFOperators.h:365
Function< T, NDIM > functionT
Definition SCFOperators.h:353
std::string info() const
print some information about this operator
Definition SCFOperators.h:363
tensorT operator()(const vecfuncT &vbra, const vecfuncT &vket) const
compute the matrix <vbra | op | vket>
Definition SCFOperators.h:378
std::vector< functionT > vecfuncT
Definition SCFOperators.h:354
vecfuncT operator()(const vecfuncT &vket) const
apply this operator on the argument vector of functions
Laplacian(World &world, const double e=0.0)
Definition SCFOperators.h:359
std::vector< std::shared_ptr< Derivative< T, NDIM > > > gradop
Definition SCFOperators.h:385
World & world
Definition SCFOperators.h:384
Definition SCFOperators.h:657
Tensor< T > operator()(const std::vector< Function< T, NDIM > > &vbra, const std::vector< Function< T, NDIM > > &vket) const
Definition SCFOperators.h:685
std::string info() const
print some information about this operator
Definition SCFOperators.h:663
T operator()(const Function< T, NDIM > &bra, const Function< T, NDIM > &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:681
void set_info(const std::string new_info)
Definition SCFOperators.h:665
std::vector< Function< T, NDIM > > operator()(const std::vector< Function< T, NDIM > > &vket) const
Definition SCFOperators.h:677
Function< T, NDIM > operator()(const Function< T, NDIM > &ket) const
Definition SCFOperators.h:673
Function< T, NDIM > potential
Definition SCFOperators.h:694
LocalPotentialOperator(World &world)
Definition SCFOperators.h:659
World & world
Definition SCFOperators.h:692
std::string info_str
Definition SCFOperators.h:693
LocalPotentialOperator(World &world, const std::string info, const Function< T, NDIM > potential)
Definition SCFOperators.h:660
void set_potential(const Function< T, NDIM > &new_potential)
Definition SCFOperators.h:669
the z component of the angular momentum
Definition SCFOperators.h:557
T operator()(const Function< T, NDIM > &bra, const Function< T, NDIM > &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:601
Lz(World &world, bool use_bspline_derivative=true)
Definition SCFOperators.h:564
Tensor< T > operator()(const std::vector< Function< T, NDIM > > &vbra, const std::vector< Function< T, NDIM > > &vket) const
Definition SCFOperators.h:605
std::vector< Function< T, NDIM > > operator()(const std::vector< Function< T, NDIM > > &vket) const
Definition SCFOperators.h:574
World & world
Definition SCFOperators.h:559
std::string info() const
print some information about this operator
Definition SCFOperators.h:566
Function< T, NDIM > operator()(const Function< T, NDIM > &ket) const
Definition SCFOperators.h:569
bool use_bsplines
Definition SCFOperators.h:562
Definition macrotaskq.h:1604
std::shared_ptr< MacroTaskPartitioner > partitioner
Definition macrotaskq.h:1612
partition one (two) vectors into 1D (2D) batches.
Definition macrotaskpartitioner.h:182
std::string policy
how to partition the batches
Definition macrotaskpartitioner.h:190
std::list< std::pair< Batch, double > > partitionT
Definition macrotaskpartitioner.h:186
friend class Batch
Definition macrotaskpartitioner.h:183
Definition macrotaskq.h:991
Definition molecule.h:129
The Nemo class.
Definition nemo.h:362
Definition SCFOperators.h:513
Function< T, NDIM > operator()(const Function< T, NDIM > &ket) const
Definition SCFOperators.h:528
T operator()(const Function< T, NDIM > &bra, const Function< T, NDIM > &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:535
Tensor< T > operator()(const std::vector< Function< T, NDIM > > &vbra, const std::vector< Function< T, NDIM > > &vket) const
Definition SCFOperators.h:539
std::string info() const
print some information about this operator
Definition SCFOperators.h:526
World & world
Definition SCFOperators.h:547
Nuclear(World &world, std::shared_ptr< NuclearCorrelationFactor > ncf)
Definition SCFOperators.h:523
std::shared_ptr< NuclearCorrelationFactor > ncf
Definition SCFOperators.h:548
Definition SCFOperators.h:59
std::vector< functionT > vecfuncT
Definition SCFOperators.h:63
Tensor< T > tensorT
Definition SCFOperators.h:64
virtual std::string info() const =0
print some information about this operator
nlohmann::json statistics
Definition SCFOperators.h:65
std::shared_ptr< MacroTaskQ > taskq
Definition SCFOperators.h:72
Function< T, NDIM > functionT
Definition SCFOperators.h:62
SCFOperatorBase(std::shared_ptr< MacroTaskQ > taskq)
Definition SCFOperators.h:68
virtual ~SCFOperatorBase()
Definition SCFOperators.h:70
virtual tensorT operator()(const vecfuncT &vbra, const vecfuncT &vket) const =0
compute the matrix <vbra | op | vket>
SCFOperatorBase()=default
virtual vecfuncT operator()(const vecfuncT &vket) const =0
apply this operator on the argument vector of functions
virtual functionT operator()(const functionT &ket) const =0
virtual T operator()(const functionT &bra, const functionT &ket) const =0
compute the matrix element <bra | op | ket>
A tensor is a multidimensional array.
Definition tensor.h:318
Tensor< T > & unaryop(opT &op)
Inplace apply a unary function to each element of the tensor.
Definition tensor.h:1794
void fence(bool debug=false)
Synchronizes all processes in communicator AND globally ensures no pending AM or tasks.
Definition worldgop.cc:177
A parallel world class.
Definition world.h:134
ProcessID rank() const
Returns the process rank in this World (same as MPI_Comm_rank()).
Definition world.h:344
ProcessID size() const
Returns the number of processes in this World (same as MPI_Comm_size()).
Definition world.h:354
WorldGopInterface & gop
Global operations.
Definition world.h:216
operator class for the handling of DFT exchange-correlation functionals
Definition SCFOperators.h:699
bool has_tau_term() const
true if the functional contributes a non-multiplicative (meta-gga) term
Definition SCFOperators.cc:487
XCOperator(World &world)
default ctor without information about the XC functional
Definition SCFOperators.h:703
TauU1
compute the kinetic energy density and add it to the intermediates
Definition SCFOperators.h:874
@ mra
U1 and |U1|^2 projected into Functions and multiplied.
vecfuncT xc_args
functions that are need for the computation of the XC operator
Definition SCFOperators.h:955
void weak_xc_terms(const std::vector< Function< T, NDIM > > &vket, std::vector< Function< T, NDIM > > &mult, std::vector< std::vector< Function< T, NDIM > > > &flux) const
weak-form split of the non-multiplicative xc terms
Definition SCFOperators.cc:766
XCOperator & allow_weak_form()
opt in to the weak form, if the xc_weak_gga parameter asks for it
Definition SCFOperators.h:795
bool is_initialized() const
check if the intermediates are initialized
Definition SCFOperators.h:1020
bool weak_gga
the user asked for the weak form: CalculationParameters::xc_weak_gga()
Definition SCFOperators.h:976
double compute_xc_energy() const
compute the xc energy using the precomputed intermediates vf and delrho
Definition SCFOperators.cc:909
std::shared_ptr< Derivative< T, NDIM > > make_derivative(const int axis) const
gradient operator honouring dft_deriv, for the meta-gga term
Definition SCFOperators.cc:737
real_function_3d get_tau(const int spin=0) const
the kinetic energy density of one spin channel, as set by set_tau()
Definition SCFOperators.cc:493
XCOperator & set_weak_gga(const bool flag)
override CalculationParameters::xc_weak_gga(), for callers without one
Definition SCFOperators.h:798
std::string info() const
print some information about this operator
Definition SCFOperators.h:746
real_function_3d div_dft_deriv(const vecfuncT &v) const
divergence of a vector field, honouring dft_deriv
Definition SCFOperators.cc:750
real_function_3d make_xc_potential() const
return the local xc potential
Definition SCFOperators.cc:960
bool has_tau_args() const
true once set_tau() has supplied tau, by either route
Definition SCFOperators.cc:934
XCOperator & set_extra_truncation(const double &fac)
Definition SCFOperators.h:748
real_function_3d vtau
de/dtau, the prefactor of the non-multiplicative meta-gga term
Definition SCFOperators.h:961
Function< T, NDIM > operator()(const Function< T, NDIM > &ket) const
apply the xc potential on an orbitals
Definition SCFOperators.h:765
void prep_xc_args_response(const real_function_3d &dens_pt, vecfuncT &xc_args, vecfuncT &ddens_pt) const
compute the intermediates for the XC functionals
Definition SCFOperators.cc:1179
vecfuncT prep_xc_args(const real_function_3d &arho, const real_function_3d &brho, const real_function_3d &arho_reg=real_function_3d(), const real_function_3d &brho_reg=real_function_3d()) const
compute the intermediates for the XC functionals
Definition SCFOperators.cc:1105
XCOperator & set_print_level(const int p)
print the meta-gga de/dtau range each time the operator is applied
Definition SCFOperators.h:759
T operator()(const Function< T, NDIM > &bra, const Function< T, NDIM > &ket) const
the xc contribution to the Fock matrix, as a matrix element
Definition SCFOperators.h:774
nemo_u1_functors make_u1_functors() const
the four analytic U1 quantities the xc ops evaluate pointwise
Definition SCFOperators.cc:943
std::vector< Function< T, NDIM > > operator()(const std::vector< Function< T, NDIM > > &vket) const
apply the xc potential on a set of orbitals
Definition SCFOperators.cc:477
real_function_3d get_vtau() const
de/dtau, as computed by make_xc_potential()
Definition SCFOperators.h:891
std::string dft_deriv
which derivative operator to use
Definition SCFOperators.h:922
void set_tau(const vecfuncT &amo, const Tensor< double > &aocc, const vecfuncT &bmo=vecfuncT(), const Tensor< double > &bocc=Tensor< double >(), const TauU1 u1mode=TauU1::pointwise) const
compute tau = 1/2 sum_i |grad psi_i|^2 and store it in the intermediates
Definition SCFOperators.cc:500
std::shared_ptr< NuclearCorrelationFactor > ncf
the nuclear correlation factor, if it exists, for computing derivatives for GGA
Definition SCFOperators.h:947
std::vector< Function< T, NDIM > > apply_tau_term(const std::vector< Function< T, NDIM > > &vket) const
apply the non-multiplicative meta-gga term on a set of orbitals
Definition SCFOperators.cc:662
real_function_3d get_vlocal() const
the multiplicative part of the potential, as make_xc_potential() returned it
Definition SCFOperators.h:846
void set_ispin(const int i) const
set the spin state this operator is acting on
Definition SCFOperators.h:756
double extra_truncation
additional truncation for the densities in the XC kernel
Definition SCFOperators.h:944
int print_level
print level; >=2 logs the meta-gga de/dtau range
Definition SCFOperators.h:925
std::shared_ptr< XCfunctional > xc
interface to the actual XC functionals
Definition SCFOperators.h:929
real_function_3d vlocal
the multiplicative potential, stashed by make_xc_potential()
Definition SCFOperators.h:982
bool is_weak_form() const
Definition SCFOperators.cc:759
real_function_3d make_xc_potential_impl() const
the body of make_xc_potential(); the wrapper only stashes vlocal
Definition SCFOperators.cc:967
World & world
the world
Definition SCFOperators.h:919
const vecfuncT & get_semilocal_flux() const
the semilocal flux X = 2 (de/dsigma_ss) grad(rho_s) + (de/dsigma_ab) grad(rho_s')
Definition SCFOperators.h:827
vecfuncT semilocal_flux
the semilocal flux, assigned by make_xc_potential() in weak form only
Definition SCFOperators.h:979
real_function_3d apply_xc_kernel(const real_function_3d &density, const vecfuncT grad_dens_pt=vecfuncT()) const
construct the xc kernel and apply it directly on the (response) density
Definition SCFOperators.cc:1066
int ispin
the XC functionals depend on the spin of the orbitals they act on
Definition SCFOperators.h:936
int nbeta
number of beta orbitals
Definition SCFOperators.h:933
bool weak_form_ok
caller has opted in to the weak form, see allow_weak_form()
Definition SCFOperators.h:970
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
Tensor< typename Tensor< T >::scalar_type > arg(const Tensor< T > &t)
Return a new tensor holding the argument of each element of t (complex types only)
Definition tensor.h:2757
static const double v
Definition hatom_sf_dirac.cc:20
Tensor< double > op(const Tensor< double > &x)
Definition kain.cc:508
Declares the macrotaskq and MacroTaskBase classes.
General header file for using MADNESS.
#define MADNESS_CHECK(condition)
Check a condition — even in a release build the condition is always evaluated so it can have side eff...
Definition madness_exception.h:182
#define MADNESS_EXCEPTION(msg, value)
Macro for throwing a MADNESS exception.
Definition madness_exception.h:119
Namespace for all elements and tools of MADNESS.
Definition DFConvergence.h:9
void truncate(World &world, std::vector< Function< T, NDIM > > &v, double tol=0.0, bool fence=true)
Truncates a vector of functions.
Definition vmra.h:336
const std::vector< Function< T, NDIM > > & reconstruct(const std::vector< Function< T, NDIM > > &v)
reconstruct a vector of functions
Definition vmra.h:163
static const Slice _(0,-1, 1)
FunctionFactory< double, 3 > real_factory_3d
Definition functypedefs.h:108
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:227
Function< double, 3 > real_function_3d
Definition functypedefs.h:80
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
Function< T, CCPairFunction< T, NDIM >::LDIM > inner(const CCPairFunction< T, NDIM > &c, const Function< T, CCPairFunction< T, NDIM >::LDIM > &f, const std::tuple< int, int, int > v1, const std::tuple< int, int, int > v2)
Definition ccpairfunction.h:993
std::string name(const FuncType &type, const int ex=-1)
Definition ccpairfunction.h:28
void matrix_inner(DistributedMatrix< T > &A, const std::vector< Function< T, NDIM > > &f, const std::vector< Function< T, NDIM > > &g, bool sym=false)
Definition distpm.cc:46
Function< T, NDIM > copy(const Function< T, NDIM > &f, const std::shared_ptr< WorldDCPmapInterface< Key< NDIM > > > &pmap, bool fence=true)
Create a new copy of the function with different distribution and optional fence.
Definition mra.h:2233
@ nemo
nemo's regularized orbitals F = psi/R
static const double thresh
Definition rk.cc:45
Definition macrotaskq.h:280
Definition SCFOperators.h:1043
double operator()(const double &val)
Definition SCFOperators.h:1044
simple structure to take the pointwise exponential of a function, shifted by +14
Definition SCFOperators.h:1041
Tensor< double > operator()(const Key< 3 > &key, const Tensor< double > &val) const
Definition SCFOperators.h:1046
void serialize(Archive &ar)
Definition SCFOperators.h:1053
double resultT
Definition SCFOperators.h:1042
Definition SCFOperators.h:1027
double operator()(const double &val)
Definition SCFOperators.h:1028
simple structure to take the pointwise logarithm of a function, shifted by +14
Definition SCFOperators.h:1025
Tensor< double > operator()(const Key< 3 > &key, const Tensor< double > &val) const
Definition SCFOperators.h:1030
void serialize(Archive &ar)
Definition SCFOperators.h:1037
double resultT
Definition SCFOperators.h:1026
static std::string tolower(std::string s)
make lower case
Definition commandlineparser.h:128
the cuspy half of the nemo tau decomposition, supplied pointwise
Definition xcfunctional.h:503
Definition dirac-hatom.cc:112
int task(int i)
Definition test_runtime.cpp:4
void e()
Definition test_sig.cc:75
std::size_t axis
Definition testpdiff.cc:59
static Molecule molecule
Definition testperiodicdft.cc:39