40#ifndef MADNESS_CHEM_CALCULATIONPARAMETERS_H__INCLUDED 
   41#define MADNESS_CHEM_CALCULATIONPARAMETERS_H__INCLUDED 
   52  static constexpr char const* 
tag = 
"dft";
 
   68        initialize<std::string>(
"prefix",
"mad",
"prefixes your output/restart/json/plot/etc files");
 
   69        initialize<double>(
"charge",0.0,
"total molecular charge");
 
   70        initialize<std::string> (
"xc",
"hf",
"XC input line");
 
   71        initialize<std::string> (
"hfexalg",
"multiworld_row",
"hf exchange algorithm",{
"multiworld",
"multiworld_row",
"fetch_compute",
"smallmem",
"largemem"});
 
   72        initialize<double>(
"smear",0.0,
"smearing parameter");
 
   73        initialize<double>(
"econv",1.e-5,
"energy convergence");
 
   74        initialize<double>(
"dconv",1.e-4,
"density convergence");
 
   75        initialize<std::vector<std::string> >(
"convergence_criteria",{
"bsh_residual",
"total_energy"},
"possible values are: bsh_residual, total_energy, each_energy, density");
 
   76        initialize<int>   (
"k",-1,
"polynomial order");
 
   77        initialize<double>(
"l",20,
"user coordinates box size");
 
   78        initialize<std::string>(
"deriv",
"abgv",
"derivative method",{
"abgv",
"bspline",
"ble"});
 
   79        initialize<std::string>(
"dft_deriv",
"abgv",
"derivative method for gga potentials",{
"abgv",
"bspline",
"ble"});
 
   80        initialize<double>(
"maxrotn",0.25,
"step restriction used in autoshift algorithm");
 
   81        initialize<int>   (
"nvalpha",0,
"number of alpha virtuals to compute");
 
   82        initialize<int>   (
"nvbeta",0,
"number of beta virtuals to compute");
 
   83        initialize<int>   (
"nopen",0,
"number of unpaired electrons = nalpha-nbeta");
 
   84        initialize<int>   (
"maxiter",25,
"maximum number of iterations");
 
   85        initialize<int>   (
"nio",1,
"no. of io servers to use");
 
   86        initialize<bool>  (
"spin_restricted",
true,
"true if spin restricted");
 
   87        initialize<int>   (
"plotlo",0,
"range of MOs to print (for both spins if polarized");
 
   88        initialize<int>   (
"plothi",-1,
"range of MOs to print (for both spins if polarized");
 
   89        initialize<bool>  (
"plotdens",
false,
"If true print the density at convergence");
 
   90        initialize<bool>  (
"plotcoul",
false,
"If true plot the total coulomb potential at convergence");
 
   91        initialize<std::string> (
"localize",
"new",
"localization method",{
"pm",
"boys",
"new",
"canon"});
 
   92        initialize<std::string> (
"pointgroup",
"c1",
"use point (sub) group symmetry if not localized",{
"c1",
"c2",
"ci",
"cs",
"c2v",
"c2h",
"d2",
"d2h"});
 
   93        initialize<bool>  (
"restart",
false,
"if true restart from orbitals on disk");
 
   94        initialize<bool>  (
"restartao",
false,
"if true restart from orbitals projected into AO basis (STO3G) on disk");
 
   95        initialize<bool>  (
"no_compute",
false,
"if true use orbitals on disk, set value to computed");
 
   96        initialize<bool>  (
"save",
true,
"if true save orbitals to disk");
 
   97        initialize<int>   (
"maxsub",10,
"size of iterative subspace ... set to 0 or 1 to disable");
 
   98        initialize<double> (
"orbitalshift",0.0,
"scf orbital shift: shift the occ orbitals to lower energies");
 
   99        initialize<int>    (
"npt_plot",101,
"no. of points to use in each dim for plots");
 
  101        initialize<std::vector<double> > (
"plot_cell",std::vector<double>(),
"lo hi in each dimension for plotting (default is all space)");
 
  102        initialize<std::string> (
"aobasis",
"6-31g",
"AO basis used for initial guess (6-31gss, 6-31g, 3-21g, sto-6g, sto-3g)");
 
  103        initialize<bool> (
"derivatives",
false,
"if true calculate nuclear derivatives");
 
  104        initialize<bool> (
"dipole",
false,
"if true calculate dipole moment");
 
  105        initialize<bool> (
"conv_only_dens",
false,
"if true remove bsh_residual from convergence criteria (deprecated)");
 
  106        initialize<bool> (
"psp_calc",
false,
"pseudopotential calculation for all atoms");
 
  107        initialize<std::string> (
"pcm_data",
"none",
"do a PCM (solvent) calculation");
 
  108        initialize<std::string> (
"ac_data",
"none",
"do a calculation with asymptotic correction (see ACParameters class in chem/AC.h for details)");
 
  109        initialize<bool> (
"pure_ae",
true,
"pure all electron calculation with no pseudo-atoms");
 
  110        initialize<int>  (
"print_level",3,
"0: no output; 1: final energy; 2: iterations; 3: timings; 10: debug");
 
  111        initialize<std::string>  (
"molecular_structure",
"inputfile",
"where to read the molecule from: inputfile or name from the library");
 
  114        initialize<int> (
"nalpha",-1,
"number of alpha spin electrons");
 
  115        initialize<int> (
"nbeta",-1,
"number of beta  spin electrons");
 
  116        initialize<int> (
"nmo_alpha",-1,
"number of alpha spin molecular orbitals");
 
  117        initialize<int> (
"nmo_beta",-1,
"number of beta spin molecular orbitals");
 
  118        initialize<double> (
"lo",1.e-10,
"smallest length scale we need to resolve");
 
  119        initialize<std::vector<double> > (
"protocol",{1.e-4,1.e-6},
"calculation protocol");
 
  123        initialize<bool> (
"gopt",
false,
"geometry optimizer");
 
  124        initialize<double> (
"gtol",1.e-4,
"geometry tolerance");
 
  125        initialize<bool> (
"gtest",
false,
"geometry tolerance");
 
  126        initialize<double> (
"gval",1.e-5,
"value precision");
 
  127        initialize<double> (
"gprec",1.e-4,
"gradient precision");
 
  128        initialize<int> (
"gmaxiter",20,
"optimization maxiter");
 
  129        initialize<bool> (
"ginitial_hessian",
false,
"compute inital hessian for optimization");
 
  130        initialize<std::string> (
"algopt",
"bfgs",
"algorithm used for optimization",{
"bfgs",
"cg"});
 
  131        initialize<int> (
"nv_factor",1,
"factor to multiply number of virtual orbitals with when automatically decreasing nvirt");
 
  132        initialize<int> (
"vnucextra",2,
"load balance parameter for nuclear pot");
 
  133        initialize<int> (
"loadbalparts",2,
"??");
 
  136          initialize<std::string> (
"nwfile",
"none",
"Base name of nwchem output files (.out and .movecs extensions) to read from");
 
 
  147    std::string 
prefix()
 const {
return get<std::string>(
"prefix");}
 
  149    double econv()
 const {
return get<double>(
"econv");}
 
  150    double dconv()
 const {
return get<double>(
"dconv");}
 
  153        std::vector<std::string> criteria=get<std::vector<std::string> >(
"convergence_criteria");
 
  154        return std::find(criteria.begin(),criteria.end(),
"density")!=criteria.end();
 
 
  157        std::vector<std::string> criteria=get<std::vector<std::string> >(
"convergence_criteria");
 
  158        return std::find(criteria.begin(),criteria.end(),
"bsh_residual")!=criteria.end();
 
 
  161        std::vector<std::string> criteria=get<std::vector<std::string> >(
"convergence_criteria");
 
  162        return std::find(criteria.begin(),criteria.end(),
"total_energy")!=criteria.end();
 
 
  165        std::vector<std::string> criteria=get<std::vector<std::string> >(
"convergence_criteria");
 
  166        return std::find(criteria.begin(),criteria.end(),
"each_energy")!=criteria.end();
 
 
  169    int nopen()
 const {
return get<int>(
"nopen");}
 
  170    int nalpha()
 const {
return get<int>(
"nalpha");}
 
  171    int nbeta()
 const {
return get<int>(
"nbeta");}
 
  173    int nvalpha()
 const {
return get<int>(
"nvalpha");}
 
  174    int nvbeta()
 const {
return get<int>(
"nvbeta");}
 
  178    int nmo_beta()
 const {
return get<int>(
"nmo_beta");}
 
  185    double lo()
 const {
return get<double>(
"lo");}
 
  186    double L()
 const {
return get<double>(
"l");}
 
  187    int k()
 const {
return get<int>(
"k");}
 
  193    std::string 
pointgroup()
 const {
return get<std::string>(
"pointgroup");}
 
  195    double charge()
 const {
return get<double>(
"charge");}
 
  198    int maxiter()
 const {
return get<int>(
"maxiter");}
 
  201    std::string 
deriv()
 const {
return get<std::string>(
"deriv");}
 
  202    std::string 
dft_deriv()
 const {
return get<std::string>(
"dft_deriv");}
 
  203    std::string 
pcm_data()
 const {
return get<std::string>(
"pcm_data");}
 
  204    std::string 
ac_data()
 const {
return get<std::string>(
"ac_data");}
 
  205    std::string 
xc()
 const {
return get<std::string>(
"xc");}
 
  206    std::string 
hfexalg()
 const {
return get<std::string>(
"hfexalg");}
 
  208    std::string 
aobasis()
 const {
return get<std::string>(
"aobasis");}
 
  210    std::vector<double> 
protocol()
 const {
return get<std::vector<double> >(
"protocol");}
 
  211    bool save()
 const {
return get<bool>(
"save");}
 
  212    bool restart()
 const {
return get<bool>(
"restart");}
 
  216    int maxsub()
 const {
return get<int>(
"maxsub");}
 
  217    double maxrotn()
 const {
return get<double>(
"maxrotn");}
 
  224    bool dipole()
 const {
return get<bool>(
"dipole");}
 
  226    bool gopt()
 const {
return get<bool>(
"gopt");}
 
  227    std::string 
algopt()
 const {
return get<std::string>(
"algopt");}
 
  228    int gmaxiter()
 const {
return get<int>(
"gmaxiter");}
 
  229    double gtol()
 const {
return get<double>(
"gtol");}
 
  230    double gval()
 const {
return get<double>(
"gval");}
 
  231    double gprec()
 const {
return get<double>(
"gprec");}
 
  234     std::string 
nwfile()
 const {
return get<std::string>(
"nwfile");}
 
  237        std::vector<double> vcell=get<std::vector<double> >(
"plot_cell");
 
 
  252        for (
size_t iatom = 0; iatom < 
molecule.natom(); iatom++) {
 
  253            if (
molecule.get_pseudo_atom(iatom)){
 
  259        const int n_core = 
molecule.n_core_orb_all();
 
  262        std::vector<double> proto=get<std::vector<double> >(
"protocol");
 
  271        double z = 
molecule.total_nuclear_charge();
 
  272        const double charge=get<double>(
"charge");
 
  273        int nelec = int(z - 
charge - n_core*2);
 
  274        if (fabs(nelec+
charge+n_core*2-z) > 1
e-6) {
 
  275            error(
"non-integer number of electrons?", nelec+
charge+n_core*2-z);
 
  302            error(
"\n\nsymmetry and localization cannot be used at the same time\n" 
  303                    "switch from local to canonical orbitals (keyword canon)\n\n");
 
  307        if (get<bool>(
"gopt") && 
nwfile() != 
"none") 
error(
"NWchem initialization only supports single point energy calculations.");
 
 
 
Definition molecule.h:129
class for holding the parameters for calculation
Definition QCCalculationParametersBase.h:295
void read_input_and_commandline_options(World &world, const commandlineparser &parser, const std::string tag)
Definition QCCalculationParametersBase.h:331
void set_user_defined_value(const std::string &key, const T &value)
Definition QCCalculationParametersBase.h:522
void set_derived_value(const std::string &key, const T &value)
Definition QCCalculationParametersBase.h:409
A tensor is a multidimensional array.
Definition tensor.h:317
A parallel world class.
Definition world.h:132
Namespace for all elements and tools of MADNESS.
Definition DFParameters.h:10
void error(const char *msg)
Definition world.cc:142
Definition CalculationParameters.h:51
double gval() const
Definition CalculationParameters.h:230
bool converge_each_energy() const
Definition CalculationParameters.h:164
std::vector< double > protocol() const
Definition CalculationParameters.h:210
double charge() const
Definition CalculationParameters.h:195
CalculationParameters(const CalculationParameters &other)=default
void read_input_and_commandline_options(World &world, const commandlineparser &parser, const std::string tag)
Definition QCCalculationParametersBase.h:331
bool converge_density() const
Definition CalculationParameters.h:152
int nv_factor() const
Definition CalculationParameters.h:175
bool do_symmetry() const
Definition CalculationParameters.h:194
bool localize_pm() const
Definition CalculationParameters.h:191
bool gopt() const
Definition CalculationParameters.h:226
void set_derived_values(const Molecule &molecule)
Definition CalculationParameters.h:250
int k() const
Definition CalculationParameters.h:187
bool converge_bsh_residual() const
Definition CalculationParameters.h:156
CalculationParameters()
ctor reading out the input file
Definition CalculationParameters.h:66
bool converge_total_energy() const
Definition CalculationParameters.h:160
Tensor< double > plot_cell() const
Definition CalculationParameters.h:236
std::string nwfile() const
Definition CalculationParameters.h:234
static constexpr char const  * tag
Definition CalculationParameters.h:52
std::string prefix() const
Definition CalculationParameters.h:147
std::string ac_data() const
Definition CalculationParameters.h:204
int nmo_alpha() const
Definition CalculationParameters.h:177
int nopen() const
Definition CalculationParameters.h:169
bool dipole() const
Definition CalculationParameters.h:224
bool save() const
Definition CalculationParameters.h:211
double dconv() const
Definition CalculationParameters.h:150
std::string algopt() const
Definition CalculationParameters.h:227
double econv() const
Definition CalculationParameters.h:149
int nvalpha() const
Definition CalculationParameters.h:173
int vnucextra() const
Definition CalculationParameters.h:219
int print_level() const
Definition CalculationParameters.h:196
std::string deriv() const
Definition CalculationParameters.h:201
bool do_localize() const
Definition CalculationParameters.h:190
std::string hfexalg() const
Definition CalculationParameters.h:206
double L() const
Definition CalculationParameters.h:186
int gmaxiter() const
Definition CalculationParameters.h:228
std::string localize_method() const
Definition CalculationParameters.h:189
bool ginitial_hessian() const
Definition CalculationParameters.h:232
int loadbalparts() const
Definition CalculationParameters.h:220
std::string aobasis() const
Definition CalculationParameters.h:208
int nalpha() const
Definition CalculationParameters.h:170
std::string dft_deriv() const
Definition CalculationParameters.h:202
int maxsub() const
Definition CalculationParameters.h:216
int nvbeta() const
Definition CalculationParameters.h:174
double gprec() const
Definition CalculationParameters.h:231
bool derivatives() const
Definition CalculationParameters.h:223
int nbeta() const
Definition CalculationParameters.h:171
int nmo_beta() const
Definition CalculationParameters.h:178
double gtol() const
Definition CalculationParameters.h:229
bool have_beta() const
Definition CalculationParameters.h:180
bool no_compute() const
Definition CalculationParameters.h:183
bool spin_restricted() const
Definition CalculationParameters.h:182
int maxiter() const
Definition CalculationParameters.h:198
double orbitalshift() const
Definition CalculationParameters.h:199
double lo() const
Definition CalculationParameters.h:185
std::string pcm_data() const
Definition CalculationParameters.h:203
bool restart() const
Definition CalculationParameters.h:212
bool restart_cphf() const
Definition CalculationParameters.h:214
bool restartao() const
Definition CalculationParameters.h:213
std::string get_tag() const override
Definition CalculationParameters.h:140
std::string pointgroup() const
Definition CalculationParameters.h:193
double maxrotn() const
Definition CalculationParameters.h:217
std::string xc() const
Definition CalculationParameters.h:205
CalculationParameters(World &world, const commandlineparser &parser)
Definition CalculationParameters.h:56
very simple command line parser
Definition commandlineparser.h:15
std::string value(const std::string key) const
Definition commandlineparser.h:62
bool key_exists(std::string key) const
Definition commandlineparser.h:58
static std::string base_name(std::string const &path, std::string const &delims="/")
Definition commandlineparser.h:137
static std::string remove_extension(std::string const &filename)
Definition commandlineparser.h:142
void e()
Definition test_sig.cc:75
static Molecule molecule
Definition testperiodicdft.cc:39