mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-28 06:05:58 -04:00
Write particle types separately for track files
This commit is contained in:
parent
452a24c8ce
commit
b32d4b5ed3
3 changed files with 13 additions and 7 deletions
|
|
@ -65,7 +65,12 @@ struct TrackState {
|
|||
double wgt {1.0};
|
||||
int cell_id;
|
||||
int material_id {-1};
|
||||
};
|
||||
|
||||
//! Full history of a single particle's track states
|
||||
struct TrackStateHistory {
|
||||
ParticleType particle;
|
||||
std::vector<TrackState> states;
|
||||
};
|
||||
|
||||
//! Saved ("banked") state of a particle, for nu-fission tallying
|
||||
|
|
@ -302,7 +307,7 @@ private:
|
|||
|
||||
vector<FilterMatch> filter_matches_; // tally filter matches
|
||||
|
||||
vector<vector<TrackState>> tracks_; // tracks for outputting to file
|
||||
vector<TrackStateHistory> tracks_; // tracks for outputting to file
|
||||
|
||||
vector<NuBank> nu_bank_; // bank of most recently fissioned particles
|
||||
|
||||
|
|
|
|||
|
|
@ -67,7 +67,6 @@ TrackState ParticleData::get_track_state() const
|
|||
if (this->material() != MATERIAL_VOID) {
|
||||
state.material_id = model::materials[material()]->id_;
|
||||
}
|
||||
state.particle = this->type();
|
||||
return state;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -26,11 +26,12 @@ namespace openmc {
|
|||
void add_particle_track(Particle& p)
|
||||
{
|
||||
p.tracks().emplace_back();
|
||||
p.tracks().back().particle = p.type();
|
||||
}
|
||||
|
||||
void write_particle_track(Particle& p)
|
||||
{
|
||||
p.tracks().back().push_back(p.get_track_state());
|
||||
p.tracks().back().states.push_back(p.get_track_state());
|
||||
}
|
||||
|
||||
hid_t trackstate_type()
|
||||
|
|
@ -51,8 +52,6 @@ hid_t trackstate_type()
|
|||
H5Tinsert(tracktype, "cell_id", HOFFSET(TrackState, cell_id), H5T_NATIVE_INT);
|
||||
H5Tinsert(
|
||||
tracktype, "material_id", HOFFSET(TrackState, material_id), H5T_NATIVE_INT);
|
||||
H5Tinsert(
|
||||
tracktype, "particle", HOFFSET(TrackState, particle), H5T_NATIVE_INT);
|
||||
|
||||
H5Tclose(postype);
|
||||
return tracktype;
|
||||
|
|
@ -66,12 +65,14 @@ void finalize_particle_track(Particle& p)
|
|||
|
||||
// Determine number of coordinates for each particle
|
||||
vector<int> offsets;
|
||||
vector<int> particles;
|
||||
vector<TrackState> tracks;
|
||||
int offset = 0;
|
||||
for (auto& track_i : p.tracks()) {
|
||||
offsets.push_back(offset);
|
||||
offset += track_i.size();
|
||||
tracks.insert(tracks.end(), track_i.begin(), track_i.end());
|
||||
particles.push_back(static_cast<int>(track_i.particle));
|
||||
offset += track_i.states.size();
|
||||
tracks.insert(tracks.end(), track_i.states.begin(), track_i.states.end());
|
||||
}
|
||||
offsets.push_back(offset);
|
||||
|
||||
|
|
@ -82,6 +83,7 @@ void finalize_particle_track(Particle& p)
|
|||
write_attribute(file_id, "version", VERSION_TRACK);
|
||||
write_attribute(file_id, "n_particles", p.tracks().size());
|
||||
write_attribute(file_id, "offsets", offsets);
|
||||
write_attribute(file_id, "particles", particles);
|
||||
|
||||
// Create HDF5 datatype for TrackState
|
||||
hid_t track_type = trackstate_type();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue