Skip to content

Commit a16f608

Browse files
authored
Merge pull request #7518 from hen-w/ldg_scalar_wave_boundary_base_pr
Add BoundaryCondition base class for SecondOrderScalarWave system
2 parents 8361209 + 6898a0a commit a16f608

7 files changed

Lines changed: 112 additions & 0 deletions

File tree

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Distributed under the MIT License.
2+
// See LICENSE.txt for details.
3+
4+
#include "Evolution/Systems/SecondOrderScalarWave/BoundaryConditions/BoundaryCondition.hpp"
5+
6+
#include <pup.h>
7+
8+
#include "Domain/BoundaryConditions/BoundaryCondition.hpp"
9+
#include "Utilities/GenerateInstantiations.hpp"
10+
11+
namespace SecondOrderScalarWave::BoundaryConditions {
12+
template <size_t Dim>
13+
BoundaryCondition<Dim>::BoundaryCondition(CkMigrateMessage* const msg)
14+
: domain::BoundaryConditions::BoundaryCondition(msg) {}
15+
16+
template <size_t Dim>
17+
void BoundaryCondition<Dim>::pup(PUP::er& p) {
18+
domain::BoundaryConditions::BoundaryCondition::pup(p);
19+
}
20+
21+
#define DIM(data) BOOST_PP_TUPLE_ELEM(0, data)
22+
23+
#define INSTANTIATION(r, data) template class BoundaryCondition<DIM(data)>;
24+
25+
GENERATE_INSTANTIATIONS(INSTANTIATION, (1, 2, 3))
26+
27+
#undef INSTANTIATION
28+
#undef DIM
29+
} // namespace SecondOrderScalarWave::BoundaryConditions
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Distributed under the MIT License.
2+
// See LICENSE.txt for details.
3+
4+
#pragma once
5+
6+
#include <cstddef>
7+
8+
#include "Domain/BoundaryConditions/BoundaryCondition.hpp"
9+
10+
/// \cond
11+
namespace PUP {
12+
class er;
13+
} // namespace PUP
14+
/// \endcond
15+
16+
/// \brief Boundary conditions for the second-order scalar wave system
17+
namespace SecondOrderScalarWave::BoundaryConditions {
18+
/// \brief The base class off of which all boundary conditions must inherit
19+
template <size_t Dim>
20+
class BoundaryCondition : public domain::BoundaryConditions::BoundaryCondition {
21+
public:
22+
BoundaryCondition() = default;
23+
BoundaryCondition(BoundaryCondition&&) = default;
24+
BoundaryCondition& operator=(BoundaryCondition&&) = default;
25+
BoundaryCondition(const BoundaryCondition&) = default;
26+
BoundaryCondition& operator=(const BoundaryCondition&) = default;
27+
~BoundaryCondition() override = default;
28+
explicit BoundaryCondition(CkMigrateMessage* msg);
29+
30+
void pup(PUP::er& p) override;
31+
};
32+
} // namespace SecondOrderScalarWave::BoundaryConditions
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Distributed under the MIT License.
2+
# See LICENSE.txt for details.
3+
4+
spectre_target_sources(
5+
${LIBRARY}
6+
PRIVATE
7+
BoundaryCondition.cpp
8+
)
9+
10+
spectre_target_headers(
11+
${LIBRARY}
12+
INCLUDE_DIRECTORY ${CMAKE_SOURCE_DIR}/src
13+
HEADERS
14+
BoundaryCondition.hpp
15+
)

src/Evolution/Systems/SecondOrderScalarWave/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ target_link_libraries(
3030
DataStructures
3131
DiscontinuousGalerkin
3232
Domain
33+
DomainBoundaryConditions
3334
LinearOperators
3435
Utilities
3536
)
37+
38+
add_subdirectory(BoundaryConditions)

src/Evolution/Systems/SecondOrderScalarWave/System.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <string>
88

99
#include "DataStructures/VariablesTag.hpp"
10+
#include "Evolution/Systems/SecondOrderScalarWave/BoundaryConditions/BoundaryCondition.hpp"
1011
#include "Evolution/Systems/SecondOrderScalarWave/Characteristics.hpp"
1112
#include "Evolution/Systems/SecondOrderScalarWave/Tags.hpp"
1213
#include "Evolution/Systems/SecondOrderScalarWave/TimeDerivative.hpp"
@@ -27,6 +28,8 @@ template <size_t Dim>
2728
struct System {
2829
static std::string name() { return "SecondOrderScalarWave"; }
2930

31+
using boundary_conditions_base = BoundaryConditions::BoundaryCondition<Dim>;
32+
3033
static constexpr bool is_in_flux_conservative_form = false;
3134
static constexpr bool has_primitive_and_conservative_vars = false;
3235
static constexpr size_t volume_dim = Dim;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Distributed under the MIT License.
2+
// See LICENSE.txt for details.
3+
4+
#include "Framework/TestingFramework.hpp"
5+
6+
#include <cstddef>
7+
8+
#include "Domain/BoundaryConditions/Periodic.hpp"
9+
#include "Evolution/Systems/SecondOrderScalarWave/BoundaryConditions/BoundaryCondition.hpp"
10+
#include "Helpers/Evolution/DiscontinuousGalerkin/BoundaryConditions.hpp"
11+
12+
namespace {
13+
template <size_t Dim>
14+
void test() {
15+
CAPTURE(Dim);
16+
TestHelpers::evolution::dg::test_periodic_condition<
17+
domain::BoundaryConditions::Periodic<
18+
SecondOrderScalarWave::BoundaryConditions::BoundaryCondition<Dim>>,
19+
SecondOrderScalarWave::BoundaryConditions::BoundaryCondition<Dim>>(
20+
"Periodic:\n");
21+
}
22+
} // namespace
23+
24+
SPECTRE_TEST_CASE("Unit.SecondOrderScalarWave.BoundaryConditions.Periodic",
25+
"[Unit][Evolution]") {
26+
test<1>();
27+
test<2>();
28+
test<3>();
29+
}

tests/Unit/Evolution/Systems/SecondOrderScalarWave/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
set(LIBRARY Test_SecondOrderScalarWave)
55

66
set(LIBRARY_SOURCES
7+
BoundaryConditions/Test_Periodic.cpp
78
Test_Characteristics.cpp
89
Test_System.cpp
910
Test_Tags.cpp

0 commit comments

Comments
 (0)