mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-29 06:35:48 -04:00
commit
5176369c00
9 changed files with 3675 additions and 1663 deletions
559
src/DEPENDENCIES
559
src/DEPENDENCIES
|
|
@ -1,24 +1,32 @@
|
|||
ace.o: ace_header.o
|
||||
ace.o: constants.o
|
||||
ace.o: endf.o
|
||||
ace.o: error.o
|
||||
ace.o: fission.o
|
||||
ace.o: global.o
|
||||
ace.o: material_header.o
|
||||
ace.o: output.o
|
||||
ace.o: set_header.o
|
||||
ace.o: string.o
|
||||
set_header.o: constants.o
|
||||
set_header.o: list_header.o
|
||||
|
||||
ace_header.o: constants.o
|
||||
ace_header.o: endf_header.o
|
||||
energy_grid.o: constants.o
|
||||
energy_grid.o: global.o
|
||||
energy_grid.o: list_header.o
|
||||
energy_grid.o: output.o
|
||||
|
||||
cmfd_data.o: cmfd_header.o
|
||||
cmfd_data.o: constants.o
|
||||
cmfd_data.o: error.o
|
||||
cmfd_data.o: global.o
|
||||
cmfd_data.o: mesh.o
|
||||
cmfd_data.o: mesh_header.o
|
||||
cmfd_data.o: tally_header.o
|
||||
list_header.o: constants.o
|
||||
|
||||
cmfd_slepc_solver.o: cmfd_loss_operator.o
|
||||
cmfd_slepc_solver.o: cmfd_prod_operator.o
|
||||
cmfd_slepc_solver.o: constants.o
|
||||
cmfd_slepc_solver.o: global.o
|
||||
|
||||
cmfd_loss_operator.o: constants.o
|
||||
cmfd_loss_operator.o: global.o
|
||||
|
||||
particle_restart.o: bank_header.o
|
||||
particle_restart.o: constants.o
|
||||
particle_restart.o: geometry_header.o
|
||||
particle_restart.o: global.o
|
||||
particle_restart.o: output.o
|
||||
particle_restart.o: output_interface.o
|
||||
particle_restart.o: particle_header.o
|
||||
particle_restart.o: random_lcg.o
|
||||
particle_restart.o: tracking.o
|
||||
|
||||
doppler.o: constants.o
|
||||
|
||||
cmfd_execute.o: cmfd_data.o
|
||||
cmfd_execute.o: cmfd_message_passing.o
|
||||
|
|
@ -33,108 +41,27 @@ cmfd_execute.o: output.o
|
|||
cmfd_execute.o: search.o
|
||||
cmfd_execute.o: tally.o
|
||||
|
||||
cmfd_header.o: constants.o
|
||||
|
||||
cmfd_input.o: cmfd_message_passing.o
|
||||
cmfd_input.o: error.o
|
||||
cmfd_input.o: global.o
|
||||
cmfd_input.o: mesh_header.o
|
||||
cmfd_input.o: output.o
|
||||
cmfd_input.o: string.o
|
||||
cmfd_input.o: tally.o
|
||||
cmfd_input.o: tally_header.o
|
||||
cmfd_input.o: tally_initialize.o
|
||||
cmfd_input.o: templates/cmfd_t.o
|
||||
|
||||
cmfd_jacobian_operator.o: cmfd_loss_operator.o
|
||||
cmfd_jacobian_operator.o: cmfd_prod_operator.o
|
||||
cmfd_jacobian_operator.o: constants.o
|
||||
cmfd_jacobian_operator.o: global.o
|
||||
|
||||
cmfd_loss_operator.o: constants.o
|
||||
cmfd_loss_operator.o: global.o
|
||||
|
||||
cmfd_message_passing.o: cmfd_header.o
|
||||
cmfd_message_passing.o: global.o
|
||||
|
||||
cmfd_output.o: cmfd_data.o
|
||||
cmfd_output.o: cmfd_header.o
|
||||
cmfd_output.o: constants.o
|
||||
cmfd_output.o: global.o
|
||||
|
||||
cmfd_power_solver.o: cmfd_loss_operator.o
|
||||
cmfd_power_solver.o: cmfd_prod_operator.o
|
||||
cmfd_power_solver.o: constants.o
|
||||
cmfd_power_solver.o: global.o
|
||||
cmfd_power_solver.o: string.o
|
||||
|
||||
cmfd_prod_operator.o: constants.o
|
||||
cmfd_prod_operator.o: global.o
|
||||
cmfd_message_passing.o: cmfd_header.o
|
||||
cmfd_message_passing.o: global.o
|
||||
|
||||
cmfd_slepc_solver.o: cmfd_loss_operator.o
|
||||
cmfd_slepc_solver.o: cmfd_prod_operator.o
|
||||
cmfd_slepc_solver.o: constants.o
|
||||
cmfd_slepc_solver.o: global.o
|
||||
random_lcg.o: global.o
|
||||
|
||||
cmfd_snes_solver.o: cmfd_jacobian_operator.o
|
||||
cmfd_snes_solver.o: cmfd_loss_operator.o
|
||||
cmfd_snes_solver.o: cmfd_power_solver.o
|
||||
cmfd_snes_solver.o: cmfd_prod_operator.o
|
||||
cmfd_snes_solver.o: constants.o
|
||||
cmfd_snes_solver.o: global.o
|
||||
cmfd_snes_solver.o: string.o
|
||||
|
||||
cross_section.o: ace_header.o
|
||||
cross_section.o: constants.o
|
||||
cross_section.o: error.o
|
||||
cross_section.o: fission.o
|
||||
cross_section.o: global.o
|
||||
cross_section.o: material_header.o
|
||||
cross_section.o: particle_header.o
|
||||
cross_section.o: random_lcg.o
|
||||
cross_section.o: search.o
|
||||
|
||||
doppler.o: constants.o
|
||||
|
||||
eigenvalue.o: cmfd_execute.o
|
||||
eigenvalue.o: constants.o
|
||||
eigenvalue.o: error.o
|
||||
eigenvalue.o: global.o
|
||||
eigenvalue.o: math.o
|
||||
eigenvalue.o: mesh.o
|
||||
eigenvalue.o: mesh_header.o
|
||||
eigenvalue.o: output.o
|
||||
eigenvalue.o: particle_header.o
|
||||
eigenvalue.o: random_lcg.o
|
||||
eigenvalue.o: search.o
|
||||
eigenvalue.o: source.o
|
||||
eigenvalue.o: state_point.o
|
||||
eigenvalue.o: string.o
|
||||
eigenvalue.o: tally.o
|
||||
eigenvalue.o: tracking.o
|
||||
|
||||
endf.o: constants.o
|
||||
endf.o: string.o
|
||||
|
||||
energy_grid.o: constants.o
|
||||
energy_grid.o: global.o
|
||||
energy_grid.o: list_header.o
|
||||
energy_grid.o: output.o
|
||||
|
||||
error.o: global.o
|
||||
|
||||
finalize.o: cmfd_output.o
|
||||
finalize.o: global.o
|
||||
finalize.o: hdf5_interface.o
|
||||
finalize.o: output.o
|
||||
finalize.o: tally.o
|
||||
|
||||
fission.o: ace_header.o
|
||||
fission.o: constants.o
|
||||
fission.o: error.o
|
||||
fission.o: global.o
|
||||
fission.o: interpolation.o
|
||||
fission.o: search.o
|
||||
plot.o: constants.o
|
||||
plot.o: error.o
|
||||
plot.o: geometry.o
|
||||
plot.o: geometry_header.o
|
||||
plot.o: global.o
|
||||
plot.o: output.o
|
||||
plot.o: particle_header.o
|
||||
plot.o: plot_header.o
|
||||
plot.o: ppmlib.o
|
||||
plot.o: string.o
|
||||
|
||||
fixed_source.o: constants.o
|
||||
fixed_source.o: global.o
|
||||
|
|
@ -147,64 +74,53 @@ fixed_source.o: string.o
|
|||
fixed_source.o: tally.o
|
||||
fixed_source.o: tracking.o
|
||||
|
||||
geometry.o: constants.o
|
||||
geometry.o: error.o
|
||||
geometry.o: geometry_header.o
|
||||
geometry.o: global.o
|
||||
geometry.o: output.o
|
||||
geometry.o: particle_header.o
|
||||
geometry.o: particle_restart_write.o
|
||||
geometry.o: string.o
|
||||
geometry.o: tally.o
|
||||
source.o: bank_header.o
|
||||
source.o: constants.o
|
||||
source.o: error.o
|
||||
source.o: geometry_header.o
|
||||
source.o: global.o
|
||||
source.o: math.o
|
||||
source.o: output.o
|
||||
source.o: particle_header.o
|
||||
source.o: random_lcg.o
|
||||
source.o: string.o
|
||||
|
||||
global.o: ace_header.o
|
||||
global.o: bank_header.o
|
||||
global.o: cmfd_header.o
|
||||
global.o: constants.o
|
||||
global.o: dict_header.o
|
||||
global.o: geometry_header.o
|
||||
global.o: hdf5_interface.o
|
||||
global.o: material_header.o
|
||||
global.o: mesh_header.o
|
||||
global.o: particle_header.o
|
||||
global.o: plot_header.o
|
||||
global.o: set_header.o
|
||||
global.o: source_header.o
|
||||
global.o: tally_header.o
|
||||
global.o: timer_header.o
|
||||
cmfd_prod_operator.o: constants.o
|
||||
cmfd_prod_operator.o: global.o
|
||||
|
||||
hdf5_summary.o: ace_header.o
|
||||
hdf5_summary.o: constants.o
|
||||
hdf5_summary.o: endf.o
|
||||
hdf5_summary.o: geometry_header.o
|
||||
hdf5_summary.o: global.o
|
||||
hdf5_summary.o: material_header.o
|
||||
hdf5_summary.o: mesh_header.o
|
||||
hdf5_summary.o: output_interface.o
|
||||
hdf5_summary.o: output.o
|
||||
hdf5_summary.o: string.o
|
||||
hdf5_summary.o: tally_header.o
|
||||
ace_header.o: constants.o
|
||||
ace_header.o: endf_header.o
|
||||
|
||||
initialize.o: ace.o
|
||||
initialize.o: bank_header.o
|
||||
initialize.o: constants.o
|
||||
initialize.o: dict_header.o
|
||||
initialize.o: energy_grid.o
|
||||
initialize.o: error.o
|
||||
initialize.o: geometry.o
|
||||
initialize.o: geometry_header.o
|
||||
initialize.o: global.o
|
||||
initialize.o: hdf5_interface.o
|
||||
initialize.o: hdf5_summary.o
|
||||
initialize.o: input_xml.o
|
||||
initialize.o: output_interface.o
|
||||
initialize.o: output.o
|
||||
initialize.o: random_lcg.o
|
||||
initialize.o: source.o
|
||||
initialize.o: state_point.o
|
||||
initialize.o: string.o
|
||||
initialize.o: tally_header.o
|
||||
initialize.o: tally_initialize.o
|
||||
fission.o: ace_header.o
|
||||
fission.o: constants.o
|
||||
fission.o: error.o
|
||||
fission.o: global.o
|
||||
fission.o: interpolation.o
|
||||
fission.o: search.o
|
||||
|
||||
cmfd_jacobian_operator.o: cmfd_loss_operator.o
|
||||
cmfd_jacobian_operator.o: cmfd_prod_operator.o
|
||||
cmfd_jacobian_operator.o: constants.o
|
||||
cmfd_jacobian_operator.o: global.o
|
||||
|
||||
cmfd_snes_solver.o: cmfd_jacobian_operator.o
|
||||
cmfd_snes_solver.o: cmfd_loss_operator.o
|
||||
cmfd_snes_solver.o: cmfd_power_solver.o
|
||||
cmfd_snes_solver.o: cmfd_prod_operator.o
|
||||
cmfd_snes_solver.o: constants.o
|
||||
cmfd_snes_solver.o: global.o
|
||||
cmfd_snes_solver.o: string.o
|
||||
|
||||
cmfd_input.o: cmfd_message_passing.o
|
||||
cmfd_input.o: error.o
|
||||
cmfd_input.o: global.o
|
||||
cmfd_input.o: mesh_header.o
|
||||
cmfd_input.o: output.o
|
||||
cmfd_input.o: string.o
|
||||
cmfd_input.o: tally.o
|
||||
cmfd_input.o: tally_header.o
|
||||
cmfd_input.o: tally_initialize.o
|
||||
cmfd_input.o: templates/cmfd_t.o
|
||||
|
||||
input_xml.o: cmfd_input.o
|
||||
input_xml.o: constants.o
|
||||
|
|
@ -227,15 +143,6 @@ input_xml.o: templates/plots_t.o
|
|||
input_xml.o: templates/settings_t.o
|
||||
input_xml.o: templates/tallies_t.o
|
||||
|
||||
interpolation.o: constants.o
|
||||
interpolation.o: endf_header.o
|
||||
interpolation.o: error.o
|
||||
interpolation.o: global.o
|
||||
interpolation.o: search.o
|
||||
interpolation.o: string.o
|
||||
|
||||
list_header.o: constants.o
|
||||
|
||||
main.o: constants.o
|
||||
main.o: eigenvalue.o
|
||||
main.o: finalize.o
|
||||
|
|
@ -245,15 +152,211 @@ main.o: initialize.o
|
|||
main.o: particle_restart.o
|
||||
main.o: plot.o
|
||||
|
||||
particle_restart_write.o: bank_header.o
|
||||
particle_restart_write.o: global.o
|
||||
particle_restart_write.o: output_interface.o
|
||||
particle_restart_write.o: particle_header.o
|
||||
particle_restart_write.o: string.o
|
||||
|
||||
timer_header.o: constants.o
|
||||
|
||||
math.o: constants.o
|
||||
math.o: random_lcg.o
|
||||
|
||||
interpolation.o: constants.o
|
||||
interpolation.o: endf_header.o
|
||||
interpolation.o: error.o
|
||||
interpolation.o: global.o
|
||||
interpolation.o: search.o
|
||||
interpolation.o: string.o
|
||||
|
||||
cmfd_data.o: cmfd_header.o
|
||||
cmfd_data.o: constants.o
|
||||
cmfd_data.o: error.o
|
||||
cmfd_data.o: global.o
|
||||
cmfd_data.o: mesh.o
|
||||
cmfd_data.o: mesh_header.o
|
||||
cmfd_data.o: tally_header.o
|
||||
|
||||
cmfd_output.o: cmfd_data.o
|
||||
cmfd_output.o: cmfd_header.o
|
||||
cmfd_output.o: constants.o
|
||||
cmfd_output.o: global.o
|
||||
|
||||
global.o: ace_header.o
|
||||
global.o: bank_header.o
|
||||
global.o: cmfd_header.o
|
||||
global.o: constants.o
|
||||
global.o: dict_header.o
|
||||
global.o: geometry_header.o
|
||||
global.o: hdf5_interface.o
|
||||
global.o: material_header.o
|
||||
global.o: mesh_header.o
|
||||
global.o: plot_header.o
|
||||
global.o: set_header.o
|
||||
global.o: source_header.o
|
||||
global.o: tally_header.o
|
||||
global.o: timer_header.o
|
||||
|
||||
string.o: constants.o
|
||||
string.o: error.o
|
||||
string.o: global.o
|
||||
|
||||
finalize.o: cmfd_output.o
|
||||
finalize.o: global.o
|
||||
finalize.o: hdf5_interface.o
|
||||
finalize.o: output.o
|
||||
finalize.o: tally.o
|
||||
|
||||
tally_initialize.o: constants.o
|
||||
tally_initialize.o: global.o
|
||||
tally_initialize.o: tally_header.o
|
||||
|
||||
tally.o: ace_header.o
|
||||
tally.o: constants.o
|
||||
tally.o: error.o
|
||||
tally.o: global.o
|
||||
tally.o: math.o
|
||||
tally.o: mesh.o
|
||||
tally.o: mesh_header.o
|
||||
tally.o: output.o
|
||||
tally.o: particle_header.o
|
||||
tally.o: search.o
|
||||
tally.o: string.o
|
||||
tally.o: tally_header.o
|
||||
|
||||
particle_header.o: constants.o
|
||||
particle_header.o: geometry_header.o
|
||||
|
||||
output_interface.o: constants.o
|
||||
output_interface.o: error.o
|
||||
output_interface.o: global.o
|
||||
output_interface.o: hdf5_interface.o
|
||||
output_interface.o: mpiio_interface.o
|
||||
output_interface.o: tally_header.o
|
||||
|
||||
mesh.o: constants.o
|
||||
mesh.o: global.o
|
||||
mesh.o: mesh_header.o
|
||||
mesh.o: particle_header.o
|
||||
mesh.o: search.o
|
||||
|
||||
endf.o: constants.o
|
||||
endf.o: string.o
|
||||
|
||||
initialize.o: ace.o
|
||||
initialize.o: bank_header.o
|
||||
initialize.o: constants.o
|
||||
initialize.o: dict_header.o
|
||||
initialize.o: energy_grid.o
|
||||
initialize.o: error.o
|
||||
initialize.o: geometry.o
|
||||
initialize.o: geometry_header.o
|
||||
initialize.o: global.o
|
||||
initialize.o: hdf5_interface.o
|
||||
initialize.o: hdf5_summary.o
|
||||
initialize.o: input_xml.o
|
||||
initialize.o: output.o
|
||||
initialize.o: output_interface.o
|
||||
initialize.o: random_lcg.o
|
||||
initialize.o: source.o
|
||||
initialize.o: state_point.o
|
||||
initialize.o: string.o
|
||||
initialize.o: tally_header.o
|
||||
initialize.o: tally_initialize.o
|
||||
|
||||
cross_section.o: ace_header.o
|
||||
cross_section.o: constants.o
|
||||
cross_section.o: error.o
|
||||
cross_section.o: fission.o
|
||||
cross_section.o: global.o
|
||||
cross_section.o: material_header.o
|
||||
cross_section.o: particle_header.o
|
||||
cross_section.o: random_lcg.o
|
||||
cross_section.o: search.o
|
||||
|
||||
state_point.o: constants.o
|
||||
state_point.o: error.o
|
||||
state_point.o: global.o
|
||||
state_point.o: output.o
|
||||
state_point.o: output_interface.o
|
||||
state_point.o: string.o
|
||||
state_point.o: tally_header.o
|
||||
|
||||
eigenvalue.o: cmfd_execute.o
|
||||
eigenvalue.o: constants.o
|
||||
eigenvalue.o: error.o
|
||||
eigenvalue.o: global.o
|
||||
eigenvalue.o: math.o
|
||||
eigenvalue.o: mesh.o
|
||||
eigenvalue.o: mesh_header.o
|
||||
eigenvalue.o: output.o
|
||||
eigenvalue.o: particle_header.o
|
||||
eigenvalue.o: random_lcg.o
|
||||
eigenvalue.o: search.o
|
||||
eigenvalue.o: source.o
|
||||
eigenvalue.o: state_point.o
|
||||
eigenvalue.o: string.o
|
||||
eigenvalue.o: tally.o
|
||||
eigenvalue.o: tracking.o
|
||||
|
||||
search.o: error.o
|
||||
search.o: global.o
|
||||
|
||||
tracking.o: cross_section.o
|
||||
tracking.o: error.o
|
||||
tracking.o: geometry.o
|
||||
tracking.o: geometry_header.o
|
||||
tracking.o: global.o
|
||||
tracking.o: output.o
|
||||
tracking.o: particle_header.o
|
||||
tracking.o: physics.o
|
||||
tracking.o: random_lcg.o
|
||||
tracking.o: string.o
|
||||
tracking.o: tally.o
|
||||
|
||||
ace.o: ace_header.o
|
||||
ace.o: constants.o
|
||||
ace.o: endf.o
|
||||
ace.o: error.o
|
||||
ace.o: fission.o
|
||||
ace.o: global.o
|
||||
ace.o: material_header.o
|
||||
ace.o: output.o
|
||||
ace.o: set_header.o
|
||||
ace.o: string.o
|
||||
|
||||
geometry.o: constants.o
|
||||
geometry.o: error.o
|
||||
geometry.o: geometry_header.o
|
||||
geometry.o: global.o
|
||||
geometry.o: output.o
|
||||
geometry.o: particle_header.o
|
||||
geometry.o: particle_restart_write.o
|
||||
geometry.o: string.o
|
||||
geometry.o: tally.o
|
||||
|
||||
plot_header.o: constants.o
|
||||
|
||||
cmfd_header.o: constants.o
|
||||
|
||||
tally_header.o: constants.o
|
||||
|
||||
hdf5_summary.o: ace_header.o
|
||||
hdf5_summary.o: constants.o
|
||||
hdf5_summary.o: endf.o
|
||||
hdf5_summary.o: geometry_header.o
|
||||
hdf5_summary.o: global.o
|
||||
hdf5_summary.o: hdf5_interface.o
|
||||
hdf5_summary.o: material_header.o
|
||||
hdf5_summary.o: mesh_header.o
|
||||
hdf5_summary.o: output.o
|
||||
hdf5_summary.o: output_interface.o
|
||||
hdf5_summary.o: string.o
|
||||
hdf5_summary.o: tally_header.o
|
||||
|
||||
error.o: global.o
|
||||
|
||||
output.o: ace_header.o
|
||||
output.o: constants.o
|
||||
output.o: endf.o
|
||||
|
|
@ -268,35 +371,8 @@ output.o: plot_header.o
|
|||
output.o: string.o
|
||||
output.o: tally_header.o
|
||||
|
||||
output_interface.o: constants.o
|
||||
output_interface.o: error.o
|
||||
output_interface.o: global.o
|
||||
output_interface.o: hdf5_interface.o
|
||||
output_interface.o: mpiio_interface.o
|
||||
output_interface.o: tally_header.o
|
||||
|
||||
particle_header.o: constants.o
|
||||
particle_header.o: geometry_header.o
|
||||
|
||||
particle_restart.o: bank_header.o
|
||||
particle_restart.o: constants.o
|
||||
particle_restart.o: geometry_header.o
|
||||
particle_restart.o: global.o
|
||||
particle_restart.o: hdf5_interface.o
|
||||
particle_restart.o: output.o
|
||||
particle_restart.o: particle_header.o
|
||||
particle_restart.o: random_lcg.o
|
||||
particle_restart.o: tracking.o
|
||||
|
||||
particle_restart_write.o: bank_header.o
|
||||
particle_restart_write.o: global.o
|
||||
particle_restart_write.o: hdf5_interface.o
|
||||
particle_restart_write.o: particle_header.o
|
||||
particle_restart_write.o: string.o
|
||||
|
||||
physics.o: ace_header.o
|
||||
physics.o: constants.o
|
||||
physics.o: cross_section.o
|
||||
physics.o: endf.o
|
||||
physics.o: error.o
|
||||
physics.o: fission.o
|
||||
|
|
@ -312,78 +388,3 @@ physics.o: random_lcg.o
|
|||
physics.o: search.o
|
||||
physics.o: string.o
|
||||
|
||||
plot.o: constants.o
|
||||
plot.o: error.o
|
||||
plot.o: geometry.o
|
||||
plot.o: geometry_header.o
|
||||
plot.o: global.o
|
||||
plot.o: output.o
|
||||
plot.o: particle_header.o
|
||||
plot.o: plot_header.o
|
||||
plot.o: ppmlib.o
|
||||
plot.o: string.o
|
||||
|
||||
plot_header.o: constants.o
|
||||
|
||||
random_lcg.o: global.o
|
||||
|
||||
search.o: error.o
|
||||
search.o: global.o
|
||||
|
||||
set_header.o: constants.o
|
||||
set_header.o: list_header.o
|
||||
|
||||
source.o: bank_header.o
|
||||
source.o: constants.o
|
||||
source.o: error.o
|
||||
source.o: geometry_header.o
|
||||
source.o: global.o
|
||||
source.o: math.o
|
||||
source.o: output.o
|
||||
source.o: particle_header.o
|
||||
source.o: random_lcg.o
|
||||
source.o: string.o
|
||||
|
||||
state_point.o: constants.o
|
||||
state_point.o: error.o
|
||||
state_point.o: global.o
|
||||
state_point.o: output.o
|
||||
state_point.o: output_interface.o
|
||||
state_point.o: string.o
|
||||
state_point.o: tally_header.o
|
||||
|
||||
string.o: constants.o
|
||||
string.o: error.o
|
||||
string.o: global.o
|
||||
|
||||
tally.o: ace_header.o
|
||||
tally.o: constants.o
|
||||
tally.o: error.o
|
||||
tally.o: global.o
|
||||
tally.o: math.o
|
||||
tally.o: mesh.o
|
||||
tally.o: mesh_header.o
|
||||
tally.o: output.o
|
||||
tally.o: particle_header.o
|
||||
tally.o: search.o
|
||||
tally.o: string.o
|
||||
tally.o: tally_header.o
|
||||
|
||||
tally_header.o: constants.o
|
||||
|
||||
tally_initialize.o: constants.o
|
||||
tally_initialize.o: global.o
|
||||
tally_initialize.o: tally_header.o
|
||||
|
||||
timer_header.o: constants.o
|
||||
|
||||
tracking.o: cross_section.o
|
||||
tracking.o: error.o
|
||||
tracking.o: geometry.o
|
||||
tracking.o: geometry_header.o
|
||||
tracking.o: global.o
|
||||
tracking.o: output.o
|
||||
tracking.o: particle_header.o
|
||||
tracking.o: physics.o
|
||||
tracking.o: string.o
|
||||
tracking.o: tally.o
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -14,6 +14,10 @@ module hdf5_summary
|
|||
use string, only: to_str
|
||||
use tally_header, only: TallyObject
|
||||
|
||||
implicit none
|
||||
|
||||
type(BinaryOutput) :: su
|
||||
|
||||
contains
|
||||
|
||||
!===============================================================================
|
||||
|
|
@ -25,7 +29,7 @@ contains
|
|||
character(MAX_FILE_LEN) :: filename = "summary.h5"
|
||||
|
||||
! Create a new file using default properties.
|
||||
call file_create(filename, "serial")
|
||||
call su % file_create(filename)
|
||||
|
||||
! Write header information
|
||||
call hdf5_write_header()
|
||||
|
|
@ -34,24 +38,24 @@ contains
|
|||
if (run_mode == MODE_EIGENVALUE) then
|
||||
|
||||
! Write number of particles
|
||||
call write_data(n_particles, "n_particles")
|
||||
call su % write_data(n_particles, "n_particles")
|
||||
|
||||
! Use H5LT interface to write n_batches, n_inactive, and n_active
|
||||
call write_data(n_batches, "n_batches")
|
||||
call write_data(n_inactive, "n_inactive")
|
||||
call write_data(n_active, "n_active")
|
||||
call write_data(gen_per_batch, "gen_per_batch")
|
||||
call su % write_data(n_batches, "n_batches")
|
||||
call su % write_data(n_inactive, "n_inactive")
|
||||
call su % write_data(n_active, "n_active")
|
||||
call su % write_data(gen_per_batch, "gen_per_batch")
|
||||
|
||||
! Add description of each variable
|
||||
call write_attribute_string("n_particles", &
|
||||
call su % write_attribute_string("n_particles", &
|
||||
"description", "Number of particles per generation")
|
||||
call write_attribute_string("n_batches", &
|
||||
call su % write_attribute_string("n_batches", &
|
||||
"description", "Total number of batches")
|
||||
call write_attribute_string("n_inactive", &
|
||||
call su % write_attribute_string("n_inactive", &
|
||||
"description", "Number of inactive batches")
|
||||
call write_attribute_string("n_active", &
|
||||
call su % write_attribute_string("n_active", &
|
||||
"description", "Number of active batches")
|
||||
call write_attribute_string("gen_per_batch", &
|
||||
call su % write_attribute_string("gen_per_batch", &
|
||||
"description", "Number of generations per batch")
|
||||
end if
|
||||
|
||||
|
|
@ -63,7 +67,7 @@ contains
|
|||
end if
|
||||
|
||||
! Terminate access to the file.
|
||||
call file_close("serial")
|
||||
call su % file_close()
|
||||
|
||||
end subroutine hdf5_write_summary
|
||||
|
||||
|
|
@ -74,16 +78,16 @@ contains
|
|||
subroutine hdf5_write_header()
|
||||
|
||||
! Write version information
|
||||
call write_data(VERSION_MAJOR, "version_major")
|
||||
call write_data(VERSION_MINOR, "version_minor")
|
||||
call write_data(VERSION_RELEASE, "version_release")
|
||||
call su % write_data(VERSION_MAJOR, "version_major")
|
||||
call su % write_data(VERSION_MINOR, "version_minor")
|
||||
call su % write_data(VERSION_RELEASE, "version_release")
|
||||
|
||||
! Write current date and time
|
||||
call write_data(time_stamp(), "date_and_time")
|
||||
call su % write_data(time_stamp(), "date_and_time")
|
||||
|
||||
! Write MPI information
|
||||
call write_data(n_procs, "n_procs")
|
||||
call write_attribute_string("n_procs", "description", &
|
||||
call su % write_data(n_procs, "n_procs")
|
||||
call su % write_attribute_string("n_procs", "description", &
|
||||
"Number of MPI processes")
|
||||
|
||||
end subroutine hdf5_write_header
|
||||
|
|
@ -103,53 +107,53 @@ contains
|
|||
type(Lattice), pointer :: lat => null()
|
||||
|
||||
! Use H5LT interface to write number of geometry objects
|
||||
call write_data(n_cells, "n_cells", group="geometry")
|
||||
call write_data(n_surfaces, "n_surfaces", group="geometry")
|
||||
call write_data(n_universes, "n_universes", group="geometry")
|
||||
call write_data(n_lattices, "n_lattices", group="geometry")
|
||||
call su % write_data(n_cells, "n_cells", group="geometry")
|
||||
call su % write_data(n_surfaces, "n_surfaces", group="geometry")
|
||||
call su % write_data(n_universes, "n_universes", group="geometry")
|
||||
call su % write_data(n_lattices, "n_lattices", group="geometry")
|
||||
|
||||
! ==========================================================================
|
||||
! WRITE INFORMATION ON CELLS
|
||||
|
||||
! Create a cell group (nothing directly written in this group) then close
|
||||
call hdf5_open_group("geometry/cells")
|
||||
call hdf5_close_group()
|
||||
call su % open_group("geometry/cells")
|
||||
call su % close_group()
|
||||
|
||||
! Write information on each cell
|
||||
CELL_LOOP: do i = 1, n_cells
|
||||
c => cells(i)
|
||||
|
||||
! Write universe for this cell
|
||||
call write_data(universes(c % universe) % id, "universe", &
|
||||
call su % write_data(universes(c % universe) % id, "universe", &
|
||||
group="geometry/cells/cell " // trim(to_str(c % id)))
|
||||
|
||||
! Write information on what fills this cell
|
||||
select case (c % type)
|
||||
case (CELL_NORMAL)
|
||||
call write_data("normal", "fill_type", &
|
||||
call su % write_data("normal", "fill_type", &
|
||||
group="geometry/cells/cell " // trim(to_str(c % id)))
|
||||
if (c % material == MATERIAL_VOID) then
|
||||
call write_data(-1, "material", &
|
||||
call su % write_data(-1, "material", &
|
||||
group="geometry/cells/cell " // trim(to_str(c % id)))
|
||||
else
|
||||
call write_data(materials(c % material) % id, "material", &
|
||||
call su % write_data(materials(c % material) % id, "material", &
|
||||
group="geometry/cells/cell " // trim(to_str(c % id)))
|
||||
end if
|
||||
case (CELL_FILL)
|
||||
call write_data("universe", "fill_type", &
|
||||
call su % write_data("universe", "fill_type", &
|
||||
group="geometry/cells/cell " // trim(to_str(c % id)))
|
||||
call write_data(universes(c % fill) % id, "material", &
|
||||
call su % write_data(universes(c % fill) % id, "material", &
|
||||
group="geometry/cells/cell " // trim(to_str(c % id)))
|
||||
case (CELL_LATTICE)
|
||||
call write_data("lattice", "fill_type", &
|
||||
call su % write_data("lattice", "fill_type", &
|
||||
group="geometry/cells/cell " // trim(to_str(c % id)))
|
||||
call write_data(lattices(c % fill) % id, "lattice", &
|
||||
call su % write_data(lattices(c % fill) % id, "lattice", &
|
||||
group="geometry/cells/cell " // trim(to_str(c % id)))
|
||||
end select
|
||||
|
||||
! Write list of bounding surfaces
|
||||
if (c % n_surfaces > 0) then
|
||||
call write_data(c % surfaces, "surfaces", length= c % n_surfaces, &
|
||||
call su % write_data(c % surfaces, "surfaces", length= c % n_surfaces, &
|
||||
group="geometry/cells/cell " // trim(to_str(c % id)))
|
||||
end if
|
||||
|
||||
|
|
@ -159,8 +163,8 @@ contains
|
|||
! WRITE INFORMATION ON SURFACES
|
||||
|
||||
! Create surfaces group (nothing directly written here) then close
|
||||
call hdf5_open_group("geometry/surfaces")
|
||||
call hdf5_close_group()
|
||||
call su % open_group("geometry/surfaces")
|
||||
call su % close_group()
|
||||
|
||||
! Write information on each surface
|
||||
SURFACE_LOOP: do i = 1, n_surfaces
|
||||
|
|
@ -169,54 +173,54 @@ contains
|
|||
! Write surface type
|
||||
select case (s % type)
|
||||
case (SURF_PX)
|
||||
call write_data("X Plane", "type", &
|
||||
call su % write_data("X Plane", "type", &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
case (SURF_PY)
|
||||
call write_data("Y Plane", "type", &
|
||||
call su % write_data("Y Plane", "type", &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
case (SURF_PZ)
|
||||
call write_data("Z Plane", "type", &
|
||||
call su % write_data("Z Plane", "type", &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
case (SURF_PLANE)
|
||||
call write_data("Plane", "type", &
|
||||
call su % write_data("Plane", "type", &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
case (SURF_CYL_X)
|
||||
call write_data("X Cylinder", "type", &
|
||||
call su % write_data("X Cylinder", "type", &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
case (SURF_CYL_Y)
|
||||
call write_data("Y Cylinder", "type", &
|
||||
call su % write_data("Y Cylinder", "type", &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
case (SURF_CYL_Z)
|
||||
call write_data("Z Cylinder", "type", &
|
||||
call su % write_data("Z Cylinder", "type", &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
case (SURF_SPHERE)
|
||||
call write_data("Sphere", "type", &
|
||||
call su % write_data("Sphere", "type", &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
case (SURF_CONE_X)
|
||||
call write_data("X Cone", "type", &
|
||||
call su % write_data("X Cone", "type", &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
case (SURF_CONE_Y)
|
||||
call write_data("Y Cone", "type", &
|
||||
call su % write_data("Y Cone", "type", &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
case (SURF_CONE_Z)
|
||||
call write_data("Z Cone", "type", &
|
||||
call su % write_data("Z Cone", "type", &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
end select
|
||||
|
||||
! Write coefficients for surface
|
||||
call write_data(s % coeffs, "coefficients", length=size(s % coeffs), &
|
||||
call su % write_data(s % coeffs, "coefficients", length=size(s % coeffs), &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
|
||||
! Write positive neighbors
|
||||
if (allocated(s % neighbor_pos)) then
|
||||
call write_data(s % neighbor_pos, "neighbors_positive", &
|
||||
call su % write_data(s % neighbor_pos, "neighbors_positive", &
|
||||
length=size(s % neighbor_pos), &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
end if
|
||||
|
||||
! Write negative neighbors
|
||||
if (allocated(s % neighbor_neg)) then
|
||||
call write_data(s % neighbor_neg, "neighbors_negative", &
|
||||
call su % write_data(s % neighbor_neg, "neighbors_negative", &
|
||||
length=size(s % neighbor_neg), &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
end if
|
||||
|
|
@ -224,16 +228,16 @@ contains
|
|||
! Write boundary condition
|
||||
select case (s % bc)
|
||||
case (BC_TRANSMIT)
|
||||
call write_data("transmission", "boundary_condition", &
|
||||
call su % write_data("transmission", "boundary_condition", &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
case (BC_VACUUM)
|
||||
call write_data("vacuum", "boundary_condition", &
|
||||
call su % write_data("vacuum", "boundary_condition", &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
case (BC_REFLECT)
|
||||
call write_data("reflective", "boundary_condition", &
|
||||
call su % write_data("reflective", "boundary_condition", &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
case (BC_PERIODIC)
|
||||
call write_data("periodic", "boundary_condition", &
|
||||
call su % write_data("periodic", "boundary_condition", &
|
||||
group="geometry/surfaces/surface " // trim(to_str(s % id)))
|
||||
end select
|
||||
|
||||
|
|
@ -243,8 +247,8 @@ contains
|
|||
! WRITE INFORMATION ON UNIVERSES
|
||||
|
||||
! Create universes group (nothing directly written here) then close
|
||||
call hdf5_open_group("geometry/universes")
|
||||
call hdf5_close_group()
|
||||
call su % open_group("geometry/universes")
|
||||
call su % close_group()
|
||||
|
||||
! Write information on each universe
|
||||
UNIVERSE_LOOP: do i = 1, n_universes
|
||||
|
|
@ -252,7 +256,7 @@ contains
|
|||
|
||||
! Write list of cells in this universe
|
||||
if (u % n_cells > 0) then
|
||||
call write_data(u % cells, "cells", length=u % n_cells, &
|
||||
call su % write_data(u % cells, "cells", length=u % n_cells, &
|
||||
group="geometry/universes/universe " // trim(to_str(u % id)))
|
||||
end if
|
||||
|
||||
|
|
@ -262,8 +266,8 @@ contains
|
|||
! WRITE INFORMATION ON LATTICES
|
||||
|
||||
! Create lattices group (nothing directly written here) then close
|
||||
call hdf5_open_group("geometry/lattices")
|
||||
call hdf5_close_group()
|
||||
call su % open_group("geometry/lattices")
|
||||
call su % close_group()
|
||||
|
||||
! Write information on each lattice
|
||||
LATTICE_LOOP: do i = 1, n_lattices
|
||||
|
|
@ -272,21 +276,21 @@ contains
|
|||
! Write lattice type
|
||||
select case(lat % type)
|
||||
case (LATTICE_RECT)
|
||||
call write_data("rectangular", "type", &
|
||||
call su % write_data("rectangular", "type", &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
case (LATTICE_HEX)
|
||||
call write_data("hexagonal", "type", &
|
||||
call su % write_data("hexagonal", "type", &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
end select
|
||||
|
||||
! Write lattice dimensions, lower left corner, and width of element
|
||||
call write_data(lat % dimension, "dimension", &
|
||||
call su % write_data(lat % dimension, "dimension", &
|
||||
length=lat % n_dimension, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
call write_data(lat % lower_left, "lower_left", &
|
||||
call su % write_data(lat % lower_left, "lower_left", &
|
||||
length=lat % n_dimension, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
call write_data(lat % width, "width", &
|
||||
call su % write_data(lat % width, "width", &
|
||||
length=lat % n_dimension, &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
|
||||
|
|
@ -308,7 +312,7 @@ contains
|
|||
end do
|
||||
end do
|
||||
end do
|
||||
call write_data(lattice_universes, "universes", &
|
||||
call su % write_data(lattice_universes, "universes", &
|
||||
length=(/n_x, n_y, n_z/), &
|
||||
group="geometry/lattices/lattice " // trim(to_str(lat % id)))
|
||||
deallocate(lattice_universes)
|
||||
|
|
@ -329,16 +333,16 @@ contains
|
|||
type(Material), pointer :: m => null()
|
||||
|
||||
! Use H5LT interface to write number of materials
|
||||
call write_data(n_materials, "n_materials", group="materials")
|
||||
call su % write_data(n_materials, "n_materials", group="materials")
|
||||
|
||||
! Write information on each material
|
||||
do i = 1, n_materials
|
||||
m => materials(i)
|
||||
|
||||
! Write atom density with units
|
||||
call write_data(m % density, "atom_density", &
|
||||
call su % write_data(m % density, "atom_density", &
|
||||
group="materials/material " // trim(to_str(m % id)))
|
||||
call write_attribute_string("atom_density", "units", "atom/b-cm", &
|
||||
call su % write_attribute_string("atom_density", "units", "atom/b-cm", &
|
||||
group="materials/material " // trim(to_str(m % id)))
|
||||
|
||||
! Copy ZAID for each nuclide to temporary array
|
||||
|
|
@ -348,23 +352,23 @@ contains
|
|||
end do
|
||||
|
||||
! Write temporary array to 'nuclides'
|
||||
call write_data(zaids, "nuclides", length=m % n_nuclides, &
|
||||
call su % write_data(zaids, "nuclides", length=m % n_nuclides, &
|
||||
group="materials/material " // trim(to_str(m % id)))
|
||||
|
||||
! Deallocate temporary array
|
||||
deallocate(zaids)
|
||||
|
||||
! Write atom densities
|
||||
call write_data(m % atom_density, "nuclide_densities", &
|
||||
call su % write_data(m % atom_density, "nuclide_densities", &
|
||||
length=m % n_nuclides, &
|
||||
group="materials/material " // trim(to_str(m % id)))
|
||||
|
||||
! Write S(a,b) information if present
|
||||
if (m % n_sab > 0) then
|
||||
call write_data(m % i_sab_nuclides, "i_sab_nuclides", &
|
||||
call su % write_data(m % i_sab_nuclides, "i_sab_nuclides", &
|
||||
length=m % n_sab, &
|
||||
group="materials/material " // trim(to_str(m % id)))
|
||||
call write_data(m % i_sab_tables, "i_sab_tables", &
|
||||
call su % write_data(m % i_sab_tables, "i_sab_tables", &
|
||||
length=m % n_sab, &
|
||||
group="materials/material " // trim(to_str(m % id)))
|
||||
end if
|
||||
|
|
@ -385,72 +389,72 @@ contains
|
|||
type(TallyObject), pointer :: t => null()
|
||||
|
||||
! Write total number of meshes
|
||||
call write_data(n_meshes, "n_meshes", group="tallies")
|
||||
call su % write_data(n_meshes, "n_meshes", group="tallies")
|
||||
|
||||
! Write information for meshes
|
||||
MESH_LOOP: do i = 1, n_meshes
|
||||
m => meshes(i)
|
||||
|
||||
! Write type and number of dimensions
|
||||
call write_data(m % type, "type", &
|
||||
call su % write_data(m % type, "type", &
|
||||
group="tallies/mesh " // trim(to_str(m % id)))
|
||||
|
||||
call write_data(m % n_dimension, "n_dimension", &
|
||||
call su % write_data(m % n_dimension, "n_dimension", &
|
||||
group="tallies/mesh " // trim(to_str(m % id)))
|
||||
|
||||
! Write mesh information
|
||||
call write_data(m % dimension, "dimension", &
|
||||
call su % write_data(m % dimension, "dimension", &
|
||||
length=m % n_dimension, &
|
||||
group="tallies/mesh " // trim(to_str(m % id)))
|
||||
call write_data(m % lower_left, "lower_left", &
|
||||
call su % write_data(m % lower_left, "lower_left", &
|
||||
length=m % n_dimension, &
|
||||
group="tallies/mesh " // trim(to_str(m % id)))
|
||||
call write_data(m % upper_right, "upper_right", &
|
||||
call su % write_data(m % upper_right, "upper_right", &
|
||||
length=m % n_dimension, &
|
||||
group="tallies/mesh " // trim(to_str(m % id)))
|
||||
call write_data(m % width, "width", &
|
||||
call su % write_data(m % width, "width", &
|
||||
length=m % n_dimension, &
|
||||
group="tallies/mesh " // trim(to_str(m % id)))
|
||||
|
||||
end do MESH_LOOP
|
||||
|
||||
! Write number of tallies
|
||||
call write_data(n_tallies, "n_tallies", group="tallies")
|
||||
call su % write_data(n_tallies, "n_tallies", group="tallies")
|
||||
|
||||
TALLY_METADATA: do i = 1, n_tallies
|
||||
! Get pointer to tally
|
||||
t => tallies(i)
|
||||
|
||||
! Write size of each tally
|
||||
call write_data(t % total_score_bins, "total_score_bins", &
|
||||
call su % write_data(t % total_score_bins, "total_score_bins", &
|
||||
group="tallies/tally " // trim(to_str(t % id)))
|
||||
call write_data(t % total_filter_bins, "total_filter_bins", &
|
||||
call su % write_data(t % total_filter_bins, "total_filter_bins", &
|
||||
group="tallies/tally " // trim(to_str(t % id)))
|
||||
|
||||
! Write number of filters
|
||||
call write_data(t % n_filters, "n_filters", &
|
||||
call su % write_data(t % n_filters, "n_filters", &
|
||||
group="tallies/tally " // trim(to_str(t % id)))
|
||||
|
||||
FILTER_LOOP: do j = 1, t % n_filters
|
||||
! Write type of filter
|
||||
call write_data(t % filters(j) % type, "type", &
|
||||
call su % write_data(t % filters(j) % type, "type", &
|
||||
group="tallies/tally " // trim(to_str(t % id)) &
|
||||
// "/filter " // trim(to_str(j)))
|
||||
|
||||
! Write number of bins for this filter
|
||||
call write_data(t % filters(j) % n_bins, "n_bins", &
|
||||
call su % write_data(t % filters(j) % n_bins, "n_bins", &
|
||||
group="tallies/tally " // trim(to_str(t % id)) &
|
||||
// "/filter " // trim(to_str(j)))
|
||||
|
||||
! Write filter bins
|
||||
if (t % filters(j) % type == FILTER_ENERGYIN .or. &
|
||||
t % filters(j) % type == FILTER_ENERGYOUT) then
|
||||
call write_data(t % filters(j) % real_bins, "bins", &
|
||||
call su % write_data(t % filters(j) % real_bins, "bins", &
|
||||
length=size(t % filters(j) % real_bins), &
|
||||
group="tallies/tally " // trim(to_str(t % id)) &
|
||||
// "/filter " // trim(to_str(j)))
|
||||
else
|
||||
call write_data(t % filters(j) % int_bins, "bins", &
|
||||
call su % write_data(t % filters(j) % int_bins, "bins", &
|
||||
length=size(t % filters(j) % int_bins), &
|
||||
group="tallies/tally " // trim(to_str(t % id)) &
|
||||
// "/filter " // trim(to_str(j)))
|
||||
|
|
@ -459,35 +463,35 @@ contains
|
|||
! Write name of type
|
||||
select case (t % filters(j) % type)
|
||||
case(FILTER_UNIVERSE)
|
||||
call write_data("universe", "type_name", &
|
||||
call su % write_data("universe", "type_name", &
|
||||
group="tallies/tally " // trim(to_str(t % id)) &
|
||||
// "/filter " // trim(to_str(j)))
|
||||
case(FILTER_MATERIAL)
|
||||
call write_data("material", "type_name", &
|
||||
call su % write_data("material", "type_name", &
|
||||
group="tallies/tally " // trim(to_str(t % id)) &
|
||||
// "/filter " // trim(to_str(j)))
|
||||
case(FILTER_CELL)
|
||||
call write_data("cell", "type_name", &
|
||||
call su % write_data("cell", "type_name", &
|
||||
group="tallies/tally " // trim(to_str(t % id)) &
|
||||
// "/filter " // trim(to_str(j)))
|
||||
case(FILTER_CELLBORN)
|
||||
call write_data("cellborn", "type_name", &
|
||||
call su % write_data("cellborn", "type_name", &
|
||||
group="tallies/tally " // trim(to_str(t % id)) &
|
||||
// "/filter " // trim(to_str(j)))
|
||||
case(FILTER_SURFACE)
|
||||
call write_data("surface", "type_name", &
|
||||
call su % write_data("surface", "type_name", &
|
||||
group="tallies/tally " // trim(to_str(t % id)) &
|
||||
// "/filter " // trim(to_str(j)))
|
||||
case(FILTER_MESH)
|
||||
call write_data("mesh", "type_name", &
|
||||
call su % write_data("mesh", "type_name", &
|
||||
group="tallies/tally " // trim(to_str(t % id)) &
|
||||
// "/filter " // trim(to_str(j)))
|
||||
case(FILTER_ENERGYIN)
|
||||
call write_data("energy", "type_name", &
|
||||
call su % write_data("energy", "type_name", &
|
||||
group="tallies/tally " // trim(to_str(t % id)) &
|
||||
// "/filter " // trim(to_str(j)))
|
||||
case(FILTER_ENERGYOUT)
|
||||
call write_data("energyout", "type_name", &
|
||||
call su % write_data("energyout", "type_name", &
|
||||
group="tallies/tally " // trim(to_str(t % id)) &
|
||||
// "/filter " // trim(to_str(j)))
|
||||
end select
|
||||
|
|
@ -495,7 +499,7 @@ contains
|
|||
end do FILTER_LOOP
|
||||
|
||||
! Write number of nuclide bins
|
||||
call write_data(t % n_nuclide_bins, "n_nuclide_bins", &
|
||||
call su % write_data(t % n_nuclide_bins, "n_nuclide_bins", &
|
||||
group="tallies/tally " // trim(to_str(t % id)))
|
||||
|
||||
! Create temporary array for nuclide bins
|
||||
|
|
@ -509,14 +513,14 @@ contains
|
|||
end do NUCLIDE_LOOP
|
||||
|
||||
! Write and deallocate nuclide bins
|
||||
call write_data(temp_array, "nuclide_bins", length=t % n_nuclide_bins, &
|
||||
call su % write_data(temp_array, "nuclide_bins", length=t % n_nuclide_bins, &
|
||||
group="tallies/tally " // trim(to_str(t % id)))
|
||||
deallocate(temp_array)
|
||||
|
||||
! Write number of score bins
|
||||
call write_data(t % n_score_bins, "n_score_bins", &
|
||||
call su % write_data(t % n_score_bins, "n_score_bins", &
|
||||
group="tallies/tally " // trim(to_str(t % id)))
|
||||
call write_data(t % score_bins, "score_bins", length=t % n_score_bins, &
|
||||
call su % write_data(t % score_bins, "score_bins", length=t % n_score_bins, &
|
||||
group="tallies/tally " // trim(to_str(t % id)))
|
||||
|
||||
end do TALLY_METADATA
|
||||
|
|
@ -539,7 +543,7 @@ contains
|
|||
type(UrrData), pointer :: urr => null()
|
||||
|
||||
! Use H5LT interface to write number of nuclides
|
||||
call write_data(n_nuclides_total, "n_nuclides", group="nuclides")
|
||||
call su % write_data(n_nuclides_total, "n_nuclides", group="nuclides")
|
||||
|
||||
! Write information on each nuclide
|
||||
NUCLIDE_LOOP: do i = 1, n_nuclides_total
|
||||
|
|
@ -550,27 +554,27 @@ contains
|
|||
size_total = size_xs
|
||||
|
||||
! Write some basic attributes
|
||||
call write_data(nuc % zaid, "zaid", &
|
||||
call su % write_data(nuc % zaid, "zaid", &
|
||||
group="nuclides/" // trim(nuc % name))
|
||||
call write_data(nuc % awr, "awr", &
|
||||
call su % write_data(nuc % awr, "awr", &
|
||||
group="nuclides/" // trim(nuc % name))
|
||||
call write_data(nuc % kT, "kT", &
|
||||
call su % write_data(nuc % kT, "kT", &
|
||||
group="nuclides/" // trim(nuc % name))
|
||||
call write_data(nuc % n_grid, "n_grid", &
|
||||
call su % write_data(nuc % n_grid, "n_grid", &
|
||||
group="nuclides/" // trim(nuc % name))
|
||||
call write_data(nuc % n_reaction, "n_reactions", &
|
||||
call su % write_data(nuc % n_reaction, "n_reactions", &
|
||||
group="nuclides/" // trim(nuc % name))
|
||||
call write_data(nuc % n_fission, "n_fission", &
|
||||
call su % write_data(nuc % n_fission, "n_fission", &
|
||||
group="nuclides/" // trim(nuc % name))
|
||||
call write_data(size_xs, "size_xs", &
|
||||
call su % write_data(size_xs, "size_xs", &
|
||||
group="nuclides/" // trim(nuc % name))
|
||||
|
||||
! =======================================================================
|
||||
! WRITE INFORMATION ON EACH REACTION
|
||||
|
||||
! Create overall group for reactions and close it
|
||||
call hdf5_open_group("nuclides/" // trim(nuc % name) // "/reactions")
|
||||
call hdf5_close_group()
|
||||
call su % open_group("nuclides/" // trim(nuc % name) // "/reactions")
|
||||
call su % close_group()
|
||||
|
||||
RXN_LOOP: do j = 1, nuc % n_reaction
|
||||
! Information on each reaction
|
||||
|
|
@ -591,19 +595,19 @@ contains
|
|||
end if
|
||||
|
||||
! Write information on reaction
|
||||
call write_data(rxn % Q_value, "Q_value", &
|
||||
call su % write_data(rxn % Q_value, "Q_value", &
|
||||
group="nuclides/" // trim(nuc % name) // "/reactions/" // &
|
||||
trim(reaction_name(rxn % MT)))
|
||||
call write_data(rxn % multiplicity, "multiplicity", &
|
||||
call su % write_data(rxn % multiplicity, "multiplicity", &
|
||||
group="nuclides/" // trim(nuc % name) // "/reactions/" // &
|
||||
trim(reaction_name(rxn % MT)))
|
||||
call write_data(rxn % threshold, "threshold", &
|
||||
call su % write_data(rxn % threshold, "threshold", &
|
||||
group="nuclides/" // trim(nuc % name) // "/reactions/" // &
|
||||
trim(reaction_name(rxn % MT)))
|
||||
call write_data(size_angle, "size_angle", &
|
||||
call su % write_data(size_angle, "size_angle", &
|
||||
group="nuclides/" // trim(nuc % name) // "/reactions/" // &
|
||||
trim(reaction_name(rxn % MT)))
|
||||
call write_data(size_energy, "size_energy", &
|
||||
call su % write_data(size_energy, "size_energy", &
|
||||
group="nuclides/" // trim(nuc % name) // "/reactions/" // &
|
||||
trim(reaction_name(rxn % MT)))
|
||||
|
||||
|
|
@ -616,24 +620,24 @@ contains
|
|||
|
||||
if (nuc % urr_present) then
|
||||
urr => nuc % urr_data
|
||||
call write_data(urr % n_energy, "urr_n_energy", &
|
||||
call su % write_data(urr % n_energy, "urr_n_energy", &
|
||||
group="nuclides/" // trim(nuc % name))
|
||||
call write_data(urr % n_prob, "urr_n_prob", &
|
||||
call su % write_data(urr % n_prob, "urr_n_prob", &
|
||||
group="nuclides/" // trim(nuc % name))
|
||||
call write_data(urr % interp, "urr_interp", &
|
||||
call su % write_data(urr % interp, "urr_interp", &
|
||||
group="nuclides/" // trim(nuc % name))
|
||||
call write_data(urr % inelastic_flag, "urr_inelastic", &
|
||||
call su % write_data(urr % inelastic_flag, "urr_inelastic", &
|
||||
group="nuclides/" // trim(nuc % name))
|
||||
call write_data(urr % absorption_flag, "urr_absorption", &
|
||||
call su % write_data(urr % absorption_flag, "urr_absorption", &
|
||||
group="nuclides/" // trim(nuc % name))
|
||||
call write_data(urr % energy(1), "urr_min_E", &
|
||||
call su % write_data(urr % energy(1), "urr_min_E", &
|
||||
group="nuclides/" // trim(nuc % name))
|
||||
call write_data(urr % energy(urr % n_energy), "urr_max_E", &
|
||||
call su % write_data(urr % energy(urr % n_energy), "urr_max_E", &
|
||||
group="nuclides/" // trim(nuc % name))
|
||||
end if
|
||||
|
||||
! Write total memory used
|
||||
call write_data(size_total, "size_total", &
|
||||
call su % write_data(size_total, "size_total", &
|
||||
group="nuclides/" // trim(nuc % name))
|
||||
|
||||
end do NUCLIDE_LOOP
|
||||
|
|
@ -650,63 +654,63 @@ contains
|
|||
real(8) :: speed
|
||||
|
||||
! Write timing data
|
||||
call write_data(time_initialize % elapsed, "time_initialize", &
|
||||
call su % write_data(time_initialize % elapsed, "time_initialize", &
|
||||
group="timing")
|
||||
call write_data(time_read_xs % elapsed, "time_read_xs", &
|
||||
call su % write_data(time_read_xs % elapsed, "time_read_xs", &
|
||||
group="timing")
|
||||
call write_data(time_unionize % elapsed, "time_unionize", &
|
||||
call su % write_data(time_unionize % elapsed, "time_unionize", &
|
||||
group="timing")
|
||||
call write_data(time_transport % elapsed, "time_transport", &
|
||||
call su % write_data(time_transport % elapsed, "time_transport", &
|
||||
group="timing")
|
||||
call write_data(time_bank % elapsed, "time_bank", &
|
||||
call su % write_data(time_bank % elapsed, "time_bank", &
|
||||
group="timing")
|
||||
call write_data(time_bank_sample % elapsed, "time_bank_sample", &
|
||||
call su % write_data(time_bank_sample % elapsed, "time_bank_sample", &
|
||||
group="timing")
|
||||
call write_data(time_bank_sendrecv % elapsed, "time_bank_sendrecv", &
|
||||
call su % write_data(time_bank_sendrecv % elapsed, "time_bank_sendrecv", &
|
||||
group="timing")
|
||||
call write_data(time_tallies % elapsed, "time_tallies", &
|
||||
call su % write_data(time_tallies % elapsed, "time_tallies", &
|
||||
group="timing")
|
||||
call write_data(time_inactive % elapsed, "time_inactive", &
|
||||
call su % write_data(time_inactive % elapsed, "time_inactive", &
|
||||
group="timing")
|
||||
call write_data(time_active % elapsed, "time_active", &
|
||||
call su % write_data(time_active % elapsed, "time_active", &
|
||||
group="timing")
|
||||
call write_data(time_finalize % elapsed, "time_finalize", &
|
||||
call su % write_data(time_finalize % elapsed, "time_finalize", &
|
||||
group="timing")
|
||||
call write_data(time_total % elapsed, "time_total", &
|
||||
call su % write_data(time_total % elapsed, "time_total", &
|
||||
group="timing")
|
||||
|
||||
! Add descriptions to timing data
|
||||
call write_attribute_string("time_initialize", "description", &
|
||||
call su % write_attribute_string("time_initialize", "description", &
|
||||
"Total time elapsed for initialization (s)", group="timing")
|
||||
call write_attribute_string("time_read_xs", "description", &
|
||||
call su % write_attribute_string("time_read_xs", "description", &
|
||||
"Time reading cross-section libraries (s)", group="timing")
|
||||
call write_attribute_string("time_unionize", "description", &
|
||||
call su % write_attribute_string("time_unionize", "description", &
|
||||
"Time unionizing energy grid (s)", group="timing")
|
||||
call write_attribute_string("time_transport", "description", &
|
||||
call su % write_attribute_string("time_transport", "description", &
|
||||
"Time in transport only (s)", group="timing")
|
||||
call write_attribute_string("time_bank", "description", &
|
||||
call su % write_attribute_string("time_bank", "description", &
|
||||
"Total time synchronizing fission bank (s)", group="timing")
|
||||
call write_attribute_string("time_bank_sample", "description", &
|
||||
call su % write_attribute_string("time_bank_sample", "description", &
|
||||
"Time between generations sampling source sites (s)", group="timing")
|
||||
call write_attribute_string("time_bank_sendrecv", "description", &
|
||||
call su % write_attribute_string("time_bank_sendrecv", "description", &
|
||||
"Time between generations SEND/RECVing source sites (s)", &
|
||||
group="timing")
|
||||
call write_attribute_string("time_tallies", "description", &
|
||||
call su % write_attribute_string("time_tallies", "description", &
|
||||
"Time between batches accumulating tallies (s)", group="timing")
|
||||
call write_attribute_string("time_inactive", "description", &
|
||||
call su % write_attribute_string("time_inactive", "description", &
|
||||
"Total time in inactive batches (s)", group="timing")
|
||||
call write_attribute_string("time_active", "description", &
|
||||
call su % write_attribute_string("time_active", "description", &
|
||||
"Total time in active batches (s)", group="timing")
|
||||
call write_attribute_string("time_finalize", "description", &
|
||||
call su % write_attribute_string("time_finalize", "description", &
|
||||
"Total time for finalization (s)", group="timing")
|
||||
call write_attribute_string("time_total", "description", &
|
||||
call su % write_attribute_string("time_total", "description", &
|
||||
"Total time elapsed (s)", group="timing")
|
||||
|
||||
! Write calculation rate
|
||||
total_particles = n_particles * n_batches * gen_per_batch
|
||||
speed = real(total_particles) / (time_inactive % elapsed + &
|
||||
time_active % elapsed)
|
||||
call write_data(speed, "neutrons_per_second", group="timing")
|
||||
call su % write_data(speed, "neutrons_per_second", group="timing")
|
||||
|
||||
end subroutine hdf5_write_timing
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ module initialize
|
|||
use output, only: title, header, write_summary, print_version, &
|
||||
print_usage, write_xs_summary, print_plot, &
|
||||
write_message
|
||||
use output_interface, only: file_open, file_close, read_data
|
||||
use output_interface
|
||||
use random_lcg, only: initialize_prng
|
||||
use source, only: initialize_source
|
||||
use state_point, only: load_state_point
|
||||
|
|
@ -306,6 +306,7 @@ contains
|
|||
integer :: filetype
|
||||
character(MAX_FILE_LEN) :: pwd ! present working directory
|
||||
character(MAX_WORD_LEN), allocatable :: argv(:) ! command line arguments
|
||||
type(BinaryOutput) :: sp
|
||||
|
||||
! Get working directory
|
||||
call GET_ENVIRONMENT_VARIABLE("PWD", pwd)
|
||||
|
|
@ -346,9 +347,9 @@ contains
|
|||
i = i + 1
|
||||
|
||||
! Check what type of file this is
|
||||
call file_open(argv(i), 'parallel', 'r')
|
||||
call read_data(filetype, 'filetype')
|
||||
call file_close('parallel')
|
||||
call sp % file_open(argv(i), 'r', serial = .false.)
|
||||
call sp % read_data(filetype, 'filetype')
|
||||
call sp % file_close()
|
||||
|
||||
! Set path and flag for type of run
|
||||
select case (filetype)
|
||||
|
|
|
|||
|
|
@ -5,9 +5,40 @@ module mpiio_interface
|
|||
|
||||
implicit none
|
||||
|
||||
integer :: mpi_fh ! MPI file handle
|
||||
integer :: mpiio_err ! MPI error code
|
||||
|
||||
! Generic HDF5 write procedure interface
|
||||
interface mpi_write_data
|
||||
module procedure mpi_write_double
|
||||
module procedure mpi_write_double_1Darray
|
||||
module procedure mpi_write_double_2Darray
|
||||
module procedure mpi_write_double_3Darray
|
||||
module procedure mpi_write_double_4Darray
|
||||
module procedure mpi_write_integer
|
||||
module procedure mpi_write_integer_1Darray
|
||||
module procedure mpi_write_integer_2Darray
|
||||
module procedure mpi_write_integer_3Darray
|
||||
module procedure mpi_write_integer_4Darray
|
||||
module procedure mpi_write_long
|
||||
module procedure mpi_write_string
|
||||
end interface mpi_write_data
|
||||
|
||||
! Generic HDF5 read procedure interface
|
||||
interface mpi_read_data
|
||||
module procedure mpi_read_double
|
||||
module procedure mpi_read_double_1Darray
|
||||
module procedure mpi_read_double_2Darray
|
||||
module procedure mpi_read_double_3Darray
|
||||
module procedure mpi_read_double_4Darray
|
||||
module procedure mpi_read_integer
|
||||
module procedure mpi_read_integer_1Darray
|
||||
module procedure mpi_read_integer_2Darray
|
||||
module procedure mpi_read_integer_3Darray
|
||||
module procedure mpi_read_integer_4Darray
|
||||
module procedure mpi_read_long
|
||||
module procedure mpi_read_string
|
||||
end interface mpi_read_data
|
||||
|
||||
contains
|
||||
|
||||
!===============================================================================
|
||||
|
|
@ -40,7 +71,7 @@ contains
|
|||
! Determine access mode
|
||||
open_mode = MPI_MODE_RDONLY
|
||||
if (mode == 'w') then
|
||||
open_mode = MPI_MODE_WRONLY
|
||||
open_mode = ior(MPI_MODE_APPEND, MPI_MODE_WRONLY)
|
||||
end if
|
||||
|
||||
! Create the file
|
||||
|
|
@ -65,173 +96,505 @@ contains
|
|||
! MPI_WRITE_INTEGER writes integer scalar data using MPI File I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_write_integer(fh, buffer)
|
||||
subroutine mpi_write_integer(fh, buffer, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: buffer ! data to write
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: buffer ! data to write
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
call MPI_FILE_WRITE(fh, buffer, 1, MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
if (collect) then
|
||||
call MPI_FILE_WRITE_ALL(fh, buffer, 1, MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_WRITE(fh, buffer, 1, MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_write_integer
|
||||
|
||||
!===============================================================================
|
||||
! MPI_WRITE_INTEGER_1DARRAY writes integer 1-D array data using MPI File I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_write_integer_1Darray(fh, buffer, length)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length ! length of array
|
||||
integer, intent(in) :: buffer(:) ! data to write
|
||||
|
||||
call MPI_FILE_WRITE(fh, buffer, length, MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
|
||||
end subroutine mpi_write_integer_1Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_WRITE_LONG writes long integer scalar data using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_write_long(fh, buffer)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer(8), intent(in) :: buffer ! data to write
|
||||
|
||||
call MPI_FILE_WRITE(fh, buffer, 1, MPI_INTEGER8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
|
||||
end subroutine mpi_write_long
|
||||
|
||||
!===============================================================================
|
||||
! MPI_WRITE_DOUBLE writes double precision scalar data using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_write_double(fh, buffer)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
real(8), intent(in) :: buffer ! data to write
|
||||
|
||||
call MPI_FILE_WRITE(fh, buffer, 1, MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
|
||||
end subroutine mpi_write_double
|
||||
|
||||
!===============================================================================
|
||||
! MPI_WRITE_DOUBLE_1DARRAY writes double precision 1-D array using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_write_double_1Darray(fh, buffer, length)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length ! length of array
|
||||
real(8), intent(in) :: buffer(:) ! data to write
|
||||
|
||||
call MPI_FILE_WRITE(fh, buffer, length, MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
|
||||
end subroutine mpi_write_double_1Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_WRITE_STRING writes string data using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_write_string(fh, buffer, length)
|
||||
|
||||
character(*), intent(in) :: buffer ! data to write
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length ! length of data
|
||||
|
||||
call MPI_FILE_WRITE(fh, buffer, length, MPI_CHARACTER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
|
||||
end subroutine mpi_write_string
|
||||
|
||||
!===============================================================================
|
||||
! MPI_READ_INTEGER reads integer scalar data using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_read_integer(fh, buffer)
|
||||
subroutine mpi_read_integer(fh, buffer, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(inout) :: buffer ! read data to here
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(inout) :: buffer ! read data to here
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
call MPI_FILE_READ(fh, buffer, 1, MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
if (collect) then
|
||||
call MPI_FILE_READ_ALL(fh, buffer, 1, MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_READ(fh, buffer, 1, MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_read_integer
|
||||
|
||||
!===============================================================================
|
||||
! MPI_WRITE_INTEGER_1DARRAY writes integer 1-D array data using MPI File I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_write_integer_1Darray(fh, buffer, length, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length ! length of array
|
||||
integer, intent(in) :: buffer(:) ! data to write
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_WRITE_ALL(fh, buffer, length, MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_WRITE(fh, buffer, length, MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_write_integer_1Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_READ_INTEGER_1DARRAY reads integer 1-D array using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_read_integer_1Darray(fh, buffer, length)
|
||||
subroutine mpi_read_integer_1Darray(fh, buffer, length, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length ! length of array
|
||||
integer, intent(inout) :: buffer(:) ! read data to here
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
call MPI_FILE_READ(fh, buffer, length, MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
if (collect) then
|
||||
call MPI_FILE_READ_ALL(fh, buffer, length, MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_READ(fh, buffer, length, MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_read_integer_1Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_WRITE_INTEGER_2DARRAY writes integer 2-D array data using MPI File I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_write_integer_2Darray(fh, buffer, length, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length(2) ! length of array
|
||||
integer, intent(in) :: buffer(length(1),length(2)) ! data to write
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_WRITE_ALL(fh, buffer, product(length), MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_WRITE(fh, buffer, product(length), MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_write_integer_2Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_READ_INTEGER_2DARRAY reads integer 2-D array using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_read_integer_2Darray(fh, buffer, length, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length(2) ! length of array
|
||||
integer, intent(inout) :: buffer(length(1),length(2)) ! read data to here
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_READ_ALL(fh, buffer, product(length), MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_READ(fh, buffer, product(length), MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_read_integer_2Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_WRITE_INTEGER_3DARRAY writes integer 3-D array data using MPI File I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_write_integer_3Darray(fh, buffer, length, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length(3) ! length of array
|
||||
integer, intent(in) :: buffer(length(1),length(2),&
|
||||
length(3)) ! data to write
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_WRITE_ALL(fh, buffer, product(length), MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_WRITE(fh, buffer, product(length), MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_write_integer_3Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_READ_INTEGER_3DARRAY reads integer 3-D array using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_read_integer_3Darray(fh, buffer, length, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length(3) ! length of array
|
||||
integer, intent(inout) :: buffer(length(1),length(2), &
|
||||
length(3)) ! read data to here
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_READ_ALL(fh, buffer, product(length), MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_READ(fh, buffer, product(length), MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_read_integer_3Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_WRITE_INTEGER_4DARRAY writes integer 4-D array data using MPI File I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_write_integer_4Darray(fh, buffer, length, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length(4) ! length of array
|
||||
integer, intent(in) :: buffer(length(1),length(2),&
|
||||
length(3),length(4)) ! data to write
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_WRITE_ALL(fh, buffer, product(length), MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_WRITE(fh, buffer, product(length), MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_write_integer_4Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_READ_INTEGER_4DARRAY reads integer 4-D array using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_read_integer_4Darray(fh, buffer, length, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length(4) ! length of array
|
||||
integer, intent(inout) :: buffer(length(1),length(2), &
|
||||
length(3),length(4)) ! read data to here
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_READ_ALL(fh, buffer, product(length), MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_READ(fh, buffer, product(length), MPI_INTEGER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_read_integer_4Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_WRITE_DOUBLE writes integer scalar data using MPI File I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_write_double(fh, buffer, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
real(8), intent(in) :: buffer ! data to write
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_WRITE_ALL(fh, buffer, 1, MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_WRITE(fh, buffer, 1, MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_write_double
|
||||
|
||||
!===============================================================================
|
||||
! MPI_READ_DOUBLE reads integer scalar data using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_read_double(fh, buffer, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
real(8), intent(inout) :: buffer ! read data to here
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_READ_ALL(fh, buffer, 1, MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_READ(fh, buffer, 1, MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_read_double
|
||||
|
||||
!===============================================================================
|
||||
! MPI_WRITE_DOUBLE_1DARRAY writes integer 1-D array data using MPI File I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_write_double_1Darray(fh, buffer, length, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length ! length of array
|
||||
real(8), intent(in) :: buffer(:) ! data to write
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_WRITE_ALL(fh, buffer, length, MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_WRITE(fh, buffer, length, MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_write_double_1Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_READ_DOUBLE_1DARRAY reads integer 1-D array using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_read_double_1Darray(fh, buffer, length, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length ! length of array
|
||||
real(8), intent(inout) :: buffer(:) ! read data to here
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_READ_ALL(fh, buffer, length, MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_READ(fh, buffer, length, MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_read_double_1Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_WRITE_DOUBLE_2DARRAY writes integer 2-D array data using MPI File I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_write_double_2Darray(fh, buffer, length, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length(2) ! length of array
|
||||
real(8), intent(in) :: buffer(length(1),length(2)) ! data to write
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_WRITE_ALL(fh, buffer, product(length), MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_WRITE(fh, buffer, product(length), MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_write_double_2Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_READ_DOUBLE_2DARRAY reads integer 2-D array using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_read_double_2Darray(fh, buffer, length, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length(2) ! length of array
|
||||
real(8), intent(inout) :: buffer(length(1),length(2)) ! read data to here
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_READ_ALL(fh, buffer, product(length), MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_READ(fh, buffer, product(length), MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_read_double_2Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_WRITE_DOUBLE_3DARRAY writes integer 3-D array data using MPI File I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_write_double_3Darray(fh, buffer, length, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length(3) ! length of array
|
||||
real(8), intent(in) :: buffer(length(1),length(2),&
|
||||
length(3)) ! data to write
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_WRITE_ALL(fh, buffer, product(length), MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_WRITE(fh, buffer, product(length), MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_write_double_3Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_READ_DOUBLE_3DARRAY reads integer 3-D array using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_read_double_3Darray(fh, buffer, length, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length(3) ! length of array
|
||||
real(8), intent(inout) :: buffer(length(1),length(2), &
|
||||
length(3)) ! read data to here
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_READ_ALL(fh, buffer, product(length), MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_READ(fh, buffer, product(length), MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_read_double_3Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_WRITE_DOUBLE_4DARRAY writes integer 4-D array data using MPI File I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_write_double_4Darray(fh, buffer, length, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length(4) ! length of array
|
||||
real(8), intent(in) :: buffer(length(1),length(2),&
|
||||
length(3),length(4)) ! data to write
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_WRITE_ALL(fh, buffer, product(length), MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_WRITE(fh, buffer, product(length), MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_write_double_4Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_READ_DOUBLE_4DARRAY reads integer 4-D array using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_read_double_4Darray(fh, buffer, length, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length(4) ! length of array
|
||||
real(8), intent(inout) :: buffer(length(1),length(2), &
|
||||
length(3),length(4)) ! read data to here
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_READ_ALL(fh, buffer, product(length), MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_READ(fh, buffer, product(length), MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_read_double_4Darray
|
||||
|
||||
!===============================================================================
|
||||
! MPI_WRITE_LONG writes long integer scalar data using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_write_long(fh, buffer, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer(8), intent(in) :: buffer ! data to write
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
if (collect) then
|
||||
call MPI_FILE_WRITE_ALL(fh, buffer, 1, MPI_INTEGER8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_WRITE(fh, buffer, 1, MPI_INTEGER8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_write_long
|
||||
|
||||
!===============================================================================
|
||||
! MPI_READ_LONG reads long integer scalar data using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_read_long(fh, buffer)
|
||||
subroutine mpi_read_long(fh, buffer, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer(8), intent(inout) :: buffer ! read data to here
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer(8), intent(inout) :: buffer ! read data to here
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
call MPI_FILE_READ(fh, buffer, 1, MPI_INTEGER8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
if (collect) then
|
||||
call MPI_FILE_READ_ALL(fh, buffer, 1, MPI_INTEGER8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_READ(fh, buffer, 1, MPI_INTEGER8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_read_long
|
||||
|
||||
!===============================================================================
|
||||
! MPI_READ_DOUBLE reads double precision scalar data using MPI file I/O
|
||||
! MPI_WRITE_STRING writes string data using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_read_double(fh, buffer)
|
||||
subroutine mpi_write_string(fh, buffer, length, collect)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
real(8), intent(inout) :: buffer ! read data to here
|
||||
character(*), intent(in) :: buffer ! data to write
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length ! length of data
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
call MPI_FILE_READ(fh, buffer, 1, MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
if (collect) then
|
||||
call MPI_FILE_WRITE_ALL(fh, buffer, length, MPI_CHARACTER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_WRITE(fh, buffer, length, MPI_CHARACTER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_read_double
|
||||
|
||||
!===============================================================================
|
||||
! MPI_READ_DOUBLE_1DARRAY reads double precision 1-D array using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_read_double_1Darray(fh, buffer, length)
|
||||
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length ! length of array
|
||||
real(8), intent(inout) :: buffer(:) ! read data to here
|
||||
|
||||
call MPI_FILE_READ(fh, buffer, length, MPI_REAL8, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
|
||||
end subroutine mpi_read_double_1Darray
|
||||
end subroutine mpi_write_string
|
||||
|
||||
!===============================================================================
|
||||
! MPI_READ_STRING reads string data using MPI file I/O
|
||||
!===============================================================================
|
||||
|
||||
subroutine mpi_read_string(fh, buffer, length)
|
||||
subroutine mpi_read_string(fh, buffer, length, collect)
|
||||
|
||||
character(*), intent(inout) :: buffer ! read data to here
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length ! length of string
|
||||
character(*), intent(inout) :: buffer ! read data to here
|
||||
integer, intent(in) :: fh ! file handle
|
||||
integer, intent(in) :: length ! length of string
|
||||
logical, intent(in) :: collect ! collective I/O
|
||||
|
||||
call MPI_FILE_READ(fh, buffer, length, MPI_CHARACTER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
if (collect) then
|
||||
call MPI_FILE_READ_ALL(fh, buffer, length, MPI_CHARACTER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
else
|
||||
call MPI_FILE_READ(fh, buffer, length, MPI_CHARACTER, &
|
||||
MPI_STATUS_IGNORE, mpiio_err)
|
||||
end if
|
||||
|
||||
end subroutine mpi_read_string
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -2,123 +2,27 @@ module particle_restart
|
|||
|
||||
use, intrinsic :: ISO_FORTRAN_ENV
|
||||
|
||||
use bank_header, only: Bank
|
||||
use bank_header, only: Bank
|
||||
use constants
|
||||
use geometry_header, only: BASE_UNIVERSE
|
||||
use geometry_header, only: BASE_UNIVERSE
|
||||
use global
|
||||
use output, only: write_message, print_particle
|
||||
use particle_header, only: Particle
|
||||
use random_lcg, only: set_particle_seed
|
||||
use tracking, only: transport
|
||||
|
||||
#ifdef HDF5
|
||||
use hdf5_interface
|
||||
#endif
|
||||
use output, only: write_message, print_particle
|
||||
use output_interface, only: BinaryOutput
|
||||
use particle_header, only: Particle
|
||||
use random_lcg, only: set_particle_seed
|
||||
use tracking, only: transport
|
||||
|
||||
implicit none
|
||||
private
|
||||
public :: run_particle_restart
|
||||
|
||||
#ifdef HDF5
|
||||
integer(HID_T) :: hdf5_particle_file
|
||||
#endif
|
||||
|
||||
! Short names for output and error units
|
||||
integer :: ou = OUTPUT_UNIT
|
||||
integer :: eu = ERROR_UNIT
|
||||
! Binary file
|
||||
type(BinaryOutput) :: pr
|
||||
|
||||
contains
|
||||
|
||||
#ifdef HDF5
|
||||
|
||||
!===============================================================================
|
||||
! READ_HDF5_PARTICLE_RESTART
|
||||
!===============================================================================
|
||||
|
||||
subroutine read_hdf5_particle_restart(p)
|
||||
|
||||
type(Particle), intent(inout) :: p
|
||||
|
||||
! write meessage
|
||||
message = "Loading particle restart file " // trim(path_particle_restart) &
|
||||
// "..."
|
||||
call write_message(1)
|
||||
|
||||
! open hdf5 file
|
||||
call h5fopen_f(path_particle_restart, H5F_ACC_RDONLY_F, hdf5_particle_file,&
|
||||
hdf5_err)
|
||||
|
||||
! read data from file
|
||||
call hdf5_read_integer(hdf5_particle_file, 'current_batch', current_batch)
|
||||
call hdf5_read_integer(hdf5_particle_file, 'gen_per_batch', gen_per_batch)
|
||||
call hdf5_read_integer(hdf5_particle_file, 'current_gen', current_gen)
|
||||
call hdf5_read_long(hdf5_particle_file, 'n_particles', n_particles, hdf5_integer8_t)
|
||||
call hdf5_read_long(hdf5_particle_file, 'id', p % id, hdf5_integer8_t)
|
||||
call hdf5_read_double(hdf5_particle_file, 'weight', p % wgt)
|
||||
call hdf5_read_double(hdf5_particle_file, 'energy', p % E)
|
||||
dims1 = (/3/)
|
||||
call h5ltread_dataset_double_f(hdf5_particle_file, 'xyz', p % coord % xyz, &
|
||||
dims1, hdf5_err)
|
||||
call h5ltread_dataset_double_f(hdf5_particle_file, 'uvw', p % coord % uvw, &
|
||||
dims1, hdf5_err)
|
||||
|
||||
! set particle last attributes
|
||||
p % last_wgt = p % wgt
|
||||
p % last_xyz = p % coord % xyz
|
||||
p % last_E = p % E
|
||||
|
||||
! close hdf5 file
|
||||
call h5fclose_f(hdf5_particle_file, hdf5_err)
|
||||
|
||||
end subroutine read_hdf5_particle_restart
|
||||
|
||||
#endif
|
||||
|
||||
!===============================================================================
|
||||
! READ_BINARY_PARTICLE_RESTART
|
||||
!===============================================================================
|
||||
|
||||
subroutine read_binary_particle_restart(p)
|
||||
|
||||
type(Particle), intent(inout) :: p
|
||||
|
||||
integer :: filetype
|
||||
integer :: revision
|
||||
|
||||
! write meessage
|
||||
message = "Loading particle restart file " // trim(path_particle_restart) &
|
||||
// "..."
|
||||
call write_message(1)
|
||||
|
||||
! open file
|
||||
open(UNIT=UNIT_PARTICLE, FILE=path_particle_restart, STATUS='old', &
|
||||
ACCESS='stream')
|
||||
|
||||
! read data from file
|
||||
read(UNIT_PARTICLE) filetype
|
||||
read(UNIT_PARTICLE) revision
|
||||
read(UNIT_PARTICLE) current_batch
|
||||
read(UNIT_PARTICLE) gen_per_batch
|
||||
read(UNIT_PARTICLE) current_gen
|
||||
read(UNIT_PARTICLE) n_particles
|
||||
read(UNIT_PARTICLE) p % id
|
||||
read(UNIT_PARTICLE) p % wgt
|
||||
read(UNIT_PARTICLE) p % E
|
||||
read(UNIT_PARTICLE) p % coord % xyz
|
||||
read(UNIT_PARTICLE) p % coord % uvw
|
||||
|
||||
! set particle last attributes
|
||||
p % last_wgt = p % wgt
|
||||
p % last_xyz = p % coord % xyz
|
||||
p % last_E = p % E
|
||||
|
||||
! close hdf5 file
|
||||
close(UNIT_PARTICLE)
|
||||
|
||||
end subroutine read_binary_particle_restart
|
||||
|
||||
!===============================================================================
|
||||
! RUN_PARTICLE_RESTART
|
||||
! RUN_PARTICLE_RESTART is the main routine that runs the particle restart
|
||||
!===============================================================================
|
||||
|
||||
subroutine run_particle_restart()
|
||||
|
|
@ -126,30 +30,69 @@ contains
|
|||
integer(8) :: particle_seed
|
||||
type(Particle) :: p
|
||||
|
||||
! initialize the particle to be tracked
|
||||
! Set verbosity high
|
||||
verbosity = 10
|
||||
|
||||
! Initialize the particle to be tracked
|
||||
call p % initialize()
|
||||
|
||||
! read in the restart information
|
||||
#ifdef HDF5
|
||||
call read_hdf5_particle_restart(p)
|
||||
#else
|
||||
call read_binary_particle_restart(p)
|
||||
#endif
|
||||
! Read in the restart information
|
||||
call read_particle_restart(p)
|
||||
|
||||
! set all tallies to 0 for now (just tracking errors)
|
||||
! Set all tallies to 0 for now (just tracking errors)
|
||||
n_tallies = 0
|
||||
|
||||
! compute random number seed
|
||||
! Compute random number seed
|
||||
particle_seed = ((current_batch - 1)*gen_per_batch + &
|
||||
current_gen - 1)*n_particles + p % id
|
||||
call set_particle_seed(particle_seed)
|
||||
|
||||
! transport neutron
|
||||
! Transport neutron
|
||||
call transport(p)
|
||||
|
||||
! write output if particle made it
|
||||
! Write output if particle made it
|
||||
call print_particle(p)
|
||||
|
||||
end subroutine run_particle_restart
|
||||
|
||||
!===============================================================================
|
||||
! READ_PARTICLE_RESTART reads the particle restart file
|
||||
!===============================================================================
|
||||
|
||||
subroutine read_particle_restart(p)
|
||||
|
||||
integer :: int_scalar
|
||||
type(Particle), intent(inout) :: p
|
||||
|
||||
! Write meessage
|
||||
message = "Loading particle restart file " // trim(path_particle_restart) &
|
||||
// "..."
|
||||
call write_message(1)
|
||||
|
||||
! Open file
|
||||
call pr % file_open(path_particle_restart, 'r')
|
||||
|
||||
! Read data from file
|
||||
call pr % read_data(int_scalar, 'filetype')
|
||||
call pr % read_data(int_scalar, 'revision')
|
||||
call pr % read_data(current_batch, 'current_batch')
|
||||
call pr % read_data(gen_per_batch, 'gen_per_batch')
|
||||
call pr % read_data(current_gen, 'current_gen')
|
||||
call pr % read_data(n_particles, 'n_particles')
|
||||
call pr % read_data(p % id, 'id')
|
||||
call pr % read_data(p % wgt, 'weight')
|
||||
call pr % read_data(p % E, 'energy')
|
||||
call pr % read_data(p % coord % xyz, 'xyz', length=3)
|
||||
call pr % read_data(p % coord % uvw, 'uvw', length=3)
|
||||
|
||||
! Set particle last attributes
|
||||
p % last_wgt = p % wgt
|
||||
p % last_xyz = p % coord % xyz
|
||||
p % last_E = p % E
|
||||
|
||||
! Close hdf5 file
|
||||
call pr % file_close()
|
||||
|
||||
end subroutine read_particle_restart
|
||||
|
||||
end module particle_restart
|
||||
|
|
|
|||
|
|
@ -1,132 +1,65 @@
|
|||
module particle_restart_write
|
||||
|
||||
use, intrinsic :: ISO_FORTRAN_ENV
|
||||
|
||||
use bank_header, only: Bank
|
||||
use bank_header, only: Bank
|
||||
use global
|
||||
use particle_header, only: Particle
|
||||
use string, only: to_str
|
||||
|
||||
#ifdef HDF5
|
||||
use hdf5_interface
|
||||
#endif
|
||||
use output_interface, only: BinaryOutput
|
||||
use particle_header, only: Particle
|
||||
use string, only: to_str
|
||||
|
||||
implicit none
|
||||
private
|
||||
public :: write_particle_restart
|
||||
|
||||
#ifdef HDF5
|
||||
integer(HID_T) :: hdf5_particle_file
|
||||
#endif
|
||||
! Binary output file
|
||||
type(BinaryOutput) :: pr
|
||||
|
||||
contains
|
||||
|
||||
!===============================================================================
|
||||
! WRITE_PARTICLE_RESTART
|
||||
! WRITE_PARTICLE_RESTART is the main routine that writes out the particle file
|
||||
!===============================================================================
|
||||
|
||||
subroutine write_particle_restart(p)
|
||||
|
||||
type(Particle), intent(in) :: p
|
||||
|
||||
character(MAX_FILE_LEN) :: filename
|
||||
type(Bank), pointer :: src => null()
|
||||
|
||||
! Dont write another restart file if in particle restart mode
|
||||
if (run_mode == MODE_PARTICLE) return
|
||||
|
||||
! write out binary or HDF5 file
|
||||
! Set up file name
|
||||
filename = trim(path_output) // 'particle_' // trim(to_str(current_batch)) &
|
||||
// '_' // trim(to_str(p % id))
|
||||
#ifdef HDF5
|
||||
call write_particle_restart_hdf5(p)
|
||||
filename = trim(filename) // '.h5'
|
||||
#else
|
||||
call write_particle_restart_binary(p)
|
||||
filename = trim(filename) // '.binary'
|
||||
#endif
|
||||
|
||||
! Create file
|
||||
call pr % file_create(filename)
|
||||
|
||||
! Get information about source particle
|
||||
src => source_bank(current_work)
|
||||
|
||||
! Write data to file
|
||||
call pr % write_data(FILETYPE_PARTICLE_RESTART, 'filetype')
|
||||
call pr % write_data(REVISION_PARTICLE_RESTART, 'revision')
|
||||
call pr % write_data(current_batch, 'current_batch')
|
||||
call pr % write_data(gen_per_batch, 'gen_per_batch')
|
||||
call pr % write_data(current_gen, 'current_gen')
|
||||
call pr % write_data(n_particles, 'n_particles')
|
||||
call pr % write_data(p % id, 'id')
|
||||
call pr % write_data(src % wgt, 'weight')
|
||||
call pr % write_data(src % E, 'energy')
|
||||
call pr % write_data(src % xyz, 'xyz', length = 3)
|
||||
call pr % write_data(src % uvw, 'uvw', length = 3)
|
||||
|
||||
! Close file
|
||||
call pr % file_close()
|
||||
|
||||
end subroutine write_particle_restart
|
||||
|
||||
#ifdef HDF5
|
||||
|
||||
!===============================================================================
|
||||
! WRITE_PARTICLE_RESTART_HDF5
|
||||
!===============================================================================
|
||||
|
||||
subroutine write_particle_restart_hdf5(p)
|
||||
|
||||
type(Particle), intent(in) :: p
|
||||
|
||||
character(MAX_FILE_LEN) :: filename
|
||||
type(Bank), pointer :: src => null()
|
||||
|
||||
! set up file name
|
||||
filename = trim(path_output) // 'particle_' // trim(to_str(current_batch)) &
|
||||
// '_' // trim(to_str(p % id)) // '.h5'
|
||||
|
||||
! create hdf5 file
|
||||
call h5fcreate_f(filename, H5F_ACC_TRUNC_F, hdf5_particle_file, hdf5_err)
|
||||
|
||||
! get information about source particle
|
||||
src => source_bank(current_work)
|
||||
|
||||
! write data to file
|
||||
call hdf5_write_integer(hdf5_particle_file, 'filetype', &
|
||||
FILETYPE_PARTICLE_RESTART)
|
||||
call hdf5_write_integer(hdf5_particle_file, 'revision', &
|
||||
REVISION_PARTICLE_RESTART)
|
||||
call hdf5_write_integer(hdf5_particle_file, 'current_batch', current_batch)
|
||||
call hdf5_write_integer(hdf5_particle_file, 'gen_per_batch', gen_per_batch)
|
||||
call hdf5_write_integer(hdf5_particle_file, 'current_gen', current_gen)
|
||||
call hdf5_write_long(hdf5_particle_file, 'n_particles', n_particles, hdf5_integer8_t)
|
||||
call hdf5_write_long(hdf5_particle_file, 'id', p % id, hdf5_integer8_t)
|
||||
call hdf5_write_double(hdf5_particle_file, 'weight', src % wgt)
|
||||
call hdf5_write_double(hdf5_particle_file, 'energy', src % E)
|
||||
dims1 = (/3/)
|
||||
call h5ltmake_dataset_double_f(hdf5_particle_file, 'xyz', 1, dims1, &
|
||||
src % xyz, hdf5_err)
|
||||
call h5ltmake_dataset_double_f(hdf5_particle_file, 'uvw', 1, dims1, &
|
||||
src % uvw, hdf5_err)
|
||||
|
||||
! close hdf5 file
|
||||
call h5fclose_f(hdf5_particle_file, hdf5_err)
|
||||
|
||||
end subroutine write_particle_restart_hdf5
|
||||
|
||||
#endif
|
||||
|
||||
!===============================================================================
|
||||
! WRITE_PARTICLE_RESTART_BINARY
|
||||
!===============================================================================
|
||||
|
||||
subroutine write_particle_restart_binary(p)
|
||||
|
||||
type(Particle), intent(in) :: p
|
||||
|
||||
character(MAX_FILE_LEN) :: filename
|
||||
type(Bank), pointer :: src => null()
|
||||
|
||||
! set up file name
|
||||
filename = trim(path_output) // 'particle_' // trim(to_str(current_batch)) &
|
||||
// '_' // trim(to_str(p % id)) // '.binary'
|
||||
|
||||
! create hdf5 file
|
||||
open(UNIT=UNIT_PARTICLE, FILE=filename, STATUS='replace', &
|
||||
ACCESS='stream')
|
||||
|
||||
! get information about source particle
|
||||
src => source_bank(current_work)
|
||||
|
||||
! write data to file
|
||||
write(UNIT_PARTICLE) FILETYPE_PARTICLE_RESTART
|
||||
write(UNIT_PARTICLE) REVISION_PARTICLE_RESTART
|
||||
write(UNIT_PARTICLE) current_batch
|
||||
write(UNIT_PARTICLE) gen_per_batch
|
||||
write(UNIT_PARTICLE) current_gen
|
||||
write(UNIT_PARTICLE) n_particles
|
||||
write(UNIT_PARTICLE) p % id
|
||||
write(UNIT_PARTICLE) src % wgt
|
||||
write(UNIT_PARTICLE) src % E
|
||||
write(UNIT_PARTICLE) src % xyz
|
||||
write(UNIT_PARTICLE) src % uvw
|
||||
|
||||
! close hdf5 file
|
||||
close(UNIT_PARTICLE)
|
||||
|
||||
end subroutine write_particle_restart_binary
|
||||
|
||||
end module particle_restart_write
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@ module state_point
|
|||
|
||||
implicit none
|
||||
|
||||
type(BinaryOutput) :: sp ! statepoint/source output file
|
||||
|
||||
contains
|
||||
|
||||
!===============================================================================
|
||||
|
|
@ -51,78 +53,78 @@ contains
|
|||
message = "Creating state point " // trim(filename) // "..."
|
||||
call write_message(1)
|
||||
|
||||
! Create statepoint file
|
||||
call file_create(filename, 'serial')
|
||||
|
||||
if (master) then
|
||||
! Create statepoint file
|
||||
call sp % file_create(filename)
|
||||
|
||||
! Write file type
|
||||
call write_data(FILETYPE_STATEPOINT, "filetype")
|
||||
call sp % write_data(FILETYPE_STATEPOINT, "filetype")
|
||||
|
||||
! Write revision number for state point file
|
||||
call write_data(REVISION_STATEPOINT, "revision")
|
||||
call sp % write_data(REVISION_STATEPOINT, "revision")
|
||||
|
||||
! Write OpenMC version
|
||||
call write_data(VERSION_MAJOR, "version_major")
|
||||
call write_data(VERSION_MINOR, "version_minor")
|
||||
call write_data(VERSION_RELEASE, "version_release")
|
||||
call sp % write_data(VERSION_MAJOR, "version_major")
|
||||
call sp % write_data(VERSION_MINOR, "version_minor")
|
||||
call sp % write_data(VERSION_RELEASE, "version_release")
|
||||
|
||||
! Write current date and time
|
||||
call write_data(time_stamp(), "date_and_time")
|
||||
call sp % write_data(time_stamp(), "date_and_time")
|
||||
|
||||
! Write path to input
|
||||
call write_data(path_input, "path")
|
||||
call sp % write_data(path_input, "path")
|
||||
|
||||
! Write out random number seed
|
||||
call write_data(seed, "seed")
|
||||
call sp % write_data(seed, "seed")
|
||||
|
||||
! Write run information
|
||||
call write_data(run_mode, "run_mode")
|
||||
call write_data(n_particles, "n_particles")
|
||||
call write_data(n_batches, "n_batches")
|
||||
call sp % write_data(run_mode, "run_mode")
|
||||
call sp % write_data(n_particles, "n_particles")
|
||||
call sp % write_data(n_batches, "n_batches")
|
||||
|
||||
! Write out current batch number
|
||||
call write_data(current_batch, "current_batch")
|
||||
call sp % write_data(current_batch, "current_batch")
|
||||
|
||||
! Write out information for eigenvalue run
|
||||
if (run_mode == MODE_EIGENVALUE) then
|
||||
call write_data(n_inactive, "n_inactive")
|
||||
call write_data(gen_per_batch, "gen_per_batch")
|
||||
call write_data(k_generation, "k_generation", &
|
||||
call sp % write_data(n_inactive, "n_inactive")
|
||||
call sp % write_data(gen_per_batch, "gen_per_batch")
|
||||
call sp % write_data(k_generation, "k_generation", &
|
||||
length=current_batch*gen_per_batch)
|
||||
call write_data(entropy, "entropy", length=current_batch*gen_per_batch)
|
||||
call write_data(k_col_abs, "k_col_abs")
|
||||
call write_data(k_col_tra, "k_col_tra")
|
||||
call write_data(k_abs_tra, "k_abs_tra")
|
||||
call write_data(k_combined, "k_combined", length=2)
|
||||
call sp % write_data(entropy, "entropy", length=current_batch*gen_per_batch)
|
||||
call sp % write_data(k_col_abs, "k_col_abs")
|
||||
call sp % write_data(k_col_tra, "k_col_tra")
|
||||
call sp % write_data(k_abs_tra, "k_abs_tra")
|
||||
call sp % write_data(k_combined, "k_combined", length=2)
|
||||
end if
|
||||
|
||||
! Write number of meshes
|
||||
call write_data(n_meshes, "n_meshes", group="tallies")
|
||||
call sp % write_data(n_meshes, "n_meshes", group="tallies")
|
||||
|
||||
! Write information for meshes
|
||||
MESH_LOOP: do i = 1, n_meshes
|
||||
call write_data(meshes(i) % id, "id", &
|
||||
call sp % write_data(meshes(i) % id, "id", &
|
||||
group="tallies/mesh" // to_str(i))
|
||||
call write_data(meshes(i) % type, "type", &
|
||||
call sp % write_data(meshes(i) % type, "type", &
|
||||
group="tallies/mesh" // to_str(i))
|
||||
call write_data(meshes(i) % n_dimension, "n_dimension", &
|
||||
call sp % write_data(meshes(i) % n_dimension, "n_dimension", &
|
||||
group="tallies/mesh" // to_str(i))
|
||||
call write_data(meshes(i) % dimension, "dimension", &
|
||||
call sp % write_data(meshes(i) % dimension, "dimension", &
|
||||
group="tallies/mesh" // to_str(i), &
|
||||
length=meshes(i) % n_dimension)
|
||||
call write_data(meshes(i) % lower_left, "lower_left", &
|
||||
call sp % write_data(meshes(i) % lower_left, "lower_left", &
|
||||
group="tallies/mesh" // to_str(i), &
|
||||
length=meshes(i) % n_dimension)
|
||||
call write_data(meshes(i) % upper_right, "upper_right", &
|
||||
call sp % write_data(meshes(i) % upper_right, "upper_right", &
|
||||
group="tallies/mesh" // to_str(i), &
|
||||
length=meshes(i) % n_dimension)
|
||||
call write_data(meshes(i) % width, "width", &
|
||||
call sp % write_data(meshes(i) % width, "width", &
|
||||
group="tallies/mesh" // to_str(i), &
|
||||
length=meshes(i) % n_dimension)
|
||||
end do MESH_LOOP
|
||||
|
||||
! Write number of tallies
|
||||
call write_data(n_tallies, "n_tallies", group="tallies")
|
||||
call sp % write_data(n_tallies, "n_tallies", group="tallies")
|
||||
|
||||
! Write all tally information except results
|
||||
TALLY_METADATA: do i = 1, n_tallies
|
||||
|
|
@ -130,41 +132,41 @@ contains
|
|||
t => tallies(i)
|
||||
|
||||
! Write id
|
||||
call write_data(t % id, "id", group="tallies/tally" // to_str(i))
|
||||
call sp % write_data(t % id, "id", group="tallies/tally" // to_str(i))
|
||||
|
||||
! Write number of realizations
|
||||
call write_data(t % n_realizations, "n_realizations", &
|
||||
call sp % write_data(t % n_realizations, "n_realizations", &
|
||||
group="tallies/tally" // to_str(i))
|
||||
|
||||
! Write size of each tally
|
||||
call write_data(t % total_score_bins, "total_score_bins", &
|
||||
call sp % write_data(t % total_score_bins, "total_score_bins", &
|
||||
group="tallies/tally" // to_str(i))
|
||||
call write_data(t % total_filter_bins, "total_filter_bins", &
|
||||
call sp % write_data(t % total_filter_bins, "total_filter_bins", &
|
||||
group="tallies/tally" // to_str(i))
|
||||
|
||||
! Write number of filters
|
||||
call write_data(t % n_filters, "n_filters", &
|
||||
call sp % write_data(t % n_filters, "n_filters", &
|
||||
group="tallies/tally" // to_str(i))
|
||||
|
||||
! Write filter information
|
||||
FILTER_LOOP: do j = 1, t % n_filters
|
||||
|
||||
! Write type of filter
|
||||
call write_data(t % filters(j) % type, "type", &
|
||||
call sp % write_data(t % filters(j) % type, "type", &
|
||||
group="tallies/tally" // trim(to_str(i)) // "/filter" // to_str(j))
|
||||
|
||||
! Write number of bins for this filter
|
||||
call write_data(t % filters(j) % n_bins, "n_bins", &
|
||||
call sp % write_data(t % filters(j) % n_bins, "n_bins", &
|
||||
group="tallies/tally" // trim(to_str(i)) // "/filter" // to_str(j))
|
||||
|
||||
! Write bins
|
||||
if (t % filters(j) % type == FILTER_ENERGYIN .or. &
|
||||
t % filters(j) % type == FILTER_ENERGYOUT) then
|
||||
call write_data(t % filters(j) % real_bins, "bins", &
|
||||
call sp % write_data(t % filters(j) % real_bins, "bins", &
|
||||
group="tallies/tally" // trim(to_str(i)) // "/filter" // to_str(j), &
|
||||
length=size(t % filters(j) % real_bins))
|
||||
else
|
||||
call write_data(t % filters(j) % int_bins, "bins", &
|
||||
call sp % write_data(t % filters(j) % int_bins, "bins", &
|
||||
group="tallies/tally" // trim(to_str(i)) // "/filter" // to_str(j), &
|
||||
length=size(t % filters(j) % int_bins))
|
||||
end if
|
||||
|
|
@ -172,7 +174,7 @@ contains
|
|||
end do FILTER_LOOP
|
||||
|
||||
! Write number of nuclide bins
|
||||
call write_data(t % n_nuclide_bins, "n_nuclide_bins", &
|
||||
call sp % write_data(t % n_nuclide_bins, "n_nuclide_bins", &
|
||||
group="tallies/tally" // to_str(i))
|
||||
|
||||
! Set up nuclide bin array and then write
|
||||
|
|
@ -184,20 +186,20 @@ contains
|
|||
temp_array(j) = t % nuclide_bins(j)
|
||||
end if
|
||||
end do NUCLIDE_LOOP
|
||||
call write_data(temp_array, "nuclide_bins", &
|
||||
call sp % write_data(temp_array, "nuclide_bins", &
|
||||
group="tallies/tally" // to_str(i), length=t % n_nuclide_bins)
|
||||
deallocate(temp_array)
|
||||
|
||||
! Write number of score bins, score bins, and scatt order
|
||||
call write_data(t % n_score_bins, "n_score_bins", &
|
||||
call sp % write_data(t % n_score_bins, "n_score_bins", &
|
||||
group="tallies/tally" // to_str(i))
|
||||
call write_data(t % score_bins, "score_bins", &
|
||||
call sp % write_data(t % score_bins, "score_bins", &
|
||||
group="tallies/tally" // to_str(i), length=t % n_score_bins)
|
||||
call write_data(t % scatt_order, "scatt_order", &
|
||||
call sp % write_data(t % scatt_order, "scatt_order", &
|
||||
group="tallies/tally" // to_str(i), length=t % n_score_bins)
|
||||
|
||||
! Write number of user score bins
|
||||
call write_data(t % n_user_score_bins, "n_user_score_bins", &
|
||||
call sp % write_data(t % n_user_score_bins, "n_user_score_bins", &
|
||||
group="tallies/tally" // to_str(i))
|
||||
|
||||
end do TALLY_METADATA
|
||||
|
|
@ -214,18 +216,18 @@ contains
|
|||
elseif (master) then
|
||||
|
||||
! Write number of global realizations
|
||||
call write_data(n_realizations, "n_realizations")
|
||||
call sp % write_data(n_realizations, "n_realizations")
|
||||
|
||||
! Write global tallies
|
||||
call write_data(N_GLOBAL_TALLIES, "n_global_tallies")
|
||||
call write_tally_result(global_tallies, "global_tallies", &
|
||||
call sp % write_data(N_GLOBAL_TALLIES, "n_global_tallies")
|
||||
call sp % write_tally_result(global_tallies, "global_tallies", &
|
||||
n1=N_GLOBAL_TALLIES, n2=1)
|
||||
|
||||
! Write tallies
|
||||
if (tallies_on) then
|
||||
|
||||
! Indicate that tallies are on
|
||||
call write_data(1, "tallies_present", group="tallies")
|
||||
call sp % write_data(1, "tallies_present", group="tallies")
|
||||
|
||||
! Write all tally results
|
||||
TALLY_RESULTS: do i = 1, n_tallies
|
||||
|
|
@ -234,7 +236,7 @@ contains
|
|||
t => tallies(i)
|
||||
|
||||
! Write sum and sum_sq for each bin
|
||||
call write_tally_result(t % results, "results", &
|
||||
call sp % write_tally_result(t % results, "results", &
|
||||
group="tallies/tally" // to_str(i), &
|
||||
n1=size(t % results, 1), n2=size(t % results, 2))
|
||||
|
||||
|
|
@ -243,10 +245,13 @@ contains
|
|||
else
|
||||
|
||||
! Indicate tallies are off
|
||||
call write_data(0, "tallies_present", group="tallies")
|
||||
call sp % write_data(0, "tallies_present", group="tallies")
|
||||
|
||||
end if
|
||||
|
||||
! Close the file for serial writing
|
||||
call sp % file_close()
|
||||
|
||||
end if
|
||||
|
||||
! Check for eigenvalue calculation
|
||||
|
|
@ -255,9 +260,6 @@ contains
|
|||
! Check for writing source out separately
|
||||
if (source_separate) then
|
||||
|
||||
! Close statepoint file
|
||||
call file_close('serial')
|
||||
|
||||
! Set filename for source
|
||||
filename = trim(path_output) // 'source.' // &
|
||||
trim(to_str(current_batch))
|
||||
|
|
@ -271,30 +273,21 @@ contains
|
|||
message = "Creating source file " // trim(filename) // "..."
|
||||
call write_message(1)
|
||||
|
||||
! Create statepoint file
|
||||
call file_create(filename, 'parallel')
|
||||
! Create source file
|
||||
call sp % file_create(filename, serial = .false.)
|
||||
|
||||
#ifdef HDF5
|
||||
# ifdef MPI
|
||||
else
|
||||
! Close HDF5 serial file and reopen in parallel
|
||||
call file_close('serial')
|
||||
call file_open(filename, 'parallel', 'w')
|
||||
# endif
|
||||
#endif
|
||||
|
||||
! Reopen state point file in parallel
|
||||
call sp % file_open(filename, 'w', serial = .false.)
|
||||
|
||||
end if
|
||||
|
||||
! Write out source
|
||||
call write_source_bank()
|
||||
call sp % write_source_bank()
|
||||
|
||||
! Close file, all files in parallel mode
|
||||
call file_close('parallel') ! even if no MPI, this will work for HDF5
|
||||
|
||||
else
|
||||
|
||||
! Close file if not in eigenvalue mode or no source writing
|
||||
call file_close('serial')
|
||||
! Close file
|
||||
call sp % file_close()
|
||||
|
||||
end if
|
||||
|
||||
|
|
@ -323,10 +316,10 @@ contains
|
|||
|
||||
if (master) then
|
||||
! Write number of realizations
|
||||
call write_data(n_realizations, "n_realizations")
|
||||
call sp % write_data(n_realizations, "n_realizations")
|
||||
|
||||
! Write number of global tallies
|
||||
call write_data(N_GLOBAL_TALLIES, "n_global_tallies")
|
||||
call sp % write_data(N_GLOBAL_TALLIES, "n_global_tallies")
|
||||
end if
|
||||
|
||||
! Copy global tallies into temporary array for reducing
|
||||
|
|
@ -355,7 +348,7 @@ contains
|
|||
|
||||
|
||||
! Write out global tallies sum and sum_sq
|
||||
call write_tally_result(tallyresult_temp, "global_tallies", &
|
||||
call sp % write_tally_result(tallyresult_temp, "global_tallies", &
|
||||
n1=N_GLOBAL_TALLIES, n2=1)
|
||||
|
||||
! Deallocate temporary tally result
|
||||
|
|
@ -371,7 +364,7 @@ contains
|
|||
if (tallies_on) then
|
||||
! Indicate that tallies are on
|
||||
if (master) then
|
||||
call write_data(1, "tallies_present", group="tallies")
|
||||
call sp % write_data(1, "tallies_present", group="tallies")
|
||||
end if
|
||||
|
||||
! Write all tally results
|
||||
|
|
@ -409,7 +402,7 @@ contains
|
|||
tallyresult_temp(:,:) % sum_sq = tally_temp(2,:,:)
|
||||
|
||||
! Write reduced tally results to file
|
||||
call write_tally_result(t % results, "results", &
|
||||
call sp % write_tally_result(t % results, "results", &
|
||||
group="tallies/tally" // to_str(i), n1=m, n2=n)
|
||||
|
||||
! Deallocate temporary tally result
|
||||
|
|
@ -428,7 +421,7 @@ contains
|
|||
else
|
||||
if (master) then
|
||||
! Indicate that tallies are off
|
||||
call write_data(0, "tallies_present", group="tallies")
|
||||
call sp % write_data(0, "tallies_present", group="tallies")
|
||||
end if
|
||||
end if
|
||||
|
||||
|
|
@ -455,14 +448,14 @@ contains
|
|||
call write_message(1)
|
||||
|
||||
! Open file for reading
|
||||
call file_open(path_state_point, 'parallel', 'r')
|
||||
call sp % file_open(path_state_point, 'r')
|
||||
|
||||
! Read filetype
|
||||
call read_data(int_array(1), "filetype", option="collective")
|
||||
call sp % read_data(int_array(1), "filetype")
|
||||
|
||||
! Read revision number for state point file and make sure it matches with
|
||||
! current version
|
||||
call read_data(int_array(1), "revision", option="collective")
|
||||
call sp % read_data(int_array(1), "revision")
|
||||
if (int_array(1) /= REVISION_STATEPOINT) then
|
||||
message = "State point version does not match current version " &
|
||||
// "in OpenMC."
|
||||
|
|
@ -470,9 +463,9 @@ contains
|
|||
end if
|
||||
|
||||
! Read OpenMC version
|
||||
call read_data(int_array(1), "version_major", option="collective")
|
||||
call read_data(int_array(2), "version_minor", option="collective")
|
||||
call read_data(int_array(3), "version_release", option="collective")
|
||||
call sp % read_data(int_array(1), "version_major")
|
||||
call sp % read_data(int_array(2), "version_minor")
|
||||
call sp % read_data(int_array(3), "version_release")
|
||||
if (int_array(1) /= VERSION_MAJOR .or. int_array(2) /= VERSION_MINOR &
|
||||
.or. int_array(3) /= VERSION_RELEASE) then
|
||||
message = "State point file was created with a different version " &
|
||||
|
|
@ -481,70 +474,68 @@ contains
|
|||
end if
|
||||
|
||||
! Read date and time
|
||||
call read_data(current_time, "date_and_time", option="collective")
|
||||
call sp % read_data(current_time, "date_and_time")
|
||||
|
||||
! Read path to input
|
||||
call read_data(path_temp, "path", option="collective")
|
||||
call sp % read_data(path_temp, "path")
|
||||
|
||||
! Read and overwrite random number seed
|
||||
call read_data(seed, "seed", option="collective")
|
||||
call sp % read_data(seed, "seed")
|
||||
|
||||
! Read and overwrite run information except number of batches
|
||||
call read_data(run_mode, "run_mode", option="collective")
|
||||
call read_data(n_particles, "n_particles", option="collective")
|
||||
call read_data(int_array(1), "n_batches", option="collective")
|
||||
call sp % read_data(run_mode, "run_mode")
|
||||
call sp % read_data(n_particles, "n_particles")
|
||||
call sp % read_data(int_array(1), "n_batches")
|
||||
|
||||
! Take maximum of statepoint n_batches and input n_batches
|
||||
n_batches = max(n_batches, int_array(1))
|
||||
|
||||
! Read batch number to restart at
|
||||
call read_data(restart_batch, "current_batch", option="collective")
|
||||
call sp % read_data(restart_batch, "current_batch")
|
||||
|
||||
! Read information specific to eigenvalue run
|
||||
if (run_mode == MODE_EIGENVALUE) then
|
||||
call read_data(int_array(1), "n_inactive", option="collective")
|
||||
call read_data(gen_per_batch, "gen_per_batch", option="collective")
|
||||
call read_data(k_generation, "k_generation", &
|
||||
length=restart_batch*gen_per_batch, option="collective")
|
||||
call read_data(entropy, "entropy", length=restart_batch*gen_per_batch, &
|
||||
option="collective")
|
||||
call read_data(k_col_abs, "k_col_abs", option="collective")
|
||||
call read_data(k_col_tra, "k_col_tra", option="collective")
|
||||
call read_data(k_abs_tra, "k_abs_tra", option="collective")
|
||||
call read_data(real_array(1:2), "k_combined", length=2, &
|
||||
option="collective")
|
||||
call sp % read_data(int_array(1), "n_inactive")
|
||||
call sp % read_data(gen_per_batch, "gen_per_batch")
|
||||
call sp % read_data(k_generation, "k_generation", &
|
||||
length=restart_batch*gen_per_batch)
|
||||
call sp % read_data(entropy, "entropy", length=restart_batch*gen_per_batch)
|
||||
call sp % read_data(k_col_abs, "k_col_abs")
|
||||
call sp % read_data(k_col_tra, "k_col_tra")
|
||||
call sp % read_data(k_abs_tra, "k_abs_tra")
|
||||
call sp % read_data(real_array(1:2), "k_combined", length=2)
|
||||
|
||||
! Take maximum of statepoint n_inactive and input n_inactive
|
||||
n_inactive = max(n_inactive, int_array(1))
|
||||
end if
|
||||
|
||||
! Read number of meshes
|
||||
call read_data(n_meshes, "n_meshes", group="tallies", option="collective")
|
||||
call sp % read_data(n_meshes, "n_meshes", group="tallies")
|
||||
|
||||
! Read and overwrite mesh information
|
||||
MESH_LOOP: do i = 1, n_meshes
|
||||
call read_data(meshes(i) % id, "id", &
|
||||
group="tallies/mesh" // to_str(i), option="collective")
|
||||
call read_data(meshes(i) % type, "type", &
|
||||
group="tallies/mesh" // to_str(i), option="collective")
|
||||
call read_data(meshes(i) % n_dimension, "n_dimension", &
|
||||
group="tallies/mesh" // to_str(i), option="collective")
|
||||
call read_data(meshes(i) % dimension, "dimension", &
|
||||
call sp % read_data(meshes(i) % id, "id", &
|
||||
group="tallies/mesh" // to_str(i))
|
||||
call sp % read_data(meshes(i) % type, "type", &
|
||||
group="tallies/mesh" // to_str(i))
|
||||
call sp % read_data(meshes(i) % n_dimension, "n_dimension", &
|
||||
group="tallies/mesh" // to_str(i))
|
||||
call sp % read_data(meshes(i) % dimension, "dimension", &
|
||||
group="tallies/mesh" // to_str(i), &
|
||||
length=meshes(i) % n_dimension, option="collective")
|
||||
call read_data(meshes(i) % lower_left, "lower_left", &
|
||||
length=meshes(i) % n_dimension)
|
||||
call sp % read_data(meshes(i) % lower_left, "lower_left", &
|
||||
group="tallies/mesh" // to_str(i), &
|
||||
length=meshes(i) % n_dimension, option="collective")
|
||||
call read_data(meshes(i) % upper_right, "upper_right", &
|
||||
length=meshes(i) % n_dimension)
|
||||
call sp % read_data(meshes(i) % upper_right, "upper_right", &
|
||||
group="tallies/mesh" // to_str(i), &
|
||||
length=meshes(i) % n_dimension, option="collective")
|
||||
call read_data(meshes(i) % width, "width", &
|
||||
length=meshes(i) % n_dimension)
|
||||
call sp % read_data(meshes(i) % width, "width", &
|
||||
group="tallies/mesh" // to_str(i), &
|
||||
length=meshes(i) % n_dimension, option="collective")
|
||||
length=meshes(i) % n_dimension)
|
||||
end do MESH_LOOP
|
||||
|
||||
! Read and overwrite number of tallies
|
||||
call read_data(n_tallies, "n_tallies", group="tallies", option="collective")
|
||||
call sp % read_data(n_tallies, "n_tallies", group="tallies")
|
||||
|
||||
! Read in tally metadata
|
||||
TALLY_METADATA: do i = 1, n_tallies
|
||||
|
|
@ -553,18 +544,17 @@ contains
|
|||
t => tallies(i)
|
||||
|
||||
! Read tally id
|
||||
call read_data(t % id, "id", group="tallies/tally" // to_str(i), &
|
||||
option="collective")
|
||||
call sp % read_data(t % id, "id", group="tallies/tally" // to_str(i))
|
||||
|
||||
! Read number of realizations
|
||||
call read_data(t % n_realizations, "n_realizations", &
|
||||
group="tallies/tally" // to_str(i), option="collective")
|
||||
call sp % read_data(t % n_realizations, "n_realizations", &
|
||||
group="tallies/tally" // to_str(i))
|
||||
|
||||
! Read size of tally results
|
||||
call read_data(int_array(1), "total_score_bins", &
|
||||
group="tallies/tally" // to_str(i), option="collective")
|
||||
call read_data(int_array(2), "total_filter_bins", &
|
||||
group="tallies/tally" // to_str(i), option="collective")
|
||||
call sp % read_data(int_array(1), "total_score_bins", &
|
||||
group="tallies/tally" // to_str(i))
|
||||
call sp % read_data(int_array(2), "total_filter_bins", &
|
||||
group="tallies/tally" // to_str(i))
|
||||
|
||||
! Check size of tally results array
|
||||
if (int_array(1) /= t % total_score_bins .and. &
|
||||
|
|
@ -574,45 +564,42 @@ contains
|
|||
end if
|
||||
|
||||
! Read number of filters
|
||||
call read_data(t % n_filters, "n_filters", &
|
||||
group="tallies/tally" // to_str(i), option="collective")
|
||||
call sp % read_data(t % n_filters, "n_filters", &
|
||||
group="tallies/tally" // to_str(i))
|
||||
|
||||
! Read filter information
|
||||
FILTER_LOOP: do j = 1, t % n_filters
|
||||
|
||||
! Read type of filter
|
||||
call read_data(t % filters(j) % type, "type", &
|
||||
group="tallies/tally" // trim(to_str(i)) // "/filter" // to_str(j), &
|
||||
option="collective")
|
||||
call sp % read_data(t % filters(j) % type, "type", &
|
||||
group="tallies/tally" // trim(to_str(i)) // "/filter" // to_str(j))
|
||||
|
||||
! Read number of bins for this filter
|
||||
call read_data(t % filters(j) % n_bins, "n_bins", &
|
||||
group="tallies/tally" // trim(to_str(i)) // "/filter" // to_str(j), &
|
||||
option="collective")
|
||||
call sp % read_data(t % filters(j) % n_bins, "n_bins", &
|
||||
group="tallies/tally" // trim(to_str(i)) // "/filter" // to_str(j))
|
||||
|
||||
! Read bins
|
||||
if (t % filters(j) % type == FILTER_ENERGYIN .or. &
|
||||
t % filters(j) % type == FILTER_ENERGYOUT) then
|
||||
call read_data(t % filters(j) % real_bins, "bins", &
|
||||
call sp % read_data(t % filters(j) % real_bins, "bins", &
|
||||
group="tallies/tally" // trim(to_str(i)) // "/filter" // to_str(j), &
|
||||
length=size(t % filters(j) % real_bins), option="collective")
|
||||
length=size(t % filters(j) % real_bins))
|
||||
else
|
||||
call read_data(t % filters(j) % int_bins, "bins", &
|
||||
call sp % read_data(t % filters(j) % int_bins, "bins", &
|
||||
group="tallies/tally" // trim(to_str(i)) // "/filter" // to_str(j), &
|
||||
length=size(t % filters(j) % int_bins), option="collective")
|
||||
length=size(t % filters(j) % int_bins))
|
||||
end if
|
||||
|
||||
end do FILTER_LOOP
|
||||
|
||||
! Read number of nuclide bins
|
||||
call read_data(t % n_nuclide_bins, "n_nuclide_bins", &
|
||||
group="tallies/tally" // to_str(i), option="collective")
|
||||
call sp % read_data(t % n_nuclide_bins, "n_nuclide_bins", &
|
||||
group="tallies/tally" // to_str(i))
|
||||
|
||||
! Set up nuclide bin array and then write
|
||||
allocate(temp_array(t % n_nuclide_bins))
|
||||
call read_data(temp_array, "nuclide_bins", &
|
||||
group="tallies/tally" // to_str(i), length=t % n_nuclide_bins, &
|
||||
option="collective")
|
||||
call sp % read_data(temp_array, "nuclide_bins", &
|
||||
group="tallies/tally" // to_str(i), length=t % n_nuclide_bins)
|
||||
NUCLIDE_LOOP: do j = 1, t % n_nuclide_bins
|
||||
if (temp_array(j) > 0) then
|
||||
nuclides(t % nuclide_bins(j)) % zaid = temp_array(j)
|
||||
|
|
@ -623,18 +610,16 @@ contains
|
|||
deallocate(temp_array)
|
||||
|
||||
! Write number of score bins, score bins, and scatt order
|
||||
call read_data(t % n_score_bins, "n_score_bins", &
|
||||
group="tallies/tally" // to_str(i), option="collective")
|
||||
call read_data(t % score_bins, "score_bins", &
|
||||
group="tallies/tally" // to_str(i), length=t % n_score_bins, &
|
||||
option="collective")
|
||||
call read_data(t % scatt_order, "scatt_order", &
|
||||
group="tallies/tally" // to_str(i), length=t % n_score_bins, &
|
||||
option="collective")
|
||||
call sp % read_data(t % n_score_bins, "n_score_bins", &
|
||||
group="tallies/tally" // to_str(i))
|
||||
call sp % read_data(t % score_bins, "score_bins", &
|
||||
group="tallies/tally" // to_str(i), length=t % n_score_bins)
|
||||
call sp % read_data(t % scatt_order, "scatt_order", &
|
||||
group="tallies/tally" // to_str(i), length=t % n_score_bins)
|
||||
|
||||
! Write number of user score bins
|
||||
call read_data(t % n_user_score_bins, "n_user_score_bins", &
|
||||
group="tallies/tally" // to_str(i), option="collective")
|
||||
call sp % read_data(t % n_user_score_bins, "n_user_score_bins", &
|
||||
group="tallies/tally" // to_str(i))
|
||||
|
||||
end do TALLY_METADATA
|
||||
|
||||
|
|
@ -642,21 +627,21 @@ contains
|
|||
if (master) then
|
||||
|
||||
! Read number of realizations for global tallies
|
||||
call read_data(n_realizations, "n_realizations")
|
||||
call sp % read_data(n_realizations, "n_realizations", collect=.false.)
|
||||
|
||||
! Read number of global tallies
|
||||
call read_data(int_array(1), "n_global_tallies")
|
||||
call sp % read_data(int_array(1), "n_global_tallies", collect=.false.)
|
||||
if (int_array(1) /= N_GLOBAL_TALLIES) then
|
||||
message = "Number of global tallies does not match in state point."
|
||||
call fatal_error()
|
||||
end if
|
||||
|
||||
! Read global tally data
|
||||
call read_tally_result(global_tallies, "global_tallies", &
|
||||
call sp % read_tally_result(global_tallies, "global_tallies", &
|
||||
n1=N_GLOBAL_TALLIES, n2=1)
|
||||
|
||||
! Check if tally results are present
|
||||
call read_data(int_array(1), "tallies_present", group="tallies")
|
||||
call sp % read_data(int_array(1), "tallies_present", group="tallies", collect=.false.)
|
||||
|
||||
! Read in sum and sum squared
|
||||
if (int_array(1) == 1) then
|
||||
|
|
@ -666,12 +651,19 @@ contains
|
|||
t => tallies(i)
|
||||
|
||||
! Read sum and sum_sq for each bin
|
||||
call read_tally_result(t % results, "results", &
|
||||
call sp % read_tally_result(t % results, "results", &
|
||||
group="tallies/tally" // to_str(i), &
|
||||
n1=size(t % results, 1), n2=size(t % results, 2))
|
||||
|
||||
end do TALLY_RESULTS
|
||||
end if
|
||||
|
||||
#ifdef MPI
|
||||
! If using MPI, file needs to be closed and reopened in parallel
|
||||
! If serial, we cannot close the file or we will lose our file position
|
||||
call sp % file_close()
|
||||
# endif
|
||||
|
||||
end if
|
||||
|
||||
! Read source if in eigenvalue mode
|
||||
|
|
@ -681,7 +673,7 @@ contains
|
|||
if (source_separate) then
|
||||
|
||||
! Close statepoint file
|
||||
call file_close('parallel')
|
||||
call sp % file_close()
|
||||
|
||||
! Set filename for source
|
||||
filename = trim(path_output) // 'source.' // &
|
||||
|
|
@ -696,28 +688,27 @@ contains
|
|||
message = "Loading source file " // trim(filename) // "..."
|
||||
call write_message(1)
|
||||
|
||||
! Create statepoint file
|
||||
call file_open(filename, 'parallel', 'r')
|
||||
! Open source file
|
||||
call sp % file_open(filename, 'r', serial = .false.)
|
||||
|
||||
else
|
||||
|
||||
#ifdef MPI
|
||||
! Reopen statepoint file in parallel, but only if MPI
|
||||
! We will compute the position where the source begins
|
||||
call sp % file_open(path_state_point, 'r', serial = .false.)
|
||||
#endif
|
||||
|
||||
end if
|
||||
|
||||
! Write out source
|
||||
call read_source_bank()
|
||||
|
||||
! Close file
|
||||
if (source_separate) then
|
||||
call file_close('parallel')
|
||||
else
|
||||
call file_close('parallel')
|
||||
end if
|
||||
|
||||
else
|
||||
|
||||
! Close file if not in eigenvalue mode
|
||||
call file_close('parallel')
|
||||
call sp % read_source_bank()
|
||||
|
||||
end if
|
||||
|
||||
! Close file
|
||||
call sp % file_close()
|
||||
|
||||
end subroutine load_state_point
|
||||
|
||||
subroutine read_source
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue