mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-29 06:35:48 -04:00
Add C++ TallyFilter::to_statepoint()
This commit is contained in:
parent
2626f62ad1
commit
98b4379245
7 changed files with 42 additions and 20 deletions
|
|
@ -4,6 +4,7 @@
|
|||
#include <cstdint>
|
||||
#include <vector>
|
||||
|
||||
#include "openmc/hdf5_interface.h"
|
||||
#include "openmc/particle.h"
|
||||
#include "openmc/xml_interface.h"
|
||||
|
||||
|
|
@ -48,6 +49,8 @@ public:
|
|||
virtual void
|
||||
get_all_bins(Particle* p, int estimator, TallyFilterMatch& match) const = 0;
|
||||
|
||||
virtual void to_statepoint(hid_t filter_group) const {}
|
||||
|
||||
virtual void initialize() {}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -55,6 +55,16 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
virtual void
|
||||
to_statepoint(hid_t filter_group) const override
|
||||
{
|
||||
write_dataset(filter_group, "type", "cell");
|
||||
write_dataset(filter_group, "n_bins", cells_.size());
|
||||
std::vector<int32_t> cell_ids;
|
||||
for (auto c : cells_) cell_ids.push_back(cells[c]->id_);
|
||||
write_dataset(filter_group, "bins", cell_ids);
|
||||
}
|
||||
|
||||
protected:
|
||||
std::vector<int32_t> cells_;
|
||||
std::unordered_map<int32_t, int> map_;
|
||||
|
|
|
|||
|
|
@ -22,6 +22,16 @@ public:
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
virtual void
|
||||
to_statepoint(hid_t filter_group) const override
|
||||
{
|
||||
write_dataset(filter_group, "type", "cellfrom");
|
||||
write_dataset(filter_group, "n_bins", cells_.size());
|
||||
std::vector<int32_t> cell_ids;
|
||||
for (auto c : cells_) cell_ids.push_back(cells[c]->id_);
|
||||
write_dataset(filter_group, "bins", cell_ids);
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace openmc
|
||||
|
|
|
|||
|
|
@ -101,6 +101,9 @@ extern "C" {
|
|||
filt->get_all_bins(p, estimator, *match);
|
||||
}
|
||||
|
||||
void filter_to_statepoint(TallyFilter* filt, hid_t group)
|
||||
{filt->to_statepoint(group);}
|
||||
|
||||
void filter_initialize(TallyFilter* filt) {filt->initialize();}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -64,17 +64,8 @@ contains
|
|||
class(CellFilter), intent(in) :: this
|
||||
integer(HID_T), intent(in) :: filter_group
|
||||
|
||||
integer :: i
|
||||
integer, allocatable :: cell_ids(:)
|
||||
call this % to_statepoint_c(filter_group)
|
||||
|
||||
call write_dataset(filter_group, "type", "cell")
|
||||
call write_dataset(filter_group, "n_bins", this % n_bins)
|
||||
|
||||
allocate(cell_ids(size(this % cells)))
|
||||
do i = 1, size(this % cells)
|
||||
cell_ids(i) = cells(this % cells(i)) % id()
|
||||
end do
|
||||
call write_dataset(filter_group, "bins", cell_ids)
|
||||
end subroutine to_statepoint_cell
|
||||
|
||||
subroutine initialize_cell(this)
|
||||
|
|
|
|||
|
|
@ -45,17 +45,8 @@ contains
|
|||
class(CellFromFilter), intent(in) :: this
|
||||
integer(HID_T), intent(in) :: filter_group
|
||||
|
||||
integer :: i
|
||||
integer, allocatable :: cell_ids(:)
|
||||
call this % to_statepoint_c(filter_group)
|
||||
|
||||
call write_dataset(filter_group, "type", "cellfrom")
|
||||
call write_dataset(filter_group, "n_bins", this % n_bins)
|
||||
|
||||
allocate(cell_ids(size(this % cells)))
|
||||
do i = 1, size(this % cells)
|
||||
cell_ids(i) = cells(this % cells(i)) % id()
|
||||
end do
|
||||
call write_dataset(filter_group, "bins", cell_ids)
|
||||
end subroutine to_statepoint_cell_from
|
||||
|
||||
function text_label_cell_from(this, bin) result(label)
|
||||
|
|
|
|||
|
|
@ -132,6 +132,7 @@ module tally_filter_header
|
|||
contains
|
||||
procedure :: from_xml_c
|
||||
procedure :: get_all_bins_c
|
||||
procedure :: to_statepoint_c
|
||||
procedure :: initialize_c
|
||||
end type CppTallyFilter
|
||||
|
||||
|
|
@ -308,6 +309,19 @@ contains
|
|||
call filter_get_all_bins(this % ptr, p, estimator, match % ptr)
|
||||
end subroutine get_all_bins_c
|
||||
|
||||
subroutine to_statepoint_c(this, filter_group)
|
||||
class(CppTallyFilter), intent(in) :: this
|
||||
integer(HID_T), intent(in) :: filter_group
|
||||
interface
|
||||
subroutine filter_to_statepoint(filt, filter_group) bind(C)
|
||||
import C_PTR, HID_T
|
||||
type(C_PTR), value :: filt
|
||||
integer(HID_T), intent(in), value :: filter_group
|
||||
end subroutine filter_to_statepoint
|
||||
end interface
|
||||
call filter_to_statepoint(this % ptr, filter_group)
|
||||
end subroutine to_statepoint_c
|
||||
|
||||
subroutine initialize_c(this)
|
||||
class(CppTallyFilter), intent(inout) :: this
|
||||
interface
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue