Program Listing for File convention.hpp

↰ Return to documentation for file (SeQuant/domain/mbpt/convention.hpp)

//
// Created by Eduard Valeyev on 2019-04-01.
//

#ifndef SEQUANT_CONVENTION_HPP
#define SEQUANT_CONVENTION_HPP

#include <SeQuant/domain/mbpt/fwd.hpp>

#include <SeQuant/core/basis.hpp>
#include <SeQuant/core/context.hpp>
#include <SeQuant/core/index_basis_registry.hpp>

#include <limits>
#include <string_view>

namespace sequant {
namespace mbpt {

enum class Convention {
  Minimal,
  SR,
  MR,
  MinimalMR,
  F12,
  QCiFS
};

enum class SpinConvention {
  None,
  Default,
  Legacy,
};

void load(Convention conv = Convention::Minimal,
          SpinConvention spconv = SpinConvention::Default);

std::wstring decorate_label(std::wstring label, bool up);

void add_fermi_spin(IndexBasisRegistry& isr);

inline constexpr IndexBasis::instance_type default_ao_basis_instance =
    std::numeric_limits<IndexBasis::instance_type>::max() - 1;


void add_ao_basis(
    std::shared_ptr<IndexBasisRegistry>& isr,
    IndexSpace::QuantumNumbers spin_any, bool vbs = false, bool abs = false,
    IndexBasis::instance_type instance = default_ao_basis_instance);

[[deprecated("the AO bases are named basis instances; use add_ao_basis")]] void
add_ao_spaces(std::shared_ptr<IndexBasisRegistry>& isr,
              IndexSpace::QuantumNumbers spin_any, bool vbs = false,
              bool abs = false);

void add_df_spaces(std::shared_ptr<IndexBasisRegistry>& isr);

void add_thc_spaces(std::shared_ptr<IndexBasisRegistry>& isr);

[[deprecated(
    "the PAO basis is a named basis instance; use add_pao_basis")]] void
add_pao_spaces(std::shared_ptr<IndexBasisRegistry>& isr,
               IndexSpace::QuantumNumbers spin_any);

inline constexpr IndexBasis::instance_type default_pao_basis_instance =
    std::numeric_limits<IndexBasis::instance_type>::max();


void add_pao_basis(
    std::shared_ptr<IndexBasisRegistry>& isr,
    IndexSpace::QuantumNumbers spin_any,
    IndexBasis::instance_type instance = default_pao_basis_instance,
    std::wstring_view label = L"μ̃");

void add_batching_spaces(std::shared_ptr<IndexBasisRegistry>& isr);


std::shared_ptr<IndexBasisRegistry> make_min_sr_spaces(
    SpinConvention scv = SpinConvention::Default);

std::shared_ptr<IndexBasisRegistry> make_F12_sr_spaces(
    SpinConvention spconv = SpinConvention::Default);

std::shared_ptr<IndexBasisRegistry> make_mr_spaces(
    SpinConvention spconv = SpinConvention::Default);

std::shared_ptr<IndexBasisRegistry> make_min_mr_spaces(
    SpinConvention spconv = SpinConvention::Default);

std::shared_ptr<IndexBasisRegistry> make_sr_spaces(
    SpinConvention spconv = SpinConvention::Default);

std::shared_ptr<IndexBasisRegistry> make_legacy_spaces(
    SpinConvention spconv = SpinConvention::Default);

std::pair<std::shared_ptr<IndexBasisRegistry>,
          std::shared_ptr<IndexBasisRegistry>>
make_fermi_and_bose_spaces(SpinConvention spconv = SpinConvention::Default);


inline void check_for_batching_space() {
  SEQUANT_ASSERT(
      sequant::get_default_context().index_basis_registry()->contains(L"z"));
}

}  // namespace mbpt
}  // namespace sequant

#endif  // SEQUANT_CONVENTION_HPP