Skip to content

Commit 6174c13

Browse files
committed
Add parallel domain mismatch checking
1 parent 37bef75 commit 6174c13

File tree

5 files changed

+39
-3
lines changed

5 files changed

+39
-3
lines changed

src/libs/rover/domain.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,12 @@ Domain::get_num_energy_groups()
9191
return m_engine->get_num_energy_groups();
9292
}
9393

94+
bool
95+
Domain::get_field_mismatch_error()
96+
{
97+
return m_engine->get_field_mismatch_error();
98+
}
99+
94100
void
95101
Domain::set_dataset(vtkmDataSet &dataset)
96102
{

src/libs/rover/domain.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class Domain
4040
vtkmRange get_primary_range();
4141
void set_global_bounds(vtkm::Bounds bounds);
4242
const int get_num_energy_groups();
43+
bool get_field_mismatch_error();
4344
protected:
4445
std::shared_ptr<Engine> m_engine;
4546
vtkmDataSet m_dataset;

src/libs/rover/engine.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ namespace rover
1717
Engine::Engine()
1818
{
1919
m_tracer = nullptr;
20+
m_field_mismatch_error = false;
2021
}
2122

2223
Engine::~Engine()
@@ -134,15 +135,19 @@ Engine::get_num_energy_groups()
134135

135136
if (num_absorption_bins != num_emission_bins)
136137
{
137-
ASCENT_LOG_ERROR("Error - Engine::get_num_energy_groups: number of energy groups in absorption field ("
138-
<< num_absorption_bins << ") does not match number of bins in emission field ("
139-
<< num_emission_bins << ")");
138+
m_field_mismatch_error = true;
140139
}
141140
}
142141

143142
return static_cast<int>(num_absorption_bins);
144143
}
145144

145+
bool
146+
Engine::get_field_mismatch_error()
147+
{
148+
return m_field_mismatch_error;
149+
}
150+
146151
vtkmRange
147152
Engine::get_primary_range()
148153
{

src/libs/rover/engine.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,15 @@ class Engine
4444
void partial_trace(Ray32 &rays, PartialVector32 &partials);
4545
void partial_trace(Ray64 &rays, PartialVector64 &partials);
4646
int get_num_energy_groups();
47+
bool get_field_mismatch_error();
4748
vtkmRange get_primary_range();
4849
void set_primary_range(const vtkmRange &range);
4950
void set_composite_background(bool on);
5051

5152
protected:
5253
vtkmDataSet m_dataset;
5354
vtkh::rendering::ConnectivityProxy *m_tracer;
55+
bool m_field_mismatch_error;
5456

5557
template<typename Precision>
5658
void init_emission(vtkmRayTracing::Ray<Precision> &rays,

src/libs/rover/typed_scheduler.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,16 @@ int
7272
TypedScheduler<FloatType>::get_global_num_energy_groups()
7373
{
7474
int num_energy_groups = 1;
75+
int has_field_mismatch = 0;
76+
7577
for (auto& domain : m_domains)
7678
{
7779
num_energy_groups = std::max(num_energy_groups, domain.get_num_energy_groups());
80+
// Check if this domain had a field mismatch
81+
if (domain.get_field_mismatch_error())
82+
{
83+
has_field_mismatch = 1;
84+
}
7885
}
7986

8087
#ifdef ROVER_PARALLEL
@@ -92,8 +99,23 @@ TypedScheduler<FloatType>::get_global_num_energy_groups()
9299
"Local: " << num_energy_groups << ", Global max: " << mpi_max_energy_groups);
93100
}
94101

102+
// Check that all ranks agree on field mismatch state
103+
int global_field_mismatch = 0;
104+
MPI_Allreduce(&has_field_mismatch, &global_field_mismatch, 1, MPI_INT, MPI_MAX, m_comm_handle);
105+
if (global_field_mismatch)
106+
{
107+
ASCENT_LOG_ERROR("Error - TypedScheduler::get_global_num_energy_groups: "
108+
"mismatched nunmber of absorption and emission fields detected on one or more ranks");
109+
}
110+
95111
time = timer.GetElapsedTime();
96112
ROVER_DATA_ADD("get_global_num_energy_groups_all_reduce", time);
113+
#else
114+
if (has_field_mismatch)
115+
{
116+
ASCENT_LOG_ERROR("Error - TypedScheduler::get_global_num_energy_groups: "
117+
"mismatched number of absorption and emission fields");
118+
}
97119
#endif
98120

99121
ROVER_INFO("Global number of energy groups" << num_energy_groups);

0 commit comments

Comments
 (0)