SERiF v0.0.1a
Stellar Evolution and Rotation in Four Dimensions
Loading...
Searching...
No Matches
serif::discretization::domain::schema Namespace Reference

Namespaces

namespace  validation
 

Classes

struct  BoundaryID
 The BoundaryID struct is a compile-time type that associates a semantic boundary (a Boundary) with an integer attribute in the mesh file. This allows the discretization framework to identify which boundary elements in the mesh correspond to which semantic boundaries in the simulation. More...
 
struct  BoundaryIDList
 A list of boundary IDs in the discretization framework. More...
 
struct  DomainID
 The DomainID struct is a compile-time type that associates a semantic domain (a Domain) with an integer attribute in the mesh file. This allows the discretization framework to identify which elements in the mesh correspond to which semantic domains in the simulation. More...
 
struct  DomainIDList
 A list of domain IDs in the discretization framework. More...
 
struct  DomainSchema
 A DomainSchema is a collection of relations that describe the relationships between domains and boundaries in a mesh. It is used to validate that a mesh has the expected set of domains and boundaries, and that those domains and boundaries have the expected topological relations. This is important for ensuring that the mesh is suitable for the intended simulation or analysis. There is one primary schema we define for SERiF, that is three domains (core, envelope, and vacuum) and two boundaries (stellar surface and infinity surface). See schemas.hpp for more information on this schema. More...
 
struct  RelationList
 Compile-time list of relations, used to group relations together for operations and forms. This struct is a variadic template that takes a list of relation types as template parameters. More...
 

Concepts

concept  IsSchema
 Concept for a schema, which is a collection of relations that describe the relationships between domains and boundaries in a mesh. Something is a schema if it satisfies the is_schema_v trait.
 

Typedefs

using CoreEnvelopeVacuumDomainSchema
 The primary domain schema for SERiF. This is a three-domain, two-boundary schema that is used to validate meshes that are loaded into SERiF.
 

Variables

template<typename S>
constexpr bool is_schema_v = false
 Trait to determine if a type is a DomainSchema. This is the default false specialization.
 
template<IsDomainIDList DomainIDs, IsBoundaryIDList BoundaryIDs, IsRelationList Relations>
constexpr bool is_schema_v< DomainSchema< DomainIDs, BoundaryIDs, Relations > > = true
 Trait to determine if a type is a DomainSchema. This is the true specialization for DomainSchema types.
 

Typedef Documentation

◆ CoreEnvelopeVacuumDomainSchema

Initial value:
>,
>,
>
>
The BoundaryID struct is a compile-time type that associates a semantic boundary (a Boundary) with an...
Definition boundary.hpp:29
The DomainID struct is a compile-time type that associates a semantic domain (a Domain) with an integ...
Definition domain.hpp:29
A list of boundary IDs in the discretization framework.
Definition lists.hpp:39
A list of domain IDs in the discretization framework.
Definition lists.hpp:22
Compile time type representing the domain boundary relation between a boundary and one or two domains...
Definition relations.hpp:78
Compile time type representing the fully connected relation for a domain or set. This relation states...
Definition relations.hpp:60
Compile time type representing the inscribed relation between two domains or sets....
Definition relations.hpp:45
Compile-time list of relations, used to group relations together for operations and forms....
Definition relation_list.hpp:22
A DomainSchema is a collection of relations that describe the relationships between domains and bound...
Definition domain_schema.hpp:48

The primary domain schema for SERiF. This is a three-domain, two-boundary schema that is used to validate meshes that are loaded into SERiF.

The three domains are:

The two boundaries are:

  • StellarSurfaceBoundary: The surface of the star, which is the interface between the stellar domains and the vacuum domain.
  • InfinitySurfaceBoundary: The outer edge of the vacuum region, which is the interface between the vacuum domain and the exterior of the mesh.
Note
The core and envelope domains do not necessarily correspond to the physical core and envelope of a star. Rather, this is terminology used to describe the two regions where we orient the mesh differently. Fundamentally we cannot reasonably continue a spherical mesh to the center of a stellar model due to the r=0 singularity. Therefore, the mesh generation program we use (stroid) generates a cartisan mesh embedded within a spherical mesh (there is a bit more to the topology to ensure we have a nicely structured mesh, see stroid for more details). It is this inner cartesian mesh (along with the transition region) that we call the core. The user may need to make choices about where that transition region occurs in their stellar model.

In addition to the three domains and two boundaries, we also impose a series of topological relations between the domains and boundaries. These relations are:

  • FullyConnected<CoreDomain>: The core domain must be fully connected (i.e there are no disconnected blobs of core domain).
  • FullyConnected<EnvelopeDomain>: The envelope domain must be fully connected (i.e there are no disconnected blobs of envelope domain).
  • FullyConnected<VacuumDomain>: The vacuum domain must be fully connected (i.e there are no disconnected blobs of vacuum domain).
  • Inscribed<CoreDomain, EnvelopeDomain>: The core domain must be inscribed within the envelope domain (i.e the core domain must be fully contained within the envelope domain).
  • Inscribed<StellarDomains, VacuumDomain>: The stellar domains (core and envelope) must be inscribed within the vacuum domain (i.e the stellar domains must be fully contained within the vacuum domain).
  • DomainBoundary<StellarSurfaceBoundary, StellarDomains, VacuumDomain>: The stellar surface boundary must be the interface between the stellar domains and the vacuum domain.
  • DomainBoundary<InfinitySurfaceBoundary, VacuumDomain, ExteriorDomain>: The infinity surface boundary must be the interface between the vacuum domain and the exterior of the mesh.

We also specify what domain and boundary IDs are expected in the mesh. The expected domain IDs are:

The expected boundary IDs are:

This lets us say at compile time that a mesh must have this structure; however, we can only validate that a mesh actually has this structure at runtime.

Variable Documentation

◆ is_schema_v

template<typename S>
bool serif::discretization::domain::schema::is_schema_v = false
constexpr

Trait to determine if a type is a DomainSchema. This is the default false specialization.

Template Parameters
SThe type to check.

◆ is_schema_v< DomainSchema< DomainIDs, BoundaryIDs, Relations > >

template<IsDomainIDList DomainIDs, IsBoundaryIDList BoundaryIDs, IsRelationList Relations>
bool serif::discretization::domain::schema::is_schema_v< DomainSchema< DomainIDs, BoundaryIDs, Relations > > = true
constexpr

Trait to determine if a type is a DomainSchema. This is the true specialization for DomainSchema types.

Template Parameters
DomainIDsThe list of domain IDs that are expected in the mesh.
BoundaryIDsThe list of boundary IDs that are expected in the mesh.
RelationsThe list of relations that describe the relationships between the domains and boundaries.