40#ifndef MADNESS_CHEM_CALCULATIONPARAMETERS_H__INCLUDED
41#define MADNESS_CHEM_CALCULATIONPARAMETERS_H__INCLUDED
52 static constexpr char const*
tag =
"dft";
71 initialize<std::string> (
"hfexalg",
"multiworld_row",
"hf exchange algorithm; multiworld bounds memory, needs one subworld per rank",{
"multiworld",
"multiworld_row",
"fetch_compute",
"smallmem",
"largemem"});
72 initialize<long> (
"hfex_granularity",1,
"hfexalg=multiworld: orbital batches per rank; >1 balances better");
73 initialize<bool> (
"hfex_cost_aware",
true,
"hfexalg=multiworld: place tasks by measured cost, not by count");
74 initialize<int> (
"hfex_accumulation",2,
"hfexalg=multiworld: gather tile results 1=per subworld, 2=per node");
75 initialize<std::string>(
"bsh_apply",
"auto",
"BSH apply backend; auto=macrotask when multinode or at tight thresh, else tile",{
"auto",
"tile",
"macrotask",
"plain"});
85 initialize<bool> (
"xc_weak_gga",
false,
"weak form of the semilocal xc potential; nemo only");
89 initialize<std::vector<double> >(
"aocc",std::vector<double>(),
"explicit alpha occupations (0 or 1) by orbital index within the occupied span; a 0 is a hole");
90 initialize<std::vector<double> >(
"bocc",std::vector<double>(),
"explicit beta occupations (0 or 1) by orbital index within the occupied span; a 0 is a hole");
91 initialize<int> (
"nopen",0,
"number of unpaired electrons = nalpha-nbeta");
95 initialize<int> (
"plotlo",0,
"range of MOs to print (for both spins if polarized");
96 initialize<int> (
"plothi",-1,
"range of MOs to print (for both spins if polarized");
97 initialize<bool> (
"plotdens",
false,
"If true print the density at convergence");
98 initialize<bool> (
"plotcoul",
false,
"If true plot the total coulomb potential at convergence");
99 initialize<bool> (
"plotcube",
false,
"If true also write Gaussian .cube files (for Avogadro/VMD) alongside .dx");
100 initialize<std::string> (
"localize",
"new",
"localization method",{
"pm",
"boys",
"new",
"new_sys",
"cholesky",
"canon"});
101 initialize<std::string> (
"pointgroup",
"c1",
"use point (sub) group symmetry if not localized",{
"c1",
"c2",
"ci",
"cs",
"c2v",
"c2h",
"d2",
"d2h"});
103 "between none/iterate/read_only by what is on disk",
104 {
"auto",
"none",
"iterate",
"read_only",
"ao",
"nwchem"});
112 initialize<int> (
"maxsub",10,
"size of iterative subspace ... set to 0 or 1 to disable");
113 initialize<double> (
"orbitalshift",0.0,
"scf orbital shift: shift the occ orbitals to lower energies");
114 initialize<int> (
"npt_plot",101,
"no. of points to use in each dim for plots");
117 initialize<std::string> (
"aobasis",
"6-31g",
"AO basis used for initial guess (6-31gss, 6-31g, 3-21g, sto-6g, sto-3g)");
118 initialize<bool> (
"derivatives",
false,
"if true calculate nuclear derivatives");
120 initialize<bool> (
"conv_only_dens",
false,
"if true remove bsh_residual from convergence criteria (deprecated)");
121 initialize<bool> (
"psp_calc",
false,
"pseudopotential calculation for all atoms");
125 initialize<bool> (
"dispersion_atm",
false,
"include the three-body Axilrod-Teller-Muto dispersion term");
126 initialize<bool> (
"pure_ae",
true,
"pure all electron calculation with no pseudo-atoms");
127 initialize<int> (
"print_level",3,
"0: no output; 1: final energy; 2: iterations; 3: timings; 10: debug");
129 "orbitals, printed at the end: none, mulliken, lowdin, iao; several allowed, e.g. [iao,mulliken]");
131 "(default: the value of aobasis)");
133 initialize<std::string> (
"molecular_structure",
"inputfile",
"where to read the molecule from: inputfile or name from the library");
138 initialize<int> (
"nmo_alpha",-1,
"number of alpha spin molecular orbitals");
139 initialize<int> (
"nmo_beta",-1,
"number of beta spin molecular orbitals");
156 initialize<double> (
"gval",1.e-5,
"RETIRED -- use optimization group `value_precision`");
157 initialize<double> (
"gprec",1.e-4,
"RETIRED -- use optimization group `gradient_precision`");
158 initialize<int> (
"gmaxiter",20,
"RETIRED -- use optimization group `maxiter`");
159 initialize<bool> (
"ginitial_hessian",
false,
"RETIRED -- use optimization group `initial_hessian`");
162 initialize<int> (
"nv_extra",0,
"extra virtuals converged first and dropped stepwise down to nvalpha");
163 initialize<int> (
"nv_step",0,
"virtuals dropped per step-down stage (0: all extras at once)");
164 initialize<int> (
"nv_its",5,
"maximum iterations per intermediate step-down stage");
165 initialize<bool> (
"freeze_occupied",
false,
"iterate only the virtuals in the mean field of restarted occupied orbitals, which stay fixed");
166 initialize<int> (
"vnucextra",2,
"load balance parameter for nuclear pot");
170 initialize<std::string> (
"nwfile",
"none",
"Base name of nwchem output files (.out and .movecs extensions) to read from");
188 return std::find(criteria.begin(),criteria.end(),
"density")!=criteria.end();
192 return std::find(criteria.begin(),criteria.end(),
"bsh_residual")!=criteria.end();
196 return std::find(criteria.begin(),criteria.end(),
"total_energy")!=criteria.end();
200 return std::find(criteria.begin(),criteria.end(),
"each_energy")!=criteria.end();
302 for (
size_t iatom = 0; iatom <
molecule.natom(); iatom++) {
303 if (
molecule.get_pseudo_atom(iatom)){
309 const int n_core =
molecule.n_core_orb_all();
321 double z =
molecule.total_nuclear_charge();
323 int nelec = int(z -
charge - n_core*2);
324 if (fabs(nelec+
charge+n_core*2-z) > 1
e-6) {
325 error(
"non-integer number of electrons?", nelec+
charge+n_core*2-z);
347 for (
const auto& [
name, n] : std::vector<std::pair<std::string, int>>{{
"aocc",
nalpha()}, {
"bocc",
nbeta()}}) {
349 if (
int(occ.size()) > n)
error((
name +
" has more entries than occupied orbitals").c_str(), occ.size());
350 for (
const double o : occ) {
351 if (o != 0.0 and o != 1.0)
error((
name +
" entries must be 0 or 1").c_str(), o);
352 if (o == 0.0) hole =
true;
358 if (
do_localize())
error(
"a hole in the explicit occupations requires localize canon");
374 error(
"\n\nsymmetry and localization cannot be used at the same time\n"
375 "switch from local to canonical orbitals (keyword canon)\n\n");
385 for (
const char* key : {
"gopt",
"gtol",
"gtest",
"gval",
"gprec",
386 "gmaxiter",
"ginitial_hessian",
"algopt"}) {
388 error((
"\n\n`" + std::string(key) +
"` has been retired: geometry optimization is now a task of "
389 "its own.\nUse `madqc --optimize --wf=<scf|nemo>` and the `optimization` "
390 "parameter group\n(see `madqc --print_parameters=optimization`).\n\n").c_str());
398 error(
"\n\n`restartao` has been retired: use `restart ao` instead\n\n");
400 error(
"\n\n`no_compute` has been retired: use `restart read_only` instead\n\n");
402 error(
"\n\n`nv_factor` has been retired: the virtual step-down is now `nv_extra`, "
403 "`nv_step` and `nv_its`\n\n");
409 bool any =
false,
none =
false;
410 for (
const auto& s :
pop) {
412 "population: the schemes are none, mulliken, lowdin and iao");
413 any = any or s !=
"none";
418 "population: needs an all-electron calculation (no pseudopotentials or core potentials)");
Definition molecule.h:129
void read_input_and_commandline_options(World &world, const commandlineparser &parser, const std::string tag)
Definition chem/QCCalculationParametersBase.h:339
T get(const std::string key) const
Definition chem/QCCalculationParametersBase.h:313
void initialize(const std::string &key, const T &value, const std::string comment="", const std::vector< T > allowed_values={})
Definition chem/QCCalculationParametersBase.h:394
bool is_user_defined(std::string key) const
Definition chem/QCCalculationParametersBase.h:322
void set_derived_value(const std::string &key, const T &value)
Definition chem/QCCalculationParametersBase.h:436
QCCalculationParametersBase()
ctor for testing
Definition chem/QCCalculationParametersBase.h:383
A tensor is a multidimensional array.
Definition tensor.h:313
A parallel world class.
Definition world.h:134
#define MADNESS_CHECK_THROW(condition, msg)
Check a condition — even in a release build the condition is always evaluated so it can have side eff...
Definition madness_exception.h:207
Namespace for all elements and tools of MADNESS.
Definition DFConvergence.h:9
Tensor< double > FunctionDefaults< NDIM >::cell
Definition mraimpl.h:3892
@ none
ignore everything on disk, start from the initial guess
Definition RestartPlan.h:53
static double pop(std::vector< double > &v)
Definition SCF.cc:118
void error(const char *msg)
Definition world.cc:147
std::string name(const FuncType &type, const int ex=-1)
Definition ccpairfunction.h:28
bool converge_each_energy() const
Definition CalculationParameters.h:198
std::vector< double > protocol() const
Definition CalculationParameters.h:260
std::string population_minbasis() const
Definition CalculationParameters.h:237
int nv_its() const
Definition CalculationParameters.h:213
double charge() const
Definition CalculationParameters.h:233
CalculationParameters(const CalculationParameters &other)=default
void read_input_and_commandline_options(World &world, const commandlineparser &parser, const std::string tag)
Definition chem/QCCalculationParametersBase.h:339
bool converge_density() const
Definition CalculationParameters.h:186
bool do_symmetry() const
Definition CalculationParameters.h:232
std::string dispersion() const
Definition CalculationParameters.h:246
bool localize_pm() const
Definition CalculationParameters.h:229
void set_derived_values(const Molecule &molecule)
Definition CalculationParameters.h:300
std::string restart() const
the restart keyval as a string; parse with restart_mode_from_string()
Definition CalculationParameters.h:266
int k() const
Definition CalculationParameters.h:225
bool converge_bsh_residual() const
Definition CalculationParameters.h:190
std::vector< std::string > population() const
Definition CalculationParameters.h:235
std::vector< std::string > memory() const
Definition CalculationParameters.h:256
CalculationParameters()
ctor reading out the input file
Definition CalculationParameters.h:67
bool converge_total_energy() const
Definition CalculationParameters.h:194
Tensor< double > plot_cell() const
Definition CalculationParameters.h:286
std::string dispersion_functional() const
Definition CalculationParameters.h:247
std::string nwfile() const
Definition CalculationParameters.h:284
static constexpr char const * tag
Definition CalculationParameters.h:52
std::string prefix() const
Definition CalculationParameters.h:181
int nmo_alpha() const
Definition CalculationParameters.h:216
std::vector< double > bocc() const
Definition CalculationParameters.h:210
int nopen() const
Definition CalculationParameters.h:203
bool freeze_occupied() const
Definition CalculationParameters.h:214
bool dipole() const
Definition CalculationParameters.h:277
bool hfex_cost_aware() const
Definition CalculationParameters.h:252
bool save() const
Definition CalculationParameters.h:261
double dconv() const
Definition CalculationParameters.h:184
double econv() const
Definition CalculationParameters.h:183
int nvalpha() const
Definition CalculationParameters.h:207
int vnucextra() const
Definition CalculationParameters.h:272
int hfex_accumulation() const
Definition CalculationParameters.h:253
int print_level() const
Definition CalculationParameters.h:234
std::string deriv() const
Definition CalculationParameters.h:242
bool do_localize() const
Definition CalculationParameters.h:228
long hfex_granularity() const
Definition CalculationParameters.h:251
std::string hfexalg() const
Definition CalculationParameters.h:250
double L() const
Definition CalculationParameters.h:224
int nv_step() const
Definition CalculationParameters.h:212
std::string localize_method() const
Definition CalculationParameters.h:227
int loadbalparts() const
Definition CalculationParameters.h:273
std::string aobasis() const
Definition CalculationParameters.h:258
int nalpha() const
Definition CalculationParameters.h:204
std::string dft_deriv() const
Definition CalculationParameters.h:243
int maxsub() const
Definition CalculationParameters.h:269
int nvbeta() const
Definition CalculationParameters.h:208
int nv_extra() const
Definition CalculationParameters.h:211
bool derivatives() const
Definition CalculationParameters.h:276
std::string population_basis() const
Definition CalculationParameters.h:236
int nbeta() const
Definition CalculationParameters.h:205
int nmo_beta() const
Definition CalculationParameters.h:217
bool xc_weak_gga() const
Definition CalculationParameters.h:244
bool have_beta() const
Definition CalculationParameters.h:219
bool spin_restricted() const
Definition CalculationParameters.h:221
int maxiter() const
Definition CalculationParameters.h:239
double orbitalshift() const
Definition CalculationParameters.h:240
double lo() const
Definition CalculationParameters.h:223
std::string pcm_data() const
Definition CalculationParameters.h:245
std::vector< double > aocc() const
Definition CalculationParameters.h:209
bool restart_cphf() const
Definition CalculationParameters.h:267
bool dispersion_atm() const
Definition CalculationParameters.h:248
std::string get_tag() const override
Definition CalculationParameters.h:174
std::string pointgroup() const
Definition CalculationParameters.h:231
double maxrotn() const
Definition CalculationParameters.h:270
std::string xc() const
Definition CalculationParameters.h:249
CalculationParameters(World &world, const commandlineparser &parser)
Definition CalculationParameters.h:56
std::string bsh_apply() const
Definition CalculationParameters.h:254
very simple command line parser
Definition commandlineparser.h:28
std::string value(const std::string key) const
Definition commandlineparser.h:84
void e()
Definition test_sig.cc:75
static Molecule molecule
Definition testperiodicdft.cc:39