Program Listing for File cc.hpp

Return to documentation for file (SeQuant/domain/mbpt/models/cc.hpp)

#ifndef SEQUANT_DOMAIN_MBPT_MODELS_CC_HPP
#define SEQUANT_DOMAIN_MBPT_MODELS_CC_HPP

#include <cstddef>
#include <limits>
#include <vector>

#include <SeQuant/core/op.hpp>
#include <SeQuant/domain/mbpt/op.hpp>

namespace sequant {
class ExprPtr;
}

namespace sequant::mbpt {

class CC {
 public:
  enum class Ansatz {
    T,
    oT,
    U,
    oU
  };

  CC(size_t N, Ansatz ansatz = Ansatz::T);

  Ansatz ansatz() const;

  bool unitary() const;

  ExprPtr sim_tr(ExprPtr expr, size_t r);

  [[nodiscard]] std::vector<ExprPtr> t(
      size_t commutator_rank = 4,
      size_t pmax = std::numeric_limits<size_t>::max(), size_t pmin = 0);

  [[nodiscard]] std::vector<ExprPtr> λ(size_t commutator_rank = 4);

  // clang-format off
  // clang-format on
  [[nodiscard]] std::vector<ExprPtr> t_pt(size_t order = 1, size_t rank = 1);

  // clang-format off
  // clang-format on
  [[nodiscard]] std::vector<ExprPtr> λ_pt(size_t order = 1, size_t rank = 1);

  [[nodiscard]] std::vector<ExprPtr> eom_r(nₚ np, nₕ nh);

  [[nodiscard]] std::vector<ExprPtr> eom_l(nₚ np, nₕ nh);

 private:
  size_t N;
  Ansatz ansatz_ = Ansatz::T;
};  // class CC

}  // namespace sequant::mbpt

#endif  // SEQUANT_DOMAIN_MBPT_MODELS_CC_HPP