From 13005d2129a5c7327c7346964b782ae0d6ce8bca Mon Sep 17 00:00:00 2001 From: "Jedidiah E. Phillips" Date: Sat, 23 Feb 2013 18:04:33 -0500 Subject: [PATCH 01/36] Added plot_tally_data.py --- src/utils/plot_tally_data.py | 297 +++++++++++++++++++++++++++++++++++ 1 file changed, 297 insertions(+) create mode 100644 src/utils/plot_tally_data.py diff --git a/src/utils/plot_tally_data.py b/src/utils/plot_tally_data.py new file mode 100644 index 0000000000..c1a478974f --- /dev/null +++ b/src/utils/plot_tally_data.py @@ -0,0 +1,297 @@ +'''Python script to plot tally data generated by OpenMC.''' + +#!/usr/bin/env python + +import sys +from statepoint import * + +# Color intensity dependent on individual score? + +from PyQt4.QtCore import * +from PyQt4.QtGui import * +import matplotlib.pyplot as plt +from matplotlib.figure import Figure +from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas +from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar +import numpy as np + +class AppForm(QMainWindow): + def __init__(self, parent=None): + QMainWindow.__init__(self, parent) + + # Read data from source or leakage fraction file + self.get_file_data() + self.main_frame = QWidget() + self.setCentralWidget(self.main_frame) + + # Create the Figure, Canvas, and Axes + self.dpi = 100 + self.fig = Figure((5.0, 15.0), dpi=self.dpi) + self.canvas = FigureCanvas(self.fig) + self.canvas.setParent(self.main_frame) + self.axes = self.fig.add_subplot(111) + + # Create the navigation toolbar, tied to the canvas + self.mpl_toolbar = NavigationToolbar(self.canvas, self.main_frame) + + # Grid layout at bottom + self.grid = QGridLayout() + + # Overall layout + self.vbox = QVBoxLayout() + self.vbox.addWidget(self.canvas) + self.vbox.addWidget(self.mpl_toolbar) + self.vbox.addLayout(self.grid) + self.main_frame.setLayout(self.vbox) + + # Tally selections + label_tally = QLabel("Tally:") + self.tally = QComboBox() + self.tally.addItems([(str(i + 1)) for i in range(self.n_tallies)]) + self.connect(self.tally, SIGNAL('activated(int)'), + self._update) + self.connect(self.tally, SIGNAL('activated(int)'), + self.populate_boxes) + self.connect(self.tally, SIGNAL('activated(int)'), + self.on_draw) + + # Planar basis + label_basis = QLabel("Basis:") + self.basis = QComboBox() + self.basis.addItems(['xy', 'yz', 'xz']) + + # Update window when 'Basis' selection is changed + self.connect(self.basis, SIGNAL('activated(int)'), + self._update) + self.connect(self.basis, SIGNAL('activated(int)'), + self.populate_boxes) + self.connect(self.basis, SIGNAL('activated(int)'), + self.on_draw) + + # Axial level within selected basis + label_axial_level = QLabel("Axial Level:") + self.axial_level = QComboBox() + self.axial_level.addItems([str(i+1) for i in range(self.nz)]) + self.connect(self.axial_level, SIGNAL('activated(int)'), + self.on_draw) + + self.label_filters = QLabel("Filter options:") + + # Labels for all possible filters + self.labels = {'cell': 'Cell: ', 'cellborn': 'Cell born: ', + 'surface': 'Surface: ', 'material': 'Material', + 'universe': 'Universe: ', 'energyin': 'Energy in: ', + 'energyout': 'Energy out: '} + + # Empty reusable labels + self.qlabels = {} + for j in range(8): + self.nextLabel = QLabel + self.qlabels[j] = self.nextLabel + + # Reusable comboboxes labelled with filter names + self.boxes = {} +# n = 4 + for key in self.labels.keys(): + self.nextBox = QComboBox() + self.connect(self.nextBox, SIGNAL('activated(int)'), + self.on_draw) + self.boxes[key] = self.nextBox +# self.grid.addWidget(self.nextBox, n, 1) +# n += 1 + + # Combobox to select among scores + self.score_label = QLabel("Score:") + self.scoreBox = QComboBox() + for item in self.tally_scores[0]: + self.scoreBox.addItems(str(item)) + self.connect(self.scoreBox, SIGNAL('activated(int)'), + self.on_draw) + + # Fill layout + self.grid.addWidget(label_tally, 0, 0) + self.grid.addWidget(self.tally, 0, 1) + self.grid.addWidget(label_basis, 1, 0) + self.grid.addWidget(self.basis, 1, 1) + self.grid.addWidget(label_axial_level, 2, 0) + self.grid.addWidget(self.axial_level, 2, 1) + self.grid.addWidget(self.label_filters, 3, 0) + + self.populate_boxes() + self.on_draw() + + def get_file_data(self): + # Get data file name from "open file" browser + filename = QFileDialog.getOpenFileName(self, 'Select statepoint file', '.') + + # Create StatePoint object and read in data + self.datafile = StatePoint(filename) + self.datafile.read_results() + self.datafile.generate_stdev() + + self.setWindowTitle('Core Map Tool :' + str(self.datafile.path)) + + # Set maximum colorbar value by maximum tally data value + self.maxvalue = self.datafile.tallies[0].results.max() + + self.labelList = [] + + # Read mesh dimensions + for mesh in self.datafile.meshes: + self.nx = mesh.dimension[0] + self.ny = mesh.dimension[1] + self.nz = mesh.dimension[2] + + # Read filter types from statepoint file + self.n_tallies = len(self.datafile.tallies) + self.tally_list = [] + for tally in self.datafile.tallies: + self.filter_types = [] + for f in tally.filters: + self.filter_types.append(f) + self.tally_list.append(self.filter_types) + + # Read score types from statepoint file + self.tally_scores = [] + for tally in self.datafile.tallies: + self.score_types = [] + for s in tally.scores: + self.score_types.append(s) + self.tally_scores.append(self.score_types) + print 'self.tally_scores = ', self.tally_scores + + def on_draw(self): + """ Redraws the figure + """ + + print 'Calling on_draw...' + # Get selected basis, axial_level and stage + basis = self.basis.currentIndex() + 1 + axial_level = self.axial_level.currentIndex() + 1 + + # Create spec_list + spec_list = [] + for tally in self.datafile.tallies[self.tally.currentIndex()].filters.values(): + if tally.type == 'mesh': + continue + index = self.boxes[tally.type].currentIndex() + spec_list.append((tally.type, index)) + + if self.basis.currentText() == 'xy': + matrix = np.zeros((self.nx, self.ny)) + for i in range(self.nx): + for j in range(self.ny): + matrix[i,j] = self.datafile.get_value(self.tally.currentIndex(), spec_list + [('mesh', (i, j, axial_level))], self.scoreBox.currentIndex())[0] + + elif self.basis.currentText() == 'yz': + matrix = np.zeros((self.ny, self.nz)) + for i in range(self.ny): + for j in range(self.nz): + matrix[i,j] = self.datafile.get_value(self.tally.currentIndex(), spec_list + [('mesh', (axial_level, i, j))], self.scoreBox.currentIndex())[0] + + else: + matrix = np.zeros((self.nx, self.nz)) + for i in range(self.nx): + for j in range(self.nz): + matrix[i,j] = self.datafile.get_value(self.tally.currentIndex(), spec_list + [('mesh', (i, axial_level, j))], self.scoreBox.currentIndex())[0] + + print spec_list + + # Clear the figure + self.fig.clear() + + # Make figure, set up color bar + self.axes = self.fig.add_subplot(111) + cax = self.axes.imshow(matrix, vmin=0.0, vmax=self.maxvalue, interpolation="nearest") + self.fig.colorbar(cax) + + self.axes.set_xticks([]) + self.axes.set_yticks([]) + self.axes.set_aspect('equal') + + # Draw canvas + self.canvas.draw() + + def _update(self): + '''Updates widget to display new relevant comboboxes and figure data + ''' + print 'Calling _update...' + + # Clear axial level combobox + self.axial_level.clear() + + # Repopulate axial level combobox based on current basis selection + if (self.basis.currentText() == 'xy'): + self.axial_level.addItems([str(i+1) for i in range(self.nz)]) + elif (self.basis.currentText() == 'yz'): + self.axial_level.addItems([str(i+1) for i in range(self.nx)]) + else: + self.axial_level.addItems([str(i+1) for i in range(self.ny)]) + + # Determine maximum value from current tally data set + self.maxvalue = self.datafile.tallies[self.tally.currentIndex()].results.max() + print self.maxvalue + + # Clear and hide old filter labels + for item in self.labelList: + item.clear() + + # Clear and hide old filter boxes + for j in self.labels: + self.boxes[j].clear() + self.boxes[j].setParent(None) + + self.update() + + def populate_boxes(self): + print 'Calling populate_boxes...' + + n = 4 + labels = {'cell': 'Cell : ', + 'cellborn': 'Cell born: ', + 'surface': 'Surface: ', + 'material': 'Material: ', + 'universe': 'Universe: '} + + # For each filter in newly-selected tally, name a label and fill the + # relevant combobox with options + for element in self.tally_list[self.tally.currentIndex()]: + nextFilter = self.datafile.tallies[self.tally.currentIndex()].filters[element] + if element == 'mesh': + continue + + label = QLabel(self.labels[element]) + self.labelList.append(label) + combobox = self.boxes[element] + self.grid.addWidget(label, n, 0) + self.grid.addWidget(combobox, n, 1) + n += 1 + + print element + if element in ['cell', 'cellborn', 'surface', 'material', 'universe']: + combobox.addItems([str(i) for i in nextFilter.bins]) + for i in nextFilter.bins: + print i + + elif element == 'energyin' or element == 'energyout': + for i in range(nextFilter.length): + text = str(nextFilter.bins[i]) + ' to ' + str(nextFilter.bins[i+1]) + combobox.addItem(text) + + self.scoreBox.clear() + for item in self.tally_scores[self.tally.currentIndex()]: + self.scoreBox.addItem(str(item)) + self.grid.addWidget(self.score_label, n, 0) + self.grid.addWidget(self.scoreBox, n, 1) + + + +def main(): + app = QApplication(sys.argv) + form = AppForm() + form.show() + app.exec_() + + +if __name__ == "__main__": + main() From 54ba58c7b66e1d1e4bc69bec338a0a2bc23680c6 Mon Sep 17 00:00:00 2001 From: "Jedidiah E. Phillips" Date: Fri, 1 Mar 2013 12:43:14 -0500 Subject: [PATCH 02/36] updated plot_mesh_tally.py --- ...{plot_tally_data.py => plot_mesh_tally.py} | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) rename src/utils/{plot_tally_data.py => plot_mesh_tally.py} (95%) diff --git a/src/utils/plot_tally_data.py b/src/utils/plot_mesh_tally.py similarity index 95% rename from src/utils/plot_tally_data.py rename to src/utils/plot_mesh_tally.py index c1a478974f..625304105e 100644 --- a/src/utils/plot_tally_data.py +++ b/src/utils/plot_mesh_tally.py @@ -71,7 +71,6 @@ class AppForm(QMainWindow): # Axial level within selected basis label_axial_level = QLabel("Axial Level:") self.axial_level = QComboBox() - self.axial_level.addItems([str(i+1) for i in range(self.nz)]) self.connect(self.axial_level, SIGNAL('activated(int)'), self.on_draw) @@ -91,14 +90,11 @@ class AppForm(QMainWindow): # Reusable comboboxes labelled with filter names self.boxes = {} -# n = 4 for key in self.labels.keys(): self.nextBox = QComboBox() self.connect(self.nextBox, SIGNAL('activated(int)'), self.on_draw) self.boxes[key] = self.nextBox -# self.grid.addWidget(self.nextBox, n, 1) -# n += 1 # Combobox to select among scores self.score_label = QLabel("Score:") @@ -117,6 +113,7 @@ class AppForm(QMainWindow): self.grid.addWidget(self.axial_level, 2, 1) self.grid.addWidget(self.label_filters, 3, 0) + self._update() self.populate_boxes() self.on_draw() @@ -129,7 +126,7 @@ class AppForm(QMainWindow): self.datafile.read_results() self.datafile.generate_stdev() - self.setWindowTitle('Core Map Tool :' + str(self.datafile.path)) + self.setWindowTitle('Core Map Tool : ' + str(self.datafile.path)) # Set maximum colorbar value by maximum tally data value self.maxvalue = self.datafile.tallies[0].results.max() @@ -137,10 +134,8 @@ class AppForm(QMainWindow): self.labelList = [] # Read mesh dimensions - for mesh in self.datafile.meshes: - self.nx = mesh.dimension[0] - self.ny = mesh.dimension[1] - self.nz = mesh.dimension[2] +# for mesh in self.datafile.meshes: +# self.nx, self.ny, self.nz = mesh.dimension # Read filter types from statepoint file self.n_tallies = len(self.datafile.tallies) @@ -202,7 +197,7 @@ class AppForm(QMainWindow): # Make figure, set up color bar self.axes = self.fig.add_subplot(111) - cax = self.axes.imshow(matrix, vmin=0.0, vmax=self.maxvalue, interpolation="nearest") + cax = self.axes.imshow(matrix, vmin=0.0, vmax=matrix.max(), interpolation="nearest") self.fig.colorbar(cax) self.axes.set_xticks([]) @@ -217,6 +212,10 @@ class AppForm(QMainWindow): ''' print 'Calling _update...' + self.mesh = self.datafile.meshes[self.datafile.tallies[self.tally.currentIndex()].filters['mesh'].bins[0] - 1] + + self.nx, self.ny, self.nz = self.mesh.dimension + # Clear axial level combobox self.axial_level.clear() From 434fc4e94e86c4b268ceb6911f6593cc4c7f7573 Mon Sep 17 00:00:00 2001 From: Bryan Herman Date: Fri, 12 Apr 2013 10:49:18 -0700 Subject: [PATCH 03/36] fixed incorrect array size when reading entropy from HDF5 file --- src/hdf5_interface.F90 | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hdf5_interface.F90 b/src/hdf5_interface.F90 index 29c36aaae0..8189a56edf 100644 --- a/src/hdf5_interface.F90 +++ b/src/hdf5_interface.F90 @@ -1195,6 +1195,7 @@ contains dims(1) = restart_batch call h5ltread_dataset_double_f(hdf5_state_point, "k_batch", & k_batch(1:restart_batch), dims, hdf5_err) + dims(1) = restart_batch*gen_per_batch call h5ltread_dataset_double_f(hdf5_state_point, "entropy", & entropy(1:restart_batch*gen_per_batch), dims, hdf5_err) call hdf5_read_double(hdf5_state_point, "k_col_abs", k_col_abs) From f085264b7f3fa0bbd6c594d2d765903f53680587 Mon Sep 17 00:00:00 2001 From: nhorelik Date: Fri, 12 Apr 2013 14:07:14 -0400 Subject: [PATCH 04/36] Fixed filename qstring issue. Fixed shebang position. Commented out print statements --- src/utils/plot_mesh_tally.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) mode change 100644 => 100755 src/utils/plot_mesh_tally.py diff --git a/src/utils/plot_mesh_tally.py b/src/utils/plot_mesh_tally.py old mode 100644 new mode 100755 index 625304105e..a759f7187c --- a/src/utils/plot_mesh_tally.py +++ b/src/utils/plot_mesh_tally.py @@ -1,7 +1,7 @@ -'''Python script to plot tally data generated by OpenMC.''' - #!/usr/bin/env python +'''Python script to plot tally data generated by OpenMC.''' + import sys from statepoint import * @@ -122,7 +122,7 @@ class AppForm(QMainWindow): filename = QFileDialog.getOpenFileName(self, 'Select statepoint file', '.') # Create StatePoint object and read in data - self.datafile = StatePoint(filename) + self.datafile = StatePoint(str(filename)) self.datafile.read_results() self.datafile.generate_stdev() @@ -153,13 +153,13 @@ class AppForm(QMainWindow): for s in tally.scores: self.score_types.append(s) self.tally_scores.append(self.score_types) - print 'self.tally_scores = ', self.tally_scores +# print 'self.tally_scores = ', self.tally_scores def on_draw(self): """ Redraws the figure """ - print 'Calling on_draw...' +# print 'Calling on_draw...' # Get selected basis, axial_level and stage basis = self.basis.currentIndex() + 1 axial_level = self.axial_level.currentIndex() + 1 @@ -190,7 +190,7 @@ class AppForm(QMainWindow): for j in range(self.nz): matrix[i,j] = self.datafile.get_value(self.tally.currentIndex(), spec_list + [('mesh', (i, axial_level, j))], self.scoreBox.currentIndex())[0] - print spec_list +# print spec_list # Clear the figure self.fig.clear() @@ -210,7 +210,7 @@ class AppForm(QMainWindow): def _update(self): '''Updates widget to display new relevant comboboxes and figure data ''' - print 'Calling _update...' +# print 'Calling _update...' self.mesh = self.datafile.meshes[self.datafile.tallies[self.tally.currentIndex()].filters['mesh'].bins[0] - 1] @@ -229,7 +229,7 @@ class AppForm(QMainWindow): # Determine maximum value from current tally data set self.maxvalue = self.datafile.tallies[self.tally.currentIndex()].results.max() - print self.maxvalue +# print self.maxvalue # Clear and hide old filter labels for item in self.labelList: @@ -243,7 +243,7 @@ class AppForm(QMainWindow): self.update() def populate_boxes(self): - print 'Calling populate_boxes...' +# print 'Calling populate_boxes...' n = 4 labels = {'cell': 'Cell : ', @@ -266,11 +266,11 @@ class AppForm(QMainWindow): self.grid.addWidget(combobox, n, 1) n += 1 - print element +# print element if element in ['cell', 'cellborn', 'surface', 'material', 'universe']: combobox.addItems([str(i) for i in nextFilter.bins]) - for i in nextFilter.bins: - print i +# for i in nextFilter.bins: +# print i elif element == 'energyin' or element == 'energyout': for i in range(nextFilter.length): From 4b22175081fb74430d5128ddb351600b1766abf2 Mon Sep 17 00:00:00 2001 From: nhorelik Date: Sat, 13 Apr 2013 22:12:43 -0400 Subject: [PATCH 05/36] added 3d voxel geometry plotting capability --- src/global.F90 | 4 +- src/input_xml.F90 | 114 +++++++++++++++++----------- src/output.F90 | 2 +- src/plot.F90 | 177 +++++++++++++++++++++++++++++++++----------- src/plot_header.F90 | 10 +-- 5 files changed, 215 insertions(+), 92 deletions(-) diff --git a/src/global.F90 b/src/global.F90 index 5042ac87ec..0327e0fd19 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -10,7 +10,7 @@ module global use material_header, only: Material use mesh_header, only: StructuredMesh use particle_header, only: Particle - use plot_header, only: PlotSlice + use plot_header, only: ObjectPlot use set_header, only: SetInt use source_header, only: ExtSource use tally_header, only: TallyObject, TallyMap, TallyResult @@ -41,7 +41,7 @@ module global type(Lattice), allocatable, target :: lattices(:) type(Surface), allocatable, target :: surfaces(:) type(Material), allocatable, target :: materials(:) - type(PlotSlice), allocatable, target :: plots(:) + type(ObjectPlot),allocatable, target :: plots(:) ! Size of main arrays integer :: n_cells ! # of cells diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 9d6fe36d23..d53e408d9e 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -2136,7 +2136,7 @@ contains integer n_cols, col_id logical :: file_exists ! does plots.xml file exist? character(MAX_LINE_LEN) :: filename ! absolute path to plots.xml - type(PlotSlice), pointer :: pl => null() + type(ObjectPlot), pointer :: pl => null() ! Check if plots.xml exists filename = trim(path_input) // "plots.xml" @@ -2170,16 +2170,46 @@ contains call fatal_error() end if - ! Set output file path - pl % path_plot = trim(path_input) // trim(to_str(pl % id)) // & - "_" // trim(plot_(i) % filename) // ".ppm" - - ! Copy plot pixel size - if (size(plot_(i) % pixels) == 2) then - pl % pixels = plot_(i) % pixels - else - message = " must be length 2 in plot " // to_str(pl % id) + ! Copy plot type + select case (plot_(i) % type) + case ("slice") + pl % type = PLOT_TYPE_SLICE + case ("3draster") + pl % type = PLOT_TYPE_3DRASTER + case default + message = "Unsupported plot type '" // plot_(i) % type & + // "' in plot " // trim(to_str(pl % id)) call fatal_error() + end select + + ! Set output file path + select case (pl % type) + case (PLOT_TYPE_SLICE) + pl % path_plot = trim(path_input) // trim(to_str(pl % id)) // & + "_" // trim(plot_(i) % filename) // ".ppm" + case (PLOT_TYPE_3DRASTER) + pl % path_plot = trim(path_input) // trim(to_str(pl % id)) // & + "_" // trim(plot_(i) % filename) // ".3draster" + end select + + ! Copy plot pixel size + if (pl % type == PLOT_TYPE_SLICE) then + if (size(plot_(i) % pixels) == 2) then + pl % pixels(1) = plot_(i) % pixels(1) + pl % pixels(2) = plot_(i) % pixels(2) + else + message = " must be length 2 in slice plot " // & + trim(to_str(pl % id)) + call fatal_error() + end if + else if (pl % type == PLOT_TYPE_3DRASTER) then + if (size(plot_(i) % pixels) == 3) then + pl % pixels = plot_(i) % pixels + else + message = " must be length 3 in 3draster plot " // & + trim(to_str(pl % id)) + call fatal_error() + end if end if ! Copy plot background color @@ -2195,30 +2225,22 @@ contains pl % not_found % rgb = (/ 255, 255, 255 /) end if - ! Copy plot type - select case (plot_(i) % type) - case ("slice") - pl % type = PLOT_TYPE_SLICE - case default - message = "Unsupported plot type '" // plot_(i) % type & - // "' in plot " // trim(to_str(pl % id)) - call fatal_error() - end select - ! Copy plot basis - select case (plot_(i) % basis) - case ("xy") - pl % basis = PLOT_BASIS_XY - case ("xz") - pl % basis = PLOT_BASIS_XZ - case ("yz") - pl % basis = PLOT_BASIS_YZ - case default - message = "Unsupported plot basis '" // plot_(i) % basis & - // "' in plot " // trim(to_str(pl % id)) - call fatal_error() - end select - + if (pl % type == PLOT_TYPE_SLICE) then + select case (plot_(i) % basis) + case ("xy") + pl % basis = PLOT_BASIS_XY + case ("xz") + pl % basis = PLOT_BASIS_XZ + case ("yz") + pl % basis = PLOT_BASIS_YZ + case default + message = "Unsupported plot basis '" // plot_(i) % basis & + // "' in plot " // trim(to_str(pl % id)) + call fatal_error() + end select + end if + ! Copy plotting origin if (size(plot_(i) % origin) == 3) then pl % origin = plot_(i) % origin @@ -2229,15 +2251,23 @@ contains end if ! Copy plotting width - if (size(plot_(i) % width) == 3) then - pl % width = plot_(i) % width - else if (size(plot_(i) % width) == 2) then - pl % width(1) = plot_(i) % width(1) - pl % width(2) = plot_(i) % width(2) - else - message = "Bad plot width " & - // "in plot " // trim(to_str(pl % id)) - call fatal_error() + if (pl % type == PLOT_TYPE_SLICE) then + if (size(plot_(i) % width) == 2) then + pl % width(1) = plot_(i) % width(1) + pl % width(2) = plot_(i) % width(2) + else + message = " must be length 2 in slice plot " // & + trim(to_str(pl % id)) + call fatal_error() + end if + else if (pl % type == PLOT_TYPE_3DRASTER) then + if (size(plot_(i) % width) == 3) then + pl % width = plot_(i) % width + else + message = " must be length 3 in 3draster plot " // & + trim(to_str(pl % id)) + call fatal_error() + end if end if ! Copy plot color type and initialize all colors randomly diff --git a/src/output.F90 b/src/output.F90 index b5b1d1168f..fb2342efb3 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -1310,7 +1310,7 @@ contains subroutine print_plot() integer :: i ! loop index for plots - type(PlotSlice), pointer :: pl => null() + type(ObjectPlot), pointer :: pl => null() ! Display header for plotting call header("PLOTTING SUMMARY") diff --git a/src/plot.F90 b/src/plot.F90 index 85fc2c8ac6..9704da9d06 100644 --- a/src/plot.F90 +++ b/src/plot.F90 @@ -24,7 +24,7 @@ contains subroutine run_plot() integer :: i ! loop index for plots - type(PlotSlice), pointer :: pl => null() + type(ObjectPlot), pointer :: pl => null() do i = 1, n_plots pl => plots(i) @@ -36,11 +36,60 @@ contains if (pl % type == PLOT_TYPE_SLICE) then ! create 2d image call create_ppm(pl) + else if (pl % type == PLOT_TYPE_3DRASTER) then + ! create dump for 3D silomesh utility script + call create_3d_dump(pl) end if end do end subroutine run_plot +!=============================================================================== +! POSITION_RGB computes the red/green/blue values for a given plot with the +! current particle's position +!=============================================================================== + + subroutine position_rgb(pl, rgb, id) + + type(ObjectPlot), pointer, intent(in) :: pl + integer, intent(out) :: rgb(3) + integer, intent(out) :: id + + logical :: found_cell + type(Cell), pointer :: c => null() + + call deallocate_coord(p % coord0 % next) + p % coord => p % coord0 + + call find_cell(found_cell) + + if (.not. found_cell) then + ! If no cell, revert to default color + rgb = pl % not_found % rgb + id = -1 + else + if (pl % color_by == PLOT_COLOR_MATS) then + ! Assign color based on material + c => cells(p % coord % cell) + id = materials(c % material) % id + if (c % material == MATERIAL_VOID) then + ! By default, color void cells white + rgb = 255 + else + rgb = pl % colors(c % material) % rgb + end if + else if (pl % color_by == PLOT_COLOR_CELLS) then + ! Assign color based on cell + rgb = pl % colors(p % coord % cell) % rgb + id = cells(p % coord % cell) % id + else + rgb = 0 + id = -1 + end if + end if + + end subroutine position_rgb + !=============================================================================== ! CREATE_PPM creates an image based on user input from a plots.xml ! specification in the portable pixmap format (PPM) @@ -48,18 +97,17 @@ contains subroutine create_ppm(pl) - type(PlotSlice), pointer :: pl + type(ObjectPlot), pointer :: pl integer :: in_i integer :: out_i integer :: x, y ! pixel location - integer :: r, g, b ! colors (red, green, blue) from 0-255 + integer :: rgb(3) ! colors (red, green, blue) from 0-255 + integer :: id real(8) :: in_pixel real(8) :: out_pixel real(8) :: xyz(3) - logical :: found_cell type(Image) :: img - type(Cell), pointer :: c => null() ! Initialize and allocate space for image call init_image(img) @@ -101,44 +149,11 @@ contains do y = 1, img % height do x = 1, img % width - call deallocate_coord(p % coord0 % next) - p % coord => p % coord0 - - call find_cell(found_cell) - - if (.not. found_cell) then - ! If no cell, revert to default color - r = pl % not_found % rgb(1) - g = pl % not_found % rgb(2) - b = pl % not_found % rgb(3) - else - if (pl % color_by == PLOT_COLOR_MATS) then - ! Assign color based on material - c => cells(p % coord % cell) - if (c % material == MATERIAL_VOID) then - ! By default, color void cells white - r = 255 - g = 255 - b = 255 - else - r = pl % colors(c % material) % rgb(1) - g = pl % colors(c % material) % rgb(2) - b = pl % colors(c % material) % rgb(3) - end if - else if (pl % color_by == PLOT_COLOR_CELLS) then - ! Assign color based on cell - r = pl % colors(p % coord % cell) % rgb(1) - g = pl % colors(p % coord % cell) % rgb(2) - b = pl % colors(p % coord % cell) % rgb(3) - else - r = 0 - g = 0 - b = 0 - end if - end if + ! get pixel color + call position_rgb(pl, rgb, id) ! Create a pixel at (x,y) with color (r,g,b) - call set_pixel(img, x, y, r, g, b) + call set_pixel(img, x, y, rgb(1), rgb(2), rgb(3)) ! Advance pixel in first direction p % coord0 % xyz(in_i) = p % coord0 % xyz(in_i) + in_pixel @@ -163,7 +178,7 @@ contains subroutine output_ppm(pl, img) - type(PlotSlice), pointer :: pl + type(ObjectPlot), pointer :: pl type(Image), intent(in) :: img integer :: i ! loop index for height @@ -190,4 +205,82 @@ contains end subroutine output_ppm +!=============================================================================== +! CREATE_3D_DUMP outputs a binary file that can be input into silomesh for 3D +! geometry visualization. It works the same way as create_ppm by dragging a +! particle across the geometry for the specified number of voxels. The first +! 3 int(4)'s in the binary are the number of x, y, and z voxels. The next 3 +! real(8)'s are the widths of the voxels in the x, y, and z directions. The next +! 3 real(8)'s are the x, y, and z coordinates of the lower left point. Finally +! the binary is filled with entries of four int(4)'s each. Each 'row' in the +! binary contains four int(4)'s: 3 for x,y,z position and 1 for cell or material +! id. For 1 million voxels this produces a file of approximately 15MB. +!=============================================================================== + + subroutine create_3d_dump(pl) + + type(ObjectPlot), pointer :: pl + + integer :: x, y, z ! voxel location indices + integer :: rgb(3) ! colors (red, green, blue) from 0-255 + integer :: id ! id of cell or material + real(8) :: vox(3) ! x, y, and z voxel widths + real(8) :: ll(3) ! lower left starting point for each sweep direction + + ! compute voxel widths in each direction + vox = pl % width/dble(pl % pixels) + + ! initial particle position + ll = pl % origin - pl % width / 2.0 + + ! allocate and initialize particle + allocate(p) + call initialize_particle() + p % coord0 % xyz = ll + p % coord0 % uvw = (/ 0.5, 0.5, 0.5 /) + p % coord0 % universe = BASE_UNIVERSE + + ! move to center of voxels + ll = ll + vox / 2.0 + + ! Open binary plot file for writing + open(UNIT=UNIT_PLOT, FILE=pl % path_plot, STATUS='replace', & + ACCESS='stream') + + ! write plot header info + write(UNIT_PLOT) pl % pixels(1), pl % pixels(2), pl % pixels(3) + write(UNIT_PLOT) vox, ll + + do x = 1, pl % pixels(1) + do y = 1, pl % pixels(2) + do z = 1, pl % pixels(3) + + ! get voxel color + call position_rgb(pl, rgb, id) + + ! write to plot file + write(UNIT_PLOT) x, y, z, id + + ! advance particle in z direction + p % coord0 % xyz(3) = p % coord0 % xyz(3) + vox(3) + + end do + + ! advance particle in y direction + p % coord0 % xyz(2) = p % coord0 % xyz(2) + vox(2) + p % coord0 % xyz(3) = ll(3) + + end do + + ! advance particle in y direction + p % coord0 % xyz(1) = p % coord0 % xyz(1) + vox(1) + p % coord0 % xyz(2) = ll(2) + p % coord0 % xyz(3) = ll(3) + + end do + + close(UNIT_PLOT) + + end subroutine create_3d_dump + end module plot diff --git a/src/plot_header.F90 b/src/plot_header.F90 index 31ab15aa79..48925a8b94 100644 --- a/src/plot_header.F90 +++ b/src/plot_header.F90 @@ -16,7 +16,7 @@ module plot_header ! PLOTSLICE holds plot information !=============================================================================== - type PlotSlice + type ObjectPlot integer :: id ! Unique ID character(MAX_LINE_LEN) :: path_plot ! path for plot file integer :: type ! Type @@ -24,14 +24,14 @@ module plot_header real(8) :: origin(3) ! xyz center of plot location real(8) :: width(3) ! xyz widths of plot integer :: basis ! direction of plot slice - integer :: pixels(2) ! pixel width/height of plot slice + integer :: pixels(3) ! pixel width/height of plot slice type(ObjectColor) :: not_found ! color for positions where no cell found type(ObjectColor), allocatable :: colors(:) ! colors of cells/mats - end type PlotSlice + end type ObjectPlot - ! Plot type -- note that only slice plots are implemented currently + ! Plot type integer, parameter :: PLOT_TYPE_SLICE = 1 - integer, parameter :: PLOT_TYPE_POINTS = 2 + integer, parameter :: PLOT_TYPE_3DRASTER = 2 ! Plot basis plane integer, parameter :: PLOT_BASIS_XY = 1 From 0a6a08df766c1a9a731ee7dac9e87484bda1ea48 Mon Sep 17 00:00:00 2001 From: nhorelik Date: Sat, 13 Apr 2013 22:21:59 -0400 Subject: [PATCH 06/36] Added python utility to parse 3d voxel plot dump into silo file --- src/utils/3draster.py | 79 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100755 src/utils/3draster.py diff --git a/src/utils/3draster.py b/src/utils/3draster.py new file mode 100755 index 0000000000..0debbf4a66 --- /dev/null +++ b/src/utils/3draster.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python + +from __future__ import division + +import struct +import sys + +import silomesh # https://github.com/nhorelik/silomesh/ + +################################################################################ +def parse_options(): + """Process command line arguments""" + + from optparse import OptionParser + usage = r"""%prog [options] <3draster_file>""" + p = OptionParser(usage=usage) + p.add_option('-o', '--output', action='store', dest='output', + default='plot.silo', help='Path to output SILO file.') + parsed = p.parse_args() + if not parsed[1]: + p.print_help() + return parsed + return parsed + +################################################################################ +def main(file_, o): + + print file_ + fh = open(file_,'rb') + header = get_header(fh) + meshparms = header['dimension'] + header['lower_left'] + header['upper_right'] + nx,ny,nz = meshparms[0], meshparms[1], meshparms[2] + + silomesh.init_silo(o.output) + silomesh.init_mesh('plot', *meshparms) + + silomesh.init_var("cell_or_mat_id") + + for x in range(1,nx+1): + sys.stdout.write(" {0}%\r".format(int(x/nx*100))) + sys.stdout.flush() + for y in range(1,ny+1): + for z in range(1,nz+1): + xm,ym,zm,id_ = get_int(fh, 4) + silomesh.set_value(float(id_), x, y, z) + if not x == xm or not y == ym or not z == zm: + raise Exception("mesh mismatch!") + print + silomesh.finalize_var() + silomesh.finalize_mesh() + silomesh.finalize_silo() + +################################################################################ +def get_header(file_): + nx,ny,nz = get_int(file_, 3) + wx,wy,wz = get_double(file_, 3) + lx,ly,lz = get_double(file_, 3) + header = {'dimension':[nx,ny,nz], 'width':[wx,wy,wz], 'lower_left':[lx,ly,lz], + 'upper_right': [lx+wx*nx,ly+wy*ny,lz+wz*nz]} + return header + +################################################################################ +def get_data(file_, n, typeCode, size): + return list(struct.unpack('={0}{1}'.format(n,typeCode), + file_.read(n*size))) + +################################################################################ +def get_int(file_, n=1, path=None): + return get_data(file_, n, 'i', 4) + +################################################################################ +def get_double(file_, n=1, path=None): + return get_data(file_, n, 'd', 8) + +################################################################################ +if __name__ == '__main__': + (options, args) = parse_options() + if args: + main(args[0],options) From a322422f4054bab6c70ae8b4dd8ff6205322fb0d Mon Sep 17 00:00:00 2001 From: nhorelik Date: Sat, 13 Apr 2013 22:32:04 -0400 Subject: [PATCH 07/36] Updated plotting output summaries --- src/output.F90 | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/output.F90 b/src/output.F90 index fb2342efb3..5c758b09a2 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -1318,20 +1318,28 @@ contains do i = 1, n_plots pl => plots(i) - ! Write plot id + ! Plot id write(ou,100) "Plot ID:", trim(to_str(pl % id)) + + ! Plot type + if (pl % type == PLOT_TYPE_SLICE) then + write(ou,100) "Plot Type:", "Slice" + else if (pl % type == PLOT_TYPE_3DRASTER) then + write(ou,100) "Plot Type:", "3D Raster" + end if - ! Write plotting origin + ! Plot parameters write(ou,100) "Origin:", trim(to_str(pl % origin(1))) // & " " // trim(to_str(pl % origin(2))) // " " // & trim(to_str(pl % origin(3))) - - ! Write plotting width + write(ou,100) "Width:", trim(to_str(pl % width(1))) // & + " " // trim(to_str(pl % width(2))) + if (pl % color_by == PLOT_COLOR_CELLS) then + write(ou,100) "Coloring:", "Cells" + else if (pl % color_by == PLOT_COLOR_MATS) then + write(ou,100) "Coloring:", "Materials" + end if if (pl % type == PLOT_TYPE_SLICE) then - - write(ou,100) "Width:", trim(to_str(pl % width(1))) // & - " " // trim(to_str(pl % width(2))) - write(ou,100) "Coloring:", trim(to_str(pl % color_by)) select case (pl % basis) case (PLOT_BASIS_XY) write(ou,100) "Basis:", "xy" @@ -1342,6 +1350,9 @@ contains end select write(ou,100) "Pixels:", trim(to_str(pl % pixels(1))) // " " // & trim(to_str(pl % pixels(2))) + else if (pl % type == PLOT_TYPE_3DRASTER) then + write(ou,100) "Voxels:", trim(to_str(pl % pixels(1))) // " " // & + trim(to_str(pl % pixels(2))) // " " // trim(to_str(pl % pixels(3))) end if write(ou,*) From 55996dd06bb67ee474c14fff1842789356304982 Mon Sep 17 00:00:00 2001 From: nhorelik Date: Sat, 13 Apr 2013 22:39:10 -0400 Subject: [PATCH 08/36] Added warnings for ignored plot options for voxel plot --- src/input_xml.F90 | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index d53e408d9e..5c762c21d6 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -2214,6 +2214,11 @@ contains ! Copy plot background color if (associated(plot_(i) % background)) then + if (pl % type == PLOT_TYPE_3DRASTER) then + message = "Background color ignored in 3D raster plot " // & + trim(to_str(pl % id)) + call warning() + end if if (size(plot_(i) % background) == 3) then pl % not_found % rgb = plot_(i) % background else @@ -2300,6 +2305,13 @@ contains ! Copy user specified colors if (associated(plot_(i) % col_spec_)) then + + if (pl % type == PLOT_TYPE_3DRASTER) then + message = "Color specifications ignored in 3D raster plot " // & + trim(to_str(pl % id)) + call warning() + end if + n_cols = size(plot_(i) % col_spec_) do j = 1, n_cols if (size(plot_(i) % col_spec_(j) % rgb) /= 3) then @@ -2339,6 +2351,12 @@ contains ! Deal with masks if (associated(plot_(i) % mask_)) then + if (pl % type == PLOT_TYPE_3DRASTER) then + message = "Mask ignored in 3D raster plot " // & + trim(to_str(pl % id)) + call warning() + end if + select case(size(plot_(i) % mask_)) case default message = "Mutliple masks" // & From a903af9bbc00c7347fe4a054cc007b3820419b31 Mon Sep 17 00:00:00 2001 From: nhorelik Date: Sat, 13 Apr 2013 22:50:18 -0400 Subject: [PATCH 09/36] Changed '3d raster' name for new plotting capability to 'voxel' --- src/input_xml.F90 | 30 +++++++++++++++--------------- src/output.F90 | 6 +++--- src/plot.F90 | 2 +- src/plot_header.F90 | 2 +- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 5c762c21d6..c2b74a7909 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -2174,10 +2174,10 @@ contains select case (plot_(i) % type) case ("slice") pl % type = PLOT_TYPE_SLICE - case ("3draster") - pl % type = PLOT_TYPE_3DRASTER + case ("voxel") + pl % type = PLOT_TYPE_VOXEL case default - message = "Unsupported plot type '" // plot_(i) % type & + message = "Unsupported plot type '" // trim(plot_(i) % type) & // "' in plot " // trim(to_str(pl % id)) call fatal_error() end select @@ -2187,9 +2187,9 @@ contains case (PLOT_TYPE_SLICE) pl % path_plot = trim(path_input) // trim(to_str(pl % id)) // & "_" // trim(plot_(i) % filename) // ".ppm" - case (PLOT_TYPE_3DRASTER) + case (PLOT_TYPE_VOXEL) pl % path_plot = trim(path_input) // trim(to_str(pl % id)) // & - "_" // trim(plot_(i) % filename) // ".3draster" + "_" // trim(plot_(i) % filename) // ".voxel" end select ! Copy plot pixel size @@ -2202,11 +2202,11 @@ contains trim(to_str(pl % id)) call fatal_error() end if - else if (pl % type == PLOT_TYPE_3DRASTER) then + else if (pl % type == PLOT_TYPE_VOXEL) then if (size(plot_(i) % pixels) == 3) then pl % pixels = plot_(i) % pixels else - message = " must be length 3 in 3draster plot " // & + message = " must be length 3 in voxel plot " // & trim(to_str(pl % id)) call fatal_error() end if @@ -2214,8 +2214,8 @@ contains ! Copy plot background color if (associated(plot_(i) % background)) then - if (pl % type == PLOT_TYPE_3DRASTER) then - message = "Background color ignored in 3D raster plot " // & + if (pl % type == PLOT_TYPE_VOXEL) then + message = "Background color ignored in voxel plot " // & trim(to_str(pl % id)) call warning() end if @@ -2265,11 +2265,11 @@ contains trim(to_str(pl % id)) call fatal_error() end if - else if (pl % type == PLOT_TYPE_3DRASTER) then + else if (pl % type == PLOT_TYPE_VOXEL) then if (size(plot_(i) % width) == 3) then pl % width = plot_(i) % width else - message = " must be length 3 in 3draster plot " // & + message = " must be length 3 in voxel plot " // & trim(to_str(pl % id)) call fatal_error() end if @@ -2306,8 +2306,8 @@ contains ! Copy user specified colors if (associated(plot_(i) % col_spec_)) then - if (pl % type == PLOT_TYPE_3DRASTER) then - message = "Color specifications ignored in 3D raster plot " // & + if (pl % type == PLOT_TYPE_VOXEL) then + message = "Color specifications ignored in voxel plot " // & trim(to_str(pl % id)) call warning() end if @@ -2351,8 +2351,8 @@ contains ! Deal with masks if (associated(plot_(i) % mask_)) then - if (pl % type == PLOT_TYPE_3DRASTER) then - message = "Mask ignored in 3D raster plot " // & + if (pl % type == PLOT_TYPE_VOXEL) then + message = "Mask ignored in voxel plot " // & trim(to_str(pl % id)) call warning() end if diff --git a/src/output.F90 b/src/output.F90 index 5c758b09a2..684db32eaf 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -1324,8 +1324,8 @@ contains ! Plot type if (pl % type == PLOT_TYPE_SLICE) then write(ou,100) "Plot Type:", "Slice" - else if (pl % type == PLOT_TYPE_3DRASTER) then - write(ou,100) "Plot Type:", "3D Raster" + else if (pl % type == PLOT_TYPE_VOXEL) then + write(ou,100) "Plot Type:", "Voxel" end if ! Plot parameters @@ -1350,7 +1350,7 @@ contains end select write(ou,100) "Pixels:", trim(to_str(pl % pixels(1))) // " " // & trim(to_str(pl % pixels(2))) - else if (pl % type == PLOT_TYPE_3DRASTER) then + else if (pl % type == PLOT_TYPE_VOXEL) then write(ou,100) "Voxels:", trim(to_str(pl % pixels(1))) // " " // & trim(to_str(pl % pixels(2))) // " " // trim(to_str(pl % pixels(3))) end if diff --git a/src/plot.F90 b/src/plot.F90 index 9704da9d06..fa728ad4ab 100644 --- a/src/plot.F90 +++ b/src/plot.F90 @@ -36,7 +36,7 @@ contains if (pl % type == PLOT_TYPE_SLICE) then ! create 2d image call create_ppm(pl) - else if (pl % type == PLOT_TYPE_3DRASTER) then + else if (pl % type == PLOT_TYPE_VOXEL) then ! create dump for 3D silomesh utility script call create_3d_dump(pl) end if diff --git a/src/plot_header.F90 b/src/plot_header.F90 index 48925a8b94..6956bfaf93 100644 --- a/src/plot_header.F90 +++ b/src/plot_header.F90 @@ -31,7 +31,7 @@ module plot_header ! Plot type integer, parameter :: PLOT_TYPE_SLICE = 1 - integer, parameter :: PLOT_TYPE_3DRASTER = 2 + integer, parameter :: PLOT_TYPE_VOXEL = 2 ! Plot basis plane integer, parameter :: PLOT_BASIS_XY = 1 From e29c9817fe7e4231bb0c4640c070d4cdf3dc0940 Mon Sep 17 00:00:00 2001 From: nhorelik Date: Sat, 13 Apr 2013 22:56:53 -0400 Subject: [PATCH 10/36] Simplified header write statement --- src/plot.F90 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/plot.F90 b/src/plot.F90 index fa728ad4ab..0ddcd238f3 100644 --- a/src/plot.F90 +++ b/src/plot.F90 @@ -248,8 +248,7 @@ contains ACCESS='stream') ! write plot header info - write(UNIT_PLOT) pl % pixels(1), pl % pixels(2), pl % pixels(3) - write(UNIT_PLOT) vox, ll + write(UNIT_PLOT) pl % pixels, vox, ll do x = 1, pl % pixels(1) do y = 1, pl % pixels(2) From 0be240d51927c7a98d0c230112115650b206d360 Mon Sep 17 00:00:00 2001 From: nhorelik Date: Sat, 13 Apr 2013 23:36:26 -0400 Subject: [PATCH 11/36] Updated user's guide with info on voxel plots --- docs/source/devguide/index.rst | 1 + docs/source/usersguide/input.rst | 110 +++++++++++++++++----------- src/utils/{3draster.py => voxel.py} | 2 +- 3 files changed, 69 insertions(+), 44 deletions(-) rename src/utils/{3draster.py => voxel.py} (98%) diff --git a/docs/source/devguide/index.rst b/docs/source/devguide/index.rst index 98df54b17e..1eb7436d03 100644 --- a/docs/source/devguide/index.rst +++ b/docs/source/devguide/index.rst @@ -17,3 +17,4 @@ as debugging. workflow xml-fortran statepoint + voxel diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index af8d94e71d..9dbf361afd 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -945,15 +945,21 @@ tallies. This element should be followed by "true" or "false". Geometry Plotting Specification -- plots.xml -------------------------------------------- -A basic 2D plotting capability is available in OpenMC by creating a plots.xml +Basic plotting capabilities are available in OpenMC by creating a plots.xml file and subsequently running with the command-line flag ``-plot``. The root -element of the plots.xml is simply ```` and any number output figures can -be defined with ```` sub-elements. +element of the plots.xml is simply ```` and any number output plots can +be defined with ```` sub-elements. Two plot types are currently +implemented in openMC: + +* ``slice`` 2D pixel plot along one of the major axes. Produces a PPM image file. +* ``voxel`` 3D voxel data dump. Produces a binary file containing voxel xyz position and cell or material id. + ```` Element ------------------ -Each plot must contain a combination of the following attributes or sub-elements: +Each plot must contain a combination of the following attributes or +sub-elements: :id: The unique ``id`` of the plot. @@ -967,7 +973,9 @@ Each plot must contain a combination of the following attributes or sub-elements :color: Keyword for plot coloring. This can only be either ``cell`` or ``mat``, - which colors regions by cells and materials, respectively. + which colors regions by cells and materials, respectively. For voxel plots, + this determines which id (cell or material) is associated with each + position. *Default*: ``cell`` @@ -985,60 +993,75 @@ Each plot must contain a combination of the following attributes or sub-elements *Default*: None - Required entry :type: - Keyword for type of plot to be produced. Currently only ``slice`` plots are - implemented, which create 2D pixel maps saved in the PPM file format. PPM - files can be displayed in most viewers (e.g. the default Gnome viewer, - IrfanView, etc.). + Keyword for type of plot to be produced. Currently only "slice" and + "voxel" plots are implemented. The "slice" plot type creates 2D pixel + maps saved in the PPM file format. PPM files can be displayed in most + viewers (e.g. the default Gnome viewer, IrfanView, etc.). The "voxel" + plot type produces a binary datafile containing voxel grid positioning and + the cell or material (specified by the ``color`` tag) at the center of each + voxel. These datafiles can be processed into 3D SILO files using the + ``voxel.py`` utility provided with the OpenMC source, and subsequently + viewed with a 3D viewer such as VISIT or Paraview. See the + :ref:`devguide_voxel` for information about the datafile structure. .. note:: Since the PPM format is saved without any kind of compression, the resulting file sizes can be quite large. Saving the image in the PNG format can often times reduce the file size by orders of - magnitude without any loss of image quality. + magnitude without any loss of image quality. Likewise, + high-resolution voxel files produced by OpenMC can be quite large, + but the equivalent SILO files will by significantly smaller. *Default*: "slice" -```` elements of ``type`` "slice" also contain the following attributes or -sub-elements: +```` elements of ``type`` "slice" and "voxel" must contain the ``pixels`` +attribute or sub-element: + + :pixels: + Specifies the number of pixes or voxels to be used along each of the basis + directions for "slice" and "voxel" plots, respectively. Should be two or + three integers separated by spaces. + + .. warning:: The ``pixels`` input determines the output file size. For the + PPM format, 10 million pixels will result in a file just under + 30 MB in size. A 10 million voxel binary file will be around + 152 MB. + + .. warning:: If the aspect ratio defined in ``pixels`` does not match the + aspect ratio defined in ``width`` the plot may appear stretched + or squeezed. + + .. warning:: Geometry features along a basis direction smaller than + ``width``/``pixels`` along that basis direction may not appear + in the plot. + + *Default*: None - Required entry for "slice" and "voxel" plots + +```` elements of ``type`` "slice" can also contain the following +attributes or sub-elements. These are not used in "voxel" plots: :basis: - Keyword specifying the plane of the plot for ``slice`` type plots. Can be + Keyword specifying the plane of the plot for "slice" type plots. Can be one of: "xy", "xz", "yz". *Default*: "xy" - :pixels: - Specifies the number of pixes to be used along each of the basis directions - for "slice" plots. Should be two integers separated by spaces. - - .. warning:: The ``pixels`` input determines the output file size. For the PPM - format, 10 million pixels will result in a file just under 30 MB in - size. - - .. warning:: If the aspect ratio defined in ``pixels`` does not match the aspect - ratio defined in ``width`` the plot may appear stretched or squeezed. - - .. warning:: Geometry features along a basis direction smaller than ``width``/``pixels`` - along that basis direction may not appear in the plot. - - *Default*: None - Required entry for "slice" plots - :background: - Specifies the RGB color of the regions where no OpenMC cell can be found. Should - be three integers separated by spaces. + Specifies the RGB color of the regions where no OpenMC cell can be found. + Should be three integers separated by spaces. *Default*: 0 0 0 (white) :col_spec: - Any number of this optional tag may be included in each ```` element, which can - override the default random colors for cells or materials. Each ``col_spec`` - element must contain ``id`` and ``rgb`` sub-elements. + Any number of this optional tag may be included in each ```` element, + which can override the default random colors for cells or materials. Each + ``col_spec`` element must contain ``id`` and ``rgb`` sub-elements. :id: Specifies the cell or material unique id for the color specification. :rgb: - Specifies the custom color for the cell or material. Should be 3 integers separated - by spaces. + Specifies the custom color for the cell or material. Should be 3 integers + separated by spaces. As an example, if your plot is colored by material and you want material 23 to be blue, the corresponding ``col_spec`` element would look like: @@ -1051,17 +1074,18 @@ sub-elements: :mask: The special ``mask`` sub-element allows for the selective plotting of *only* - user-specified cells or materials. Only one ``mask`` element is allowed per ``plot`` - element, and it must contain as attributes or sub-elements a background masking color and - a list of cells or materials to plot: + user-specified cells or materials. Only one ``mask`` element is allowed per + ``plot`` element, and it must contain as attributes or sub-elements a + background masking color and a list of cells or materials to plot: :components: - List of unique ``id`` numbers of the cells or materials to plot. Should be any number - of integers separated by spaces. + List of unique ``id`` numbers of the cells or materials to plot. Should be + any number of integers separated by spaces. :background: - Color to apply to all cells or materials not in the ``components`` list of cells or - materials to plot. This overrides any ``col_spec`` color specifications. + Color to apply to all cells or materials not in the ``components`` list of + cells or materials to plot. This overrides any ``col_spec`` color + specifications. *Default*: None diff --git a/src/utils/3draster.py b/src/utils/voxel.py similarity index 98% rename from src/utils/3draster.py rename to src/utils/voxel.py index 0debbf4a66..91ff077ff9 100755 --- a/src/utils/3draster.py +++ b/src/utils/voxel.py @@ -12,7 +12,7 @@ def parse_options(): """Process command line arguments""" from optparse import OptionParser - usage = r"""%prog [options] <3draster_file>""" + usage = r"""%prog [options] """ p = OptionParser(usage=usage) p.add_option('-o', '--output', action='store', dest='output', default='plot.silo', help='Path to output SILO file.') From aebb81eb98baf2ded6321f7cb3a58dc369683c19 Mon Sep 17 00:00:00 2001 From: nhorelik Date: Sun, 14 Apr 2013 18:33:47 -0400 Subject: [PATCH 12/36] Removed unnecessary xyz coords in voxel binary dump --- docs/source/usersguide/input.rst | 2 +- src/plot.F90 | 2 +- src/utils/voxel.py | 4 +--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 9dbf361afd..a99d5c4187 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -1024,7 +1024,7 @@ attribute or sub-element: .. warning:: The ``pixels`` input determines the output file size. For the PPM format, 10 million pixels will result in a file just under 30 MB in size. A 10 million voxel binary file will be around - 152 MB. + 40 MB. .. warning:: If the aspect ratio defined in ``pixels`` does not match the aspect ratio defined in ``width`` the plot may appear stretched diff --git a/src/plot.F90 b/src/plot.F90 index 0ddcd238f3..5c454c6724 100644 --- a/src/plot.F90 +++ b/src/plot.F90 @@ -258,7 +258,7 @@ contains call position_rgb(pl, rgb, id) ! write to plot file - write(UNIT_PLOT) x, y, z, id + write(UNIT_PLOT) id ! advance particle in z direction p % coord0 % xyz(3) = p % coord0 % xyz(3) + vox(3) diff --git a/src/utils/voxel.py b/src/utils/voxel.py index 91ff077ff9..4451a017fc 100755 --- a/src/utils/voxel.py +++ b/src/utils/voxel.py @@ -41,10 +41,8 @@ def main(file_, o): sys.stdout.flush() for y in range(1,ny+1): for z in range(1,nz+1): - xm,ym,zm,id_ = get_int(fh, 4) + id_ = get_int(fh)[0] silomesh.set_value(float(id_), x, y, z) - if not x == xm or not y == ym or not z == zm: - raise Exception("mesh mismatch!") print silomesh.finalize_var() silomesh.finalize_mesh() From f8dd3942b51c4ec676eaa3272abc37327846c9fb Mon Sep 17 00:00:00 2001 From: nhorelik Date: Wed, 17 Apr 2013 10:29:37 -0400 Subject: [PATCH 13/36] Fixed lower_left point and output width print --- src/output.F90 | 10 ++++++++-- src/plot.F90 | 11 ++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/output.F90 b/src/output.F90 index 684db32eaf..5ea7bfc421 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -1332,8 +1332,14 @@ contains write(ou,100) "Origin:", trim(to_str(pl % origin(1))) // & " " // trim(to_str(pl % origin(2))) // " " // & trim(to_str(pl % origin(3))) - write(ou,100) "Width:", trim(to_str(pl % width(1))) // & - " " // trim(to_str(pl % width(2))) + if (pl % type == PLOT_TYPE_SLICE) then + write(ou,100) "Width:", trim(to_str(pl % width(1))) // & + " " // trim(to_str(pl % width(2))) + else if (pl % type == PLOT_TYPE_VOXEL) then + write(ou,100) "Width:", trim(to_str(pl % width(1))) // & + " " // trim(to_str(pl % width(2))) // & + " " // trim(to_str(pl % width(3))) + end if if (pl % color_by == PLOT_COLOR_CELLS) then write(ou,100) "Coloring:", "Cells" else if (pl % color_by == PLOT_COLOR_MATS) then diff --git a/src/plot.F90 b/src/plot.F90 index 5c454c6724..6343d9cef6 100644 --- a/src/plot.F90 +++ b/src/plot.F90 @@ -240,16 +240,17 @@ contains p % coord0 % uvw = (/ 0.5, 0.5, 0.5 /) p % coord0 % universe = BASE_UNIVERSE - ! move to center of voxels - ll = ll + vox / 2.0 - ! Open binary plot file for writing open(UNIT=UNIT_PLOT, FILE=pl % path_plot, STATUS='replace', & ACCESS='stream') - + + print *, ll ! write plot header info write(UNIT_PLOT) pl % pixels, vox, ll - + + ! move to center of voxels + ll = ll + vox / 2.0 + do x = 1, pl % pixels(1) do y = 1, pl % pixels(2) do z = 1, pl % pixels(3) From cd7020fe7e7733f9322a746129a8463cb49b4b86 Mon Sep 17 00:00:00 2001 From: nhorelik Date: Wed, 17 Apr 2013 12:06:28 -0400 Subject: [PATCH 14/36] Removed debug print statement --- src/plot.F90 | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plot.F90 b/src/plot.F90 index 6343d9cef6..0b68f4c219 100644 --- a/src/plot.F90 +++ b/src/plot.F90 @@ -244,7 +244,6 @@ contains open(UNIT=UNIT_PLOT, FILE=pl % path_plot, STATUS='replace', & ACCESS='stream') - print *, ll ! write plot header info write(UNIT_PLOT) pl % pixels, vox, ll From c9eb4ac64517e20288e7b12d503f0f6841ca82f8 Mon Sep 17 00:00:00 2001 From: nhorelik Date: Wed, 17 Apr 2013 17:07:52 -0400 Subject: [PATCH 15/36] Changed StatePoint object to hold consistent types for both binary and hdf5 statepoints --- src/utils/statepoint.py | 20 ++++++++++---------- src/utils/statepoint_silomesh.py | 24 +++++++++++++++--------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/utils/statepoint.py b/src/utils/statepoint.py index e91d474254..f6929ccdad 100644 --- a/src/utils/statepoint.py +++ b/src/utils/statepoint.py @@ -555,30 +555,30 @@ class StatePoint(object): def _get_int(self, n=1, path=None): if self._hdf5: - return self._f[path].value + return int(self._f[path].value) else: - return self._get_data(n, 'i', 4) + return [int(v) for v in self._get_data(n, 'i', 4)] def _get_long(self, n=1, path=None): if self._hdf5: - return self._f[path].value + return float(self._f[path].value) else: - return self._get_data(n, 'q', 8) + return [float(v) for v in self._get_data(n, 'q', 8)] def _get_float(self, n=1, path=None): if self._hdf5: - return self._f[path].value + return float(self._f[path].value) else: - return self._get_data(n, 'f', 4) + return [float(v) for v in self._get_data(n, 'f', 4)] def _get_double(self, n=1, path=None): if self._hdf5: - return self._f[path].value + return float(self._f[path].value) else: - return self._get_data(n, 'd', 8) + return [float(v) for v in self._get_data(n, 'd', 8)] def _get_string(self, n=1, path=None): if self._hdf5: - return self._f[path].value + return str(self._f[path].value) else: - return self._get_data(n, 's', 1)[0] + return str(self._get_data(n, 's', 1)[0]) diff --git a/src/utils/statepoint_silomesh.py b/src/utils/statepoint_silomesh.py index f40f2ac1c9..95dab6c52c 100755 --- a/src/utils/statepoint_silomesh.py +++ b/src/utils/statepoint_silomesh.py @@ -14,11 +14,15 @@ alphanum = re.compile(r"[\W_]+") def parse_options(): """Process command line arguments""" + err = False + def tallies_callback(option, opt, value, parser): """Option parser function for list of tallies""" try: setattr(parser.values, option.dest, [int(v) for v in value.split(',')]) - except: p.print_help() + except: + p.print_help() + err = True def scores_callback(option, opt, value, parser): """Option parser function for list of scores""" @@ -30,7 +34,9 @@ def parse_options(): if not tally in scores: scores[tally] = [] scores[tally].append(score) setattr(parser.values, option.dest, scores) - except: p.print_help() + except: + p.print_help() + err = True def filters_callback(option, opt, value, parser): """Option parser function for list of filters""" @@ -45,8 +51,8 @@ def parse_options(): filters[tally][filter_].append(bin) setattr(parser.values, option.dest, filters) except: - raise p.print_help() + err = True from optparse import OptionParser usage = r"""%prog [options] @@ -55,7 +61,7 @@ The default is to process all tallies and all scores into one silo file. Subsets can be chosen using the options. For example, to only process tallies 2 and 4 with all scores on tally 2 and only scores 1 and 3 on tally 4: -%prog -t 2,4 -f 4.1,4.3 +%prog -t 2,4 -s 4.1,4.3 Likewise if you have additional filters on a tally you can specify a subset of bins for each filter for that tally. For example to process all tallies and @@ -92,14 +98,14 @@ You can list the available tallies, scores, and filters with the -l option: if not parsed[1]: p.print_help() - return parsed + return parsed, err if parsed[0].valerr: parsed[0].valerr = 1 else: parsed[0].valerr = 0 - return parsed + return parsed, err ################################################################################ def main(file_, o): @@ -237,7 +243,7 @@ def print_available(sp): mesh = "" if not 'mesh' in tally.filters: mesh = "(no mesh)" print "\tTally {} {}".format(tally.id, mesh) - scores = ["{}.{}: {}".format(tally.id, sid+1, score) + scores = ["{}.{}: {}".format(tally.id, sid, score) for sid, score in enumerate(tally.scores)] for score in scores: print "\t\tScore {}".format(score) @@ -308,6 +314,6 @@ warnings.formatwarning = formatwarning ################################################################################ if __name__ == '__main__': - (options, args) = parse_options() - if args: + (options, args, err) = parse_options() + if args and not err: main(args[0],options) From e50e9d890a17ab73dd68d7785d135c51a9065c39 Mon Sep 17 00:00:00 2001 From: nhorelik Date: Wed, 17 Apr 2013 17:08:57 -0400 Subject: [PATCH 16/36] Fixed statepoint silomesh score index specification bug, and added stop on invalid input --- src/utils/statepoint_silomesh.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/utils/statepoint_silomesh.py b/src/utils/statepoint_silomesh.py index 95dab6c52c..942d59e184 100755 --- a/src/utils/statepoint_silomesh.py +++ b/src/utils/statepoint_silomesh.py @@ -10,14 +10,17 @@ from statepoint import StatePoint alphanum = re.compile(r"[\W_]+") +err = False + ################################################################################ def parse_options(): """Process command line arguments""" - err = False + def tallies_callback(option, opt, value, parser): """Option parser function for list of tallies""" + global err try: setattr(parser.values, option.dest, [int(v) for v in value.split(',')]) except: @@ -26,6 +29,7 @@ def parse_options(): def scores_callback(option, opt, value, parser): """Option parser function for list of scores""" + global err try: scores = {} entries = value.split(',') @@ -40,6 +44,7 @@ def parse_options(): def filters_callback(option, opt, value, parser): """Option parser function for list of filters""" + global err try: filters = {} entries = value.split(',') @@ -314,6 +319,6 @@ warnings.formatwarning = formatwarning ################################################################################ if __name__ == '__main__': - (options, args, err) = parse_options() + (options, args), err = parse_options() if args and not err: main(args[0],options) From 1615e04f9a86bf002f4cf730125a55322505971e Mon Sep 17 00:00:00 2001 From: nhorelik Date: Wed, 17 Apr 2013 17:15:19 -0400 Subject: [PATCH 17/36] Fixed hdf5 type conversion error introduced by last commit --- src/utils/statepoint.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/utils/statepoint.py b/src/utils/statepoint.py index f6929ccdad..a7949c463c 100644 --- a/src/utils/statepoint.py +++ b/src/utils/statepoint.py @@ -555,30 +555,30 @@ class StatePoint(object): def _get_int(self, n=1, path=None): if self._hdf5: - return int(self._f[path].value) + return [int(v) for v in self._f[path].value] else: return [int(v) for v in self._get_data(n, 'i', 4)] def _get_long(self, n=1, path=None): if self._hdf5: - return float(self._f[path].value) + return [float(v) for v self._f[path].value] else: return [float(v) for v in self._get_data(n, 'q', 8)] def _get_float(self, n=1, path=None): if self._hdf5: - return float(self._f[path].value) + return [float(v) for v in self._f[path].value] else: return [float(v) for v in self._get_data(n, 'f', 4)] def _get_double(self, n=1, path=None): if self._hdf5: - return float(self._f[path].value) + return [float(v) for v in self._f[path].value] else: return [float(v) for v in self._get_data(n, 'd', 8)] def _get_string(self, n=1, path=None): if self._hdf5: - return str(self._f[path].value) + return [str(v) for v in self._f[path].value] else: return str(self._get_data(n, 's', 1)[0]) From dbaa3dc66a5c2e45000bcec16fc912f9a3d1926b Mon Sep 17 00:00:00 2001 From: nhorelik Date: Wed, 17 Apr 2013 17:16:15 -0400 Subject: [PATCH 18/36] Fixed syntax error --- src/utils/statepoint.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/statepoint.py b/src/utils/statepoint.py index a7949c463c..2e63ac121f 100644 --- a/src/utils/statepoint.py +++ b/src/utils/statepoint.py @@ -561,7 +561,7 @@ class StatePoint(object): def _get_long(self, n=1, path=None): if self._hdf5: - return [float(v) for v self._f[path].value] + return [float(v) for v in self._f[path].value] else: return [float(v) for v in self._get_data(n, 'q', 8)] From a51d346811c492509780cebd433624783b407e04 Mon Sep 17 00:00:00 2001 From: nhorelik Date: Wed, 17 Apr 2013 17:18:22 -0400 Subject: [PATCH 19/36] Fixed syntax error --- src/utils/statepoint.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/statepoint.py b/src/utils/statepoint.py index 2e63ac121f..98b04edf38 100644 --- a/src/utils/statepoint.py +++ b/src/utils/statepoint.py @@ -579,6 +579,6 @@ class StatePoint(object): def _get_string(self, n=1, path=None): if self._hdf5: - return [str(v) for v in self._f[path].value] + return str(self._f[path].value) else: return str(self._get_data(n, 's', 1)[0]) From 9289c655922883a3547496be7502d317d3f4ff1c Mon Sep 17 00:00:00 2001 From: nhorelik Date: Thu, 18 Apr 2013 08:24:29 -0400 Subject: [PATCH 20/36] Changed _get_long to return python long instead of float --- src/utils/statepoint.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils/statepoint.py b/src/utils/statepoint.py index 98b04edf38..b6c23ea90c 100644 --- a/src/utils/statepoint.py +++ b/src/utils/statepoint.py @@ -561,9 +561,9 @@ class StatePoint(object): def _get_long(self, n=1, path=None): if self._hdf5: - return [float(v) for v in self._f[path].value] + return [long(v) for v in self._f[path].value] else: - return [float(v) for v in self._get_data(n, 'q', 8)] + return [long(v) for v in self._get_data(n, 'q', 8)] def _get_float(self, n=1, path=None): if self._hdf5: From 3476c7f9c7cd5a85895ae73bfc1105d7bfaaced3 Mon Sep 17 00:00:00 2001 From: nhorelik Date: Thu, 18 Apr 2013 09:58:30 -0400 Subject: [PATCH 21/36] Added initial section on data processing and visualization to the users guide --- docs/source/usersguide/beginners.rst | 4 +++- docs/source/usersguide/index.rst | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/source/usersguide/beginners.rst b/docs/source/usersguide/beginners.rst index 9a791ac521..69f44c2ca1 100644 --- a/docs/source/usersguide/beginners.rst +++ b/docs/source/usersguide/beginners.rst @@ -109,7 +109,9 @@ should be comfortable working in a command line environment. There are many resources online for learning command line environments. If you are using Linux or Mac OS X (also Unix-derived), `this tutorial `_ will help you get acquainted with -commonly-used commands. +commonly-used commands. It is also helpful to be familiar with `Python +`_, as most of the post-processing utilities provided +with OpenMC rely on it for data manipulation and results visualization. OpenMC uses a version control software called `git`_ to keep track of changes to the code, document bugs and issues, and other development tasks. While you don't diff --git a/docs/source/usersguide/index.rst b/docs/source/usersguide/index.rst index a3b1583653..443640151a 100644 --- a/docs/source/usersguide/index.rst +++ b/docs/source/usersguide/index.rst @@ -14,4 +14,5 @@ essential aspects of using OpenMC to perform neutronic simulations. beginners install input + Processing troubleshoot From 6c86e67e9d07bed05043009b7d3b30a0ba2aa824 Mon Sep 17 00:00:00 2001 From: nhorelik Date: Thu, 18 Apr 2013 10:01:53 -0400 Subject: [PATCH 22/36] Added voxel plot binary specification to devguide --- docs/source/devguide/voxel.rst | 54 ++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 docs/source/devguide/voxel.rst diff --git a/docs/source/devguide/voxel.rst b/docs/source/devguide/voxel.rst new file mode 100644 index 0000000000..8ce0c6ee87 --- /dev/null +++ b/docs/source/devguide/voxel.rst @@ -0,0 +1,54 @@ +.. _devguide_voxel: + +===================================== +Voxel Plot Binary File Specifications +===================================== + +---------- +Revision 1 +---------- + +**integer(4) n_voxels_x** + + Number of voxels in the x direction + +**integer(4) n_voxels_y** + + Number of voxels in the y direction + +**integer(4) n_voxels_z** + + Number of voxels in the z direction + +**real(8) width_voxel_x** + + Width of voxels in the x direction + +**real(8) width_voxel_y** + + Width of voxels in the y direction + +**real(8) width_voxel_z** + + Width of voxels in the z direction + +**real(8) lower_left_x** + + Lower left x point of the voxel grid + +**real(8) lower_left_y** + + Lower left y point of the voxel grid + +**real(8) lower_left_z** + + Lower left z point of the voxel grid + +*do x = 1, n_voxels_x* + *do y = 1, n_voxels_y* + *do z = 1, n_voxels_z* + + **integer(4) id** + + Cell or material id number at this voxel center. Set to -1 when + cell not_found. From 25ccb5e5e9c54d7dff13f62200032713aff3f747 Mon Sep 17 00:00:00 2001 From: nhorelik Date: Thu, 18 Apr 2013 11:51:52 -0400 Subject: [PATCH 23/36] Added support for VTK file creation from voxel plot dumps --- src/utils/voxel.py | 83 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 63 insertions(+), 20 deletions(-) diff --git a/src/utils/voxel.py b/src/utils/voxel.py index 4451a017fc..c0d7e78d3d 100755 --- a/src/utils/voxel.py +++ b/src/utils/voxel.py @@ -5,8 +5,6 @@ from __future__ import division import struct import sys -import silomesh # https://github.com/nhorelik/silomesh/ - ################################################################################ def parse_options(): """Process command line arguments""" @@ -15,7 +13,9 @@ def parse_options(): usage = r"""%prog [options] """ p = OptionParser(usage=usage) p.add_option('-o', '--output', action='store', dest='output', - default='plot.silo', help='Path to output SILO file.') + default='plot', help='Path to output SILO or VTK file.') + p.add_option('-v', '--vtk', action='store_true', dest='vtk', + default=False, help='Flag to convert to VTK instead of SILO.') parsed = p.parse_args() if not parsed[1]: p.print_help() @@ -30,23 +30,66 @@ def main(file_, o): header = get_header(fh) meshparms = header['dimension'] + header['lower_left'] + header['upper_right'] nx,ny,nz = meshparms[0], meshparms[1], meshparms[2] - - silomesh.init_silo(o.output) - silomesh.init_mesh('plot', *meshparms) - - silomesh.init_var("cell_or_mat_id") - - for x in range(1,nx+1): - sys.stdout.write(" {0}%\r".format(int(x/nx*100))) - sys.stdout.flush() - for y in range(1,ny+1): - for z in range(1,nz+1): - id_ = get_int(fh)[0] - silomesh.set_value(float(id_), x, y, z) - print - silomesh.finalize_var() - silomesh.finalize_mesh() - silomesh.finalize_silo() + ll = header['lower_left'] + + if o.vtk: + try: + import vtk + except: + print 'The vtk python bindings do not appear to be installed properly.\n'+\ + 'On Ubuntu: sudo apt-get install python-vtk\n'+\ + 'See: http://www.vtk.org/' + return + + origin = [(l+w*n/2.) for n,l,w in zip((nx,ny,nz),ll,header['width'])] + + grid = vtk.vtkImageData() + grid.SetDimensions(nx+1,ny+1,nz+1) + grid.SetOrigin(*ll) + grid.SetSpacing(*header['width']) + + data = vtk.vtkDoubleArray() + data.SetName("id") + data.SetNumberOfTuples(nx*ny*nz) + for x in range(nx): + sys.stdout.write(" {0}%\r".format(int(x/nx*100))) + sys.stdout.flush() + for y in range(ny): + for z in range(nz): + i = z*nx*ny + y*nx + x + id_ = get_int(fh)[0] + data.SetValue(i, id_) + grid.GetCellData().AddArray(data) + + writer = vtk.vtkXMLImageDataWriter() + writer.SetInput(grid) + if not o.output[-4:] == ".vti": o.output += ".vti" + writer.SetFileName(o.output) + writer.Write() + + else: + + try: + import silomesh + except: + print 'The silomesh package does not appear to be installed properly.\n'+\ + 'See: https://github.com/nhorelik/silomesh/' + return + if not o.output[-5:] == ".silo": o.output += ".silo" + silomesh.init_silo(o.output) + silomesh.init_mesh('plot', *meshparms) + silomesh.init_var("id") + for x in range(1,nx+1): + sys.stdout.write(" {0}%\r".format(int(x/nx*100))) + sys.stdout.flush() + for y in range(1,ny+1): + for z in range(1,nz+1): + id_ = get_int(fh)[0] + silomesh.set_value(float(id_), x, y, z) + print + silomesh.finalize_var() + silomesh.finalize_mesh() + silomesh.finalize_silo() ################################################################################ def get_header(file_): From ec1be424ae47f9c0d1c4aa724a6cf732e37811f0 Mon Sep 17 00:00:00 2001 From: nhorelik Date: Thu, 18 Apr 2013 12:23:18 -0400 Subject: [PATCH 24/36] Added geometry plotting detail to users guide --- docs/img/3dcore.png | Bin 0 -> 284886 bytes docs/img/3dgeomplot.png | Bin 0 -> 82001 bytes docs/img/atr.jpg | Bin 0 -> 3039042 bytes docs/source/usersguide/index.rst | 2 +- docs/source/usersguide/input.rst | 2 + docs/source/usersguide/processing.rst | 98 ++++++++++++++++++++++++++ 6 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 docs/img/3dcore.png create mode 100644 docs/img/3dgeomplot.png create mode 100644 docs/img/atr.jpg create mode 100644 docs/source/usersguide/processing.rst diff --git a/docs/img/3dcore.png b/docs/img/3dcore.png new file mode 100644 index 0000000000000000000000000000000000000000..69fed4a079e67efe8118f53e26044f27c80a5675 GIT binary patch literal 284886 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