Skip to content

Commit a1c6e59

Browse files
committed
Move update of density to base coupled class. Refs enrico-dev#15
1 parent 2904ba8 commit a1c6e59

File tree

6 files changed

+28
-23
lines changed

6 files changed

+28
-23
lines changed

include/enrico/coupled_driver.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,10 @@ class CoupledDriver {
4848
virtual void set_temperature() {};
4949

5050
//! Update the density for the neutronics solver
51-
virtual void update_density() {}
51+
void update_density();
52+
53+
//! Update the density for the neutronics solver
54+
virtual void set_density() {}
5255

5356
//! Check convergence of the coupled solve for the current Picard iteration.
5457
virtual bool is_converged();

include/enrico/openmc_heat_driver.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class OpenmcHeatDriver : public CoupledDriver {
3434

3535
void set_temperature() override;
3636

37-
void update_density() override;
37+
void set_density() override;
3838

3939
NeutronicsDriver& get_neutronics_driver() const override;
4040

include/enrico/openmc_nek_driver.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class OpenmcNekDriver : public CoupledDriver {
4242

4343
void set_temperature() override;
4444

45-
void update_density() override;
45+
void set_density() override;
4646

4747
NeutronicsDriver& get_neutronics_driver() const override;
4848

src/coupled_driver.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,4 +194,24 @@ void CoupledDriver::update_temperature()
194194
set_temperature();
195195
}
196196

197+
void CoupledDriver::update_density()
198+
{
199+
// Store previous density solution; a previous solution will always be present
200+
// because a density IC is set and the neutronics solver runs first
201+
if (has_global_coupling_data()) {
202+
std::copy(densities_.begin(), densities_.end(), densities_prev_.begin());
203+
}
204+
205+
auto& heat = get_heat_driver();
206+
if (heat.active()) {
207+
auto d = heat.density();
208+
209+
if (heat.has_coupling_data())
210+
densities_ = d;
211+
}
212+
213+
// Set density in the neutronics solver
214+
set_density();
215+
}
216+
197217
} // namespace enrico

src/openmc_heat_driver.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -339,14 +339,8 @@ void OpenmcHeatDriver::set_heat_source()
339339
}
340340
}
341341

342-
void OpenmcHeatDriver::update_density()
342+
void OpenmcHeatDriver::set_density()
343343
{
344-
if (this->has_global_coupling_data()) {
345-
std::copy(densities_.begin(), densities_.end(), densities_prev_.begin());
346-
}
347-
348-
densities_ = heat_driver_->density();
349-
350344
for (gsl::index i = n_solid_cells_; i < n_solid_cells_ + n_fluid_cells_; ++i) {
351345
const auto& c = openmc_driver_->cells_[i];
352346
const auto& elems = cell_inst_to_elem_[i];

src/openmc_nek_driver.cpp

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -416,21 +416,9 @@ void OpenmcNekDriver::set_temperature()
416416
}
417417
}
418418

419-
void OpenmcNekDriver::update_density()
419+
void OpenmcNekDriver::set_density()
420420
{
421-
if (this->has_global_coupling_data()) {
422-
std::copy(densities_.begin(), densities_.end(), densities_prev_.begin());
423-
}
424-
425421
if (nek_driver_->active()) {
426-
// On Nek's master rank, d gets global data. On Nek's other ranks, d is empty.
427-
auto d = nek_driver_->density();
428-
429-
// Update elem_densities_ on Nek's master rank only.
430-
if (nek_driver_->has_coupling_data()) {
431-
densities_ = d;
432-
}
433-
434422
// Since OpenMC's and Nek's master ranks are the same, we know that elem_densities_ on
435423
// OpenMC's master rank were updated. Now we broadcast to the other OpenMC ranks.
436424
// TODO: This won't work if the Nek/OpenMC communicators are disjoint

0 commit comments

Comments
 (0)