19#ifndef INCLUDE_S3ACTION_HPP_
20#define INCLUDE_S3ACTION_HPP_
28#pragma GCC diagnostic push
29#pragma GCC diagnostic ignored "-Wcomment"
31namespace cdt::s3_action
36 class PhysicalParameters
42 explicit constexpr PhysicalParameters(
long double const alpha,
44 long double const lambda) noexcept
50 -> PhysicalParameters;
54 [[nodiscard]]
constexpr auto alpha() const noexcept {
return m_alpha; }
56 [[nodiscard]]
constexpr auto k() const noexcept {
return m_k; }
58 [[nodiscard]]
constexpr auto lambda() const noexcept {
return m_lambda; }
73 if (!std::isfinite(
alpha) || !std::isfinite(
k) || !std::isfinite(
lambda))
75 throw std::invalid_argument(
"Physical parameters must be finite.");
79 throw std::domain_error(
"Alpha in 3D must be greater than 1/2.");
86 [[nodiscard]]
inline auto make_finite_couplings(
long double const k,
87 long double const lambda)
88 -> std::pair<long double, long double>
90 if (!std::isfinite(k) || !std::isfinite(lambda))
92 throw std::invalid_argument(
"Physical parameters must be finite.");
118 [[nodiscard]]
inline auto
124 auto const [checked_k, checked_lambda] =
125 detail::make_finite_couplings(k_value, lambda_value);
185 auto const [checked_k, checked_lambda] =
186 detail::make_finite_couplings(k_value, lambda_value);
360#pragma GCC diagnostic pop
Scope-owned, value-returning MPFR operations.
auto multiply(Value const &left, Value const &right) -> Value
auto square_root(Value const &value) -> Value
auto negate(Value const &value) -> Value
auto from_integer(long const value) -> Value
auto from_long_double(long double const value) -> Value
auto inverse_hyperbolic_sine(Value const &value) -> Value
auto subtract(Value const &left, Value const &right) -> Value
auto add(Value const &left, Value const &right) -> Value
auto from_decimal(char const *value) -> Value
auto arc_cosine(Value const &value) -> Value
auto divide(Value const &numerator, Value const &denominator) -> Value
CGAL::Gmpfr Value
Owning arbitrary-precision floating-point value used by CDT++.
auto s3_bulk_action(Int_precision const n1_tl_count, Int_precision const n3_31_13_count, Int_precision const n3_22_count, PhysicalParameters const ¶meters) -> mpfr_values::Value
Calculates the generalized S3 bulk action in terms of , , , , , and .
auto s3_bulk_action_alpha_minus_one_imaginary_coefficient(Int_precision const n1_tl_count, Int_precision const n3_31_13_count, Int_precision const n3_22_count, long double const k_value, long double const lambda_value) -> mpfr_values::Value
Calculates the coefficient of in the S3 bulk action.
auto s3_bulk_action_alpha_one(Int_precision const n1_tl_count, Int_precision const n3_31_13_count, Int_precision const n3_22_count, long double const k_value, long double const lambda_value) -> mpfr_values::Value
Calculates S3 bulk action for =1.
Finite physical couplings used to evaluate the Euclidean action.
constexpr auto k() const noexcept
friend auto make_physical_parameters(long double alpha, long double k, long double lambda) -> PhysicalParameters
Validate physical couplings for three-dimensional action APIs.
constexpr auto lambda() const noexcept
constexpr auto alpha() const noexcept
std::int32_t Int_precision