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;
177 std::string
info()
const {
return "K";}
229 return inner(bra, this->
operator()(ket));
239 World& world=vket[0].world();
248template<
typename T, std::
size_t NDIM>
260 std::string
info()
const {
return "T";}
285 tensorT kinetic(vbra.size(),vket.size());
286 dkinetic.copy_to_replicated(kinetic);
292 std::vector< std::shared_ptr<Derivative<T,NDIM> > >
gradop;
301template<
typename T, std::
size_t NDIM>
313 std::string
info()
const {
return "D";}
333 const auto bra_equiv_ket = &vbra == &vket;
354template<
typename T, std::
size_t NDIM>
366 std::string
info()
const {
return "D^2";}
383 return -2.0*t(vbra,vket);
388 std::vector< std::shared_ptr< Derivative<T,NDIM> > >
gradop;
394template<
typename T, std::
size_t NDIM>
401 typedef std::tuple<const Function<double,NDIM>&,
const std::vector<Function<T,NDIM>> &>
argtupleT;
403 using resultT = std::vector<Function<T,NDIM>>;
408 const std::string
policy)
const override {
423 std::size_t n = std::get<1>(argtuple).size();
424 resultT result = zero_functions_compressed<T,NDIM>(
world, n);
449 std::string
info()
const {
return "J";}
459 std::vector<Function<T,NDIM> > vket(1,ket);
477 const auto bra_equiv_ket = &vbra == &vket;
478 std::vector<Function<T,NDIM> > vJket;
479 for (std::size_t i=0; i<vket.size(); ++i) {
480 vJket.push_back(this->
operator()(vket[i]));
519template<
typename T, std::
size_t NDIM>
533 std::string
info()
const {
return "Vnuc";}
536 std::vector<Function<T,NDIM> > vket(1,ket);
543 return inner(bra,this->
operator()(ket));
548 const auto bra_equiv_ket = &vbra == &vket;
549 std::vector<Function<T,NDIM> > vVket=this->
operator()(vket);
555 std::shared_ptr<NuclearCorrelationFactor>
ncf;
563template<
typename T, std::
size_t NDIM>
573 std::string
info()
const {
return "Lz";}
577 std::vector<Function<T,NDIM> > vket(1,ket);
586 if (vket.size()==0)
return std::vector<complex_function_3d>(0);
599 std::vector<Function<T,NDIM> > delx=
apply(
world,Dx,vket,
false);
600 std::vector<Function<T,NDIM> > dely=
apply(
world,Dy,vket,
true);
602 std::vector<Function<T,NDIM> > result1=x*dely - y*delx;
603 std::vector<complex_function_3d> cresult1=convert<T,double_complex,NDIM>(
world,result1);
604 std::vector<complex_function_3d> result=
double_complex(0.0,-1.0)*cresult1;
609 return inner(bra,this->
operator()(ket));
614 const auto bra_equiv_ket = &vbra == &vket;
615 std::vector<complex_function_3d> vVket=this->
operator()(vket);
624template<
typename T, std::
size_t NDIM>
636 std::string
info()
const {
return "DVnuc";}
639 std::vector<Function<T,NDIM>> vket(1,ket);
646 return inner(bra,this->
operator()(ket));
650 const auto bra_equiv_ket = &vbra == &vket;
651 std::vector<Function<T,NDIM>> vVket=this->
operator()(vket);
657 std::shared_ptr<NuclearCorrelationFactor>
ncf;
663template<
typename T, std::
size_t NDIM>
694 const auto bra_equiv_ket = &vbra == &vket;
705template<
typename T, std::
size_t NDIM>
716 std::string deriv=
"abgv");
720 const bool spin_polarized,
724 std::string deriv=
"abgv");
741 std::shared_ptr<NuclearCorrelationFactor> ncf_,
743 std::string deriv=
"abgv");
753 std::string
info()
const {
return "Vxc";}
773 std::vector<Function<T,3> > vket(1,ket);
774 std::vector<Function<T,3> > vKket=this->
operator()(vket);
782 std::vector<Function<T,NDIM> > vbra(1,bra), vket(1,ket);
936 std::shared_ptr<XCfunctional>
xc;
954 std::shared_ptr<NuclearCorrelationFactor>
ncf;
1035 double operator()(
const double& val) {
return log(std::max(1.e-14,val))+14.0;}
1043 template <
typename Archive>
1059 template <
typename Archive>
1066template<
typename T, std::
size_t NDIM>
1079 double number=std::get<0>(
op.second);
1082 }
else if (number!=1.0) {
1083 std::stringstream snumber;
1084 snumber << std::fixed << std::setw(2) << number;
1085 s+=
" "+snumber.str()+
" ";
1119 std::vector<Function<T,NDIM>> result = zero_functions_compressed<T, NDIM>(
world, vket.
size());
1121 result+=std::get<0>(
op.second) * (*std::get<1>(
op.second))(vket);
1127 std::vector<Function<T,NDIM>> vbra(1,bra), vket(1,ket);
1128 return (*
this)(vbra,vket)(0,0);
1138 const bool symmetric)
const {
1139 Tensor<T> fock(vbra.size(),vket.size());
1141 Tensor<T> tmp=std::get<0>(
op.second) * (*std::get<1>(
op.second))(vbra,vket);
1155 typedef std::tuple<double,std::shared_ptr<SCFOperatorBase<T,NDIM> > >
valueT;
std::complex< double > double_complex
Definition cfft.h:14
Definition SCFOperators.h:405
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:407
Definition SCFOperators.h:398
std::vector< Function< T, NDIM > > resultT
Definition SCFOperators.h:403
MacroTaskCoulomb()
Definition SCFOperators.h:416
resultT allocator(World &world, const argtupleT &argtuple) const
Definition SCFOperators.h:422
std::tuple< const Function< double, NDIM > &, const std::vector< Function< T, NDIM > > & > argtupleT
Definition SCFOperators.h:401
resultT operator()(const Function< double, NDIM > &vcoul, const std::vector< Function< T, NDIM > > &arg) const
Definition SCFOperators.h:428
Definition SCFOperators.h:395
Function< T, NDIM > compute_potential(const Function< T, NDIM > &density) const
given a density compute the Coulomb potential
Definition SCFOperators.h:497
real_function_3d compute_density(const SCF *calc) const
Definition SCFOperators.cc:221
Coulomb & set_taskq(std::shared_ptr< MacroTaskQ > taskq1)
Definition SCFOperators.h:451
real_function_3d & potential()
setter for the Coulomb potential
Definition SCFOperators.h:489
World & world
Definition SCFOperators.h:512
Coulomb(World &world)
default empty ctor
Definition SCFOperators.h:436
Coulomb(World &world, const double lo, const double thresh=FunctionDefaults< 3 >::get_thresh())
default empty ctor
Definition SCFOperators.h:439
const real_function_3d & potential() const
getter for the Coulomb potential
Definition SCFOperators.h:486
std::string info() const
print some information about this operator
Definition SCFOperators.h:449
std::vector< Function< T, NDIM > > operator()(const std::vector< Function< T, NDIM > > &vket) const
Definition SCFOperators.h:463
std::shared_ptr< real_convolution_3d > poisson
Definition SCFOperators.h:513
real_function_3d vcoul
the coulomb potential
Definition SCFOperators.h:515
double lo
Definition SCFOperators.h:514
Tensor< T > operator()(const std::vector< Function< T, NDIM > > &vbra, const std::vector< Function< T, NDIM > > &vket) const
Definition SCFOperators.h:475
Function< T, NDIM > operator()(const Function< T, NDIM > &ket) const
Definition SCFOperators.h:458
void reset_poisson_operator_ptr(const double lo, const double econv)
Definition SCFOperators.cc:216
T operator()(const Function< T, NDIM > &bra, const Function< T, NDIM > &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:471
derivative of the (regularized) nuclear potential wrt nuclear displacements
Definition SCFOperators.h:625
World & world
Definition SCFOperators.h:656
std::string info() const
print some information about this operator
Definition SCFOperators.h:636
DNuclear(World &world, std::shared_ptr< NuclearCorrelationFactor > ncf, const int iatom, const int iaxis)
Definition SCFOperators.h:632
T operator()(const Function< T, NDIM > &bra, const Function< T, NDIM > &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:645
std::shared_ptr< NuclearCorrelationFactor > ncf
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:649
int iatom
index of the atom which is displaced
Definition SCFOperators.h:658
Function< T, NDIM > operator()(const Function< T, NDIM > &ket) const
Definition SCFOperators.h:638
int iaxis
x,y,z component of the atom
Definition SCFOperators.h:659
Definition SCFOperators.h:302
tensorT operator()(const vecfuncT &vbra, const vecfuncT &vket) const
compute the matrix <vbra | op | vket>
Definition SCFOperators.h:332
functionT operator()(const functionT &ket) const
Definition SCFOperators.h:315
int axis
Definition SCFOperators.h:340
DerivativeOperator(World &world, const int axis1)
Definition SCFOperators.h:309
T operator()(const functionT &bra, const functionT &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:326
std::string info() const
print some information about this operator
Definition SCFOperators.h:313
Derivative< T, NDIM > gradop
Definition SCFOperators.h:341
Tensor< T > tensorT
Definition SCFOperators.h:305
Function< T, NDIM > functionT
Definition SCFOperators.h:303
vecfuncT operator()(const vecfuncT &vket) const
apply this operator on the argument vector of functions
Definition SCFOperators.h:320
World & world
Definition SCFOperators.h:339
std::vector< functionT > vecfuncT
Definition SCFOperators.h:304
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:494
Function< T, NDIM > functionT
Definition SCFOperators.h:111
Exchange & set_taskq(std::shared_ptr< MacroTaskQ > taskq1)
Definition SCFOperators.h:204
Exchange & set_printlevel(const long &level)
Definition exchangeoperator.cc:476
Exchange & set_batch_granularity(const long level)
batches per rank in the owner-pinned symmetric partition (>= 1)
Definition exchangeoperator.cc:482
Exchange & set_macro_task_info(const std::vector< std::string > &info)
Definition SCFOperators.h:187
T operator()(const Function< T, NDIM > &bra, const Function< T, NDIM > &ket) const
compute the matrix element <bra | K | ket>
Definition SCFOperators.h:228
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:453
Function< T, NDIM > operator()(const Function< T, NDIM > &ket) const
Definition SCFOperators.h:211
Exchange & set_symmetric(const bool flag)
Definition exchangeoperator.cc:458
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:488
Tensor< T > operator()(const vecfuncT &vbra, const vecfuncT &vket) const
compute the matrix < vbra | K | vket >
Definition SCFOperators.h:237
Exchange & set_bra_and_ket(const vecfuncT &bra, const vecfuncT &ket)
Definition exchangeoperator.cc:446
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:470
std::string info() const
print some information about this operator
Definition SCFOperators.h:177
friend std::ostream & operator<<(std::ostream &os, const ExchangeAlgorithm &alg)
Definition SCFOperators.h:122
Exchange & set_algorithm(const ExchangeAlgorithm &alg)
Definition exchangeoperator.cc:464
Computes matrix representation of the Fock operator.
Definition SCFOperators.h:1067
int remove_operator(std::string name)
remove operator, returns 0 if no operator was found
Definition SCFOperators.h:1106
Fock(World &world)
Definition SCFOperators.h:1069
World & world
the world
Definition SCFOperators.h:1152
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:1132
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:1137
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:1158
T operator()(const Function< T, NDIM > &bra, const Function< T, NDIM > &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:1126
std::tuple< double, std::shared_ptr< SCFOperatorBase< T, NDIM > > > valueT
type defining Fock operator contribution including prefactor
Definition SCFOperators.h:1155
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:1101
Function< T, NDIM > operator()(const Function< T, NDIM > &ket) const
Definition SCFOperators.h:1110
std::string info() const
pretty print what this is actually computing
Definition SCFOperators.h:1076
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:1096
std::vector< Function< T, NDIM > > operator()(const std::vector< Function< T, NDIM > > &vket) const
Definition SCFOperators.h:1116
FunctionDefaults holds default paramaters as static class members.
Definition funcdefaults.h:101
static const double & get_thresh()
Returns the default threshold.
Definition funcdefaults.h:183
A multiresolution adaptive numerical function.
Definition mra.h:140
World & world() const
Returns the world.
Definition mra.h:754
Key is the index for a node of the 2^NDIM-tree.
Definition key.h:71
Definition SCFOperators.h:249
Tensor< T > tensorT
Definition SCFOperators.h:253
std::vector< std::shared_ptr< Derivative< T, NDIM > > > gradop
Definition SCFOperators.h:292
tensorT operator()(const vecfuncT &vbra, const vecfuncT &vket) const
compute the matrix <vbra | op | vket>
Definition SCFOperators.h:278
World & world
Definition SCFOperators.h:291
Kinetic(World &world)
Definition SCFOperators.h:256
std::vector< functionT > vecfuncT
Definition SCFOperators.h:252
Function< T, NDIM > functionT
Definition SCFOperators.h:251
std::string info() const
print some information about this operator
Definition SCFOperators.h:260
distmatT kinetic_energy_matrix(World &world, const vecfuncT &v) const
Definition SCFOperators.cc:51
DistributedMatrix< T > distmatT
Definition SCFOperators.h:250
vecfuncT operator()(const vecfuncT &vket) const
apply this operator on the argument vector of functions
Definition SCFOperators.h:267
T operator()(const functionT &bra, const functionT &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:272
functionT operator()(const functionT &ket) const
Definition SCFOperators.h:262
the Laplacian operator: \sum_i \nabla^2_i
Definition SCFOperators.h:355
T operator()(const functionT &bra, const functionT &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:375
double eps
Definition SCFOperators.h:389
Tensor< T > tensorT
Definition SCFOperators.h:358
functionT operator()(const functionT &ket) const
Definition SCFOperators.h:368
Function< T, NDIM > functionT
Definition SCFOperators.h:356
std::string info() const
print some information about this operator
Definition SCFOperators.h:366
tensorT operator()(const vecfuncT &vbra, const vecfuncT &vket) const
compute the matrix <vbra | op | vket>
Definition SCFOperators.h:381
std::vector< functionT > vecfuncT
Definition SCFOperators.h:357
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:362
std::vector< std::shared_ptr< Derivative< T, NDIM > > > gradop
Definition SCFOperators.h:388
World & world
Definition SCFOperators.h:387
Definition SCFOperators.h:664
Tensor< T > operator()(const std::vector< Function< T, NDIM > > &vbra, const std::vector< Function< T, NDIM > > &vket) const
Definition SCFOperators.h:692
std::string info() const
print some information about this operator
Definition SCFOperators.h:670
T operator()(const Function< T, NDIM > &bra, const Function< T, NDIM > &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:688
void set_info(const std::string new_info)
Definition SCFOperators.h:672
std::vector< Function< T, NDIM > > operator()(const std::vector< Function< T, NDIM > > &vket) const
Definition SCFOperators.h:684
Function< T, NDIM > operator()(const Function< T, NDIM > &ket) const
Definition SCFOperators.h:680
Function< T, NDIM > potential
Definition SCFOperators.h:701
LocalPotentialOperator(World &world)
Definition SCFOperators.h:666
World & world
Definition SCFOperators.h:699
std::string info_str
Definition SCFOperators.h:700
LocalPotentialOperator(World &world, const std::string info, const Function< T, NDIM > potential)
Definition SCFOperators.h:667
void set_potential(const Function< T, NDIM > &new_potential)
Definition SCFOperators.h:676
the z component of the angular momentum
Definition SCFOperators.h:564
T operator()(const Function< T, NDIM > &bra, const Function< T, NDIM > &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:608
Lz(World &world, bool use_bspline_derivative=true)
Definition SCFOperators.h:571
Tensor< T > operator()(const std::vector< Function< T, NDIM > > &vbra, const std::vector< Function< T, NDIM > > &vket) const
Definition SCFOperators.h:612
std::vector< Function< T, NDIM > > operator()(const std::vector< Function< T, NDIM > > &vket) const
Definition SCFOperators.h:581
World & world
Definition SCFOperators.h:566
std::string info() const
print some information about this operator
Definition SCFOperators.h:573
Function< T, NDIM > operator()(const Function< T, NDIM > &ket) const
Definition SCFOperators.h:576
bool use_bsplines
Definition SCFOperators.h:569
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
partitionT do_1d_partition(const std::size_t vsize, const std::string policy) const
Definition macrotaskpartitioner.h:251
Definition macrotaskq.h:991
Definition molecule.h:129
The Nemo class.
Definition nemo.h:375
Definition SCFOperators.h:520
Function< T, NDIM > operator()(const Function< T, NDIM > &ket) const
Definition SCFOperators.h:535
T operator()(const Function< T, NDIM > &bra, const Function< T, NDIM > &ket) const
compute the matrix element <bra | op | ket>
Definition SCFOperators.h:542
Tensor< T > operator()(const std::vector< Function< T, NDIM > > &vbra, const std::vector< Function< T, NDIM > > &vket) const
Definition SCFOperators.h:546
std::string info() const
print some information about this operator
Definition SCFOperators.h:533
World & world
Definition SCFOperators.h:554
Nuclear(World &world, std::shared_ptr< NuclearCorrelationFactor > ncf)
Definition SCFOperators.h:530
std::shared_ptr< NuclearCorrelationFactor > ncf
Definition SCFOperators.h:555
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:706
bool has_tau_term() const
true if the functional contributes a non-multiplicative (meta-gga) term
Definition SCFOperators.cc:515
XCOperator(World &world)
default ctor without information about the XC functional
Definition SCFOperators.h:710
TauU1
compute the kinetic energy density and add it to the intermediates
Definition SCFOperators.h:881
@ 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:962
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:794
XCOperator & allow_weak_form()
opt in to the weak form, if the xc_weak_gga parameter asks for it
Definition SCFOperators.h:802
bool is_initialized() const
check if the intermediates are initialized
Definition SCFOperators.h:1027
bool weak_gga
the user asked for the weak form: CalculationParameters::xc_weak_gga()
Definition SCFOperators.h:983
double compute_xc_energy() const
compute the xc energy using the precomputed intermediates vf and delrho
Definition SCFOperators.cc:937
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:765
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:521
XCOperator & set_weak_gga(const bool flag)
override CalculationParameters::xc_weak_gga(), for callers without one
Definition SCFOperators.h:805
std::string info() const
print some information about this operator
Definition SCFOperators.h:753
real_function_3d div_dft_deriv(const vecfuncT &v) const
divergence of a vector field, honouring dft_deriv
Definition SCFOperators.cc:778
real_function_3d make_xc_potential() const
return the local xc potential
Definition SCFOperators.cc:988
bool has_tau_args() const
true once set_tau() has supplied tau, by either route
Definition SCFOperators.cc:962
XCOperator & set_extra_truncation(const double &fac)
Definition SCFOperators.h:755
real_function_3d vtau
de/dtau, the prefactor of the non-multiplicative meta-gga term
Definition SCFOperators.h:968
Function< T, NDIM > operator()(const Function< T, NDIM > &ket) const
apply the xc potential on an orbitals
Definition SCFOperators.h:772
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:1207
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:1133
XCOperator & set_print_level(const int p)
print the meta-gga de/dtau range each time the operator is applied
Definition SCFOperators.h:766
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:781
nemo_u1_functors make_u1_functors() const
the four analytic U1 quantities the xc ops evaluate pointwise
Definition SCFOperators.cc:971
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:505
real_function_3d get_vtau() const
de/dtau, as computed by make_xc_potential()
Definition SCFOperators.h:898
std::string dft_deriv
which derivative operator to use
Definition SCFOperators.h:929
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:528
std::shared_ptr< NuclearCorrelationFactor > ncf
the nuclear correlation factor, if it exists, for computing derivatives for GGA
Definition SCFOperators.h:954
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:690
real_function_3d get_vlocal() const
the multiplicative part of the potential, as make_xc_potential() returned it
Definition SCFOperators.h:853
void set_ispin(const int i) const
set the spin state this operator is acting on
Definition SCFOperators.h:763
double extra_truncation
additional truncation for the densities in the XC kernel
Definition SCFOperators.h:951
int print_level
print level; >=2 logs the meta-gga de/dtau range
Definition SCFOperators.h:932
std::shared_ptr< XCfunctional > xc
interface to the actual XC functionals
Definition SCFOperators.h:936
real_function_3d vlocal
the multiplicative potential, stashed by make_xc_potential()
Definition SCFOperators.h:989
bool is_weak_form() const
Definition SCFOperators.cc:787
real_function_3d make_xc_potential_impl() const
the body of make_xc_potential(); the wrapper only stashes vlocal
Definition SCFOperators.cc:995
World & world
the world
Definition SCFOperators.h:926
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:834
vecfuncT semilocal_flux
the semilocal flux, assigned by make_xc_potential() in weak form only
Definition SCFOperators.h:986
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:1094
int ispin
the XC functionals depend on the spin of the orbitals they act on
Definition SCFOperators.h:943
int nbeta
number of beta orbitals
Definition SCFOperators.h:940
bool weak_form_ok
caller has opted in to the weak form, see allow_weak_form()
Definition SCFOperators.h:977
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
FunctionFactory< double, 3 > real_factory_3d
Definition functypedefs.h:108
Function< double, 3 > real_function_3d
Definition functypedefs.h:80
void print(const T &t, Ts &&... ts)
Print items to std::cout (items separated by spaces) and terminate with a new line.
Definition print.h:232
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< TENSOR_RESULT_TYPE(L, R), NDIM > mul_sparse(const Function< L, NDIM > &left, const Function< R, NDIM > &right, double tol, bool fence=true, bool do_make_redundant=true)
Sparse multiplication; the scalar interface redirects to the vector one in vmra.h.
Definition mra.h:1973
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:2229
@ nemo
nemo's regularized orbitals F = psi/R
static const double thresh
Definition rk.cc:45
Definition macrotaskq.h:280
Definition SCFOperators.h:1050
double operator()(const double &val)
Definition SCFOperators.h:1051
simple structure to take the pointwise exponential of a function, shifted by +14
Definition SCFOperators.h:1048
Tensor< double > operator()(const Key< 3 > &key, const Tensor< double > &val) const
Definition SCFOperators.h:1053
void serialize(Archive &ar)
Definition SCFOperators.h:1060
double resultT
Definition SCFOperators.h:1049
Definition SCFOperators.h:1034
double operator()(const double &val)
Definition SCFOperators.h:1035
simple structure to take the pointwise logarithm of a function, shifted by +14
Definition SCFOperators.h:1032
Tensor< double > operator()(const Key< 3 > &key, const Tensor< double > &val) const
Definition SCFOperators.h:1037
void serialize(Archive &ar)
Definition SCFOperators.h:1044
double resultT
Definition SCFOperators.h:1033
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