MADNESS 0.10.1
znemo.h
Go to the documentation of this file.
1/*
2 * Nemocomplex.h
3 *
4 * Created on: 14 Nov 2018
5 * Author: fbischoff
6 */
7
8#ifndef SRC_APPS_CHEM_ZNEMO_H_
9#define SRC_APPS_CHEM_ZNEMO_H_
10
18#include <madness/chem/nemo.h>
19#include <madness/misc/info.h>
20#include <madness/mra/mra.h>
23#include <madness/mra/vmra.h>
24
25namespace madness {
26
27class Diamagnetic_potential_factor;
28
29
30
32 bool print_nothing_=true;
33 bool print_setup_=false;
34 bool print_energies_=false;
35 bool print_timings_=false;
38
39 printleveler(int printlevel) {
40 print_debug_information_=(printlevel>=10);
41 print_convergence_=(printlevel>=4);
42 print_timings_=(printlevel>=3);
43 print_energies_=(printlevel>=2);
44 print_setup_=(printlevel>=1);
45 }
46
47 bool print_setup() const {return print_setup_;}
48 bool print_energies() const {return print_energies_;}
49 bool print_timings() const {return print_timings_;}
52
53};
54
55
57public:
58
59 /// ctor reading out the input file
61 initialize<double>("physical_B",0.0);
62 initialize<double>("explicit_B",0.0);
63 initialize<std::vector<double> >("box",{1.0, 0.01, 0.0, 0.0, 0.0});
64 initialize<double>("shift",0.0);
65 initialize<int>("printlevel",2); // 0: energies, 1: fock matrix, 2: function sizes
66 initialize<bool>("use_v_vector",false);
67 initialize<double>("potential_radius",-1.0);
68 initialize<std::vector<std::string> >("guess",std::vector<std::string>(),"list of l,m,exponent"); // atomic guess functions l, ml, exponent
69 initialize<std::vector<std::string> >("guess_functions",std::vector<std::string>(),"list function names"); // atomic guess functions l, ml, exponent
70 }
71
73 // read input file
74 read_input_and_commandline_options(world,parser,"complex");
75 }
76
77 std::string get_tag() const override {
78 return std::string("complex");
79 }
80
82 double pb=physical_B();
83 double eb=explicit_B();
84 double remaining_B=fabs(pb-eb);
86
87 double wave_function_radius=2.0*sqrt(-log(thresh)/remaining_B);
88 double potential_radius=wave_function_radius*1.6;
89 double box_radius=wave_function_radius*1.33;
90
91 set_derived_value("box",std::vector<double>{box_radius,0.01});
92 set_derived_value("potential_radius",potential_radius);
94
95 }
96
97 int printlevel() const {return get<int>("printlevel");}
98 double shift() const {return get<double>("shift");}
99 double physical_B() const {return get<double>("physical_b");}
100 double explicit_B() const {return get<double>("explicit_b");}
101 std::vector<double> box() const {return get<std::vector<double> >("box");}
102 double potential_radius() const {return get<double>("potential_radius");}
103 bool use_v_vector() const {return get<bool>("use_v_vector");}
104 std::vector<std::string> guess() const {return get<std::vector<std::string>>("guess");}
105 std::vector<std::string> guess_functions() const {return get<std::vector<std::string>>("guess_functions");}
106
107};
108
109
110class Znemo : public NemoBase, public QCPropertyInterface {
111 friend class Zcis;
112
113 struct potentials {
114 potentials(World& world, const std::size_t nmo) {
115 vnuc_mo=zero_functions<double_complex,3>(world,nmo);
116 diamagnetic_mo=zero_functions<double_complex,3>(world,nmo);
117 lz_mo=zero_functions<double_complex,3>(world,nmo);
118 J_mo=zero_functions<double_complex,3>(world,nmo);
119 K_mo=zero_functions<double_complex,3>(world,nmo);
120 spin_zeeman_mo=zero_functions<double_complex,3>(world,nmo);
121 zeeman_R_comm=zero_functions<double_complex,3>(world,nmo);
122
123 }
124
135
136
137 std::vector<complex_function_3d> vnuc_mo;
138 std::vector<complex_function_3d> diamagnetic_mo;
139 std::vector<complex_function_3d> lz_mo;
140 std::vector<complex_function_3d> J_mo;
141 std::vector<complex_function_3d> K_mo;
142 std::vector<complex_function_3d> spin_zeeman_mo;
143 std::vector<complex_function_3d> lz_commutator;
144 std::vector<complex_function_3d> zeeman_R_comm;
145 };
146public:
147 struct timer {
149 double ttt,sss;
150 bool do_print=true;
151
153 world.gop.fence();
154 ttt=wall_time();
155 sss=cpu_time();
156 }
157
158 void tag(const std::string msg) {
159 world.gop.fence();
160 double tt1=wall_time()-ttt;
161 double ss1=cpu_time()-sss;
162 if (world.rank()==0 and do_print) printf("timer: %20.20s %8.2fs %8.2fs\n", msg.c_str(), ss1, tt1);
163 ttt=wall_time();
164 sss=cpu_time();
165 }
166
167 void end(const std::string msg) {
168 world.gop.fence();
169 double tt1=wall_time()-ttt;
170 double ss1=cpu_time()-sss;
171 if (world.rank()==0 and do_print) printf("timer: %20.20s %8.2fs %8.2fs\n", msg.c_str(), ss1, tt1);
172 }
173 };
174
175
176public:
177 Znemo(World& w, const commandlineparser& parser);
178
179 /// compute the molecular energy
180 double value() {return value(mol.get_all_coords());}
181
182 /// compute the molecular energy
183 double value(const Tensor<double>& x) override;
184
185 void output_calc_info_schema(const double& energy) const;
186
187 std::string name() const override {return "znemo";};
188
189 static void help() {
190 print_header2("help page for ZNEMO ");
191 print("The znemo code computes Hartree-Fock energies and gradients in the presence of a strong");
192 print("magnetic field");
193 print("");
194 print("You can print all available calculation parameters by running\n");
195 print("znemo --print_parameters\n");
196 print("You can perform a simple calculation by running\n");
197 print("znemo --geometry=h2o.xyz\n");
198 print("provided you have an xyz file in your directory.");
199
200 }
201
202 static void print_parameters() {
205 print("default calculations parameters for the znemo program are the same as for the nemo program");
206 print("default parameters for the magnetic field of the znemo program are");
207 zparam.print("complex","end");
208 print("\n\nthe molecular geometry must be specified in a separate block:");
210 }
211
212 bool selftest() override {
213 return true;
214 };
215
216 /// adapt the thresholds consistently to a common value
217 void recompute_factors_and_potentials(const double thresh);
218
219 bool need_recompute_factors_and_potentials(const double thresh) const override;
220 void invalidate_factors_and_potentials() override;
221
222 void iterate();
223
224 Tensor<double> gradient(const Tensor<double>& x) override;
228
229 bool test() const;
230
232 Molecule& molecule() override {return mol;};
233 const Molecule& molecule() const {return mol;};
234
235 /// test the identity <F| f (T + Vdia ) f |F> = <F|f^2 (T + Udia) |F>
236 bool test_U_potentials() const;
237
238 /// analyse the results only
239
240 /// @return the energy
241 double analyze();
242
243 /// compute the expectation value of the kinetic momentum p
245 Tensor<double> p_exp(3);
246 for (auto& mo : amo) p_exp+=imag(inner(world,mo,grad(mo)));
247 for (auto& mo : bmo) p_exp+=imag(inner(world,mo,grad(mo)));
248 return p_exp;
249 }
250
251 /// compute the expectation value of the linear moment r
253 std::vector<real_function_3d> r(3);
254 r[0]=real_factory_3d(world).functor([] (const coord_3d& r) {return r[0];});
255 r[1]=real_factory_3d(world).functor([] (const coord_3d& r) {return r[1];});
256 r[2]=real_factory_3d(world).functor([] (const coord_3d& r) {return r[2];});
257
258 Tensor<double> r_exp(3);
259 for (auto& mo : amo) r_exp+=real(inner(world,mo,r*mo));
260 for (auto& mo : bmo) r_exp+=real(inner(world,mo,r*mo));
261 return r_exp;
262 }
263
264 /// compute the expectation value of the magnetic vector potential A
265 Tensor<double> compute_magnetic_potential_expectation(const std::vector<real_function_3d>& A) const {
266 Tensor<double> A_exp(3);
267 for (auto& mo : amo) A_exp+=real(inner(world,mo,A*mo));
268 for (auto& mo : bmo) A_exp+=real(inner(world,mo,A*mo));
269 return A_exp;
270 }
271
272 /// compute the shift of the molecule such that the kinetic momentum vanishes
274 Tensor<double> S(3);
275 const double B=param.physical_B();
276
277 S(0l)=-p_exp(1);
278 S(1) =p_exp(0l);
279 S(2) =p_exp(2);
280 S*=-2.0/(B*(amo.size()+bmo.size()));
281 return S;
282 }
283
284 /// compute the current density
285 std::vector<real_function_3d> compute_current_density(
286 const std::vector<complex_function_3d>& alpha_mo,
287 const std::vector<complex_function_3d>& beta_mo) const;
288
289 /// compute the magnetic vector potential A
290 static std::vector<real_function_3d> compute_magnetic_vector_potential(World& world,
291 const coord_3d& Bvec) {
292 std::vector<real_function_3d> r(3), A(3);
293 r[0]=real_factory_3d(world).functor([] (const coord_3d& r) {return r[0];});
294 r[1]=real_factory_3d(world).functor([] (const coord_3d& r) {return r[1];});
295 r[2]=real_factory_3d(world).functor([] (const coord_3d& r) {return r[2];});
296
297 A[0]=Bvec[1]*r[2]-Bvec[2]*r[1];
298 A[1]=Bvec[2]*r[0]-Bvec[0l]*r[2];
299 A[2]=Bvec[0l]*r[1]-Bvec[1]*r[0];
300
301 return 0.5*A;
302 }
303
304 /// are there explicit beta orbitals
305 bool have_beta() const {
306 return ((not get_calc_param().spin_restricted()) and (get_calc_param().nbeta()>0));
307 }
308
309 void save_orbitals(std::string suffix) const;
310
311 /// get initial orbitals from guesses
313
314 /// read the guess orbitals from a previous nemo or moldft calculation
315 std::pair<MolecularOrbitals<double_complex,3>, MolecularOrbitals<double_complex,3> >
316 read_real_guess() const;
317
318 /// read the guess orbitals from a previous nemo or moldft calculation
319 std::pair<MolecularOrbitals<double_complex,3>, MolecularOrbitals<double_complex,3> >
320 read_complex_guess() const;
321
322 /// read a list of functions for the guess
323 std::pair<MolecularOrbitals<double_complex,3>, MolecularOrbitals<double_complex,3> >
325
326 /// read guess as projection of the orbitals onto an AO basis set (for geometry optimization)
327 std::pair<MolecularOrbitals<double_complex,3>, MolecularOrbitals<double_complex,3> >
328 read_restartaodata() const;
329
330 /// read orbitals from a znemo calculation
331 std::pair<MolecularOrbitals<double_complex,3>, MolecularOrbitals<double_complex,3> >
332 read_reference() const;
333
334 /// hcore guess including the magnetic field
335 std::pair<MolecularOrbitals<double_complex,3>, MolecularOrbitals<double_complex,3> >
336 hcore_guess() const;
337
338 std::pair<MolecularOrbitals<double_complex,3>, MolecularOrbitals<double_complex,3> >
339 custom_guess() const;
340
341 void save_orbitals() const {
342 std::string name="reference";
343 print("saving orbitals to file",name);
344
346
347 ar & amo.size() & bmo.size() & aeps & beps;
348 for (auto& a: amo) ar & a;
349 for (auto& a: bmo) ar & a;
350
351 // save AO restart data
355
357 }
358
359 void do_step_restriction(const std::vector<complex_function_3d>& mo,
360 std::vector<complex_function_3d>& mo_new) const;
361
362 /// rotate the KAIN subspace (cf. SCF.cc)
363 template<typename solverT>
364 void rotate_subspace(const Tensor<double_complex>& U, solverT& solver) const {
365 double trantol=FunctionDefaults<3>::get_thresh()*0.1;
366 std::vector < std::vector<Function<double_complex, 3> > >&ulist = solver.get_ulist();
367 std::vector < std::vector<Function<double_complex, 3> > >&rlist = solver.get_rlist();
368 for (unsigned int iter = 0; iter < ulist.size(); ++iter) {
369 std::vector<Function<double_complex, 3> >& v = ulist[iter];
370 std::vector<Function<double_complex, 3> >& r = rlist[iter];
371 std::vector<Function<double_complex, 3> > vnew = transform(world, v, U, trantol, false);
372 std::vector<Function<double_complex, 3> > rnew = transform(world, r, U, trantol, true);
373
374 world.gop.fence();
375 for (size_t i=0; i<v.size(); i++) {
376 v[i] = vnew[i];
377 r[i] = rnew[i];
378 }
379 }
380 world.gop.fence();
381 }
382
383 double compute_energy(const std::vector<complex_function_3d>& amo, const potentials& apot,
384 const std::vector<complex_function_3d>& bmo, const potentials& bpot, const bool do_print, const bool no_confinement) const;
385
386 /// compute the potential operators applied on the orbitals
387 potentials compute_potentials(const std::vector<complex_function_3d>& mo,
389 const std::vector<complex_function_3d>& rhs) const;
390
392 const std::vector<complex_function_3d>& mo,
393 const potentials& pot) const;
394
395 std::vector<complex_function_3d> compute_residuals(
396 const std::vector<complex_function_3d>& Vpsi,
397 const std::vector<complex_function_3d>& psi,
398 Tensor<double>& eps,
399 const double levelshift=0.0) const;
400
401 void canonicalize(std::vector<complex_function_3d>& amo,
402 std::vector<complex_function_3d>& vnemo,
403 potentials& pot,
404 XNonlinearSolver<std::vector<complex_function_3d> ,double_complex, vector_function_allocator<double_complex,3> >& solver,
406
407 std::vector<complex_function_3d> orthonormalize(const std::vector<complex_function_3d>& mo) const;
408
409 std::vector<complex_function_3d> normalize(const std::vector<complex_function_3d>& mo) const;
410
411
412 real_function_3d compute_nemo_density(const std::vector<complex_function_3d>& amo,
413 const std::vector<complex_function_3d>& bmo) const {
416 if (get_calc_param().spin_restricted()) density=density.scale(2.0);
417 return density;
418 }
419
420
421 real_function_3d compute_nemo_spin_density(const std::vector<complex_function_3d>& amo,
422 const std::vector<complex_function_3d>& bmo) const {
423 if (get_calc_param().spin_restricted()) return real_function_3d(world);
424
427 return density;
428 }
429
430
431 real_function_3d compute_density(const std::vector<complex_function_3d>& amo,
432 const std::vector<complex_function_3d>& bmo) const;
433
434
435 real_function_3d compute_spin_density(const std::vector<complex_function_3d>& amo,
436 const std::vector<complex_function_3d>& bmo) const;
437
438 std::vector<complex_function_3d> make_bra(const std::vector<complex_function_3d>& mo) const;
439
440
441protected:
442
447
448 /// standard calculation parameters
451
452 std::shared_ptr<Diamagnetic_potential_factor> diafac;
453
454 /// the magnetic field B=rot(A)
456
457 /// nuclear potential
458 std::shared_ptr<PotentialManager> potentialmanager;
459public:
460 /// the molecular orbitals -- alpha
461 std::vector<complex_function_3d> amo, bmo;
462protected:
463 /// the orbital energies
465
466 /// the spherical damping box
468
469 /// the linear moments r={x,y,z}
470 std::vector<real_function_3d> rvec;
471
472 std::shared_ptr<real_convolution_3d> coulop;
473
474
475 struct s_orbital : public FunctionFunctorInterface<double_complex,3> {
476
477 double exponent=1.0;
478 coord_3d origin={0.0,0.0,0.0};
479 s_orbital(const double& expo, const coord_3d& o) :
480 exponent(expo), origin(o) {
482 }
483
484 double_complex operator()(const coord_3d& xyz1) const {
485 coord_3d xyz=xyz1-origin;
486 double r=xyz.normf();
487 return exp(-exponent*r);
488 }
489
490 };
491
492 struct p_orbital : public FunctionFunctorInterface<double_complex,3> {
493
494 long m=0;
495 double exponent=1.0;
496 coord_3d origin={0.0,0.0,0.0};
497 p_orbital(const long& mm, const double& expo, const coord_3d& o)
498 : m(mm), exponent(expo), origin(o) {
499 MADNESS_ASSERT(m>-2 and m<2);
501 }
502
503 double_complex operator()(const coord_3d& xyz1) const {
504 coord_3d xyz=xyz1-origin;
505 double r=xyz.normf();
506
507 if (m==0) {
508 double theta=acos(xyz[2]/r);
509 //double phi=atan2(xyz[1],xyz[0]);
510 return r*exp(-exponent*r)*cos(theta);
511 } else {
512 double theta=acos(xyz[2]/r);
513 double phi=atan2(xyz[1],xyz[0]);
514 return r*exp(-exponent*r)*sin(theta)*exp(double(m)*double_complex(0.0,1.0)*phi);
515 }
516 }
517
518 };
519
520 /// following Doucot Pascier 2005
522
523 int m=0;
524 double l=0.0; ///< radius Eq. (29)
525 coord_3d origin={0.0,0.0,0.0};
526
527 landau_wave_function(const int m, const double B,
528 const coord_3d& origin={0.0,0.0,0.0})
529 : m(m), l(1.0/sqrt(B)), origin(origin) {
530 print("origin",origin);
531 MADNESS_ASSERT(m>=0);
532 MADNESS_ASSERT(B>0);
533 }
534
535 /// following Eq. (43)
536 double_complex operator()(const coord_3d& xyz1) const {
537 const coord_3d xyz=xyz1-origin;
538 const double_complex z(xyz[0],xyz[1]); // z = x + iy
539 const double_complex zbar(xyz[0],-xyz[1]);
540
541 double z_confinement=exp(-0.01*xyz[2]); // make wf decay in z-direction
542 return std::pow(zbar/l,double(m)) * exp(-0.25*zbar*z/(l*l)) * z_confinement;
543 }
544 };
545
546 public:
547 void test_compute_current_density() const;
548
549public:
551};
552
553
554
555
556} // namespace madness
557#endif /* SRC_APPS_CHEM_ZNEMO_H_ */
double w(double t, double eps)
Definition DKops.h:22
Operators for the molecular HF and DFT code.
std::complex< double > double_complex
Definition cfft.h:14
Definition test_ar.cc:118
Definition test_ar.cc:141
Contracted Gaussian basis.
Definition madness/chem/molecularbasis.h:469
static const double & get_thresh()
Returns the default threshold.
Definition funcdefaults.h:176
Abstract base class interface required for functors used as input to Functions.
Definition function_interface.h:68
Function< T, NDIM > & scale(const Q q, bool fence=true)
Inplace, scale the function by a constant. No communication except for optional fence.
Definition mra.h:995
Definition MolecularOrbitals.h:24
static void save_restartaodata(World &world, const Molecule &molecule, const MolecularOrbitals< T, NDIM > &amo, const MolecularOrbitals< T, NDIM > &bmo, const AtomicBasisSet &aobasis)
save MOs in the AO projection for geometry restart
Definition MolecularOrbitals.cc:83
MolecularOrbitals & update_mos_and_eps(const std::vector< Function< T, NDIM > > &mo_new, const Tensor< double > &eps_new)
updates will keep other member variables
Definition MolecularOrbitals.h:109
Definition molecule.h:129
madness::Tensor< double > get_all_coords() const
Definition molecule.cc:402
static void print_parameters()
Definition molecule.cc:115
Definition nemo.h:69
Function< typename Tensor< T >::scalar_type, NDIM > compute_density(const std::vector< Function< T, NDIM > > nemo) const
Definition nemo.h:139
World & world
Definition nemo.h:310
std::vector< std::string > guess() const
Definition znemo.h:104
std::string get_tag() const override
Definition znemo.h:77
Nemo_complex_Parameters()
ctor reading out the input file
Definition znemo.h:60
int printlevel() const
Definition znemo.h:97
std::vector< std::string > guess_functions() const
Definition znemo.h:105
std::vector< double > box() const
Definition znemo.h:101
double shift() const
Definition znemo.h:98
Nemo_complex_Parameters(World &world, const commandlineparser &parser)
Definition znemo.h:72
bool use_v_vector() const
Definition znemo.h:103
double physical_B() const
Definition znemo.h:99
double explicit_B() const
Definition znemo.h:100
double potential_radius() const
Definition znemo.h:102
void set_derived_values()
Definition znemo.h:81
class for holding the parameters for calculation
Definition QCCalculationParametersBase.h:294
virtual void read_input_and_commandline_options(World &world, const commandlineparser &parser, const std::string tag)
Definition QCCalculationParametersBase.h:330
void print(const std::string header="", const std::string footer="") const
print all parameters
Definition QCCalculationParametersBase.cc:22
void set_derived_value(const std::string &key, const T &value)
Definition QCCalculationParametersBase.h:408
class implementing properties of QC models
Definition QCPropertyInterface.h:11
virtual real_function_3d density() const
Definition QCPropertyInterface.h:25
A tensor is a multidimensional array.
Definition tensor.h:317
constexpr T normf() const
Calculate the 2-norm of the vector elements.
Definition vector.h:421
void fence(bool debug=false)
Synchronizes all processes in communicator AND globally ensures no pending AM or tasks.
Definition worldgop.cc:161
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
Generalized version of NonlinearSolver not limited to a single madness function.
Definition nonlinsol.h:207
Definition zcis.h:67
Definition znemo.h:110
AtomicBasisSet aobasis
Definition znemo.h:445
printleveler print_info
Definition znemo.h:446
Molecule & molecule() override
return the molecule of the target
Definition znemo.h:232
std::shared_ptr< Diamagnetic_potential_factor > diafac
Definition znemo.h:452
Tensor< double > aeps
the orbital energies
Definition znemo.h:464
std::vector< real_function_3d > rvec
the linear moments r={x,y,z}
Definition znemo.h:470
void do_step_restriction(const std::vector< complex_function_3d > &mo, std::vector< complex_function_3d > &mo_new) const
Definition madness/chem/znemo.cc:747
potentials compute_potentials(const std::vector< complex_function_3d > &mo, const real_function_3d &density, const std::vector< complex_function_3d > &rhs) const
compute the potential operators applied on the orbitals
Definition madness/chem/znemo.cc:1064
void rotate_subspace(const Tensor< double_complex > &U, solverT &solver) const
rotate the KAIN subspace (cf. SCF.cc)
Definition znemo.h:364
std::vector< complex_function_3d > compute_residuals(const std::vector< complex_function_3d > &Vpsi, const std::vector< complex_function_3d > &psi, Tensor< double > &eps, const double levelshift=0.0) const
Definition madness/chem/znemo.cc:1125
const CalculationParameters & get_calc_param() const
Definition znemo.h:231
std::pair< MolecularOrbitals< double_complex, 3 >, MolecularOrbitals< double_complex, 3 > > read_real_guess() const
read the guess orbitals from a previous nemo or moldft calculation
Definition madness/chem/znemo.cc:849
double compute_energy(const std::vector< complex_function_3d > &amo, const potentials &apot, const std::vector< complex_function_3d > &bmo, const potentials &bpot, const bool do_print, const bool no_confinement) const
Definition madness/chem/znemo.cc:535
std::pair< MolecularOrbitals< double_complex, 3 >, MolecularOrbitals< double_complex, 3 > > read_reference() const
read orbitals from a znemo calculation
Definition madness/chem/znemo.cc:938
std::vector< complex_function_3d > amo
the molecular orbitals – alpha
Definition znemo.h:461
std::pair< MolecularOrbitals< double_complex, 3 >, MolecularOrbitals< double_complex, 3 > > read_restartaodata() const
read guess as projection of the orbitals onto an AO basis set (for geometry optimization)
Definition madness/chem/znemo.cc:918
bool test_U_potentials() const
test the identity <F| f (T + Vdia ) f |F> = <F|f^2 (T + Udia) |F>
Definition madness/chem/znemo.cc:115
Tensor< double > beps
Definition znemo.h:464
Tensor< double > compute_standard_gauge_shift(const Tensor< double > &p_exp) const
compute the shift of the molecule such that the kinetic momentum vanishes
Definition znemo.h:273
void test_landau_wave_function()
Definition madness/chem/znemo.cc:719
bool need_recompute_factors_and_potentials(const double thresh) const override
Definition madness/chem/znemo.cc:56
void output_calc_info_schema(const double &energy) const
Definition madness/chem/znemo.cc:174
std::string name() const override
Definition znemo.h:187
real_function_3d sbox
the spherical damping box
Definition znemo.h:467
void iterate()
Definition madness/chem/znemo.cc:206
std::vector< complex_function_3d > make_bra(const std::vector< complex_function_3d > &mo) const
Definition madness/chem/znemo.cc:359
bool have_beta() const
are there explicit beta orbitals
Definition znemo.h:305
std::vector< complex_function_3d > bmo
Definition znemo.h:461
void test_compute_current_density() const
Definition madness/chem/znemo.cc:701
Tensor< double > compute_kinetic_momentum() const
compute the expectation value of the kinetic momentum p
Definition znemo.h:244
Tensor< double > compute_magnetic_potential_expectation(const std::vector< real_function_3d > &A) const
compute the expectation value of the magnetic vector potential A
Definition znemo.h:265
coord_3d B
the magnetic field B=rot(A)
Definition znemo.h:455
std::pair< MolecularOrbitals< double_complex, 3 >, MolecularOrbitals< double_complex, 3 > > read_explicit_guess_functions() const
read a list of functions for the guess
Definition madness/chem/znemo.cc:892
std::vector< complex_function_3d > orthonormalize(const std::vector< complex_function_3d > &mo) const
Definition madness/chem/znemo.cc:336
double value()
compute the molecular energy
Definition znemo.h:180
real_function_3d compute_density(const std::vector< complex_function_3d > &amo, const std::vector< complex_function_3d > &bmo) const
Definition madness/chem/znemo.cc:349
void save_orbitals() const
Definition znemo.h:341
Nemo::NemoCalculationParameters nemo_param
standard calculation parameters
Definition znemo.h:449
std::shared_ptr< PotentialManager > potentialmanager
nuclear potential
Definition znemo.h:458
real_function_3d compute_nemo_spin_density(const std::vector< complex_function_3d > &amo, const std::vector< complex_function_3d > &bmo) const
Definition znemo.h:421
void get_initial_orbitals()
get initial orbitals from guesses
Definition madness/chem/znemo.cc:771
void canonicalize(std::vector< complex_function_3d > &amo, std::vector< complex_function_3d > &vnemo, potentials &pot, XNonlinearSolver< std::vector< complex_function_3d >, double_complex, vector_function_allocator< double_complex, 3 > > &solver, Tensor< double_complex > fock, Tensor< double_complex > ovlp) const
Definition madness/chem/znemo.cc:1172
real_function_3d compute_nemo_density(const std::vector< complex_function_3d > &amo, const std::vector< complex_function_3d > &bmo) const
Definition znemo.h:412
std::shared_ptr< real_convolution_3d > coulop
Definition znemo.h:472
Tensor< double > gradient()
Definition znemo.h:225
std::pair< MolecularOrbitals< double_complex, 3 >, MolecularOrbitals< double_complex, 3 > > read_complex_guess() const
read the guess orbitals from a previous nemo or moldft calculation
Definition madness/chem/znemo.cc:884
void recompute_factors_and_potentials(const double thresh)
adapt the thresholds consistently to a common value
Definition madness/chem/znemo.cc:70
static std::vector< real_function_3d > compute_magnetic_vector_potential(World &world, const coord_3d &Bvec)
compute the magnetic vector potential A
Definition znemo.h:290
Tensor< double > compute_linear_moment() const
compute the expectation value of the linear moment r
Definition znemo.h:252
real_function_3d compute_spin_density(const std::vector< complex_function_3d > &amo, const std::vector< complex_function_3d > &bmo) const
Definition madness/chem/znemo.cc:354
std::pair< MolecularOrbitals< double_complex, 3 >, MolecularOrbitals< double_complex, 3 > > custom_guess() const
Definition madness/chem/znemo.cc:963
static void print_parameters()
Definition znemo.h:202
Molecule mol
Definition znemo.h:443
Tensor< double_complex > compute_vmat(const std::vector< complex_function_3d > &mo, const potentials &pot) const
Definition madness/chem/znemo.cc:1105
void invalidate_factors_and_potentials() override
Definition madness/chem/znemo.cc:64
double analyze()
analyse the results only
Definition madness/chem/znemo.cc:364
std::pair< MolecularOrbitals< double_complex, 3 >, MolecularOrbitals< double_complex, 3 > > hcore_guess() const
hcore guess including the magnetic field
Definition madness/chem/znemo.cc:1002
bool selftest() override
Definition znemo.h:212
static void help()
Definition znemo.h:189
CalculationParameters calc_param
Definition znemo.h:450
std::vector< complex_function_3d > normalize(const std::vector< complex_function_3d > &mo) const
Definition madness/chem/znemo.cc:342
bool test() const
Definition madness/chem/znemo.cc:102
Nemo_complex_Parameters param
Definition znemo.h:444
const Molecule & molecule() const
Definition znemo.h:233
std::vector< real_function_3d > compute_current_density(const std::vector< complex_function_3d > &alpha_mo, const std::vector< complex_function_3d > &beta_mo) const
compute the current density
Definition madness/chem/znemo.cc:630
An archive for storing local or parallel data wrapping a BinaryFstreamOutputArchive.
Definition parallel_archive.h:321
double(* energy)()
Definition derivatives.cc:58
double psi(const Vector< double, 3 > &r)
Definition hatom_energy.cc:78
static const double v
Definition hatom_sf_dirac.cc:20
Defines functions that give information on this version of MADNESS.
double ss1
Definition lapack.cc:62
double tt1
Definition lapack.cc:62
#define MADNESS_ASSERT(condition)
Assert a condition that should be free of side-effects since in release builds this might be a no-op.
Definition madness_exception.h:134
optimize the geometrical structure of a molecule
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
static double cpu_time()
Returns the cpu time in seconds relative to an arbitrary origin.
Definition timers.h:127
std::vector< Function< TENSOR_RESULT_TYPE(T, R), NDIM > > transform(World &world, const std::vector< Function< T, NDIM > > &v, const Tensor< R > &c, bool fence=true)
Transforms a vector of functions according to new[i] = sum[j] old[j]*c[j,i].
Definition vmra.h:707
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:225
double wall_time()
Returns the wall time in seconds relative to an arbitrary origin.
Definition timers.cc:48
Function< double, 3 > real_function_3d
Definition functypedefs.h:80
double inner(response_space &a, response_space &b)
Definition response_functions.h:640
double imag(double x)
Definition complexfun.h:56
std::vector< Function< T, NDIM > > grad(const Function< T, NDIM > &f, bool refine=false, bool fence=true)
shorthand gradient operator
Definition vmra.h:2033
double real(double x)
Definition complexfun.h:52
static const double a
Definition nonlinschro.cc:118
Implementation of Krylov-subspace nonlinear equation solver.
Implements most functionality of separated operators.
static const double thresh
Definition rk.cc:45
Definition CalculationParameters.h:51
class holding parameters for a nemo calculation beyond the standard dft parameters from moldft
Definition nemo.h:333
following Doucot Pascier 2005
Definition znemo.h:521
coord_3d origin
Definition znemo.h:525
double l
radius Eq. (29)
Definition znemo.h:524
double_complex operator()(const coord_3d &xyz1) const
following Eq. (43)
Definition znemo.h:536
int m
Definition znemo.h:523
landau_wave_function(const int m, const double B, const coord_3d &origin={0.0, 0.0, 0.0})
Definition znemo.h:527
Definition znemo.h:492
double exponent
Definition znemo.h:495
p_orbital(const long &mm, const double &expo, const coord_3d &o)
Definition znemo.h:497
long m
Definition znemo.h:494
double_complex operator()(const coord_3d &xyz1) const
Definition znemo.h:503
coord_3d origin
Definition znemo.h:496
Definition znemo.h:113
potentials(World &world, const std::size_t nmo)
Definition znemo.h:114
std::vector< complex_function_3d > lz_mo
Definition znemo.h:139
std::vector< complex_function_3d > diamagnetic_mo
Definition znemo.h:138
std::vector< complex_function_3d > lz_commutator
Definition znemo.h:143
void transform(const Tensor< double_complex > &U)
Definition znemo.h:125
std::vector< complex_function_3d > zeeman_R_comm
Definition znemo.h:144
std::vector< complex_function_3d > spin_zeeman_mo
Definition znemo.h:142
std::vector< complex_function_3d > J_mo
Definition znemo.h:140
std::vector< complex_function_3d > vnuc_mo
Definition znemo.h:137
std::vector< complex_function_3d > K_mo
Definition znemo.h:141
Definition znemo.h:475
coord_3d origin
Definition znemo.h:478
s_orbital(const double &expo, const coord_3d &o)
Definition znemo.h:479
double exponent
Definition znemo.h:477
double_complex operator()(const coord_3d &xyz1) const
Definition znemo.h:484
Definition znemo.h:147
void tag(const std::string msg)
Definition znemo.h:158
bool do_print
Definition znemo.h:150
void end(const std::string msg)
Definition znemo.h:167
World & world
Definition znemo.h:148
double sss
Definition znemo.h:149
timer(World &world, bool do_print=true)
Definition znemo.h:152
double ttt
Definition znemo.h:149
very simple command line parser
Definition commandlineparser.h:15
Definition znemo.h:31
bool print_timings_
Definition znemo.h:35
bool print_convergence_
Definition znemo.h:36
bool print_setup() const
Definition znemo.h:47
bool print_energies_
Definition znemo.h:34
bool print_convergence() const
Definition znemo.h:50
bool print_energies() const
Definition znemo.h:48
bool print_debug() const
Definition znemo.h:51
bool print_nothing_
Definition znemo.h:32
printleveler(int printlevel)
Definition znemo.h:39
bool print_debug_information_
Definition znemo.h:37
bool print_timings() const
Definition znemo.h:49
bool print_setup_
Definition znemo.h:33
Definition nonlinsol.h:174
Defines operations on vectors of Functions.