Add C++ TallyFilter::to_statepoint()

This commit is contained in:
Sterling Harper 2018-10-04 22:43:54 -04:00
parent 2626f62ad1
commit 98b4379245
7 changed files with 42 additions and 20 deletions

View file

@ -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() {}
};

View file

@ -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_;

View file

@ -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

View file

@ -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();}
}

View file

@ -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)

View file

@ -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)

View file

@ -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