Move most important arrays out of global module and into their respective headers

This commit is contained in:
Paul Romano 2017-08-10 11:42:55 -05:00
parent dc3944c912
commit c063b8d9db
10 changed files with 97 additions and 64 deletions

View file

@ -1,5 +1,7 @@
module geometry_header
use, intrinsic :: ISO_C_BINDING
use algorithm, only: find
use constants, only: HALF, TWO, THREE, INFINITY, K_BOLTZMANN, &
MATERIAL_VOID, NONE
@ -157,6 +159,19 @@ module geometry_header
! array index of the root universe
integer :: root_universe = -1
integer(C_INT32_T), bind(C) :: n_cells ! # of cells
integer(C_INT32_T), bind(C) :: n_universes ! # of universes
integer(C_INT32_T), bind(C) :: n_lattices ! # of lattices
type(Cell), allocatable, target :: cells(:)
type(Universe), allocatable, target :: universes(:)
type(LatticeContainer), allocatable, target :: lattices(:)
! Dictionaries which map user IDs to indices in the global arrays
type(DictIntInt) :: cell_dict
type(DictIntInt) :: universe_dict
type(DictIntInt) :: lattice_dict
contains
!===============================================================================

View file

@ -9,64 +9,30 @@ module global
use bank_header, only: Bank
use cmfd_header
use constants
use dict_header, only: DictCharInt, DictIntInt
use geometry_header, only: Cell, Universe, Lattice, LatticeContainer
use material_header, only: Material
use mgxs_header
use plot_header, only: ObjectPlot
use set_header, only: SetInt
use stl_vector, only: VectorInt
use surface_header, only: SurfaceContainer
use source_header, only: SourceDistribution
use tally_header, only: TallyObject, TallyDerivative
use tally_filter_header, only: TallyFilterContainer, TallyFilterMatch
use trigger_header, only: KTrigger
use timer_header, only: Timer
use volume_header, only: VolumeCalculation
! Inherit module variables from nuclide/S(a,b) modules
use nuclide_header
use sab_header
! Inherit meshes array
! Inherit module variables from other modules
use geometry_header
use material_header
use mesh_header
use mgxs_header
use nuclide_header
use plot_header
use sab_header
use surface_header
use tally_filter_header
use tally_header
use volume_header
implicit none
! ============================================================================
! GEOMETRY-RELATED VARIABLES
! Main arrays
type(Cell), allocatable, target :: cells(:)
type(Universe), allocatable, target :: universes(:)
type(LatticeContainer), allocatable, target :: lattices(:)
type(SurfaceContainer), allocatable, target :: surfaces(:)
type(Material), allocatable, target :: materials(:)
type(ObjectPlot), allocatable, target :: plots(:)
type(VolumeCalculation), allocatable :: volume_calcs(:)
! Size of main arrays
integer(C_INT32_T), bind(C) :: n_cells ! # of cells
integer :: n_universes ! # of universes
integer :: n_lattices ! # of lattices
integer :: n_surfaces ! # of surfaces
integer(C_INT32_T), bind(C) :: n_materials ! # of materials
integer :: n_plots ! # of plots
! These dictionaries provide a fast lookup mechanism -- the key is the
! user-specified identifier and the value is the index in the corresponding
! array
type(DictIntInt) :: cell_dict
type(DictIntInt) :: universe_dict
type(DictIntInt) :: lattice_dict
type(DictIntInt) :: surface_dict
type(DictIntInt) :: material_dict
type(DictIntInt) :: mesh_dict
type(DictIntInt) :: filter_dict
type(DictIntInt) :: tally_dict
type(DictIntInt) :: plot_dict
! Number of lost particles
integer :: n_lost_particles
@ -74,10 +40,6 @@ module global
! ENERGY TREATMENT RELATED VARIABLES
logical :: run_CE = .true. ! Run in CE mode?
! Cross section caches
type(NuclideMicroXS), allocatable :: micro_xs(:) ! Cache for each nuclide
type(MaterialMacroXS) :: material_xs ! Cache for current material
! ============================================================================
! CONTINUOUS-ENERGY CROSS SECTION RELATED VARIABLES
@ -109,9 +71,6 @@ module global
! ============================================================================
! TALLY-RELATED VARIABLES
type(TallyObject), allocatable, target :: tallies(:)
type(TallyFilterContainer), allocatable, target :: filters(:)
type(TallyFilterMatch), allocatable :: filter_matches(:)
! Pointers for different tallies
type(TallyObject), pointer :: user_tallies(:) => null()
@ -149,17 +108,10 @@ module global
!$omp threadprivate(global_tally_collision, global_tally_absorption, &
!$omp& global_tally_tracklength, global_tally_leakage)
integer :: n_meshes = 0 ! # of structured meshes
integer :: n_user_meshes = 0 ! # of structured user meshes
integer :: n_filters = 0 ! # of filters
integer :: n_user_filters = 0 ! # of user filters
integer(C_INT32_T), bind(C) :: n_tallies = 0 ! # of tallies
integer :: n_user_tallies = 0 ! # of user tallies
! Tally derivatives
type(TallyDerivative), allocatable :: tally_derivs(:)
!$omp threadprivate(tally_derivs)
! Normalization for statistics
integer :: n_realizations = 0 ! # of independent realizations
real(8) :: total_weight ! total starting particle weight in realization
@ -407,7 +359,7 @@ module global
character(10), allocatable :: res_scat_nuclides(:)
!$omp threadprivate(micro_xs, material_xs, fission_bank, n_bank, &
!$omp& trace, thread_id, current_work, filter_matches)
!$omp& trace, thread_id, current_work)
contains

View file

@ -1,6 +1,9 @@
module material_header
use, intrinsic :: ISO_C_BINDING
use constants
use dict_header, only: DictIntInt
use error
use nuclide_header
use sab_header
@ -51,6 +54,13 @@ module material_header
procedure :: assign_sab_tables => material_assign_sab_tables
end type Material
integer(C_INT32_T), bind(C) :: n_materials ! # of materials
type(Material), allocatable, target :: materials(:)
! Dictionary that maps user IDs to indices in 'materials'
type(DictIntInt) :: material_dict
contains
!===============================================================================

View file

@ -1,22 +1,24 @@
module mesh_header
use, intrinsic :: ISO_C_BINDING
use hdf5
use constants, only: NO_BIN_FOUND
use dict_header, only: DictIntInt
use hdf5_interface
use string, only: to_str
implicit none
private
public :: RegularMesh, meshes
public :: RegularMesh, meshes, n_meshes, mesh_dict
!===============================================================================
! STRUCTUREDMESH represents a tessellation of n-dimensional Euclidean space by
! congruent squares or cubes
!===============================================================================
type RegularMesh
type, public :: RegularMesh
integer :: id ! user-specified id
integer :: type ! rectangular, hexagonal
integer :: n_dimension ! rank of mesh
@ -34,8 +36,13 @@ module mesh_header
procedure :: to_hdf5 => regular_to_hdf5
end type RegularMesh
integer(C_INT32_T), bind(C) :: n_meshes = 0 ! # of structured meshes
type(RegularMesh), allocatable, target :: meshes(:)
! Dictionary that maps user IDs to indices in 'meshes'
type(DictIntInt) :: mesh_dict
contains
!===============================================================================

View file

@ -166,6 +166,10 @@ module nuclide_header
integer(C_INT), bind(C) :: n_nuclides
type(DictCharInt) :: nuclide_dict
! Cross section caches
type(NuclideMicroXS), allocatable :: micro_xs(:) ! Cache for each nuclide
type(MaterialMacroXS) :: material_xs ! Cache for current material
! Minimum/maximum energies
real(8) :: energy_min_neutron = ZERO
real(8) :: energy_max_neutron = INFINITY

View file

@ -1,7 +1,10 @@
module plot_header
use, intrinsic :: ISO_C_BINDING
use constants
use mesh_header, only: RegularMesh
use dict_header, only: DictIntInt
use mesh_header, only: RegularMesh
implicit none
@ -50,4 +53,11 @@ module plot_header
integer, parameter :: PLOT_COLOR_CELLS = 1
integer, parameter :: PLOT_COLOR_MATS = 2
integer(C_INT32_T), bind(C) :: n_plots ! # of plots
type(ObjectPlot), allocatable, target :: plots(:)
! Dictionary that maps user IDs to indices in 'plots'
type(DictIntInt) :: plot_dict
end module plot_header

View file

@ -1,6 +1,9 @@
module surface_header
use, intrinsic :: ISO_C_BINDING
use constants, only: NONE, ONE, TWO, ZERO, HALF, INFINITY, FP_COINCIDENT
use dict_header, only: DictIntInt
implicit none
@ -193,6 +196,13 @@ module surface_header
procedure :: normal => quadric_normal
end type SurfaceQuadric
integer(C_INT32_T), bind(C) :: n_surfaces ! # of surfaces
type(SurfaceContainer), allocatable, target :: surfaces(:)
! Dictionary that maps user IDs to indices in 'surfaces'
type(DictIntInt) :: surface_dict
contains
!===============================================================================

View file

@ -1,6 +1,9 @@
module tally_filter_header
use, intrinsic :: ISO_C_BINDING
use constants, only: MAX_LINE_LEN
use dict_header, only: DictIntInt
use particle_header, only: Particle
use stl_vector, only: VectorInt, VectorReal
@ -94,6 +97,15 @@ module tally_filter_header
class(TallyFilter), allocatable :: obj
end type TallyFilterContainer
integer :: n_filters = 0 ! # of filters
type(TallyFilterContainer), allocatable, target :: filters(:)
type(TallyFilterMatch), allocatable :: filter_matches(:)
!$omp threadprivate(filter_matches)
! Dictionary that maps user IDs to indices in 'filters'
type(DictIntInt) :: filter_dict
contains
!===============================================================================

View file

@ -5,6 +5,7 @@ module tally_header
use hdf5
use constants, only: NONE, N_FILTER_TYPES
use dict_header, only: DictIntInt
use tally_filter_header, only: TallyFilterContainer
use trigger_header, only: TriggerObject
@ -93,6 +94,16 @@ module tally_header
procedure :: read_results_hdf5
end type TallyObject
integer(C_INT32_T), bind(C) :: n_tallies = 0 ! # of tallies
type(TallyObject), allocatable, target :: tallies(:)
type(TallyDerivative), allocatable :: tally_derivs(:)
!$omp threadprivate(tally_derivs)
! Dictionary that maps user IDs to indices in 'tallies'
type(DictIntInt) :: tally_dict
contains
subroutine write_results_hdf5(this, group_id)

View file

@ -16,6 +16,8 @@ module volume_header
procedure :: from_xml => volume_from_xml
end type VolumeCalculation
type(VolumeCalculation), allocatable :: volume_calcs(:)
contains
subroutine volume_from_xml(this, node_vol)