Skip to content

Commit c98ced6

Browse files
committed
Add actions to read initial data for ScalarTensor
Add test
1 parent caf5aa1 commit c98ced6

File tree

8 files changed

+837
-3
lines changed

8 files changed

+837
-3
lines changed

src/Evolution/Executables/ScalarTensor/EvolveScalarTensorSingleBlackHole.hpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
#include "Domain/Structure/ObjectLabel.hpp"
1616
#include "Evolution/Actions/RunEventsAndTriggers.hpp"
1717
#include "Evolution/Executables/ScalarTensor/ScalarTensorBase.hpp"
18-
#include "Evolution/Systems/GeneralizedHarmonic/Actions/SetInitialData.hpp"
18+
#include "Evolution/Systems/ScalarTensor/Actions/SetInitialData.hpp"
1919
#include "Options/FactoryHelpers.hpp"
2020
#include "Options/Protocols/FactoryCreation.hpp"
2121
#include "Options/String.hpp"
@@ -202,6 +202,15 @@ struct EvolutionMetavars : public ScalarTensorTemplateBase<EvolutionMetavars> {
202202
tmpl::flatten<tmpl::list<
203203
Parallel::PhaseActions<Parallel::Phase::Initialization,
204204
initialization_actions>,
205+
Parallel::PhaseActions<
206+
Parallel::Phase::RegisterWithElementDataReader,
207+
tmpl::list<importers::Actions::RegisterWithElementDataReader,
208+
Parallel::Actions::TerminatePhase>>,
209+
Parallel::PhaseActions<
210+
Parallel::Phase::ImportInitialData,
211+
tmpl::list<ScalarTensor::Actions::SetInitialData,
212+
ScalarTensor::Actions::ReceiveNumericInitialData,
213+
Parallel::Actions::TerminatePhase>>,
205214
Parallel::PhaseActions<
206215
Parallel::Phase::InitializeInitialDataDependentQuantities,
207216
initialize_initial_data_dependent_quantities_actions>,
@@ -233,7 +242,8 @@ struct EvolutionMetavars : public ScalarTensorTemplateBase<EvolutionMetavars> {
233242
observers::Observer<EvolutionMetavars>,
234243
observers::ObserverWriter<EvolutionMetavars>,
235244
mem_monitor::MemoryMonitor<EvolutionMetavars>,
236-
st_dg_element_array, intrp::Interpolator<EvolutionMetavars>,
245+
importers::ElementDataReader<EvolutionMetavars>, st_dg_element_array,
246+
intrp::Interpolator<EvolutionMetavars>,
237247
control_system::control_components<EvolutionMetavars, control_systems>,
238248
tmpl::transform<interpolation_target_tags,
239249
tmpl::bind<intrp::InterpolationTarget,

src/Evolution/Executables/ScalarTensor/ScalarTensorBase.hpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
#include "Evolution/Systems/GeneralizedHarmonic/Initialize.hpp"
4444
#include "Evolution/Systems/GeneralizedHarmonic/System.hpp"
4545
#include "Evolution/Systems/GeneralizedHarmonic/Tags.hpp"
46+
#include "Evolution/Systems/ScalarTensor/Actions/SetInitialData.hpp"
4647
#include "Evolution/Systems/ScalarTensor/BoundaryConditions/Factory.hpp"
4748
#include "Evolution/Systems/ScalarTensor/BoundaryCorrections/Factory.hpp"
4849
#include "Evolution/Systems/ScalarTensor/Constraints.hpp"
@@ -162,6 +163,8 @@ struct ScalarTensorTemplateBase;
162163
namespace detail {
163164
constexpr auto make_default_phase_order() {
164165
return std::array{Parallel::Phase::Initialization,
166+
Parallel::Phase::RegisterWithElementDataReader,
167+
Parallel::Phase::ImportInitialData,
165168
Parallel::Phase::InitializeInitialDataDependentQuantities,
166169
Parallel::Phase::Register,
167170
Parallel::Phase::InitializeTimeStepperHistory,
@@ -352,7 +355,9 @@ struct FactoryCreation : tt::ConformsTo<Options::protocols::FactoryCreation> {
352355
ScalarTensor::BoundaryConditions::BoundaryCondition,
353356
ScalarTensor::BoundaryConditions::standard_boundary_conditions>,
354357
tmpl::pair<gh::gauges::GaugeCondition, gh::gauges::all_gauges>,
355-
tmpl::pair<evolution::initial_data::InitialData, initial_data_list>,
358+
tmpl::pair<
359+
evolution::initial_data::InitialData,
360+
tmpl::push_back<initial_data_list, ScalarTensor::NumericInitialData>>,
356361
tmpl::pair<LtsTimeStepper, TimeSteppers::lts_time_steppers>,
357362
tmpl::pair<PhaseChange, PhaseControl::factory_creatable_classes>,
358363
tmpl::pair<StepChooser<StepChooserUse::LtsStep>,
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+
SetInitialData.cpp
8+
)
9+
10+
spectre_target_headers(
11+
${LIBRARY}
12+
INCLUDE_DIRECTORY ${CMAKE_SOURCE_DIR}/src
13+
HEADERS
14+
SetInitialData.hpp
15+
)
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
// Distributed under the MIT License.
2+
// See LICENSE.txt for details.
3+
4+
#include "Evolution/Systems/ScalarTensor/Actions/SetInitialData.hpp"
5+
6+
#include <boost/functional/hash.hpp>
7+
#include <cstddef>
8+
#include <optional>
9+
#include <string>
10+
#include <utility>
11+
#include <variant>
12+
13+
#include "DataStructures/DataVector.hpp"
14+
#include "DataStructures/Tensor/Tensor.hpp"
15+
#include "NumericalAlgorithms/LinearOperators/PartialDerivatives.hpp"
16+
#include "PointwiseFunctions/GeneralRelativity/GeneralizedHarmonic/Phi.hpp"
17+
#include "PointwiseFunctions/GeneralRelativity/GeneralizedHarmonic/Pi.hpp"
18+
#include "PointwiseFunctions/GeneralRelativity/SpacetimeMetric.hpp"
19+
#include "PointwiseFunctions/GeneralRelativity/TimeDerivativeOfSpatialMetric.hpp"
20+
#include "Utilities/GenerateInstantiations.hpp"
21+
#include "Utilities/Gsl.hpp"
22+
#include "Utilities/MakeWithValue.hpp"
23+
#include "Utilities/PrettyType.hpp"
24+
25+
namespace ScalarTensor {
26+
27+
NumericInitialData::NumericInitialData(
28+
std::string file_glob, std::string subfile_name,
29+
std::variant<double, importers::ObservationSelector> observation_value,
30+
std::optional<double> observation_value_epsilon, bool enable_interpolation,
31+
typename GhNumericId::Variables::type gh_selected_variables,
32+
typename ScalarNumericId::Variables::type hydro_selected_variables)
33+
: gh_numeric_id_(file_glob, subfile_name, observation_value,
34+
observation_value_epsilon.value_or(1.0e-12),
35+
enable_interpolation, std::move(gh_selected_variables)),
36+
scalar_numeric_id_(
37+
std::move(file_glob), std::move(subfile_name), observation_value,
38+
observation_value_epsilon.value_or(1.0e-12), enable_interpolation,
39+
std::move(hydro_selected_variables)) {}
40+
41+
NumericInitialData::NumericInitialData(CkMigrateMessage* msg)
42+
: InitialData(msg) {}
43+
44+
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
45+
PUP::able::PUP_ID NumericInitialData::my_PUP_ID = 0;
46+
47+
size_t NumericInitialData::volume_data_id() const {
48+
size_t hash = 0;
49+
boost::hash_combine(hash, gh_numeric_id_.volume_data_id());
50+
boost::hash_combine(hash, scalar_numeric_id_.volume_data_id());
51+
return hash;
52+
}
53+
54+
void NumericInitialData::pup(PUP::er& p) {
55+
p | gh_numeric_id_;
56+
p | scalar_numeric_id_;
57+
}
58+
59+
bool operator==(const NumericInitialData& lhs, const NumericInitialData& rhs) {
60+
return lhs.gh_numeric_id_ == rhs.gh_numeric_id_ and
61+
lhs.scalar_numeric_id_ == rhs.scalar_numeric_id_;
62+
}
63+
64+
} // namespace ScalarTensor

0 commit comments

Comments
 (0)