SERiF v0.0.1a
Stellar Evolution and Rotation in Four Dimensions
Loading...
Searching...
No Matches
serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > > Class Template Referencefinal

Own immutable physics and an explicit formulation, independently of meshes, caches and solvers. More...

#include <stellar_model.hpp>

Public Types

using EquationOfState = EquationOfStateT
 
using Equations = EquationDefinitionT
 
using SpecificationTypes = utils::types::TypeList<Specifications...>
 
template<SpecificationRole Role>
using SpecificationsForRole = std::conditional_t<Role == SpecificationRole::constitutive_law, utils::types::TypeList<EquationOfState>, typename detail::SelectRole<Role, Specifications...>::Type>
 

Public Member Functions

template<typename... Arguments>
requires detail::ArgumentsMatch<SpecificationTypes, Arguments...>::value && (std::constructible_from<std::remove_cvref_t<Arguments>, Arguments> && ...)
 StellarModel (EquationOfState equation_of_state, Equations equations, Arguments &&... specifications)
 Capture each physical input once; constructor order does not change specification identity.
 
const EquationOfState & equation_of_state () const noexcept
 Inspect the authoritative EOS without requiring its numerical relations.
 
const Equations & equations () const noexcept
 Inspect the supplied equation composition or its deferred definition.
 
template<typename Specification>
requires contains_specification<Specification>
const std::remove_cvref_t< Specification > & specification () const noexcept
 Access a physical prescription by exact type, never by a coincidentally shared unit.
 
template<SpecificationRole Role>
auto specifications_for_role () const noexcept
 Return immutable references to every prescription of one physical role in canonical order.
 
template<SpecificationRole Role>
requires (specification_role_count<Role> == 1)
const auto & specification_for_role () const noexcept
 Offer a singular physical accessor only when that role is unambiguous.
 
template<typename Visitor>
requires std::invocable<Visitor&, const EquationOfState&> && (std::invocable<Visitor&, const Specifications&> && ...)
void visit_specifications (Visitor &&visitor) const
 Visit the EOS first, then physical prescriptions in canonical order.
 
template<typename Transform>
requires std::copy_constructible<Equations> && std::invocable<Transform&, const EquationOfState&> && std::same_as<std::remove_cvref_t<std::invoke_result_t<Transform&, const EquationOfState&>>, EquationOfState> && (std::invocable<Transform&, const Specifications&> && ...) && (std::same_as<std::remove_cvref_t<std::invoke_result_t<Transform&, const Specifications&>>, Specifications> && ...)
StellarModel transform_specifications (Transform &&transform) const
 Rebuild same-type physical values; deferred equations will read the new values at binding.
 
template<typename Transform>
requires std::invocable<Transform&, const EquationOfState&> && std::same_as<std::remove_cvref_t<std::invoke_result_t<Transform&, const EquationOfState&>>, EquationOfState> && (std::invocable<Transform&, const Specifications&> && ...) && (std::same_as<std::remove_cvref_t<std::invoke_result_t<Transform&, const Specifications&>>, Specifications> && ...)
StellarModel transform_specifications (Transform &&transform, Equations equations) const
 Rebuild move-only equation definitions explicitly instead of imposing a cloning policy.
 

Static Public Member Functions

static constexpr std::span< const SpecificationDescriptor > specification_descriptors () noexcept
 Describe canonical non-EOS prescriptions without predicting runtime support.
 

Static Public Attributes

static constexpr std::size_t specification_count = sizeof...(Specifications) + 1
 
template<SpecificationRole Role>
static constexpr std::size_t specification_role_count = std::size_t{Role == SpecificationRole::constitutive_law} + (std::size_t{0} + ... + std::size_t{Specifications::ModelDefinition::role == Role})
 
template<typename Specification>
static constexpr bool contains_specification = std::same_as<std::remove_cvref_t<Specification>, EquationOfState> || (std::same_as<std::remove_cvref_t<Specification>, Specifications> || ...)
 

Private Attributes

EquationOfState m_equation_of_state
 
Equations m_equations
 
std::tuple< Specifications... > m_specifications
 

Detailed Description

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
requires ValidSpecificationPack<Specifications...> && std::is_object_v<EquationOfStateT> && std::is_object_v<EquationDefinitionT>
class serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >

Own immutable physics and an explicit formulation, independently of meshes, caches and solvers.

Member Typedef Documentation

◆ EquationOfState

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
using serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::EquationOfState = EquationOfStateT

◆ Equations

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
using serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::Equations = EquationDefinitionT

◆ SpecificationsForRole

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
template<SpecificationRole Role>
using serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::SpecificationsForRole = std::conditional_t<Role == SpecificationRole::constitutive_law, utils::types::TypeList<EquationOfState>, typename detail::SelectRole<Role, Specifications...>::Type>

◆ SpecificationTypes

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
using serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::SpecificationTypes = utils::types::TypeList<Specifications...>

Constructor & Destructor Documentation

◆ StellarModel()

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
template<typename... Arguments>
requires detail::ArgumentsMatch<SpecificationTypes, Arguments...>::value && (std::constructible_from<std::remove_cvref_t<Arguments>, Arguments> && ...)
serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::StellarModel ( EquationOfState equation_of_state,
Equations equations,
Arguments &&... specifications )
inlineexplicit

Capture each physical input once; constructor order does not change specification identity.

Member Function Documentation

◆ equation_of_state()

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
const EquationOfState & serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::equation_of_state ( ) const
inlinenodiscardnoexcept

Inspect the authoritative EOS without requiring its numerical relations.

◆ equations()

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
const Equations & serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::equations ( ) const
inlinenodiscardnoexcept

Inspect the supplied equation composition or its deferred definition.

◆ specification()

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
template<typename Specification>
requires contains_specification<Specification>
const std::remove_cvref_t< Specification > & serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::specification ( ) const
inlinenodiscardnoexcept

Access a physical prescription by exact type, never by a coincidentally shared unit.

◆ specification_descriptors()

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
static constexpr std::span< const SpecificationDescriptor > serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::specification_descriptors ( )
inlinestaticnodiscardconstexprnoexcept

Describe canonical non-EOS prescriptions without predicting runtime support.

◆ specification_for_role()

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
template<SpecificationRole Role>
requires (specification_role_count<Role> == 1)
const auto & serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::specification_for_role ( ) const
inlinenodiscardnoexcept

Offer a singular physical accessor only when that role is unambiguous.

◆ specifications_for_role()

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
template<SpecificationRole Role>
auto serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::specifications_for_role ( ) const
inlinenodiscardnoexcept

Return immutable references to every prescription of one physical role in canonical order.

◆ transform_specifications() [1/2]

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
template<typename Transform>
requires std::copy_constructible<Equations> && std::invocable<Transform&, const EquationOfState&> && std::same_as<std::remove_cvref_t<std::invoke_result_t<Transform&, const EquationOfState&>>, EquationOfState> && (std::invocable<Transform&, const Specifications&> && ...) && (std::same_as<std::remove_cvref_t<std::invoke_result_t<Transform&, const Specifications&>>, Specifications> && ...)
StellarModel serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::transform_specifications ( Transform && transform) const
inlinenodiscard

Rebuild same-type physical values; deferred equations will read the new values at binding.

◆ transform_specifications() [2/2]

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
template<typename Transform>
requires std::invocable<Transform&, const EquationOfState&> && std::same_as<std::remove_cvref_t<std::invoke_result_t<Transform&, const EquationOfState&>>, EquationOfState> && (std::invocable<Transform&, const Specifications&> && ...) && (std::same_as<std::remove_cvref_t<std::invoke_result_t<Transform&, const Specifications&>>, Specifications> && ...)
StellarModel serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::transform_specifications ( Transform && transform,
Equations equations ) const
inlinenodiscard

Rebuild move-only equation definitions explicitly instead of imposing a cloning policy.

◆ visit_specifications()

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
template<typename Visitor>
requires std::invocable<Visitor&, const EquationOfState&> && (std::invocable<Visitor&, const Specifications&> && ...)
void serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::visit_specifications ( Visitor && visitor) const
inline

Visit the EOS first, then physical prescriptions in canonical order.

Member Data Documentation

◆ contains_specification

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
template<typename Specification>
bool serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::contains_specification = std::same_as<std::remove_cvref_t<Specification>, EquationOfState> || (std::same_as<std::remove_cvref_t<Specification>, Specifications> || ...)
staticconstexpr

◆ m_equation_of_state

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
EquationOfState serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::m_equation_of_state
private

◆ m_equations

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
Equations serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::m_equations
private

◆ m_specifications

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
std::tuple<Specifications...> serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::m_specifications
private

◆ specification_count

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
std::size_t serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::specification_count = sizeof...(Specifications) + 1
staticconstexpr

◆ specification_role_count

template<typename EquationOfStateT, typename EquationDefinitionT, typename... Specifications>
template<SpecificationRole Role>
std::size_t serif::model::StellarModel< EquationOfStateT, EquationDefinitionT, utils::types::TypeList< Specifications... > >::specification_role_count = std::size_t{Role == SpecificationRole::constitutive_law} + (std::size_t{0} + ... + std::size_t{Specifications::ModelDefinition::role == Role})
staticconstexpr

The documentation for this class was generated from the following file: