7 #ifndef SPARROW_SPECTROSCOPYSETTINGS_H
8 #define SPARROW_SPECTROSCOPYSETTINGS_H
22 namespace RealTimeSpectroscopy {
24 constexpr
const char* resolutionOption =
"spectrum_resolution";
25 constexpr
const char* fwhmOption =
"spectrum_fwhm";
26 constexpr
const char* gradientThresholdOption =
"gradient_threshold";
27 constexpr
const char* partialHessianOption =
"partial_hessian";
28 constexpr
const char* projectionOption =
"gradient_projection";
29 constexpr
const char* partialHessianRMSDDeviationOption =
"partial_hessian_RMSD_deviation";
30 constexpr
const char* uvVisGuessPropagatorDiisDimension =
"uv_vis_diis_max_dimension";
31 constexpr
const char* optimizationProfileOption =
"optimization_profile";
42 void addResolutionOption(
double minValue,
double maxValue,
double defaultValue) {
43 assert(minValue < maxValue &&
"Min value must be smaller than max value.");
44 assert(minValue < defaultValue &&
"Min value must be smaller than default value.");
45 assert(defaultValue < maxValue &&
"default value must be smaller than max value.");
47 "For IR, this is in cm^-1, for UV/Vis in eV.");
51 _fields.push_back(resolutionOption, std::move(resolution));
53 void addFWHMOption(
double defaultFwhm) {
54 assert(defaultFwhm < 100. &&
"Min value must be smaller than default value.");
55 assert(defaultFwhm > 0. &&
"default value must be smaller than max value.");
57 "For IR, this is in cm^-1, for UV/Vis in eV.");
61 _fields.push_back(fwhmOption, std::move(fwhm));
63 void addMethodOption() {
66 _fields.push_back(Utils::SettingsNames::methodParameters, std::move(parameterFile));
70 _fields.push_back(Utils::SettingsNames::method, std::move(method));
74 void addPruningOption() {
76 "Sets whether the basis of singly excited determinants should be pruned and with which method.");
77 prunedBasisCalculation.
addOption(Utils::SettingsNames::PruningOptions::none);
78 prunedBasisCalculation.
addOption(Utils::SettingsNames::PruningOptions::energy);
79 prunedBasisCalculation.
setDefaultOption(Utils::SettingsNames::PruningOptions::none);
82 "Sets the threshold for pruning with an energy criterion in au.");
87 "Sets the threshold for pruning with an intensity criterion in au.");
88 perturbationTheoryThresholdForPruning.
setMinimum(0.);
92 "Switches on the TDA for the excited states calculation.");
95 _fields.push_back(Utils::SettingsNames::pruneBasis, std::move(prunedBasisCalculation));
96 _fields.push_back(Utils::SettingsNames::energyThreshold, std::move(energyThresholdForPruning));
97 _fields.push_back(Utils::SettingsNames::perturbativeThreshold, std::move(perturbationTheoryThresholdForPruning));
98 _fields.push_back(
"tda", std::move(TDAApproximation));
105 addResolutionOption(0.1, 10, 1);
110 _fields.push_back(projectionOption, std::move(gradientProjection));
113 "How tight the structure is optimized before projection. VeryTight, Tight, Medium, Loose, VeryLoose.");
114 optimizationProfile.
addOption(
"very_tight");
118 optimizationProfile.
addOption(
"very_loose");
122 _fields.push_back(optimizationProfileOption, std::move(optimizationProfile));
129 _fields.push_back(gradientThresholdOption, std::move(gradientThreshold));
132 "Calculate only parts of the Hessian matrix corresponding"
133 "to atoms that moved consistently wrt last calculation.");
135 _fields.push_back(partialHessianOption, std::move(partialHessianCalculation));
138 "Deviation atoms in aligned structures must have to be"
139 "considered diverging.");
144 _fields.push_back(partialHessianRMSDDeviationOption, std::move(partialHessianRMSD));
152 addResolutionOption(0.0001, 0.3, 0.002);
160 _fields.push_back(Utils::SettingsNames::numberOfEigenstates, std::move(numberEigenvalues));
165 _fields.push_back(Utils::SettingsNames::initialSubspaceDimension, std::move(initialSubspaceDimension));
168 "Algorithm to compute the stable generalized eigenvalue problem.");
171 gepAlgorithm.
addOption(
"simultaneous_diag");
173 _fields.push_back(
"gep_algo", std::move(gepAlgorithm));
178 _fields.push_back(uvVisGuessPropagatorDiisDimension, std::move(maxDiisDimension));
189 applyProfile(settings_);
202 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::stepMaxCoeff, 2.0e-5);
203 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::stepRMS, 1.0e-5);
204 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::gradMaxCoeff, 2.0e-5);
205 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::gradRMS, 1.0e-5);
206 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::deltaValue, 1.0e-7);
207 settings.modifyInt(Utils::SettingsNames::Optimizations::Convergence::maxIter, 1000);
208 settings.modifyInt(Utils::SettingsNames::Optimizations::Convergence::requirement, 4);
209 settings.modifyInt(Utils::SettingsNames::Optimizations::Bfgs::gdiisMaxStore, 10);
216 settings.modifyInt(Utils::SettingsNames::Optimizations::Bfgs::gdiisMaxStore, 8);
217 settings.modifyInt(Utils::SettingsNames::Optimizations::Convergence::maxIter, 1000);
224 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::stepMaxCoeff, 5.0e-4);
225 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::stepRMS, 5.0e-3);
226 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::gradMaxCoeff, 5.0e-4);
227 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::gradRMS, 5.0e-4);
228 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::deltaValue, 5.0e-6);
229 settings.modifyInt(Utils::SettingsNames::Optimizations::Convergence::maxIter, 100);
230 settings.modifyInt(Utils::SettingsNames::Optimizations::Convergence::requirement, 2);
231 settings.modifyInt(Utils::SettingsNames::Optimizations::Bfgs::gdiisMaxStore, 8);
238 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::stepMaxCoeff, 5.0e-3);
239 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::stepRMS, 1.0e-2);
240 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::gradMaxCoeff, 1.0e-3);
241 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::gradRMS, 5.0e-3);
242 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::deltaValue, 1.0e-5);
243 settings.modifyInt(Utils::SettingsNames::Optimizations::Convergence::maxIter, 100);
244 settings.modifyInt(Utils::SettingsNames::Optimizations::Convergence::requirement, 2);
245 settings.modifyInt(Utils::SettingsNames::Optimizations::Bfgs::gdiisMaxStore, 8);
252 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::stepMaxCoeff, 1.0e-2);
253 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::stepRMS, 5.0e-2);
254 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::gradMaxCoeff, 5.0e-3);
255 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::gradRMS, 1.0e-2);
256 settings.modifyDouble(Utils::SettingsNames::Optimizations::Convergence::deltaValue, 1.0e-4);
257 settings.modifyInt(Utils::SettingsNames::Optimizations::Convergence::maxIter, 50);
258 settings.modifyInt(Utils::SettingsNames::Optimizations::Convergence::requirement, 2);
259 settings.modifyInt(Utils::SettingsNames::Optimizations::Bfgs::gdiisMaxStore, 8);
263 inline std::unique_ptr<GeometryOptimizationProfile> profileFactory(
const Utils::Settings& settings,
const std::string& profile) {
264 if (profile ==
"very_tight")
265 return std::make_unique<VeryTightOptimizationProfile>(settings);
266 else if (profile ==
"tight")
267 return std::make_unique<TightOptimizationProfile>(settings);
268 else if (profile ==
"medium")
269 return std::make_unique<MediumOptimizationProfile>(settings);
270 else if (profile ==
"loose")
271 return std::make_unique<LooseOptimizationProfile>(settings);
272 else if (profile ==
"very_loose")
273 return std::make_unique<VeryLooseOptimizationProfile>(settings);
275 throw std::runtime_error(
"Geometry optimization profile '" + profile +
277 "Possible profiles: very_tight, tight, medium, loose, very_loose");
284 #endif // SPARROW_SPECTROSCOPYSETTINGS_H
void setDefaultValue(double def)
void setMinimum(double min)
Definition: SpectroscopySettings.h:248
Definition: SpectroscopySettings.h:184
Definition: SpectroscopySettings.h:212
Definition: SpectroscopySettings.h:198
Definition: SpectroscopySettings.h:33
Definition: SpectroscopySettings.h:220
void setDefaultValue(bool def)
void setDefaultOption(const std::string &def)
Definition: SpectroscopySettings.h:234
static void populateScfSettings(SettingsCollection &settings)
void addOption(std::string option)
Definition: SpectroscopySettings.h:149
Definition: SpectroscopySettings.h:102
void setMaximum(double max)
void setDefaultValue(std::string def)
void setDefaultValue(int def)