mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-28 22:26:08 -04:00
Fix a bug in rotational periodic boundary conditions (#3692)
Co-authored-by: Paul Romano <paul.k.romano@gmail.com>
This commit is contained in:
parent
818fd11b18
commit
c7d7fa4613
16 changed files with 297 additions and 73 deletions
|
|
@ -152,6 +152,8 @@ public:
|
|||
protected:
|
||||
//! Angle about the axis by which particle coordinates will be rotated
|
||||
double angle_;
|
||||
//! Do we need to flip surfaces senses when applying the transformation?
|
||||
bool flip_sense_;
|
||||
//! Ensure that choice of axes is right handed. axis_1_idx_ corresponds to the
|
||||
//! independent axis and axis_2_idx_ corresponds to the dependent axis in the
|
||||
//! 2D plane perpendicular to the planes' axis of rotation
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#define OPENMC_SURFACE_H
|
||||
|
||||
#include <limits> // For numeric_limits
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
|
||||
|
|
@ -378,7 +379,39 @@ public:
|
|||
// Non-member functions
|
||||
//==============================================================================
|
||||
|
||||
void read_surfaces(pugi::xml_node node);
|
||||
//! Read surface definitions from XML and populate the global surfaces vector.
|
||||
//!
|
||||
//! This function parses surface elements from the XML input, creates the
|
||||
//! appropriate surface objects, and identifies periodic surfaces along with
|
||||
//! their albedo values and sense information.
|
||||
//!
|
||||
//! \param node XML node containing surface definitions
|
||||
//! \param[out] periodic_pairs Set of surface ID pairs representing periodic
|
||||
//! boundary conditions
|
||||
//! \param[out] albedo_map Map of surface IDs to albedo values for periodic
|
||||
//! surfaces
|
||||
//! \param[out] periodic_sense_map Map of surface IDs to their sense values
|
||||
//! (used to determine orientation for periodic BCs)
|
||||
void read_surfaces(pugi::xml_node node,
|
||||
std::set<std::pair<int, int>>& periodic_pairs,
|
||||
std::unordered_map<int, double>& albedo_map,
|
||||
std::unordered_map<int, int>& periodic_sense_map);
|
||||
|
||||
//! Resolve periodic surface pairs and assign boundary conditions.
|
||||
//!
|
||||
//! This function completes the setup of periodic boundary conditions by
|
||||
//! resolving unpaired periodic surfaces, determining whether each pair
|
||||
//! represents translational or rotational periodicity based on surface
|
||||
//! normals, and assigning the appropriate boundary condition objects.
|
||||
//!
|
||||
//! \param[inout] periodic_pairs Set of surface ID pairs representing periodic
|
||||
//! boundary conditions; unpaired entries are resolved
|
||||
//! \param albedo_map Map of surface IDs to albedo values for periodic surfaces
|
||||
//! \param periodic_sense_map Map of surface IDs to their sense values (used to
|
||||
//! determine orientation for periodic BCs)
|
||||
void prepare_boundary_conditions(std::set<std::pair<int, int>>& periodic_pairs,
|
||||
std::unordered_map<int, double>& albedo_map,
|
||||
std::unordered_map<int, int>& periodic_sense_map);
|
||||
|
||||
void free_memory_surfaces();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue