/// \defgroup PkgPeriodic_3_mesh_3 3D Periodic Mesh Generation Reference

/// \defgroup PkgPeriodic_3_mesh_3Concepts Concepts
/// \ingroup PkgPeriodic_3_mesh_3
/// The concepts of this package.

/// \defgroup PkgPeriodic_3_mesh_3MeshClasses Mesh Classes
/// \ingroup PkgPeriodic_3_mesh_3
/// The classes in this group are the main classes involved in the mesh generation process.

/// \defgroup PkgPeriodic_3_mesh_3Domains Domain Classes
/// \ingroup PkgPeriodic_3_mesh_3
/// The classes in this group are models of domain concepts and their associated classes.

/// \defgroup PkgPeriodic_3_mesh_3Functions Mesh Generation Functions
/// \ingroup PkgPeriodic_3_mesh_3
/// The two main functions to generate a periodic mesh are `make_periodic_3_mesh_3()`
/// and `refine_periodic_3_mesh_3()`. Other functions are provided to optimize
/// an existing periodic mesh.

/// \defgroup PkgPeriodic_3_mesh_3IOFunctions Input/Output Functions
/// \ingroup PkgPeriodic_3_mesh_3
/// The free functions that can be used to read and write periodic meshes.

/*!
\addtogroup PkgPeriodic_3_mesh_3
\cgalPkgDescriptionBegin{3D Periodic Mesh Generation,PkgPeriodic_3_mesh_3Summary}
\cgalPkgPicture{periodic_mesher_small.png}
\cgalPkgSummaryBegin
\cgalPkgAuthors{Mikhail Bogdanov, Aymeric Pellé, Mael Rouxel-Labbé, and Monique Teillaud}
\cgalPkgDesc{This package is devoted to the generation of isotropic simplicial meshes
discretizing periodic 3D domains. The domain to be meshed is a region of
the three-dimensional flat torus. The periodic mesh generator provides users with the same
flexibility that is offered in the \ref PkgMesh_3Summary package.}
\cgalPkgManuals{Chapter_3D_Periodic_Mesh_Generation,PkgPeriodic_3_mesh_3}
\cgalPkgSummaryEnd
\cgalPkgShortInfoBegin
\cgalPkgSince{4.13}
\cgalPkgDependsOn{\ref PkgPeriodic3Triangulation3Summary, \ref PkgMesh_3Summary, and \ref thirdpartyEigen}
\cgalPkgBib{cgal:btprl-p3m3}
\cgalPkgLicense{\ref licensesGPL "GPL"}
\cgalPkgShortInfoEnd
\cgalPkgDescriptionEnd

### Relation to the 3D Mesh Generation and 3D Periodic Triangulations Packages ###

A periodic mesh extends, by definition, infinitely in space. To avoid storing and
manipulating duplicate points, well-chosen "dummy" points are inserted
at the beginning of the meshing process, thus ensuring that the underlying periodic
triangulation forms at all times a simplicial complex within a single copy of the periodic space \f$ \mathbb T_c^3\f$
(see Sections \ref P3Triangulation3secspace and \ref P3Triangulation3secintro
of the package \ref PkgPeriodic3Triangulation3Summary).
By identifying a single copy of the flat torus \f$ \mathbb T_c^3\f$ (where `c`
denotes the period) with a cube of side `c` in \f$ \mathbb R^3\f$, the meshing process
can be exclusively conducted within a cube of side `c`.
The mesh within a single copy is created using %CGAL's \ref PkgMesh_3Summary package, but
because %CGAL's \ref PkgMesh_3Summary package aims to mesh traditional (non-periodic)
domains, an interface is necessary between %CGAL's \ref PkgMesh_3Summary package
and %CGAL's \ref PkgPeriodic3Triangulation3Summary.
This package offers these interfaces.

\cgalClassifedRefPages

## Concepts ##

This package relies entirely on the \ref PkgMesh_3Concepts
and the \ref PkgMesh_3SecondaryConcepts described in the \ref PkgMesh_3Summary package.
The following concepts are essentially identical to the concepts `MeshDomain_3`
and `MeshDomainWithFeatures_3` in the package \ref PkgMesh_3Summary :

- `Periodic_3MeshDomain_3`
- `Periodic_3MeshDomainWithFeatures_3`

## Classes ##

The following class provides the interface between %CGAL's periodic triangulation
and %CGAL's three-dimensional mesh generator:
- `CGAL::Periodic_3_mesh_triangulation_3<MD, K, Vertex_base, Cell_base>`

The following class allows to construct a periodic implicit function from an implicit function that is not periodic:
- `CGAL::Periodic_3_function_wrapper<Function,BGT>`

The following class allows to split the canonical cube in two subdomains,
separated by the zero-level of an implicit function:
- `CGAL::Implicit_to_labeled_subdomains_function_wrapper<Function,BGT>`

## Function Templates ##

The following functions handle the generation of a periodic mesh:
- `CGAL::make_periodic_3_mesh_3()`
- `CGAL::refine_periodic_3_mesh_3()`
- `CGAL::exude_periodic_3_mesh_3()`
- `CGAL::perturb_periodic_3_mesh_3()`
- `CGAL::lloyd_optimize_periodic_3_mesh_3()`
- `CGAL::odt_optimize_periodic_3_mesh_3()`

## Classes and Functions of `Mesh_3` ##

Many classes and functions used by this package are defined within the package
\ref PkgMesh_3Summary, see \ref PkgMesh_3MeshClasses, \ref PkgMesh_3Domains,
and \ref PkgMesh_3Parameters.

## Input/Output Functions ##
- \link PkgPeriodic_3_mesh_3IOFunctions `CGAL::output_periodic_mesh_to_medit()` \endlink

*/
