CDT++ 1.0.0-rc3
Causal Dynamical Triangulations in C++
Loading...
Searching...
No Matches
cdt::foliated_triangulations::FoliatedTriangulation< 3 > Class Reference

3D Foliated triangulation More...

#include <Foliated_triangulation.hpp>

Inheritance diagram for cdt::foliated_triangulations::FoliatedTriangulation< 3 >:
Collaboration diagram for cdt::foliated_triangulations::FoliatedTriangulation< 3 >:

Public Member Functions

 FoliatedTriangulation ()=default
 Default ctor.
 FoliatedTriangulation (Causal_vertices_t< 3 > const &causal_vertices, double const t_initial_radius=INITIAL_RADIUS, double const t_foliation_spacing=FOLIATION_SPACING)
 Constructor from Causal_vertices.
 FoliatedTriangulation (Delaunay triangulation, double const initial_radius=INITIAL_RADIUS, double const foliation_spacing=FOLIATION_SPACING)
 Constructor using delaunay triangulation Pass-by-value-then-move. Delaunay is the ctor for the Delaunay triangulation.
 FoliatedTriangulation (FoliatedTriangulation &&other) noexcept=default
 Move constructor.
 FoliatedTriangulation (FoliatedTriangulation const &other)
 Copy Constructor.
 FoliatedTriangulation (Int_precision const t_simplices, Int_precision const t_timeslices, cdt::Random &&generator, double const t_initial_radius=INITIAL_RADIUS, double const t_foliation_spacing=FOLIATION_SPACING)
 Construct from an explicit temporary initialization stream.
 FoliatedTriangulation (Int_precision const t_simplices, Int_precision const t_timeslices, cdt::Random &generator, double const t_initial_radius=INITIAL_RADIUS, double const t_foliation_spacing=FOLIATION_SPACING)
 Constructor with a caller-owned initialization stream.
 ~FoliatedTriangulation ()=default
 Default dtor.
auto check_all_cells () const -> bool
 Check that all cells are correctly classified.
auto check_all_vertices () const -> bool
auto delaunay_snapshot () const -> Delaunay
auto dimension () const
auto does_vertex_radius_match_timevalue (Vertex_handle_t< 3 > const t_vertex) const -> bool
 Check the radius of a vertex from the origin with its timevalue.
auto expected_radius (Vertex_handle_t< 3 > const &t_vertex) const -> double
 Calculates the expected radial distance of a vertex.
auto expected_timevalue (Vertex_handle_t< 3 > const &t_vertex) const -> int
 Calculate the expected timevalue for a vertex.
auto fix_cells () -> bool
 Fix all cells in the triangulation.
auto fix_vertices () -> bool
 Fix vertices with wrong timevalues after foliation.
auto foliation_spacing () const
auto initial_radius () const
auto is_correct () const -> bool
auto is_correct_with_diagnostics () const -> bool
auto is_delaunay () const -> bool
auto is_fixed () -> bool
auto is_foliated () const -> bool
 Verifies the triangulation is properly foliated.
auto is_initialized () const -> bool
auto is_structurally_correct () const -> bool
auto is_tds_valid () const -> bool
auto max_time () const
auto min_time () const
auto N1_SL () const
auto N1_TL () const
auto number_of_finite_cells () const
auto number_of_finite_edges () const
auto number_of_finite_facets () const
auto number_of_one_three_cells () const noexcept -> std::size_t
auto number_of_spacelike_faces () const noexcept -> std::size_t
auto number_of_three_one_cells () const noexcept -> std::size_t
auto number_of_two_two_cells () const noexcept -> std::size_t
auto number_of_vertices () const
auto operator= (FoliatedTriangulation &&other) noexcept -> FoliatedTriangulation &
 Move assignment operator.
auto operator= (FoliatedTriangulation const &other) -> FoliatedTriangulation &
 Copy assignment operator.
void print () const
 Print triangulation statistics.
void print_cells () const
 Print timevalues of each vertex in the cell and the resulting cell->info().
void print_edges () const
 Print timevalues of each vertex in the edge and classify as timelike or spacelike.
void print_vertices () const
 Print values of a vertex.
void print_volume_per_timeslice () const
 Print the number of spacelike faces per timeslice.
auto spacelike_face_count (Int_precision const timevalue) const noexcept -> std::size_t

Friends

void swap (FoliatedTriangulation &swap_from, FoliatedTriangulation &swap_into) noexcept
 Non-member swap function for Foliated Triangulations.

Detailed Description

3D Foliated triangulation

This class is a wrapper around a Delaunay triangulation. The Delaunay triangulation is augmented with a timevalue for each vertex and a simplex type for each cell. The FoliatedTriangulation class invariant is that the Delaunay triangulation has validly foliated vertices and cells, and has further containers for the various sub-simplicial complexes of the triangulation. Member functions on the same object must not be invoked concurrently. Use owning snapshots when topology must cross an ownership or concurrency boundary. Supported Pachner moves preserve the triangulation-data-structure and causal manifold invariants, but are not required to preserve CGAL's geometric Delaunay predicate. Use is_correct() for canonical simulation states and is_initialized() when the geometric Delaunay property is also required.

See also
Concurrency, ownership, and handlelifetime

Definition at line 1407 of file Foliated_triangulation.hpp.

Constructor & Destructor Documentation

◆ FoliatedTriangulation() [1/6]

cdt::foliated_triangulations::FoliatedTriangulation< 3 >::FoliatedTriangulation ( FoliatedTriangulation< 3 > const & other)
inline

Copy Constructor.

Parameters
otherTriangulation to copy.

Definition at line 1555 of file Foliated_triangulation.hpp.

References FoliatedTriangulation(), and swap.

◆ FoliatedTriangulation() [2/6]

cdt::foliated_triangulations::FoliatedTriangulation< 3 >::FoliatedTriangulation ( FoliatedTriangulation< 3 > && other)
defaultnoexcept

Move constructor.

The invariant-bearing Delaunay state transfers its lock owner and detaches the moved-from triangulation as one operation.

Parameters
otherTriangulation whose state is transferred.

References FoliatedTriangulation().

◆ FoliatedTriangulation() [3/6]

cdt::foliated_triangulations::FoliatedTriangulation< 3 >::FoliatedTriangulation ( Delaunay triangulation,
double const initial_radius = INITIAL_RADIUS,
double const foliation_spacing = FOLIATION_SPACING )
inlineexplicit

Constructor using delaunay triangulation Pass-by-value-then-move. Delaunay is the ctor for the Delaunay triangulation.

Parameters
triangulationDelaunay triangulation
initial_radiusRadius of first timeslice
foliation_spacingRadial separation between timeslices
Precondition
initial_radius and foliation_spacing are finite and positive.
Exceptions
std::invalid_argumentif triangulation is empty.

Definition at line 1639 of file Foliated_triangulation.hpp.

References FoliatedTriangulation(), cdt::FOLIATION_SPACING, foliation_spacing(), cdt::INITIAL_RADIUS, and initial_radius().

◆ FoliatedTriangulation() [4/6]

cdt::foliated_triangulations::FoliatedTriangulation< 3 >::FoliatedTriangulation ( Int_precision const t_simplices,
Int_precision const t_timeslices,
cdt::Random & generator,
double const t_initial_radius = INITIAL_RADIUS,
double const t_foliation_spacing = FOLIATION_SPACING )
inline

Constructor with a caller-owned initialization stream.

Parameters
t_simplicesDesired number of simplices
t_timeslicesDesired number of timeslices
generatorCaller-owned initialization stream whose state is advanced during construction
t_initial_radiusRadius of the first timeslice
t_foliation_spacingRadial separation between timeslices
Exceptions
std::invalid_argumentif the counts or geometry are invalid, the generated points are not unique, or construction produces no vertices.
std::out_of_rangeif a layer population cannot be represented.
Note
The caller-owned generator may have advanced if construction fails after sampling begins.

Definition at line 1680 of file Foliated_triangulation.hpp.

References FoliatedTriangulation(), cdt::FOLIATION_SPACING, cdt::INITIAL_RADIUS, and cdt::foliated_triangulations::make_triangulation().

◆ FoliatedTriangulation() [5/6]

cdt::foliated_triangulations::FoliatedTriangulation< 3 >::FoliatedTriangulation ( Int_precision const t_simplices,
Int_precision const t_timeslices,
cdt::Random && generator,
double const t_initial_radius = INITIAL_RADIUS,
double const t_foliation_spacing = FOLIATION_SPACING )
inline

Construct from an explicit temporary initialization stream.

Parameters
t_simplicesDesired number of simplices
t_timeslicesDesired number of timeslices
generatorTemporary initialization stream whose state is consumed during construction
t_initial_radiusRadius of the first timeslice
t_foliation_spacingRadial separation between timeslices
Exceptions
std::invalid_argumentif the counts or geometry are invalid, the generated points are not unique, or construction produces no vertices.
std::out_of_rangeif a layer population cannot be represented.

Definition at line 1701 of file Foliated_triangulation.hpp.

References FoliatedTriangulation(), cdt::FOLIATION_SPACING, and cdt::INITIAL_RADIUS.

◆ FoliatedTriangulation() [6/6]

cdt::foliated_triangulations::FoliatedTriangulation< 3 >::FoliatedTriangulation ( Causal_vertices_t< 3 > const & causal_vertices,
double const t_initial_radius = INITIAL_RADIUS,
double const t_foliation_spacing = FOLIATION_SPACING )
inlineexplicit

Constructor from Causal_vertices.

Parameters
causal_verticesCausal_vertices to place into the FoliatedTriangulation
t_initial_radiusRadius of first timeslice
t_foliation_spacingRadial separation between timeslices
Precondition
t_initial_radius and t_foliation_spacing are finite and positive.
Exceptions
std::invalid_argumentif causal_vertices is empty or contains duplicate geometric points.

Definition at line 1719 of file Foliated_triangulation.hpp.

References FoliatedTriangulation(), cdt::FOLIATION_SPACING, and cdt::INITIAL_RADIUS.

Member Function Documentation

◆ check_all_cells()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::check_all_cells ( ) const -> bool
inlinenodiscard

Check that all cells are correctly classified.

A default triangulation will have no cells, and for this case the triangulation is correctly classified. A triangulation with cells will have them checked via check_cells.

Returns
True if there are no cells or all cells are validly classified

Definition at line 1985 of file Foliated_triangulation.hpp.

References cdt::foliated_triangulations::check_cells().

Referenced by is_structurally_correct().

◆ check_all_vertices()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::check_all_vertices ( ) const -> bool
inlinenodiscard
Returns
True if all vertices have correct timevalues

Definition at line 1905 of file Foliated_triangulation.hpp.

References cdt::foliated_triangulations::check_vertices().

◆ delaunay_snapshot()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::delaunay_snapshot ( ) const -> Delaunay
inlinenodiscard
Returns
An owning snapshot of the Delaunay triangulation

Mutating the returned value cannot invalidate this object's cached topology classifications.

Definition at line 1794 of file Foliated_triangulation.hpp.

◆ dimension()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::dimension ( ) const
inlinenodiscard
Returns
Dimensionality of triangulation data structure (int)

Definition at line 1825 of file Foliated_triangulation.hpp.

◆ does_vertex_radius_match_timevalue()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::does_vertex_radius_match_timevalue ( Vertex_handle_t< 3 > const t_vertex) const -> bool
inlinenodiscard

Check the radius of a vertex from the origin with its timevalue.

Parameters
t_vertexThe vertex to check
Returns
True if the effective radial distance squared matches timevalue squared

Definition at line 1866 of file Foliated_triangulation.hpp.

References expected_radius(), cdt::foliated_triangulations::squared_radius(), and cdt::TOLERANCE.

◆ expected_radius()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::expected_radius ( Vertex_handle_t< 3 > const & t_vertex) const -> double
inlinenodiscard

Calculates the expected radial distance of a vertex.

The formula for the radius is:

\[R=I+S(t-1)\]

Where I is the initial radius, S is the foliation spacing, and t is the timevalue.

Parameters
t_vertexThe vertex to check
Returns
The expected radial distance of the vertex with that timevalue

Definition at line 1887 of file Foliated_triangulation.hpp.

Referenced by does_vertex_radius_match_timevalue().

◆ expected_timevalue()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::expected_timevalue ( Vertex_handle_t< 3 > const & t_vertex) const -> int
inlinenodiscard

Calculate the expected timevalue for a vertex.

Parameters
t_vertexThe vertex to check
Returns
The expected timevalue of the vertex

Definition at line 1897 of file Foliated_triangulation.hpp.

References cdt::foliated_triangulations::expected_timevalue().

Referenced by print_vertices().

◆ fix_cells()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::fix_cells ( ) -> bool
inlinenodiscard

Fix all cells in the triangulation.

Publishes a fully rebuilt triangulation only when a change is required. Any handles obtained from an earlier owning snapshot remain tied to that snapshot, not to the replacement stored here.

Returns
Whether any cell classification was changed.

Definition at line 1995 of file Foliated_triangulation.hpp.

References FoliatedTriangulation(), cdt::foliated_triangulations::fix_cells(), and swap.

◆ fix_vertices()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::fix_vertices ( ) -> bool
inlinenodiscard

Fix vertices with wrong timevalues after foliation.

Publishes a fully rebuilt triangulation only when a change is required. Any handles obtained from an earlier owning snapshot remain tied to that snapshot, not to the replacement stored here.

Returns
Whether any vertex timevalue was changed.

Definition at line 1916 of file Foliated_triangulation.hpp.

References FoliatedTriangulation(), cdt::foliated_triangulations::fix_vertices(), and swap.

◆ foliation_spacing()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::foliation_spacing ( ) const
inlinenodiscard
Returns
The spacing between timeslices

Definition at line 1860 of file Foliated_triangulation.hpp.

Referenced by FoliatedTriangulation().

◆ initial_radius()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::initial_radius ( ) const
inlinenodiscard
Returns
The initial radius for timeslice = 1

Definition at line 1857 of file Foliated_triangulation.hpp.

Referenced by FoliatedTriangulation().

◆ is_correct()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::is_correct ( ) const -> bool
inlinenodiscard
Returns
True if the essential simulation-state invariants hold.

This deliberately checks TDS, causal, and structural consistency without requiring the geometric Delaunay predicate, which supported Pachner moves need not preserve.

Definition at line 1758 of file Foliated_triangulation.hpp.

References is_structurally_correct().

Referenced by is_initialized().

◆ is_correct_with_diagnostics()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::is_correct_with_diagnostics ( ) const -> bool
inlinenodiscard
Returns
True if all invariants and derived caches are consistent

This diagnostic path rescans cached handles and rebuilds classifications for comparison. Prefer is_correct() in hot paths.

Definition at line 1764 of file Foliated_triangulation.hpp.

References is_structurally_correct().

◆ is_delaunay()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::is_delaunay ( ) const -> bool
inlinenodiscard
Returns
True if CGAL's geometric Delaunay validity predicate holds.
Note
This property is expected after initialization but is not a postcondition of supported Pachner moves.

Definition at line 1739 of file Foliated_triangulation.hpp.

Referenced by is_initialized().

◆ is_fixed()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::is_fixed ( ) -> bool
inlinenodiscard

◆ is_foliated()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::is_foliated ( ) const -> bool
inlinenodiscard

Verifies the triangulation is properly foliated.

Can not be called until after Foliated_triangulation has been constructed (i.e. not in make_triangulation)

Returns
True if foliated correctly

Definition at line 1733 of file Foliated_triangulation.hpp.

References cdt::foliated_triangulations::has_valid_timevalues().

◆ is_initialized()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::is_initialized ( ) const -> bool
inlinenodiscard
Returns
True if both the simulation-state invariants and CGAL's geometric Delaunay predicate hold.

Definition at line 1769 of file Foliated_triangulation.hpp.

References is_correct(), and is_delaunay().

◆ is_structurally_correct()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::is_structurally_correct ( ) const -> bool
inlinenodiscard
Returns
True if the essential structural and causal invariants hold

This path avoids rebuilding derived caches and is suitable for validating move candidates.

Definition at line 1749 of file Foliated_triangulation.hpp.

References check_all_cells(), and is_tds_valid().

Referenced by is_correct(), and is_correct_with_diagnostics().

◆ is_tds_valid()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::is_tds_valid ( ) const -> bool
inlinenodiscard
Returns
True if the triangulation data structure is valid

Definition at line 1743 of file Foliated_triangulation.hpp.

Referenced by is_structurally_correct().

◆ max_time()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::max_time ( ) const
inlinenodiscard
Returns
Maximum time value in triangulation

Definition at line 1851 of file Foliated_triangulation.hpp.

Referenced by print_volume_per_timeslice().

◆ min_time()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::min_time ( ) const
inlinenodiscard
Returns
Minimum time value in triangulation

Definition at line 1854 of file Foliated_triangulation.hpp.

Referenced by print_volume_per_timeslice().

◆ N1_SL()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::N1_SL ( ) const
inlinenodiscard
Returns
Number of spacelike edges

Definition at line 1847 of file Foliated_triangulation.hpp.

◆ N1_TL()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::N1_TL ( ) const
inlinenodiscard
Returns
Number of timelike edges

Definition at line 1843 of file Foliated_triangulation.hpp.

◆ number_of_finite_cells()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::number_of_finite_cells ( ) const
inlinenodiscard
Returns
Number of 3D simplices in triangulation data structure

Definition at line 1803 of file Foliated_triangulation.hpp.

Referenced by print().

◆ number_of_finite_edges()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::number_of_finite_edges ( ) const
inlinenodiscard
Returns
Number of 1D edges in triangulation data structure

Definition at line 1815 of file Foliated_triangulation.hpp.

Referenced by print().

◆ number_of_finite_facets()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::number_of_finite_facets ( ) const
inlinenodiscard
Returns
Number of 2D faces in triangulation data structure

Definition at line 1809 of file Foliated_triangulation.hpp.

Referenced by print().

◆ number_of_one_three_cells()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::number_of_one_three_cells ( ) const -> std::size_t
inlinenodiscardnoexcept
Returns
Number of classified (1,3) cells

Definition at line 1977 of file Foliated_triangulation.hpp.

◆ number_of_spacelike_faces()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::number_of_spacelike_faces ( ) const -> std::size_t
inlinenodiscardnoexcept
Returns
Total number of spacelike facets

Definition at line 1839 of file Foliated_triangulation.hpp.

◆ number_of_three_one_cells()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::number_of_three_one_cells ( ) const -> std::size_t
inlinenodiscardnoexcept
Returns
Number of classified (3,1) cells

Definition at line 1969 of file Foliated_triangulation.hpp.

◆ number_of_two_two_cells()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::number_of_two_two_cells ( ) const -> std::size_t
inlinenodiscardnoexcept
Returns
Number of classified (2,2) cells

Definition at line 1973 of file Foliated_triangulation.hpp.

◆ number_of_vertices()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::number_of_vertices ( ) const
inlinenodiscard
Returns
Number of vertices in triangulation data structure

Definition at line 1821 of file Foliated_triangulation.hpp.

Referenced by print().

◆ operator=() [1/2]

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::operator= ( FoliatedTriangulation< 3 > && other) -> FoliatedTriangulation &
inlinenoexcept

Move assignment operator.

Parameters
otherTriangulation whose state is transferred.
Returns
This triangulation after replacement.

Definition at line 1591 of file Foliated_triangulation.hpp.

References FoliatedTriangulation(), and swap.

◆ operator=() [2/2]

Copy assignment operator.

Builds a complete copy before replacing the current value.

Parameters
otherTriangulation to copy.
Returns
This triangulation after replacement.

Definition at line 1574 of file Foliated_triangulation.hpp.

References FoliatedTriangulation(), and swap.

◆ print()

void cdt::foliated_triangulations::FoliatedTriangulation< 3 >::print ( ) const
inline

Print triangulation statistics.

Definition at line 2014 of file Foliated_triangulation.hpp.

References number_of_finite_cells(), number_of_finite_edges(), number_of_finite_facets(), and number_of_vertices().

◆ print_cells()

void cdt::foliated_triangulations::FoliatedTriangulation< 3 >::print_cells ( ) const
inline

Print timevalues of each vertex in the cell and the resulting cell->info().

Definition at line 2010 of file Foliated_triangulation.hpp.

References cdt::foliated_triangulations::print_cells().

◆ print_edges()

void cdt::foliated_triangulations::FoliatedTriangulation< 3 >::print_edges ( ) const
inline

Print timevalues of each vertex in the edge and classify as timelike or spacelike.

Definition at line 1943 of file Foliated_triangulation.hpp.

References cdt::foliated_triangulations::classify_edge(), and cdt::TIMELIKE.

◆ print_vertices()

void cdt::foliated_triangulations::FoliatedTriangulation< 3 >::print_vertices ( ) const
inline

Print values of a vertex.

Definition at line 1931 of file Foliated_triangulation.hpp.

References expected_timevalue().

◆ print_volume_per_timeslice()

void cdt::foliated_triangulations::FoliatedTriangulation< 3 >::print_volume_per_timeslice ( ) const
inline

Print the number of spacelike faces per timeslice.

Definition at line 1959 of file Foliated_triangulation.hpp.

References max_time(), min_time(), and spacelike_face_count().

◆ spacelike_face_count()

auto cdt::foliated_triangulations::FoliatedTriangulation< 3 >::spacelike_face_count ( Int_precision const timevalue) const -> std::size_t
inlinenodiscardnoexcept
Parameters
timevalueTimeslice whose facets are counted.
Returns
Number of spacelike facets on the requested timeslice.

Definition at line 1829 of file Foliated_triangulation.hpp.

Referenced by print_volume_per_timeslice().

◆ swap

void swap ( FoliatedTriangulation< 3 > & swap_from,
FoliatedTriangulation< 3 > & swap_into )
friend

Non-member swap function for Foliated Triangulations.

Note that this function calls swap() from CGAL's Triangulation_3 base class, which assumes that the first triangulation is discarded after it is swapped into the second one.

Parameters
swap_fromThe value to be swapped from. Assumed to be discarded.
swap_intoThe value to be swapped into.

Definition at line 1605 of file Foliated_triangulation.hpp.

References FoliatedTriangulation(), and swap.

Referenced by FoliatedTriangulation(), fix_cells(), fix_vertices(), is_fixed(), operator=(), operator=(), and swap.


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