7 #ifndef INCLUDE_SPARROW_CONSTEXPR_NDDO_PARAMETERS_H
8 #define INCLUDE_SPARROW_CONSTEXPR_NDDO_PARAMETERS_H
19 template<std::
size_t s>
21 static constexpr std::size_t size = s;
25 std::array<Parameters::Atomic::GaussianRepulsion, size> gaussianRepulsion;
28 template<
typename... GRep>
30 return ConstexprAtomic<
sizeof...(greps)>{Z, std::move(pack), {std::forward<GRep>(greps)...}};
33 template<std::
size_t s>
38 std::copy(std::begin(a.gaussianRepulsion), std::end(a.gaussianRepulsion), std::begin(atomic.
gaussianRepulsion));
44 template<
typename AtomicsTuple, std::size_t... Inds>
45 std::unordered_map<int, Parameters::Atomic> runtime(AtomicsTuple&& tup, std::index_sequence<Inds...> ) {
46 return std::unordered_map<int, Parameters::Atomic>{
47 {std::get<Inds>(tup).Z, runtime(std::get<Inds>(tup))}...,
53 template<
typename AtomicsTuple>
54 std::unordered_map<int, Parameters::Atomic> runtime(AtomicsTuple&& tup) {
55 return detail::runtime(std::forward<AtomicsTuple>(tup),
56 std::make_index_sequence<std::tuple_size<std::decay_t<AtomicsTuple>>::value>{});
65 constexpr
ConstexprDiatomic diatomic(
int Z1,
int Z2,
double exponent,
double factor) {
66 return {Z1, Z2, {exponent, factor}};
69 template<
typename AtomicList, std::
size_t d>
71 static constexpr std::size_t diatomicSize = d;
74 std::array<ConstexprDiatomic, d> diatomic;
77 template<
typename... Atomics>
78 constexpr
auto collect(Atomics&&... atomics) {
79 return std::make_tuple(std::forward<Atomics>(atomics)...);
82 template<
typename AtomicList,
typename... Diatomics>
83 constexpr
auto make_parameters(AtomicList&& atomics, Diatomics... diatomics) {
84 return ConstexprParameters<AtomicList,
sizeof...(Diatomics)>{std::forward<AtomicList>(atomics),
86 std::forward<Diatomics>(diatomics)...,
90 template<
typename AtomicList, std::
size_t s>
91 Parameters runtime(
const ConstexprParameters<AtomicList, s>& a) {
94 nddo.atomic = runtime(a.atomic);
96 for (
const ConstexprDiatomic& diatomic : a.diatomic) {
97 nddo.diatomic.emplace(std::make_pair(diatomic.Z1, diatomic.Z2), diatomic.constants);
Pack of implicitly constexpr part of atomic parameters.
Definition: Parameters.h:33
Diatomic parameters.
Definition: Parameters.h:103
Definition: ConstexprParameters.h:59
Definition: ConstexprParameters.h:70
Definition: Parameters.h:24
std::vector< GaussianRepulsion > gaussianRepulsion
Gaussian repulsion parameters (usually 0-3)
Definition: Parameters.h:95
Pack pack
Gaussian repulsion parameters (usually 0-3)
Definition: Parameters.h:93
Definition: ConstexprParameters.h:20