mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-28 06:05:58 -04:00
Move openmc_finalize to C++
This commit is contained in:
parent
85a5af2f5f
commit
013aaba343
5 changed files with 84 additions and 95 deletions
|
|
@ -3,8 +3,6 @@
|
|||
|
||||
namespace openmc {
|
||||
|
||||
extern "C" void openmc_free_bank();
|
||||
|
||||
} // namespace openmc
|
||||
|
||||
#endif // OPENMC_FINALIZE_H
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ extern "C" int32_t gen_per_batch; //!< number of generations per batch
|
|||
extern "C" int64_t n_particles; //!< number of particles per generation
|
||||
|
||||
extern "C" int electron_treatment; //!< how to treat secondary electrons
|
||||
extern "C" double energy_cutoff[4]; //!< Energy cutoff in [eV] for each particle type
|
||||
extern "C" std::array<double, 4> energy_cutoff; //!< Energy cutoff in [eV] for each particle type
|
||||
extern "C" int legendre_to_tabular_points; //!< number of points to convert Legendres
|
||||
extern "C" int max_order; //!< Maximum Legendre order for multigroup data
|
||||
extern "C" int n_log_bins; //!< number of bins for logarithmic energy grid
|
||||
|
|
@ -82,7 +82,7 @@ extern std::unordered_set<int> statepoint_batch; //!< Batches when state should
|
|||
extern "C" int temperature_method; //!< method for choosing temperatures
|
||||
extern "C" double temperature_tolerance; //!< Tolerance in [K] on choosing temperatures
|
||||
extern "C" double temperature_default; //!< Default T in [K]
|
||||
extern "C" double temperature_range[2]; //!< Min/max T in [K] over which to load xs
|
||||
extern "C" std::array<double, 2> temperature_range; //!< Min/max T in [K] over which to load xs
|
||||
extern "C" int trace_batch; //!< Batch to trace particle on
|
||||
extern "C" int trace_gen; //!< Generation to trace particle on
|
||||
extern "C" int64_t trace_particle; //!< Particle ID to enable trace on
|
||||
|
|
|
|||
86
src/api.F90
86
src/api.F90
|
|
@ -49,7 +49,6 @@ module openmc_api
|
|||
public :: openmc_filter_get_type
|
||||
public :: openmc_filter_set_id
|
||||
public :: openmc_filter_set_type
|
||||
public :: openmc_finalize
|
||||
public :: openmc_find_cell
|
||||
public :: openmc_get_cell_index
|
||||
public :: openmc_get_keff
|
||||
|
|
@ -96,89 +95,6 @@ module openmc_api
|
|||
|
||||
contains
|
||||
|
||||
!===============================================================================
|
||||
! OPENMC_FINALIZE frees up memory by deallocating arrays and resetting global
|
||||
! variables
|
||||
!===============================================================================
|
||||
|
||||
function openmc_finalize() result(err) bind(C)
|
||||
integer(C_INT) :: err
|
||||
|
||||
interface
|
||||
subroutine openmc_free_bank() bind(C)
|
||||
end subroutine openmc_free_bank
|
||||
end interface
|
||||
|
||||
! Clear results
|
||||
err = openmc_reset()
|
||||
|
||||
! Reset global variables
|
||||
assume_separate = .false.
|
||||
check_overlaps = .false.
|
||||
confidence_intervals = .false.
|
||||
create_fission_neutrons = .true.
|
||||
electron_treatment = ELECTRON_LED
|
||||
energy_cutoff(:) = [ZERO, 1000.0_8, ZERO, ZERO]
|
||||
energy_max(:) = [INFINITY, INFINITY]
|
||||
energy_min(:) = [ZERO, ZERO]
|
||||
entropy_on = .false.
|
||||
gen_per_batch = 1
|
||||
index_entropy_mesh = -1
|
||||
index_ufs_mesh = -1
|
||||
keff = ONE
|
||||
legendre_to_tabular = .true.
|
||||
legendre_to_tabular_points = C_NONE
|
||||
n_batch_interval = 1
|
||||
n_lost_particles = 0
|
||||
n_particles = -1
|
||||
n_tallies = 0
|
||||
output_summary = .true.
|
||||
output_tallies = .true.
|
||||
particle_restart_run = .false.
|
||||
photon_transport = .false.
|
||||
pred_batches = .false.
|
||||
reduce_tallies = .true.
|
||||
res_scat_on = .false.
|
||||
res_scat_method = RES_SCAT_ARES
|
||||
res_scat_energy_min = 0.01_8
|
||||
res_scat_energy_max = 1000.0_8
|
||||
restart_run = .false.
|
||||
root_universe = -1
|
||||
run_CE = .true.
|
||||
run_mode = -1
|
||||
dagmc = .false.
|
||||
satisfy_triggers = .false.
|
||||
call openmc_set_seed(DEFAULT_SEED)
|
||||
source_latest = .false.
|
||||
source_separate = .false.
|
||||
source_write = .true.
|
||||
survival_biasing = .false.
|
||||
temperature_default = 293.6_8
|
||||
temperature_method = TEMPERATURE_NEAREST
|
||||
temperature_multipole = .false.
|
||||
temperature_range = [ZERO, ZERO]
|
||||
temperature_tolerance = 10.0_8
|
||||
total_gen = 0
|
||||
trigger_on = .false.
|
||||
ufs = .false.
|
||||
urr_ptables_on = .true.
|
||||
verbosity = 7
|
||||
weight_cutoff = 0.25_8
|
||||
weight_survive = ONE
|
||||
write_all_tracks = .false.
|
||||
write_initial_source = .false.
|
||||
|
||||
! Deallocate arrays
|
||||
call free_memory()
|
||||
|
||||
err = 0
|
||||
#ifdef OPENMC_MPI
|
||||
! Free all MPI types
|
||||
call openmc_free_bank()
|
||||
#endif
|
||||
|
||||
end function openmc_finalize
|
||||
|
||||
!===============================================================================
|
||||
! OPENMC_FIND_CELL determines what cell contains a given point in space
|
||||
!===============================================================================
|
||||
|
|
@ -280,7 +196,7 @@ contains
|
|||
! program
|
||||
!===============================================================================
|
||||
|
||||
subroutine free_memory()
|
||||
subroutine free_memory() bind(C)
|
||||
|
||||
use cmfd_header
|
||||
use photon_header
|
||||
|
|
|
|||
|
|
@ -1,14 +1,89 @@
|
|||
#include "openmc/finalize.h"
|
||||
|
||||
#include "openmc/capi.h"
|
||||
#include "openmc/constants.h"
|
||||
#include "openmc/geometry.h"
|
||||
#include "openmc/message_passing.h"
|
||||
#include "openmc/nuclide.h"
|
||||
#include "openmc/random_lcg.h"
|
||||
#include "openmc/settings.h"
|
||||
#include "openmc/simulation.h"
|
||||
|
||||
namespace openmc {
|
||||
// Functions defined in Fortran
|
||||
extern "C" void free_memory();
|
||||
|
||||
void openmc_free_bank()
|
||||
int openmc_finalize()
|
||||
{
|
||||
using namespace openmc;
|
||||
|
||||
// Clear results
|
||||
openmc_reset();
|
||||
|
||||
// Reset global variables
|
||||
settings::assume_separate = false;
|
||||
settings::check_overlaps = false;
|
||||
settings::confidence_intervals = false;
|
||||
settings::create_fission_neutrons = true;
|
||||
settings::electron_treatment = ELECTRON_LED;
|
||||
settings::energy_cutoff = {0.0, 1000.0, 0.0, 0.0};
|
||||
settings::entropy_on = false;
|
||||
settings::gen_per_batch = 1;
|
||||
settings::index_entropy_mesh = -1;
|
||||
settings::index_ufs_mesh = -1;
|
||||
settings::legendre_to_tabular = true;
|
||||
settings::legendre_to_tabular_points = -1;
|
||||
settings::n_particles = -1;
|
||||
settings::output_summary = true;
|
||||
settings::output_tallies = true;
|
||||
settings::particle_restart_run = false;
|
||||
settings::photon_transport = false;
|
||||
settings::reduce_tallies = true;
|
||||
settings::res_scat_on = false;
|
||||
settings::res_scat_method = RES_SCAT_ARES;
|
||||
settings::res_scat_energy_min = 0.01;
|
||||
settings::res_scat_energy_max = 1000.0;
|
||||
settings::restart_run = false;
|
||||
settings::run_CE = true;
|
||||
settings::run_mode = -1;
|
||||
settings::dagmc = false;
|
||||
settings::source_latest = false;
|
||||
settings::source_separate = false;
|
||||
settings::source_write = true;
|
||||
settings::survival_biasing = false;
|
||||
settings::temperature_default = 293.6;
|
||||
settings::temperature_method = TEMPERATURE_NEAREST;
|
||||
settings::temperature_multipole = false;
|
||||
settings::temperature_range = {0.0, 0.0};
|
||||
settings::temperature_tolerance = 10.0;
|
||||
settings::trigger_on = false;
|
||||
settings::trigger_predict = false;
|
||||
settings::trigger_batch_interval = 1;
|
||||
settings::ufs_on = false;
|
||||
settings::urr_ptables_on = true;
|
||||
settings::verbosity = 7;
|
||||
settings::weight_cutoff = 0.25;
|
||||
settings::weight_survive = 1.0;
|
||||
settings::write_all_tracks = false;
|
||||
settings::write_initial_source = false;
|
||||
|
||||
simulation::keff = 1.0;
|
||||
simulation::n_lost_particles = 0;
|
||||
simulation::satisfy_triggers = false;
|
||||
simulation::total_gen = 0;
|
||||
|
||||
energy_max = {INFTY, INFTY};
|
||||
energy_min = {0.0, 0.0};
|
||||
n_tallies = 0;
|
||||
openmc_root_universe = -1;
|
||||
openmc_set_seed(DEFAULT_SEED);
|
||||
|
||||
// Deallocate arrays
|
||||
free_memory();
|
||||
|
||||
// Free all MPI types
|
||||
#ifdef OPENMC_MPI
|
||||
MPI_Type_free(&mpi::bank);
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace openmc
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ int32_t gen_per_batch {1};
|
|||
int64_t n_particles {-1};
|
||||
|
||||
int electron_treatment {ELECTRON_TTB};
|
||||
double energy_cutoff[4] {0.0, 1000.0, 0.0, 0.0};
|
||||
std::array<double, 4> energy_cutoff {0.0, 1000.0, 0.0, 0.0};
|
||||
int legendre_to_tabular_points {C_NONE};
|
||||
int max_order {0};
|
||||
int n_log_bins {8000};
|
||||
|
|
@ -93,7 +93,7 @@ std::unordered_set<int> statepoint_batch;
|
|||
int temperature_method {TEMPERATURE_NEAREST};
|
||||
double temperature_tolerance {10.0};
|
||||
double temperature_default {293.6};
|
||||
double temperature_range[2] {0.0, 0.0};
|
||||
std::array<double, 2> temperature_range {0.0, 0.0};
|
||||
int trace_batch;
|
||||
int trace_gen;
|
||||
int64_t trace_particle;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue