diff --git a/src/utils/memory_usage.py b/src/utils/memory_usage.py new file mode 100755 index 000000000..3751af497 --- /dev/null +++ b/src/utils/memory_usage.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python + +# This script reads a cross_sections.out file, adds up the memory usage for each +# nuclide and S(a,b) table, and displays the total memory usage + +import sys +import os +import matplotlib.pyplot as pyplot + +if len(sys.argv) > 1: + # Get path to cross_sections.out file from command line argument + filename = sys.argv[-1] +else: + # Set default path for cross_sections.out + filename = 'cross_sections.out' + if not os.path.exists(filename): + raise OSError('Could not find cross_sections.out file!') + +# Open file handle for cross_sections.out file +f = open(filename, 'r') + +# Initialize memory size arrays +memory_xs = [] +memory_angle = [] +memory_energy = [] +memory_urr = [] +memory_total = [] +memory_sab = [] + +while True: + # Read next line in file + line = f.readline() + + # Check for EOF + if line == '': + break + + # Look for block listing memory usage for a nuclide + words = line.split() + if len(words) == 2 and words[0] == 'Memory': + memory_xs.append(int(f.readline().split()[-2])) + memory_angle.append(int(f.readline().split()[-2])) + memory_energy.append(int(f.readline().split()[-2])) + memory_urr.append(int(f.readline().split()[-2])) + memory_total.append(int(f.readline().split()[-2])) + + # Look for memory usage for S(a,b) table + if len(words) == 5 and words[1] == 'Used': + memory_sab.append(int(words[-2])) + +# Write out summary memory usage +print('Memory Requirements') +print(' Reaction Cross Sections = ' + str(sum(memory_xs))) +print(' Secondary Angle Distributions = ' + str(sum(memory_angle))) +print(' Secondary Energy Distributions = ' + str(sum(memory_energy))) +print(' Probability Tables = ' + str(sum(memory_urr))) +print(' S(a,b) Tables = ' + str(sum(memory_sab))) +print(' Total = ' + str(sum(memory_total))) + +# Histograms +# pyplot.hist(memory_xs,100) +# pyplot.title('Memory for Cross Sections') +# pyplot.show()