CDT++ 1.0.0
Causal Dynamical Triangulations in C++
Loading...
Searching...
No Matches
Foliated_triangulation.hpp File Reference

Create foliated spherical triangulations. More...

#include <CGAL/Bbox_3.h>
#include <CGAL/Random.h>
#include <algorithm>
#include <array>
#include <cassert>
#include <cmath>
#include <concepts>
#include <functional>
#include <iterator>
#include <limits>
#include <map>
#include <memory>
#include <numeric>
#include <optional>
#include <ranges>
#include <set>
#include <span>
#include <stdexcept>
#include <type_traits>
#include <unordered_set>
#include <utility>
#include <vector>
#include "Random.hpp"
#include "Triangulation_traits.hpp"
#include "Utilities.hpp"
Include dependency graph for Foliated_triangulation.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  cdt::foliated_triangulations::FoliatedTriangulation< 3 >
 3D Foliated triangulation More...

Namespaces

namespace  cdt
 clang-15 does not support std::format
namespace  cdt::foliated_triangulations
 Supported construction, inspection, classification, and repair operations for foliated Delaunay triangulations.

Concepts

concept  cdt::ConstForwardRange
 A multi-pass range whose const-qualified value can be traversed by classification and materialization helpers.

Typedefs

template<int dimension>
using cdt::Causal_vertices_t
 Point/time-label pairs used to build a causal triangulation.
template<int dimension>
using cdt::Cell_handle_t
 Mutable CGAL cell handle for a triangulation dimension.
template<int dimension>
using cdt::Delaunay_t = typename detail::TriangulationTraits<dimension>::Delaunay
 Delaunay triangulation type for dimension spatial dimensions.
template<int dimension>
using cdt::Edge_handle_t
 CGAL edge descriptor for a triangulation dimension.
template<int dimension>
using cdt::Facet_t = typename detail::TriangulationTraits<dimension>::Facet
 CGAL facet descriptor for a triangulation dimension.
using cdt::foliated_triangulations::FoliatedTriangulation_3 = FoliatedTriangulation<3>
 Three-dimensional foliated Delaunay triangulation.
template<int dimension>
using cdt::Point_t = typename detail::TriangulationTraits<dimension>::Point
 Cartesian point type used by a triangulation dimension.
template<int dimension>
using cdt::Spherical_points_generator_t
 CGAL random point generator on a sphere of matching dimension.
template<int dimension>
using cdt::Vertex_handle_t
 Mutable CGAL vertex handle for a triangulation dimension.

Enumerations

enum class  cdt::CellType {
  cdt::THREE_ONE = 31 , cdt::TWO_TWO = 22 , cdt::ONE_THREE = 13 , cdt::ACAUSAL = 99 ,
  cdt::UNCLASSIFIED = 0
}
 (n,m) is number of vertices on (lower, higher) timeslice More...
enum class  cdt::EdgeType { cdt::SPACELIKE , cdt::TIMELIKE }
 Causal classification of an edge by its endpoint timeslices. More...

Functions

template<int dimension>
auto cdt::foliated_triangulations::check_cells (Delaunay_t< dimension > const &t_triangulation) -> bool
 Check all finite cells in the Delaunay triangulation.
template<int dimension>
auto cdt::foliated_triangulations::check_vertices (Delaunay_t< dimension > const &t_triangulation, double t_initial_radius, double t_foliation_spacing)
 Check if vertices have the correct timevalues.
template<int dimension>
auto cdt::foliated_triangulations::classify_edge (Edge_handle_t< dimension > const &t_edge) -> EdgeType
 Predicate to classify edge as timelike or spacelike.
template<int dimension>
auto cdt::foliated_triangulations::collect_cells (Delaunay_t< dimension > const &t_triangulation) -> std::vector< Cell_handle_t< dimension > >
 Obtain all finite cells in the Delaunay triangulation.
template<int dimension>
auto cdt::foliated_triangulations::collect_edges (Delaunay_t< dimension > const &delaunay)
 Returns a container of all the finite edges in the triangulation.
template<int dimension, detail::ConstForwardRange Container>
auto cdt::foliated_triangulations::collect_spacelike_facets (Container const &t_facets) -> std::vector< std::pair< Int_precision, Facet_t< dimension > > >
 Collect spacelike facets into a contiguous container ordered by time value.
template<int dimension>
auto cdt::foliated_triangulations::collect_vertices (Delaunay_t< dimension > const &t_triangulation)
 Obtain all finite vertices in the Delaunay triangulation.
template<int dimension, detail::ConstForwardRange Container>
void cdt::foliated_triangulations::debug_print_cells (Container const &t_cells)
 Write to debug log timevalues of each vertex in the cell and the resulting cell->info.
template<int dimension>
auto cdt::foliated_triangulations::expected_cell_type (Cell_handle_t< dimension > const &t_cell)
 Classifies cells by their timevalues.
template<int dimension>
auto cdt::foliated_triangulations::expected_timevalue (Vertex_handle_t< dimension > const &t_vertex, double t_initial_radius, double t_foliation_spacing) -> Int_precision
 Find the expected timevalue for a vertex.
template<int dimension>
auto cdt::foliated_triangulations::filter_cells (std::vector< Cell_handle_t< dimension > > const &t_cells, CellType const &t_cell_type) -> std::vector< Cell_handle_t< dimension > >
template<int dimension>
auto cdt::foliated_triangulations::filter_edges (std::vector< Edge_handle_t< dimension > > const &t_edges, EdgeType const edge_type) -> std::vector< Edge_handle_t< dimension > >
template<int dimension>
auto cdt::foliated_triangulations::find_bad_vertex (Cell_handle_t< dimension > const &cell) -> Vertex_handle_t< dimension >
 Find the vertex that is causing a cell's foliation to be invalid.
template<int dimension>
auto cdt::foliated_triangulations::find_cell (Delaunay_t< dimension > const &delaunay, Vertex_handle_t< dimension > const &vh1, Vertex_handle_t< dimension > const &vh2, Vertex_handle_t< dimension > const &vh3, Vertex_handle_t< dimension > const &vh4) -> std::optional< Cell_handle_t< dimension > >
 Returns the cell containing the vertices.
template<int dimension>
auto cdt::foliated_triangulations::find_incorrect_cells (Delaunay_t< dimension > const &t_triangulation)
 Check all finite cells in the Delaunay triangulation.
template<int dimension>
auto cdt::foliated_triangulations::find_incorrect_vertices (Delaunay_t< dimension > const &t_triangulation, double t_initial_radius, double t_foliation_spacing)
 Obtain vertices with incorrect timevalues.
template<int dimension>
auto cdt::foliated_triangulations::find_incorrect_vertices (std::vector< Cell_handle_t< dimension > > const &t_cells, double t_initial_radius, double t_foliation_spacing)
 Obtain vertices with incorrect timevalues.
template<int dimension>
auto cdt::foliated_triangulations::find_invalid_timevalue_cells (Delaunay_t< dimension > const &t_triangulation) -> std::vector< Cell_handle_t< dimension > >
 Find cells whose vertex timevalues violate foliation.
template<int dimension, detail::ConstForwardRange Container>
auto cdt::foliated_triangulations::find_max_timevalue (Container const &t_vertices) -> Int_precision
template<int dimension, detail::ConstForwardRange Container>
auto cdt::foliated_triangulations::find_min_timevalue (Container const &t_vertices) -> Int_precision
template<int dimension>
auto cdt::foliated_triangulations::find_vertex (Delaunay_t< dimension > const &delaunay, Point_t< dimension > const &point) -> std::optional< Vertex_handle_t< dimension > >
 Find the vertex whose stored point equals the requested point.
template<int dimension>
auto cdt::foliated_triangulations::fix_cells (Delaunay_t< dimension > &t_triangulation) -> bool
 Fix simplices with the wrong type.
template<int dimension>
auto cdt::foliated_triangulations::fix_timevalues (Delaunay_t< dimension > &t_triangulation) -> bool
 Fix the vertices of a cell to be consistent with the foliation.
template<int dimension>
auto cdt::foliated_triangulations::fix_vertices (Delaunay_t< dimension > &t_triangulation, double const t_initial_radius, double const t_foliation_spacing) -> bool
 Fix vertices with incorrect timevalues.
template<int dimension>
auto cdt::foliated_triangulations::fix_vertices (std::vector< Cell_handle_t< dimension > > const &t_cells, double t_initial_radius, double t_foliation_spacing)
 Fix vertices with incorrect timevalues.
template<int dimension>
auto cdt::foliated_triangulations::get_vertices_from_cells (std::vector< Cell_handle_t< dimension > > const &t_cells)
 Extracts vertices from cells.
template<int dimension>
auto cdt::foliated_triangulations::has_valid_timevalues (Delaunay_t< dimension > const &triangulation) -> bool
 Check whether all cell timevalues form a valid foliation.
template<int dimension>
auto cdt::foliated_triangulations::is_cell_type_correct (Cell_handle_t< dimension > const &t_cell) -> bool
 Checks if a cell is classified correctly.
template<int dimension>
auto cdt::foliated_triangulations::is_vertex_timevalue_correct (Vertex_handle_t< dimension > const &t_vertex, double const t_initial_radius, double const t_foliation_spacing) -> bool
 Checks if vertex timevalue is correct.
template<int dimension>
auto cdt::foliated_triangulations::make_causal_vertices (std::span< Point_t< dimension > const > vertices, std::span< size_t const > timevalues) -> Causal_vertices_t< dimension >
 Create causal vertices from vertices and timevalues.
template<int dimension, std::uniform_random_bit_generator Generator>
auto cdt::foliated_triangulations::make_foliated_ball (Int_precision const t_simplices, Int_precision const t_timeslices, double const initial_radius, double const foliation_spacing, Generator &generator)
 Make foliated ball.
template<int dimension, std::uniform_random_bit_generator Generator>
auto cdt::foliated_triangulations::make_triangulation (Int_precision const t_simplices, Int_precision t_timeslices, double const initial_radius, double const foliation_spacing, Generator &generator) -> Delaunay_t< dimension >
 Make a Delaunay triangulation.
template<int dimension>
void cdt::foliated_triangulations::print_cell (Cell_handle_t< dimension > cell)
 Print a cell in the triangulation.
template<int dimension, detail::ConstForwardRange Container>
void cdt::foliated_triangulations::print_cells (Container const &t_cells)
 Print timevalues of each vertex in the cell and the resulting cell->info().
template<int dimension>
void cdt::foliated_triangulations::print_edge (Edge_handle_t< dimension > const &t_edge)
 Print edge.
template<int dimension>
void cdt::foliated_triangulations::print_neighboring_cells (Cell_handle_t< dimension > cell)
 Print neighboring cells.
template<int dimension>
auto cdt::foliated_triangulations::squared_radius (Vertex_handle_t< dimension > const &t_vertex) -> double
 Calculate the squared radius from the origin.
template<int dimension, detail::ConstForwardRange Container>
auto cdt::foliated_triangulations::volume_per_timeslice (Container const &t_facets) -> std::multimap< Int_precision, Facet_t< dimension > >
 Collect spacelike facets into a container indexed by time value.

Variables

template<int dimension>
constexpr auto cdt::foliated_triangulations::compare_v_info
constexpr int cdt::detail::MAX_FIX_PASSES = 50

Detailed Description

Create foliated spherical triangulations.

Author
Adam Getchell

Extends CGAL's Delaunay_triangulation_3 and Triangulation_3 classes to create foliated spherical triangulations of a given dimension.

The dimensionality, number of desired simplices, and number of desired timeslices is given. Successive spheres are created with increasing radii, parameterized by INITIAL_RADIUS and RADIAL_FACTOR. Each vertex at a given radius is assigned a timeslice so that the entire triangulation will have a defined foliation of time.

See also
https://doc.cgal.org/latest/Triangulation_3/index.html#Chapter_3D_Triangulations

Definition in file Foliated_triangulation.hpp.

Variable Documentation

◆ MAX_FIX_PASSES

int cdt::detail::MAX_FIX_PASSES = 50
inlineconstexpr

Definition at line 116 of file Foliated_triangulation.hpp.