SpECTRE  2021.08.02
domain::creators::Cylinder Class Reference

Create a 3D Domain in the shape of a cylinder where the cross-section is a square surrounded by four two-dimensional wedges (see Wedge). More...

#include <Cylinder.hpp>

Classes

struct  BoundaryConditions
 
struct  HeightPartitioning
 
struct  InitialGridPoints
 
struct  InitialRefinement
 
struct  InnerRadius
 
struct  IsPeriodicInZ
 
struct  LowerBound
 
struct  LowerBoundaryCondition
 
struct  MantleBoundaryCondition
 
struct  OuterRadius
 
struct  RadialDistribution
 
struct  RadialPartitioning
 
struct  UpperBound
 
struct  UpperBoundaryCondition
 
struct  UseEquiangularMap
 

Public Types

using maps_list = tmpl::list< domain::CoordinateMap< Frame::Logical, Frame::Inertial, CoordinateMaps::ProductOf3Maps< CoordinateMaps::Affine, CoordinateMaps::Affine, CoordinateMaps::Affine > >, domain::CoordinateMap< Frame::Logical, Frame::Inertial, CoordinateMaps::ProductOf3Maps< CoordinateMaps::Equiangular, CoordinateMaps::Equiangular, CoordinateMaps::Affine > >, domain::CoordinateMap< Frame::Logical, Frame::Inertial, CoordinateMaps::ProductOf2Maps< CoordinateMaps::Wedge< 2 >, CoordinateMaps::Affine > > >
 
template<typename Metavariables >
using options = tmpl::append< tmpl::list< InnerRadius, OuterRadius, LowerBound, UpperBound >, tmpl::conditional_t< domain::BoundaryConditions::has_boundary_conditions_base_v< typename Metavariables::system >, tmpl::list< LowerBoundaryCondition< domain::BoundaryConditions::get_boundary_conditions_base< typename Metavariables::system > >, UpperBoundaryCondition< domain::BoundaryConditions::get_boundary_conditions_base< typename Metavariables::system > >, MantleBoundaryCondition< domain::BoundaryConditions::get_boundary_conditions_base< typename Metavariables::system > > >, tmpl::list< IsPeriodicInZ > >, tmpl::list< InitialRefinement, InitialGridPoints, UseEquiangularMap, RadialPartitioning, HeightPartitioning, RadialDistribution > >
 

Public Member Functions

 Cylinder (double inner_radius, double outer_radius, double lower_bound, double upper_bound, bool is_periodic_in_z, const typename InitialRefinement::type &initial_refinement, const typename InitialGridPoints::type &initial_number_of_grid_points, bool use_equiangular_map, std::vector< double > radial_partitioning={}, std::vector< double > height_partitioning={}, std::vector< domain::CoordinateMaps::Distribution > radial_distribution={domain::CoordinateMaps::Distribution::Linear}, const Options::Context &context={})
 
 Cylinder (double inner_radius, double outer_radius, double lower_bound, double upper_bound, std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > lower_boundary_condition, std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > upper_boundary_condition, std::unique_ptr< domain::BoundaryConditions::BoundaryCondition > mantle_boundary_condition, const typename InitialRefinement::type &initial_refinement, const typename InitialGridPoints::type &initial_number_of_grid_points, bool use_equiangular_map, std::vector< double > radial_partitioning={}, std::vector< double > height_partitioning={}, std::vector< domain::CoordinateMaps::Distribution > radial_distribution={domain::CoordinateMaps::Distribution::Linear}, const Options::Context &context={})
 
 Cylinder (const Cylinder &)=delete
 
 Cylinder (Cylinder &&) noexcept=default
 
Cylinderoperator= (const Cylinder &)=delete
 
Cylinderoperator= (Cylinder &&) noexcept=default
 
Domain< 3 > create_domain () const noexcept override
 
std::vector< std::array< size_t, 3 > > initial_extents () const noexcept override
 Obtain the initial grid extents of the Elements in each block. More...
 
std::vector< std::array< size_t, 3 > > initial_refinement_levels () const noexcept override
 Obtain the initial refinement levels of the blocks. More...
 
- Public Member Functions inherited from DomainCreator< 3 >
 DomainCreator (const DomainCreator< VolumeDim > &)=delete
 
 DomainCreator (DomainCreator< VolumeDim > &&) noexcept=default
 
DomainCreator< VolumeDim > & operator= (const DomainCreator< VolumeDim > &)=delete
 
DomainCreator< VolumeDim > & operator= (DomainCreator< VolumeDim > &&) noexcept=default
 
virtual auto functions_of_time () const noexcept -> std::unordered_map< std::string, std::unique_ptr< domain::FunctionsOfTime::FunctionOfTime > >
 Retrieve the functions of time used for moving meshes. More...
 

Static Public Attributes

static constexpr Options::String help
 

Detailed Description

Create a 3D Domain in the shape of a cylinder where the cross-section is a square surrounded by four two-dimensional wedges (see Wedge).

The outer shell can be split into sub-shells and the cylinder can be split into disks along its height. The block numbering starts at the inner square and goes counter-clockwise, starting with the eastern wedge (+x-direction), through consecutive shells, then repeats this pattern for all layers bottom to top.

The Cylinder Domain.

Member Function Documentation

◆ create_domain()

Domain< 3 > domain::creators::Cylinder::create_domain ( ) const
overridevirtualnoexcept

Implements DomainCreator< 3 >.

◆ initial_extents()

std::vector< std::array< size_t, 3 > > domain::creators::Cylinder::initial_extents ( ) const
overridevirtualnoexcept

Obtain the initial grid extents of the Elements in each block.

Implements DomainCreator< 3 >.

◆ initial_refinement_levels()

std::vector< std::array< size_t, 3 > > domain::creators::Cylinder::initial_refinement_levels ( ) const
overridevirtualnoexcept

Obtain the initial refinement levels of the blocks.

Implements DomainCreator< 3 >.

Member Data Documentation

◆ help

constexpr Options::String domain::creators::Cylinder::help
staticconstexpr
Initial value:
{
"Creates a right circular Cylinder with a square prism surrounded by \n"
"wedges. \n"
"The cylinder can be partitioned radially into multiple cylindrical \n"
"shells as well as partitioned along the cylinder's height into \n"
"multiple disks. Including this partitioning, the number of Blocks is \n"
"given by (1 + 4*(1+n_s)) * (1+n_z), where n_s is the \n"
"length of RadialPartitioning and n_z the length of \n"
"HeightPartitioning. The block numbering starts at the inner square \n"
"and goes counter-clockwise, starting with the eastern wedge \n"
"(+x-direction) through consecutive shells, then repeats this pattern \n"
"for all layers bottom to top. The wedges are named as follows: \n"
" +x-direction: East \n"
" +y-direction: North \n"
" -x-direction: West \n"
" -y-direction: South \n"
"The circularity of the wedge changes from 0 to 1 within the first \n"
"shell.\n"
"Equiangular coordinates give better gridpoint spacings in the angular\n"
"direction, while equidistant coordinates give better gridpoint\n"
"spacings in the center block."}