Theseus
Compressible flow solver
Loading...
Searching...
No Matches
AxisymmetricGeometry.hpp
Go to the documentation of this file.
1// Copyright (c) 2025-2026 Board of Trustees of the University of Illinois
2//
3// This file is part of Theseus.
4//
5// SPDX-License-Identifier: BSD-3-Clause
6#pragma once
7
8#include "mfem.hpp"
9
10#include <cmath>
11#include <stdexcept>
12#include <string>
13
14namespace Theseus
15{
18 {
19 static constexpr int axial_coordinate = 0;
20 static constexpr int radial_coordinate = 1;
21 static constexpr int spatial_dimension = 2;
22 static constexpr mfem::real_t radius_tolerance = 1.0e-12;
23 static constexpr mfem::real_t two_pi =
24 6.283185307179586476925286766559005768;
25
26#ifdef AXISYMMETRIC
27 static constexpr bool enabled = true;
28#else
29 static constexpr bool enabled = false;
30#endif
31
32 MFEM_HOST_DEVICE static mfem::real_t Radius(const mfem::real_t *physical)
33 {
34 return physical[radial_coordinate];
35 }
36
37 MFEM_HOST_DEVICE static mfem::real_t MeasureMultiplier(
38 bool axisymmetric, mfem::real_t radius)
39 {
40 return axisymmetric ? two_pi*radius : 1.0;
41 }
42
43 static mfem::real_t ValidateRadius(mfem::real_t radius,
44 const std::string &location)
45 {
46 if (!std::isfinite(radius) || radius < -radius_tolerance)
47 {
48 throw std::invalid_argument(
49 "axisymmetric geometry has an invalid radial coordinate at " +
50 location + ": r = " + std::to_string(radius));
51 }
52 return radius < 0.0 ? 0.0 : radius;
53 }
54 };
55}
Definition AxisymmetricGeometry.hpp:15
Coordinate and cached-radius contract for swirl-free (z,r) geometry.
Definition AxisymmetricGeometry.hpp:18
static mfem::real_t ValidateRadius(mfem::real_t radius, const std::string &location)
Definition AxisymmetricGeometry.hpp:43
static constexpr bool enabled
Definition AxisymmetricGeometry.hpp:29
static constexpr mfem::real_t radius_tolerance
Definition AxisymmetricGeometry.hpp:22
static constexpr int axial_coordinate
Definition AxisymmetricGeometry.hpp:19
static constexpr mfem::real_t two_pi
Definition AxisymmetricGeometry.hpp:23
static constexpr int radial_coordinate
Definition AxisymmetricGeometry.hpp:20
static MFEM_HOST_DEVICE mfem::real_t Radius(const mfem::real_t *physical)
Definition AxisymmetricGeometry.hpp:32
static constexpr int spatial_dimension
Definition AxisymmetricGeometry.hpp:21
static MFEM_HOST_DEVICE mfem::real_t MeasureMultiplier(bool axisymmetric, mfem::real_t radius)
Definition AxisymmetricGeometry.hpp:37