diff --git a/src/DEPENDENCIES b/src/DEPENDENCIES index 08f362792e..5fd957902c 100644 --- a/src/DEPENDENCIES +++ b/src/DEPENDENCIES @@ -61,6 +61,15 @@ fission.o: global.o fission.o: interpolation.o fission.o: search.o +fixed_source.o: constants.o +fixed_source.o: global.o +fixed_source.o: output.o +fixed_source.o: physics.o +fixed_source.o: source.o +fixed_source.o: string.o +fixed_source.o: tally.o +fixed_source.o: timing.o + geometry.o: constants.o geometry.o: datatypes.o geometry.o: error.o diff --git a/src/OBJECTS b/src/OBJECTS index 69229e1819..0daf0f16fe 100644 --- a/src/OBJECTS +++ b/src/OBJECTS @@ -13,6 +13,7 @@ energy_grid.o \ error.o \ finalize.o \ fission.o \ +fixed_source.o \ geometry.o \ geometry_header.o \ global.o \ diff --git a/src/fixed_source.F90 b/src/fixed_source.F90 new file mode 100644 index 0000000000..d58c44f7bd --- /dev/null +++ b/src/fixed_source.F90 @@ -0,0 +1,79 @@ +module fixed_source + + use constants, only: ZERO + use global + use output, only: write_message, header + use physics, only: transport + use source, only: get_source_particle + use string, only: to_str + use tally, only: synchronize_tallies + use timing, only: timer_start, timer_stop + +contains + + subroutine run_fixedsource() + + integer(8) :: i ! index over histories in single cycle + + if (master) call header("BEGIN SIMULATION", level=1) + + tallies_on = .true. + call timer_start(time_inactive) + + ! Allocate particle + allocate(p) + + ! ========================================================================== + ! LOOP OVER BATCHES + BATCH_LOOP: do current_batch = 1, n_batches + + call initialize_batch() + + ! Start timer for transport + call timer_start(time_transport) + + ! ======================================================================= + ! LOOP OVER PARTICLES + PARTICLE_LOOP: do i = 1, work + + ! grab source particle from bank + call get_source_particle(i) + + ! transport particle + call transport() + + end do PARTICLE_LOOP + + ! Accumulate time for transport + call timer_stop(time_transport) + + call timer_start(time_ic_tallies) + call synchronize_tallies() + call timer_stop(time_ic_tallies) + + end do BATCH_LOOP + + call timer_stop(time_active) + + ! ========================================================================== + ! END OF RUN WRAPUP + + if (master) call header("SIMULATION FINISHED", level=1) + + end subroutine run_fixedsource + +!=============================================================================== +! INITIALIZE_BATCH +!=============================================================================== + + subroutine initialize_batch() + + message = "Simulating batch " // trim(to_str(current_batch)) // "..." + call write_message() + + ! Reset total starting particle weight used for normalizing tallies + total_weight = ZERO + + end subroutine initialize_batch + +end module fixed_source diff --git a/src/initialize.F90 b/src/initialize.F90 index 6de01f6153..d6e3162d08 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -116,7 +116,7 @@ contains call create_tally_map() ! allocate banks and create source particles - call allocate_banks() + if (run_mode == MODE_CRITICALITY) call allocate_banks() call initialize_source() end if diff --git a/src/main.F90 b/src/main.F90 index 5de70d8f5d..9aae913461 100644 --- a/src/main.F90 +++ b/src/main.F90 @@ -1,11 +1,12 @@ program main - use constants, only: MODE_CRITICALITY, MODE_PLOTTING - use criticality, only: run_criticality - use finalize, only: finalize_run - use global, only: run_mode - use initialize, only: initialize_run - use plotter, only: run_plot + use constants, only: MODE_CRITICALITY, MODE_PLOTTING, MODE_FIXEDSOURCE + use criticality, only: run_criticality + use finalize, only: finalize_run + use fixed_source, only: run_fixedsource + use global, only: run_mode + use initialize, only: initialize_run + use plotter, only: run_plot implicit none @@ -14,6 +15,8 @@ program main ! start problem based on mode select case (run_mode) + case (MODE_FIXEDSOURCE) + call run_fixedsource() case (MODE_CRITICALITY) call run_criticality() case (MODE_PLOTTING)