Program Listing for File integrals.hpp

Return to documentation for file (src/integrals/integrals.hpp)

//
// Created by Zack Williams on 30/11/2020.
//

#ifndef UW12_INTEGRALS_HPP
#define UW12_INTEGRALS_HPP

#include "base_integrals.hpp"
#include "utils/linalg.hpp"
#include "utils/utils.hpp"

namespace uw12::integrals {
class Integrals {
 public:
  Integrals(
      const BaseIntegrals &_base_integrals,
      const utils::Orbitals &_occ_orbitals,
      const utils::Orbitals &_active_orbitals,
      bool _store_one_trans = true,
      bool _store_one_trans_ri = true
  );

  [[nodiscard]] const utils::MatVec &get_X3idx_one_trans() const;

  [[nodiscard]] const utils::MatVec &get_X3idx_one_trans_ri() const;

  [[nodiscard]] const utils::MatVec &get_X3idx_two_trans() const;

  [[nodiscard]] linalg::Mat get_X4idx_three_trans(size_t sigma) const;

  [[nodiscard]] linalg::Mat get_X4idx_four_trans(size_t sigma) const;

  [[nodiscard]] std::vector<linalg::Vec> get_X_D() const;

  [[nodiscard]] const linalg::Mat &get_P2() const;

  [[nodiscard]] const linalg::Vec &get_df_vals() const;

  [[nodiscard]] const linalg::Mat &get_J3() const;

  [[nodiscard]] const linalg::Mat &get_J3_ri() const;

  [[nodiscard]] size_t spin_channels() const;

  [[nodiscard]] size_t number_ao_orbitals() const;

  [[nodiscard]] size_t number_occ_orbitals(size_t sigma) const;

  [[nodiscard]] size_t number_active_orbitals(size_t sigma) const;

  [[nodiscard]] const BaseIntegrals &get_base_integrals() const;

 private:
  std::shared_ptr<BaseIntegrals> base_integrals;

  utils::Orbitals occ_orbitals;
  utils::Orbitals active_orbitals;

  std::shared_ptr<utils::MatVec> one_trans;
  std::shared_ptr<utils::MatVec> one_trans_ri;
  std::shared_ptr<utils::MatVec> two_trans;

  std::shared_ptr<std::mutex> one_trans_lock;
  std::shared_ptr<std::mutex> one_trans_ri_lock;
  std::shared_ptr<std::mutex> two_trans_lock;

  bool store_one_trans;
  bool store_one_trans_ri;
};
}  // namespace uw12::integrals

#endif  // UW12_INTEGRALS_HPP