MADNESS 0.10.1
response_parameters.h
Go to the documentation of this file.
1// Copyright 2021 Adrian Hurtado
2
3/// \file ResponseParameters
4/// \brief Input parameters for a response calculation.
5
6#ifndef SRC_APPS_MOLRESPONSE_RESPONSE_PARAMETERS_H_
7#define SRC_APPS_MOLRESPONSE_RESPONSE_PARAMETERS_H_
8
11#include <madness/mra/mra.h>
14
15#include <string>
16#include <vector>
17
19
20using perturbations = std::vector<std::string>;
21
22namespace madness {
23
25 static constexpr char const *tag = "response";
26 ResponseParameters(const ResponseParameters &other) = default;
28 read_input_and_commandline_options(world, parser, "response");
29 // convenience option -- needs to be moved to the MolecularOptimizer class
30 }
32 initialize<std::string>("prefix", "response", "prefixes your output/restart/json/plot/etc files");
33 initialize<std::string>("fock_json_file", "moldft.fock.json", "data file for fock matrix");
34 initialize<std::string>("archive", "../moldft.restartdata", "file to read ground parameters from");
35 initialize<bool>("nwchem", false, "Using nwchem files for intelligent starting guess");
36 initialize<std::string>("nwchem_dir", "none", "Root name of nwchem files for intelligent starting guess");
37 initialize<size_t>("states", 1, "Number of excited states requested");
38 initialize<int>("print_level", 3, "0: no output; 1: final energy; 2: iterations; 3: timings; 10: debug");
39 initialize<bool>("tda", false, "turn on Tam-Danchof approximation (excitations energy");
40 initialize<bool>("first_run", true, "Are we on the default guess");
41 initialize<bool>("plot", false, "turn on plotting of final orbitals. Output format is .vts");
42 initialize<bool>("plot_range", false, "controls which orbitals will be plotted");
43 initialize<std::vector<int>>("plot_data", std::vector<int>{0}, "Orbitals to plot");
44 initialize<std::vector<double>>("plot_cell", std::vector<double>(), "lo-hi plot cell (default is all space)");
45 initialize<double>("plot_l", -1.0, "Controls the plotting box size");
46 initialize<size_t>("plot_pts", 200, "Controls number of points in plots");
47 initialize<bool>("plot_all_orbitals", false, "Turn on 2D plotting of response orbitals ");
48 initialize<size_t>("maxiter", 5, "maximum number of iterations");
49 initialize<double>("dconv", 1.e-4, "recommended values: 1.e-4 < dconv < 1.e-8");
50 initialize<bool>("conv_only_dens", false, "if true remove bsh_residual from convergence criteria (deprecated)");
51 initialize<bool>("dconv_set", false, "Convergence flage for the orbtial density");
52 initialize<bool>("guess_xyz", true, "ExcitedState intial guess functions ground MO * <x,y,z>");
53 initialize<double>("lo", 1.e-10, "smallest length scale we need to resolve");
54 initialize<std::vector<double>>("protocol", {1.e-4, 1.e-6}, "Defines convergence and truncation protocol");
55 initialize<size_t>("larger_subspace", 0,
56 "Number of iterations to diagonalize in a subspace "
57 "consisting of old and new vectors");
58 initialize<int>("k", -1, "polynomial order");
59 initialize<std::string>("deriv", "abgv", "derivative method", {"abgv", "bspline", "ble"});
60 initialize<std::string>("dft_deriv", "abgv", "derivative method for gga potentials", {"abgv", "bspline", "ble"});
61 initialize<bool>("random", true, "Use random guess for initial response functions");
62 initialize<bool>("store_potential", true, "Store the potential instead of computing each iteration");
63 initialize<bool>("e_range", false, "Use an energy range to excite from");
64 initialize<double>("e_range_lo", 0, "Energy range (lower end) for orbitals to excite from");
65 initialize<double>("e_range_hi", 1, "Energy range (upper end) for orbitals to excite from");
66 initialize<bool>("plot_initial", false, "Flag to plot the ground state orbitals read in from archivie");
67 initialize<bool>("restart", false, "Flag to restart scf loop from file");
68 initialize<std::string>("restart_file", "none", "file to read ground parameters from");
69 initialize<bool>("kain", false, "Turn on Krylov Accelarated Inexact Newton Solver");
70 initialize<double>("maxrotn", .50, "Max orbital rotation per iteration");
71 initialize<double>("maxbsh", 10, "Max bsh residual");
72 initialize<size_t>("maxsub", 5, "size of iterative subspace ... set to 0 or 1 to disable");
73 initialize<std::string>("xc", "hf", "XC input line");
74 initialize<std::string>("hfexalg", "multiworld",
75 "hf exchange algorithm: choose from multiworld "
76 "(default), multiworld_row, smallmem, largemem");
77 initialize<bool>("step_restrict", true, "Toggles step restriction");
78 initialize<bool>("save", false, "if true save orbitals to disk");
79 initialize<std::string>("save_file", "none", "File name to save orbitals for restart");
80 initialize<bool>("save_density", false, "Flag to save density at each iteration");
81 initialize<int>("vnucextra", 2, "load balance parameter for nuclear pot");
82 initialize<int>("loadbalparts", 2, "??");
83 initialize<std::string>("save_density_file", "none", "File name to save density for restart");
84 initialize<bool>("load_density", false, "Flag to load density for restart");
85 initialize<std::string>("load_density_file", "none", "File name to load density for restart");
86 initialize<size_t>("guess_max_iter", 5, "maximum number of guess iterations");
87 initialize<std::string>("calc_type", "full", "full,static,tda");
88 initialize<bool>("excited_state", false, "Flag to turn on excited state calc");
89 initialize<bool>("first_order", false, "Flag to turn on first order response calc");
90 initialize<bool>("second_order", false, "Flag to turn on first order response calc");
91 initialize<std::string>("perturbation", "dipole", "dipole,nuclear");
92 initialize<std::vector<std::string>>("perturbations", {"dipole"}, "perturbations to calculate");
93 initialize<bool>("dipole", false, "Sets RHS to dipole operator 3 x num_orbitals");
94 initialize<bool>("quadratic", false, "Compute quadratic response");
95 initialize<std::vector<double>>("freq_range", {0.0}, "Frequency range for quadratic response");
96 initialize<bool>("nuclear", false, "Sets RHS to nuclear derivative 3 x num_atoms x num_orbitals");
97 initialize<double>("omega", 0.0, "Incident energy for dynamic response");
98 initialize<double>("l", 20, "user coordinates box size");
99 initialize<size_t>("num_orbitals", 0, "number of ground state orbtials");
100 initialize<bool>("spinrestricted", true, "is spinrestricted calculation");
101 initialize<std::string>("localize", "canon", "localization method", {"pm", "boys", "new", "canon"});
102 }
103
104 public:
106
107 [[nodiscard]] std::string prefix() const { return get<std::string>("prefix"); }
108 [[nodiscard]] std::string fock_json_file() const { return get<std::string>("fock_json_file"); }
109 [[nodiscard]] std::string perturbation() const { return get<std::string>("perturbation"); }
110 [[nodiscard]] std::vector<std::string> perturbations() const { return get<std::vector<std::string>>("perturbations"); }
111 [[nodiscard]] std::string localize() const { return get<std::string>("localize"); }
112 [[nodiscard]] std::string archive() const { return get<std::string>("archive"); }
113 [[nodiscard]] std::string calc_type() const { return get<std::string>("calc_type"); }
114 [[nodiscard]] std::string nwchem_dir() const { return get<std::string>("nwchem_dir"); }
115 [[nodiscard]] bool nwchem() const { return get<bool>("nwchem"); }
116 [[nodiscard]] size_t num_states() const { return get<size_t>("states"); }
117 [[nodiscard]] size_t num_orbitals() const { return get<size_t>("num_orbitals"); }
118 [[nodiscard]] int print_level() const { return get<int>("print_level"); }
119 [[nodiscard]] bool tda() const { return get<bool>("tda"); }
120 [[nodiscard]] bool plot() const { return get<bool>("plot"); }
121 [[nodiscard]] bool step_restrict() const { return get<bool>("step_restrict"); }
122 [[nodiscard]] double plot_l() const { return get<double>("plot_l"); }
123 [[nodiscard]] size_t plot_pts() const { return get<size_t>("plot_pts"); }
124 [[nodiscard]] bool plot_all_orbitals() const { return get<bool>("plot_all_orbitals"); }
125 [[nodiscard]] size_t maxiter() const { return get<size_t>("maxiter"); }
126 [[nodiscard]] double dconv() const { return get<double>("dconv"); }
127 [[nodiscard]] bool guess_xyz() const { return get<bool>("guess_xyz"); }
128 [[nodiscard]] double lo() const { return get<double>("lo"); }
129 [[nodiscard]] std::vector<double> protocol() const { return get<std::vector<double>>("protocol"); }
130 [[nodiscard]] size_t larger_subspace() const { return get<size_t>("larger_subspace"); }
131 [[nodiscard]] int k() const { return get<int>("k"); }
132 [[nodiscard]] bool random() const { return get<bool>("random"); }
133 [[nodiscard]] bool store_potential() const { return get<bool>("store_potential"); }
134 [[nodiscard]] vector<double> freq_range() const { return get<vector<double>>("freq_range"); }
135 [[nodiscard]] bool quadratic() const { return get<bool>("quadratic"); }
136 [[nodiscard]] bool plot_initial() const { return get<bool>("plot_initial"); }
137 [[nodiscard]] bool restart() const { return get<bool>("restart"); }
138 [[nodiscard]] std::string restart_file() const { return get<std::string>("restart_file"); }
139 [[nodiscard]] bool kain() const { return get<bool>("kain"); }
140 [[nodiscard]] size_t maxsub() const { return get<size_t>("maxsub"); }
141 [[nodiscard]] std::string deriv() const { return get<std::string>("deriv"); }
142 [[nodiscard]] std::string dft_deriv() const { return get<std::string>("dft_deriv"); }
143 [[nodiscard]] std::string xc() const { return get<std::string>("xc"); }
144 [[nodiscard]] std::string hfexalg() const { return get<std::string>("hfexalg"); }
145 [[nodiscard]] double maxrotn() const { return get<double>("maxrotn"); }
146 [[nodiscard]] bool save() const { return get<bool>("save"); }
147 [[nodiscard]] std::string save_file() const { return get<std::string>("save_file"); }
148 [[nodiscard]] size_t guess_max_iter() const { return get<size_t>("guess_max_iter"); }
149 [[nodiscard]] bool property() const { return get<bool>("property"); }
150 [[nodiscard]] int loadbalparts() const { return get<int>("loadbalparts"); }
151 [[nodiscard]] bool excited_state() const { return get<bool>("excited_state"); }
152 [[nodiscard]] bool first_order() const { return get<bool>("first_order"); }
153 [[nodiscard]] bool second_order() const { return get<bool>("second_order"); }
154 [[nodiscard]] bool third_order() const { return get<bool>("third_order"); }
155 [[nodiscard]] bool dipole() const { return get<bool>("dipole"); }
156 [[nodiscard]] bool nuclear() const { return get<bool>("nuclear"); }
157 [[nodiscard]] std::string d2_types() const { return get<std::string>("d2_types"); }
158 [[nodiscard]] double omega() const { return get<double>("omega"); }
159 [[nodiscard]] double L() const { return get<double>("l"); }
160 [[nodiscard]] bool spinrestricted() const { return get<bool>("spinrestricted"); }
162 set_derived_value<size_t>("num_orbitals", g_params.n_orbitals());
163 set_derived_value<bool>("spinrestricted", g_params.is_spinrestricted());
164 set_derived_value<double>("l", g_params.get_L());
165 set_derived_value<double>("lo", g_params.molecule().smallest_length_scale());
166 set_derived_value<std::string>("xc", g_params.get_xc());
167 set_derived_value<std::string>("localize", g_params.get_localize_method());
168 }
169
171 // read the parameters from file and brodcast
172 // tag
173 vector<std::string> calculation_type;
174 vector<bool> calc_flags;
175 if (excited_state()) {
176 if (tda()) {
177 set_derived_value<std::string>("calc_type", "tda");
178 } else {
179 set_derived_value<std::string>("calc_type", "full");
180 }
181 } else if (dipole()) {
182 set_derived_value<std::string>("perturbation", "dipole");
183 set_derived_value<size_t>("states", 3);
184 } else if (nuclear()) {
185 set_derived_value<std::string>("perturbation", "nuclear");
186 set_derived_value<size_t>("states", 3 * molecule.natom());
187 }
188 }
189
190 // convenience getters
191 [[nodiscard]] double econv() const { return get<double>("econv"); }
192 [[nodiscard]] bool first_run() const { return get<bool>("first_run"); }
193 [[nodiscard]] std::string local() const { return get<std::string>("local"); }
194};
195
196void from_json(const nlohmann::json &, ResponseParameters &p);
197
198bool operator==(const ResponseParameters &p1, const ResponseParameters &p2);
199
200bool operator!=(const ResponseParameters &p1, const ResponseParameters &p2);
201
202// convenience getters
203void to_json(nlohmann::json &j);
204}; // namespace madness
205
206// namespace madness
207
208#endif // SRC_APPS_MOLRESPONSE_RESPONSE_PARAMETERS_H_
Definition ground_parameters.h:25
std::string get_localize_method() const
Definition ground_parameters.h:68
double get_L() const
Definition ground_parameters.h:61
std::string get_xc() const
Definition ground_parameters.h:67
unsigned int n_orbitals() const
Definition ground_parameters.h:53
bool is_spinrestricted() const
Definition ground_parameters.h:51
Molecule molecule() const
Definition ground_parameters.h:59
Definition molecule.h:129
double smallest_length_scale() const
Definition molecule.cc:679
size_t natom() const
Definition molecule.h:410
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:328
A parallel world class.
Definition world.h:132
char * p(char *buf, const char *name, int k, int initial_level, double thresh, int order)
Definition derivatives.cc:72
Main include file for MADNESS and defines Function interface.
Namespace for all elements and tools of MADNESS.
Definition DFParameters.h:10
bool operator!=(const ResponseParameters &p1, const ResponseParameters &p2)
Definition response_parameters.cpp:13
bool operator==(const ResponseParameters &p1, const ResponseParameters &p2)
Definition response_parameters.cpp:12
void to_json(nlohmann::json &j)
void from_json(const nlohmann::json &, ResponseParameters &p)
Definition response_parameters.cpp:8
Implements ParallelInputArchive and ParallelOutputArchive for parallel serialization of data.
std::vector< std::string > perturbations
Definition response_parameters.h:20
Definition response_parameters.h:24
std::string dft_deriv() const
Definition response_parameters.h:142
bool first_order() const
Definition response_parameters.h:152
size_t num_orbitals() const
Definition response_parameters.h:117
std::string save_file() const
Definition response_parameters.h:147
virtual void read_input_and_commandline_options(World &world, const commandlineparser &parser, const std::string tag)
Definition QCCalculationParametersBase.h:328
bool dipole() const
Definition response_parameters.h:155
std::string calc_type() const
Definition response_parameters.h:113
bool guess_xyz() const
Definition response_parameters.h:127
bool first_run() const
Definition response_parameters.h:192
std::string prefix() const
Definition response_parameters.h:107
ResponseParameters(const ResponseParameters &other)=default
bool store_potential() const
Definition response_parameters.h:133
double lo() const
Definition response_parameters.h:128
bool tda() const
Definition response_parameters.h:119
std::string hfexalg() const
Definition response_parameters.h:144
std::string fock_json_file() const
Definition response_parameters.h:108
std::string d2_types() const
Definition response_parameters.h:157
bool second_order() const
Definition response_parameters.h:153
bool spinrestricted() const
Definition response_parameters.h:160
double L() const
Definition response_parameters.h:159
std::string local() const
Definition response_parameters.h:193
std::string perturbation() const
Definition response_parameters.h:109
double econv() const
Definition response_parameters.h:191
bool plot_initial() const
Definition response_parameters.h:136
bool kain() const
Definition response_parameters.h:139
bool plot() const
Definition response_parameters.h:120
int k() const
Definition response_parameters.h:131
size_t maxsub() const
Definition response_parameters.h:140
bool third_order() const
Definition response_parameters.h:154
bool quadratic() const
Definition response_parameters.h:135
double maxrotn() const
Definition response_parameters.h:145
double dconv() const
Definition response_parameters.h:126
std::string xc() const
Definition response_parameters.h:143
ResponseParameters(World &world, const commandlineparser &parser)
Definition response_parameters.h:27
bool random() const
Definition response_parameters.h:132
size_t maxiter() const
Definition response_parameters.h:125
bool nwchem() const
Definition response_parameters.h:115
size_t guess_max_iter() const
Definition response_parameters.h:148
bool step_restrict() const
Definition response_parameters.h:121
bool restart() const
Definition response_parameters.h:137
bool excited_state() const
Definition response_parameters.h:151
int print_level() const
Definition response_parameters.h:118
std::string nwchem_dir() const
Definition response_parameters.h:114
std::string localize() const
Definition response_parameters.h:111
std::vector< double > protocol() const
Definition response_parameters.h:129
size_t plot_pts() const
Definition response_parameters.h:123
size_t num_states() const
Definition response_parameters.h:116
double plot_l() const
Definition response_parameters.h:122
double omega() const
Definition response_parameters.h:158
bool plot_all_orbitals() const
Definition response_parameters.h:124
bool nuclear() const
Definition response_parameters.h:156
bool property() const
Definition response_parameters.h:149
ResponseParameters()
Definition response_parameters.h:31
void set_ground_state_calculation_data(const GroundStateCalculation &g_params)
Definition response_parameters.h:161
size_t larger_subspace() const
Definition response_parameters.h:130
int loadbalparts() const
Definition response_parameters.h:150
std::string archive() const
Definition response_parameters.h:112
vector< double > freq_range() const
Definition response_parameters.h:134
std::string deriv() const
Definition response_parameters.h:141
void set_derived_values(World &world, const Molecule &molecule)
Definition response_parameters.h:170
bool save() const
Definition response_parameters.h:146
std::vector< std::string > perturbations() const
Definition response_parameters.h:110
std::string restart_file() const
Definition response_parameters.h:138
static constexpr char const * tag
Definition response_parameters.h:25
very simple command line parser
Definition commandlineparser.h:15
static Molecule molecule
Definition testperiodicdft.cc:39