ryujin 2.5.0 revision c64172211cf21344cb9b9b0f3a1266aa6400d392
Loading...
Searching...
No Matches
geometry_disk.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3// [LANL Copyright Statement]
4// Copyright (C) 2024 - 2026 by the ryujin authors
5// Copyright (C) 2024 by Triad National Security, LLC
6//
7
8#pragma once
9
10#include <ryujin/base/compile_time_options.h>
12
13namespace ryujin
14{
15 namespace Geometries
16 {
23 template <int dim>
24 class Disk : public Geometry<dim>
25 {
26 public:
27 Disk(const std::string &subsection)
28 : Geometry<dim>("disk", subsection)
29 {
30 balanced_ = true;
31 this->add_parameter("balanced",
32 balanced_,
33 "Use GridGenerator::hyper_ball_balanced() instead "
34 "of the older GridGenerator::hyper_ball()");
35
36 radius_ = 1.2;
37 this->add_parameter("radius", radius_, "radius of disk");
38
39 boundary_ = Boundary::dirichlet;
40 this->add_parameter("boundary condition",
41 boundary_,
42 "Type of boundary condition enforced on the "
43 "boundary of the disk/ball");
44 }
45
47 dealii::Triangulation<dim> &triangulation) const final
48 {
49 if (balanced_) {
50 GridGenerator::hyper_ball_balanced(
51 triangulation, dealii::Point<dim>(), radius_);
52 } else {
53 GridGenerator::hyper_ball(
54 triangulation, dealii::Point<dim>(), radius_);
55 }
56
57 /*
58 * Set boundary ids:
59 */
60 for (auto cell : triangulation.active_cell_iterators()) {
61 for (auto f : cell->face_indices()) {
62 const auto face = cell->face(f);
63
64 if (!face->at_boundary())
65 continue;
66
67 face->set_boundary_id(boundary_);
68 }
69 }
70 }
71
72 private:
73 bool balanced_;
74 double radius_;
75 Boundary boundary_;
76 };
77 } // namespace Geometries
78} // namespace ryujin
void create_coarse_triangulation(dealii::Triangulation< dim > &triangulation) const final
Disk(const std::string &subsection)