Scine::Sparrow  5.0.0
Library for fast and agile quantum chemical calculations with semiempirical methods.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages
CISLinearResponseTimeDependentCalculator.h
Go to the documentation of this file.
1 
7 #ifndef SPARROW_CISLINEARRESPONSETIMEDEPENDENTCALCULATOR_H
8 #define SPARROW_CISLINEARRESPONSETIMEDEPENDENTCALCULATOR_H
9 
11 #include <Core/Interfaces/CalculatorWithReference.h>
13 #include <Utils/CalculatorBasics.h>
14 #include <Utils/Math/IterativeDiagonalizer/SpinAdaptedEigenContainer.h>
16 #include <Eigen/Core>
17 #include <Eigen/Sparse>
18 #include <chrono>
19 #include <memory>
20 #include <numeric>
21 namespace Scine {
22 namespace Core {
23 class Calculator;
24 } // namespace Core
25 namespace Utils {
26 class Settings;
27 class Results;
28 namespace LcaoUtils {
29 class ElectronicOccupation;
30 }
31 enum class SpinTransition;
32 } // namespace Utils
33 namespace Sparrow {
34 
35 class NDDOMethodWrapper;
36 
49  public:
50  constexpr static const char* model = "CIS-NDDO";
54 
64  const Core::Calculator& getReferenceCalculator() const final;
70  void setReferenceCalculator(std::shared_ptr<Core::Calculator> method) final;
77  void referenceCalculation() final;
78 
83  Utils::Results& results() final;
88  const Utils::Results& results() const final;
92  Utils::Settings& settings() final;
96  const Utils::Settings& settings() const final;
100  std::string name() const final;
101 
105  void applySettings() final;
106 
117  template<Utils::Reference restrictedness>
119  int numberOfEnergyLevels = 0, int initialSubspaceDimension = 0,
120  Utils::SpinTransition spinBlock = Utils::SpinTransition::Singlet);
121 
129  const Utils::Results& calculate() final;
130 
134  void setGuess(std::shared_ptr<GuessSpecifier> guessVectorMatrix) final;
138  auto getGuess() const -> std::shared_ptr<GuessSpecifier> final;
139 
140  private:
141  void setExcitedStatesParam(Utils::Reference restrictedness, Utils::SpinTransition spinBlock);
142  void prepareIntegralScreening();
143  void checkMemoryRequirement(int excitationsDim, int numberOfEnergyLevels);
144  template<Utils::Reference restrictedness>
145  void generateTransitionDipoleMoments(Utils::ElectronicTransitionResult& excitedStatesResults, const CISData& cisData,
146  Utils::SpinTransition spinBlock) const;
147 
148  std::shared_ptr<NDDOMethodWrapper> nddoMethod_;
149  std::unique_ptr<Utils::Settings> settings_;
150  std::unique_ptr<CISData> cisData_;
151  std::shared_ptr<GuessSpecifier> guess_;
152  std::vector<std::multimap<double, int, std::greater<double>>> integralsThresholds_;
153  std::vector<int> orderMap_;
154  ExcitedStatesParam excitedStatesParam_{1., 1., 1.};
155  Utils::Results results_;
156 };
157 } // namespace Sparrow
158 } // namespace Scine
159 
160 #endif // SPARROW_CISLINEARRESPONSETIMEDEPENDENTCALCULATOR_H
void applySettings() final
Apply the settings contained in the settings_ member.
Definition: CISLinearResponseTimeDependentCalculator.cpp:89
Definition: TimeDependentUtils.h:22
Definition: LinearResponseCalculator.h:15
auto getGuess() const -> std::shared_ptr< GuessSpecifier > final
Returns the guess in the full singles space (no pruning)
Definition: CISLinearResponseTimeDependentCalculator.cpp:331
Utils::Settings & settings() final
Accessor for the underlying settings.
Definition: CISLinearResponseTimeDependentCalculator.cpp:77
CISLinearResponseTimeDependentCalculator()
TODO: Active space?
Definition: CISLinearResponseTimeDependentCalculator.cpp:46
void setReferenceCalculator(std::shared_ptr< Core::Calculator > method) final
Sets the ground state method to calculate excited states.
Definition: CISLinearResponseTimeDependentCalculator.cpp:38
Definition: CISLinearResponseTimeDependentCalculator.h:48
Core::Calculator & getReferenceCalculator() final
Accessor for the ground state calculator.
Definition: CISLinearResponseTimeDependentCalculator.cpp:69
void referenceCalculation() final
This function gives the chance to perform a reference calculation. This is not needed if the calculat...
Definition: CISLinearResponseTimeDependentCalculator.cpp:58
Utils::Results & results() final
Accessor for the Results stored in this method wrapper.
Definition: CISLinearResponseTimeDependentCalculator.cpp:50
void setGuess(std::shared_ptr< GuessSpecifier > guessVectorMatrix) final
Sets the guess to be used in the next calculation. If empty, diagonal dominant guess will be used...
Definition: CISLinearResponseTimeDependentCalculator.cpp:327
std::string name() const final
Getter for the model name, in this case &quot;CIS&quot;.
Definition: CISLinearResponseTimeDependentCalculator.cpp:85
This class contains the infos needed to perform a CIS calculation. This way excited states properties...
Definition: CISData.h:24
Utils::ElectronicTransitionResult solve(Utils::SpinAdaptedContainer< restrictedness, Eigen::VectorXd > energyDifferenceVector, int numberOfEnergyLevels=0, int initialSubspaceDimension=0, Utils::SpinTransition spinBlock=Utils::SpinTransition::Singlet)
Solves the first roots of the CIS Matrix in a direct way.
Definition: CISLinearResponseTimeDependentCalculator.cpp:127
const Utils::Results & calculate() final
Overridden calculate method, inherited from Core::CalculatorWithReference. This method works through ...
Definition: CISLinearResponseTimeDependentCalculator.cpp:203