MADNESS 0.10.1
InitParameters.h
Go to the documentation of this file.
1
2/// \file InitParameters
3/// \brief Input parameters for a Dirac Fock calculation, read from a specified archive resulting from a nonrelativistic moldft calculation or restarted from a previous Dirac Fock calculation.
4
5
6#ifndef MADNESS_APPS_DFGUESSPARAMS_H_INCLUDED
7#define MADNESS_APPS_DFGUESSPARAMS_H_INCLUDED
8
9#include "fcwf.h"
10#include <madness/chem/NWChem.h>
12#include "DFParameters.h"
13#include "DFRestart.h"
14
16double myxfunc(const madness::coord_3d& r);
17double myyfunc(const madness::coord_3d& r);
18
19namespace madness{
20
21
23 // Ground state parameters that are read in from archive
24 std::string inFile; ///< Name of input archive to read in
25 double Init_total_energy; ///< Total energy of the nonrelativistic ground state
26 double conv_thresh; ///< Convergence threshold for MOs
27 bool spinrestricted; ///< Indicates if input calc. was spin-restricted
29 unsigned int num_occupied; ///< Number of orbitals
30 Tensor<double> energies; ///< Energies of input orbitals
31 Tensor<double> occ; ///< Occupancy of input orbitals
32 double L; ///< Box size of input - Dirac Fock calcluation is in same box
33 int order; ///< Order of polynomial used in input
34 Molecule molecule; ///< The molecule used in input calculation
35 std::vector<Fcwf> orbitals; ///< The occupied orbitals
36
37 // Default constructor
39
40 // Initializes InitParameters using the contents of file \c filename
41 void read(World& world, const std::string& raw_filename, const double& myc, bool restart, bool Krestricted){
42 // Save the filename (normalized to strip .00000 chunk suffix if present)
43 std::string filename = clean_archive_filename(raw_filename);
45
46 //First check to see if we're starting the job from a saved DF calculation rather than a moldft calculation
47 if(restart){
48 if(world.rank()==0) print("\n Reading initial data from restarted DF calculation");
49 archive::ParallelInputArchive input(world, filename.c_str());
50
51 //Validate the restart format before any other read. Rank 0 owns
52 //the local stream, so only rank 0 sees the type cookie mismatch
53 //of a legacy archive. Rank 0 reads the version and broadcasts it.
54 //Every rank then throws together. If rank 0 threw inside
55 //wrap_load, its unconditional broadcast strands the other ranks.
56 unsigned int version = 0;
57 if(world.rank() == 0) version = read_df_restart_version(input.local_archive());
58 input.broadcast(version, 0);
60
61 input & Init_total_energy;
62 input & spinrestricted;
63 input & closed_shell;
64 input & num_occupied;
65 input & energies;
66 input & L;
67 input & order;
68 input & molecule;
69
70 //Code breaks if spinrestricted (state of archive) and Krestricted (requested by user) don't match
71 //This functionality could probably be added at some point, but it's a bit of work
72 MADNESS_CHECK(spinrestricted == Krestricted);
73
74 // Set this so we can read in whats
75 // written in the archive
78
79 //Now we just have to unpack the orbitals
80 for(unsigned int i=0; i < num_occupied; i++){
81 Fcwf reader(world, myc);
82 for(int j=0; j < 4; j++){
83 input & reader[j];
84 }
85 orbitals.push_back(copy(reader));
86 }
87 }
88 else{ //If we're not reading in from DF, then we're reading in from moldft
89
90 //some dummy variables for reading/computing
91 std::vector<int> dummy2;
92 Tensor<double> temp_energies;
93
94 //read in what's in the archive. See SCF::save_mos for how these archives are stored
95 archive::ParallelInputArchive input(world, filename.c_str());
96 RestartMetadata meta;
97 meta.read(input);
98
100 if (world.rank() == 0) {
101 print("ERROR: restartdata holds '" + madness::to_string(meta.representation) +
102 "' functions, but DFdriver expects standard MOs.");
103 }
104 MADNESS_EXCEPTION("restartdata representation does not match DFdriver", 1);
105 }
106
109 L = meta.L;
110 order = meta.k;
111 molecule = meta.molecule;
113
114 input & num_occupied; // unsigned int
115 input & temp_energies; // Tensor<double> orbital energies
116 input & occ; // Tensor<double> orbital occupations
117 input & dummy2; // std::vector<int> sets of orbitals(?)
118
119 //For now assume spin-restricted means closed shell in moldft
121 if(world.rank()==0 && closed_shell && !Krestricted) print("\n ***PLEASE NOTE***\n closed shell: add Krestricted to the input to halve the cost");
122
123 // Check that order is positive and less than 30
124 if (order < 1 or order > 30){
125 if(world.rank() == 0) print("\n ***PLEASE NOTE***\n Invalid wavelet order read from archive, setting to 8.\n This seems to happen when the default wavelet order is used in moldft.");
126 order = 8;
127 }
128
129 // Set this so we can read in whats
130 // written in the archive
133
134 //Now read in the orbitals and construct Fcwfs from them.
135 complex_derivative_3d Dx(world,0);
136 complex_derivative_3d Dy(world,1);
137 complex_derivative_3d Dz(world,2);
138 //double myc = 137.03599917697017; //speed of light in atomic units from CODATA 2022
139 std::complex<double> myi(0,1);
140 if(spinrestricted){
141 //If the calculation was spin-restricted in moldft, then we only have "spin-up" orbitals
142
143 //Initialize some functions for reading in the orbitals
144 real_function_3d reader;
145 complex_function_3d complexreader;
146 Fcwf spinup(world, myc);
147 Fcwf spindown(world, myc); //used if !Krestricted
148 real_function_3d xfunc = real_factory_3d(world).f(myxfunc);
149 real_function_3d yfunc = real_factory_3d(world).f(myyfunc);
150
151 //Handle the Kramers-restricted and unrestricted cases differently.
152 //This code collapses a closed shell onto Kramers pairs only under Krestricted.
153 if(Krestricted){
154 //Loop over the occupied orbitals and convert
155 for(unsigned int i = 0; i < num_occupied; i++){
156 //read in orbital
157 input & reader;
158
159 //change to a complex function
160 complexreader = function_real2complex(reader);
161
162 //build up the corresponding fcwfs, using kinetic balance to define the small component
163 spinup[0] = complexreader;
164 spinup[1] = complex_factory_3d(world);
165 spinup[2] = (-myi) * Dz(complexreader);
166 spinup[2].scale(0.5);
167 spinup[3] = (-myi) * (Dx(complexreader) + myi * Dy(complexreader));
168 spinup[3].scale(0.5);
169 spinup.normalize();
170 orbitals.push_back(spinup);
171 }
172
173 //Update energies
174 energies = temp_energies;
175 }
176 else{
177 //Loop over the occupied orbitals and convert
178 for(unsigned int i = 0; i < num_occupied; i++){
179 //read in orbital
180 input & reader;
181
182 //change to a complex function
183 complexreader = function_real2complex(reader);
184
185 //build up the corresponding fcwfs, using kinetic balance to define the small component
186 spinup[0] = complexreader;
187 spinup[1] = complex_factory_3d(world);
188 spinup[2] = (-myi) * Dz(complexreader);
189 spinup[2].scale(0.5);
190 spinup[3] = (-myi) * (Dx(complexreader) + myi * Dy(complexreader));
191 spinup[3].scale(0.5);
192 spinup.normalize();
193 spindown[0] = complex_factory_3d(world);
194 spindown[1] = complexreader;
195 spindown[2] = (-myi) * (Dx(complexreader) - myi * Dy(complexreader));
196 spindown[2].scale(0.5);
197 spindown[3] = (myi) * Dz(complexreader);
198 spindown[3].scale(0.5);
199 spindown.normalize();
200 orbitals.push_back(spinup);
201 orbitals.push_back(spindown);
202 }
203
204 //Double length of energies tensor and fill in as needed.
206 for(unsigned int i = 0; i < num_occupied; i++){
207 energies[2*i] = temp_energies[i];
208 energies[2*i+1] = temp_energies[i];
209 }
210 num_occupied *= 2;
211 }
212 }
213 else{
214
215 if(world.rank()==0) print("number of alpha read in from moldft is:" ,num_occupied);
216
217 // Read in alpha ground state orbitals
218 real_function_3d reader;
219 complex_function_3d complexreader;
220 Fcwf fcwfreader(world, myc);
221 for(unsigned int i = 0; i < num_occupied; i++){
222 input & reader;
223 complexreader = function_real2complex(reader);
224 fcwfreader[0] = complexreader;
225 fcwfreader[1] = complex_factory_3d(world);
226 fcwfreader[2] = (-myi) * Dz(complexreader);
227 fcwfreader[2].scale(0.5);
228 fcwfreader[3] = (-myi) * (Dx(complexreader) + myi * Dy(complexreader));
229 fcwfreader[3].scale(0.5);
230 fcwfreader.normalize();
231 orbitals.push_back(fcwfreader);
232 }
233
234 if(!Krestricted){
235 // Read in beta quantities
236 unsigned int num_betas=0;
237 input & num_betas;
238
239 Tensor<double> beta_energies;
240 input & beta_energies;
241
242 Tensor<double> dummy3;
243 input & dummy3;
244
245 std::vector<int> dummy4;
246 input & dummy4;
247
248 //read in beta ground state orbitals
249 for(unsigned int i = 0; i < num_betas; i++){
250 input & reader;
251 complexreader = function_real2complex(reader);
252 fcwfreader[0] = complex_factory_3d(world);
253 fcwfreader[1] = complexreader;
254 fcwfreader[2] = (-myi) * (Dx(complexreader) - myi * Dy(complexreader));
255 fcwfreader[2].scale(0.5);
256 fcwfreader[3] = (myi) * Dz(complexreader);
257 fcwfreader[3].scale(0.5);
258 fcwfreader.normalize();
259 orbitals.push_back(fcwfreader);
260 }
261
262 //Handle energy tensor and number of occupied orbitals
263 energies = Tensor<double>(num_occupied + num_betas);
264 for(unsigned int i = 0; i < num_occupied; i++){
265 energies(i) = temp_energies(i);
266 }
267 for(unsigned int i = 0; i < num_betas; i++){
268 energies(num_occupied + i) = beta_energies(i);
269 }
270 num_occupied += num_betas;
271
272 }
273 else{
274 energies = temp_energies;
275 }
276
277
278
279 }
280
281 //reorder orbitals and energies in ascending order, if necessary.
282 double tempdouble;
283 Fcwf fcwfreader(world, myc);
284 for(unsigned int i = 0; i < num_occupied; i++){
285 for(unsigned int j = i+1; j < num_occupied; j++){
286 if(energies(j) < energies(i)){
287 if(world.rank()==0) print("swapping orbitals", i, " and ", j);
288 tempdouble = energies(j);
289 energies(j) = energies(i);
290 energies(i) = tempdouble;
291 fcwfreader = orbitals[j];
292 orbitals[j] = orbitals[i];
293 orbitals[i] = fcwfreader;
294 }
295 }
296 }
297 }
298 }
299
300 //This function no longer works
301 //TODO: Update this function before using it
302 void readnw(World& world, const std::string& filename, const double& myc, bool Krestricted){
303 //Called to read in initial parameters from an nwchem output file
304
305 //For now just use default values for L and order
306 order = 6;
307 L = 50.0;
310
311 //Need to set this to something...
312 Init_total_energy = 0.0;
313
314 //Construct interface object from slymer namespace
316
317 //For parallel runs, silencing all but 1 slymer instance
318 if(world.rank() != 0) {
319 std::ostream dev_null(nullptr);
320 nwchem.err = dev_null;
321 }
322
323 //Read in basis set
325
326 //Read in the molecular orbital coefficients, energies, and occupancies
328
329 //Need to construct a molecule object by ourselves
330 molecule = Molecule();
331 unsigned int anum;
332 double x,y,z,q;
333 for(unsigned int i=0; i < nwchem.atoms.size(); i++){
334 anum = symbol_to_atomic_number(nwchem.atoms[i].symbol);
335 q = anum*1.0;
336 x = nwchem.atoms[i].position[0];
337 y = nwchem.atoms[i].position[1];
338 z = nwchem.atoms[i].position[2];
339 molecule.add_atom(x,y,z,q,anum);
340 }
341
342 //Find out how many orbitals we're dealing with by looking at the occupancies
343 unsigned int numalpha(0), numbeta(0);
344
345 bool have_beta(false);
346 for(unsigned int i = 0; i < nwchem.beta_occupancies.size(); i++){
347 if(nwchem.beta_occupancies[i] > 0.0) have_beta = true;
348 }
349
350 if(have_beta){
351 //we're reading from an unrestricted calculation
352 //and for now we will assume this is an open shell calculation
353 for(unsigned int i = 0; i < nwchem.occupancies.size(); i++){
354 if(nwchem.occupancies[i] == 1.0) numalpha+=1;
355 }
356 for(unsigned int i = 0; i < nwchem.beta_occupancies.size(); i++){
357 if(nwchem.beta_occupancies[i] == 1.0) numbeta+=1;
358 }
359
360 //Right now DF can only handle a single unpaired electron
361 MADNESS_CHECK(numalpha-1 == numbeta);
362 }
363 else{
364 for(unsigned int i = 0; i < nwchem.occupancies.size(); i++){
365 if(nwchem.occupancies[i] == 2.0) numalpha += 1;
366 }
367 numbeta = numalpha;
368 }
369 closed_shell = !have_beta;
370 if(world.rank()==0 && closed_shell && !Krestricted) print("\n ***PLEASE NOTE***\n closed shell: add Krestricted to the input to halve the cost");
371
372 //correctly set the number of occupied orbitals for the DF calculation
373 if(Krestricted){
374 num_occupied = numalpha;
375 }
376 else{
377 num_occupied = numalpha+numbeta;
378 }
379
380
381 //Let's print everything so we have a visual check on what we're working with (for now)
382 if(world.rank()==0) print("\nalpha occupancies:\n",nwchem.occupancies);
383 if(world.rank()==0) print("\nbeta occupancies:\n",nwchem.beta_occupancies);
384 if(world.rank()==0) print("\nenergies:\n",nwchem.energies);
385 if(world.rank()==0) print("\nbeta energies:\n",nwchem.beta_energies);
386 if(world.rank()==0) print("num alpha",numalpha);
387 if(world.rank()==0) print("num beta",numbeta);
388
389
390 //Now that we know how many orbitals we have. initialize and fill energy tensor
392 if(Krestricted){
393 for(unsigned int i=0; i < numalpha; i++){
394 energies[i] = nwchem.energies[i];
395 }
396 }
397 else{
398 if(closed_shell){
399 for(unsigned int i=0; i < numalpha; i++){
400 energies[2*i] = nwchem.energies[i];
401 energies[2*i+1] = nwchem.energies[i];
402 }
403 }
404 else{
405 for(unsigned int i=0; i < numalpha-1; i++){
406 energies[2*i] = nwchem.energies[i];
407 energies[2*i+1] = nwchem.energies[i];
408 }
409 energies[2*(numalpha-1)] = nwchem.energies[numalpha-1];
410 }
411 }
412
413 //Cast the 'basis set' into a Gaussian basis and iterate over it
415 int ii = 0;
416 for(auto basis : slymer::cast_basis<slymer::GaussianFunction>(nwchem.basis_set)) {
417 //Get the center of gaussian as its special point
418 std::vector<coord_3d> centers;
419 coord_3d r;
420 r[0] = basis.get().center[0]; r[1] = basis.get().center[1]; r[2] = basis.get().center[2];
421 centers.push_back(r);
422
423 //Now make the function
424 temp1.push_back(FunctionFactory<double,3>(world).functor(std::shared_ptr<FunctionFunctorInterface<double,3>>(new slymer::Gaussian_Functor(basis.get(), centers))));
425 double norm2 = temp1[ii].norm2();
426 if(world.rank() == 0) print("function", ii, "has norm", norm2);
427 ii++;
428 }
429
430 //Normalize aos
431 normalize(world, temp1);
432
433 //Transform aos now to get alpha mos
434 vector_real_function_3d temp = transform(world, temp1, nwchem.MOs , true);
435
436 //Convert and store alpha occupied MOs.
437 complex_function_3d complexreader(world);
438 Fcwf spinup(world, myc);
439 Fcwf spindown(world, myc);
440 complex_derivative_3d Dx(world,0);
441 complex_derivative_3d Dy(world,1);
442 complex_derivative_3d Dz(world,2);
443 std::complex<double> myi(0,1);
444 for(unsigned int i = 0; i < numalpha-1; i++){
445 complexreader = function_real2complex(temp[i]);
446 spinup[0] = complexreader;
447 spinup[1] = complex_factory_3d(world);
448 spinup[2] = (-myi) * Dz(complexreader);
449 spinup[2].scale(0.5);
450 spinup[3] = (-myi) * (Dx(complexreader) + myi * Dy(complexreader));
451 spinup[3].scale(0.5);
452 spinup.normalize();
453 orbitals.push_back(spinup);
454 if(!Krestricted){
455 spindown[0] = complex_factory_3d(world);
456 spindown[1] = complexreader;
457 spindown[2] = (-myi) * (Dx(complexreader) - myi * Dy(complexreader));
458 spindown[2].scale(0.5);
459 spindown[3] = (myi) * Dz(complexreader);
460 spindown[3].scale(0.5);
461 spindown.normalize();
462 orbitals.push_back(spindown);
463 }
464 }
465 complexreader = function_real2complex(temp[numalpha-1]);
466 spinup[0] = complexreader;
467 spinup[1] = complex_factory_3d(world);
468 spinup[2] = (-myi) * Dz(complexreader);
469 spinup[2].scale(0.5);
470 spinup[3] = (-myi) * (Dx(complexreader) + myi * Dy(complexreader));
471 spinup[3].scale(0.5);
472 spinup.normalize();
473 orbitals.push_back(spinup);
474 if(!have_beta and not Krestricted){
475 spindown[0] = complex_factory_3d(world);
476 spindown[1] = complexreader;
477 spindown[2] = (-myi) * (Dx(complexreader) - myi * Dy(complexreader));
478 spindown[2].scale(0.5);
479 spindown[3] = (myi) * Dz(complexreader);
480 spindown[3].scale(0.5);
481 spindown.normalize();
482 orbitals.push_back(spindown);
483 }
484
485 //Assure that the numbers line up
487
488 }
489
490 // Prints all information
491 void print_params() const
492 {
493 madness::print("\n Input Parameters");
494 madness::print(" -------------------------");
495 madness::print(" Input Archive:", inFile);
496 madness::print(" Spin Restricted:", spinrestricted);
497 madness::print(" No. of occ. orbitals:", num_occupied);
498 madness::print(" L:", L);
499 madness::print(" Wavelet Order:", order);
500 madness::print(" Initial Total Energy:", Init_total_energy);
501 madness::print(" Orbital Energies:", energies);
502 }
503 };
504}
505#endif
506
507//kthxbye
Format version for DFdriver restart archives, and its validation.
double myyfunc(const madness::coord_3d &r)
Definition DF.cc:28
double myxfunc(const madness::coord_3d &r)
Definition DF.cc:23
double q(double t)
Definition DKops.h:18
double myyfunc(const madness::coord_3d &r)
Definition DF.cc:28
double myxfunc(const madness::coord_3d &r)
Definition DF.cc:23
Function< std::complex< double >, 3 > function_real2complex(const Function< double, 3 > &r)
Definition DF.cc:99
the header of a restartdata archive, in one place
Definition fcwf.h:12
void scale(std::complex< double > a)
Definition fcwf.cc:161
void normalize()
Definition fcwf.cc:222
Implements derivatives operators with variety of boundary conditions on simulation domain.
Definition derivative.h:329
static void set_k(int value)
Sets the default wavelet order.
Definition funcdefaults.h:177
static void set_cubic_cell(double lo, double hi)
Sets the user cell to be cubic with each dimension having range [lo,hi].
Definition funcdefaults.h:383
FunctionFactory implements the named-parameter idiom for Function.
Definition function_factory.h:86
FunctionFactory & functor(const std::shared_ptr< FunctionFunctorInterface< T, NDIM > > &f)
Definition function_factory.h:141
Abstract base class interface required for functors used as input to Functions.
Definition function_interface.h:68
A multiresolution adaptive numerical function.
Definition mra.h:144
Definition molecule.h:129
void add_atom(double x, double y, double z, double q, int atn)
Definition molecule.cc:401
A tensor is a multidimensional array.
Definition tensor.h:318
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
void broadcast(objT &obj, ProcessID root) const
Same as world.gop.broadcast_serializable(obj, root).
Definition parallel_archive.h:260
Archive & local_archive() const
Returns a reference to the local archive.
Definition parallel_archive.h:248
An archive for storing local or parallel data, wrapping a BinaryFstreamInputArchive.
Definition parallel_archive.h:366
Definition gaussian.h:376
Class for interfacing with NWChem (tested on version 6.6).
Definition NWChem.h:22
#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
#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
Namespace for all elements and tools of MADNESS.
Definition DFConvergence.h:9
std::string to_string(const Representation r)
Definition Restart.h:64
static const char * filename
Definition legendre.cc:96
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:758
Function< std::complex< Q >, NDIM > function_real2complex(const Function< Q, NDIM > &r)
Definition complexfun.h:241
double norm2(World &world, const std::vector< Function< T, NDIM > > &v)
Computes the 2-norm of a vector of functions.
Definition vmra.h:961
@ nwchem
read an NWChem movecs file and iterate
std::vector< real_function_3d > vector_real_function_3d
Definition functypedefs.h:94
unsigned int symbol_to_atomic_number(const std::string &symbol)
Definition atomutil.cc:173
std::string clean_archive_filename(std::string name)
Definition DFParameters.h:18
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
FunctionFactory< double_complex, 3 > complex_factory_3d
Definition functypedefs.h:115
void normalize(World &world, std::vector< Function< T, NDIM > > &v, bool fence=true)
Normalizes a vector of functions — v[i] = v[i].scale(1.0/v[i].norm2())
Definition vmra.h:2092
unsigned int read_df_restart_version(const Archive &ar)
Definition DFRestart.h:42
void require_supported_df_restart(const unsigned int version)
Throws unless version is a DF restart format this build can read.
Definition DFRestart.h:57
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
@ znemo
complex regularized orbitals
@ nemo
nemo's regularized orbitals F = psi/R
constexpr Properties Occupancies
MO occupancies.
Definition ESInterface.h:52
constexpr Properties MOs
The MO vector coefficients.
Definition ESInterface.h:51
constexpr Properties Energies
The MO energies.
Definition ESInterface.h:50
constexpr Properties Basis
The basis set.
Definition ESInterface.h:48
Definition InitParameters.h:22
double Init_total_energy
Total energy of the nonrelativistic ground state.
Definition InitParameters.h:25
bool closed_shell
Definition InitParameters.h:28
int order
Order of polynomial used in input.
Definition InitParameters.h:33
std::string inFile
Name of input archive to read in.
Definition InitParameters.h:24
Molecule molecule
The molecule used in input calculation.
Definition InitParameters.h:34
unsigned int num_occupied
Number of orbitals.
Definition InitParameters.h:29
double L
Box size of input - Dirac Fock calcluation is in same box.
Definition InitParameters.h:32
void read(World &world, const std::string &raw_filename, const double &myc, bool restart, bool Krestricted)
Definition InitParameters.h:41
Tensor< double > occ
Occupancy of input orbitals.
Definition InitParameters.h:31
double conv_thresh
Convergence threshold for MOs.
Definition InitParameters.h:26
void readnw(World &world, const std::string &filename, const double &myc, bool Krestricted)
Definition InitParameters.h:302
Tensor< double > energies
Energies of input orbitals.
Definition InitParameters.h:30
void print_params() const
Definition InitParameters.h:491
std::vector< Fcwf > orbitals
The occupied orbitals.
Definition InitParameters.h:35
InitParameters()
Definition InitParameters.h:38
bool spinrestricted
Indicates if input calc. was spin-restricted.
Definition InitParameters.h:27
Definition Restart.h:105
void read(Archive &ar)
Definition Restart.h:169
int k
Definition Restart.h:116
bool spin_restricted
Definition Restart.h:114
double L
Definition Restart.h:115
Molecule molecule
Definition Restart.h:117
double converged_for_thresh
Definition Restart.h:120
Representation representation
what the stored functions are; see Representation
Definition Restart.h:130
double current_energy
Definition Restart.h:113