Pool Boiling Gravity

In this tutorial we will learn how to perform complex plotting and slicing operations using two and three dimensional pool boiling datasets. We consider two studies invovling different gravity environments - earth and low gravity.

Lets begin!

First we import all the necessary libraries

import math
import numpy
import boxkit
import matplotlib.pyplot as pyplot

First we will look at how to merge block-structured datasets into contiguous arrays to using boxkit.mergeblocks method.

Lets start with reading the relevant datasets,

dataset_blocks=boxkit.read_dataset("/Users/Akash/Box/Jarvis-DataShare/Bubble-Box-Sample/boiling-earth/heater2D/blocks/INS_Pool_Boiling_Heater_hdf5_0030")
dataset_oneblk=boxkit.read_dataset("/Users/Akash/Box/Jarvis-DataShare/Bubble-Box-Sample/boiling-earth/heater2D/oneblk/INS_Pool_Boiling_Heater_hdf5_0030")

dataset_blocks contains a two-dimensional results of a heater surface in a pool boiling simulations in earth gravity, where the variable, phi, is a level-set function representing bubble locations.

dataset_oneblk contains the same dataset as a contiguous array to compare with a reference solution

We start by defining a method plot_phi to plot a contour plot for phi=0 over list of blocks in a dataset

def plot_phi(dataset):
    """
    dataset: BoxKit dataset object
    """
    # create figure with desired configuration
    pyplot.figure(figsize=[6,6])
    pyplot.rc("font", family="serif", size=14, weight="bold")
    pyplot.rc("axes", labelweight="bold", titleweight="bold")
    pyplot.rc("text", usetex=True)

    # loop over blocks in dataset
    for block in dataset.blocklist:

        # create a mesh grid in x-z plane
        xmesh, zmesh = numpy.meshgrid(block.xrange("center"), block.zrange("center"))
        pyplot.contour(xmesh, zmesh, block["phi"][:,0,:], levels=[0])

    # set layout and plot titles
    pyplot.tight_layout()
    pyplot.xlim([dataset.xmin, dataset.xmax])
    pyplot.ylim([dataset.zmin, dataset.zmax])
    pyplot.title("Heater X-Z Plane")
    pyplot.show()

Next we supply each dataset to plot the bubbles on a heater surface using the function defined above

plot_phi(dataset_oneblk)
../../_images/output_8_0.png
plot_phi(dataset_blocks)
../../_images/output_9_1.png

We can see how plotting contours for dataset_blocks creates breaks due in the lines for phi=0. This can be resolved by merging blocks using boxkit.mergeblocks method.

reshaped_dataset=boxkit.mergeblocks(dataset_blocks, "phi", nthreads=1, backend="loky")

boxkit.mergeblocks can be called with multiple threads and desired parallel backend to control the speed of this method and create reshaped_dataset as a new merged dataset. The resulting plot for this dataset is similar plot for dataset_oneblk

plot_phi(reshaped_dataset)
../../_images/output_13_0.png

We apply the the same process for a pool boiling simulation for low gravity (international space station)

dataset_lowg=boxkit.read_dataset("/Users/Akash/Box/Jarvis-DataShare/Bubble-Box-Sample/boiling-lowg/heater2D/INS_Pool_Boiling_Heater_hdf5_0030")
dataset_lowg=boxkit.mergeblocks(dataset_lowg, "phi")
plot_phi(dataset_lowg)
../../_images/output_16_0.png

We can apply similar process to a three-dimensional dataset and create contour plots along slices as follows,

def plot_phi_3D(dataset):
    pyplot.figure(figsize=[6,6])
    pyplot.rc("font", family="serif", size=14, weight="bold")
    pyplot.rc("axes", labelweight="bold", titleweight="bold")
    pyplot.rc("text", usetex=True)
    for block in dataset.blocklist:
        xmesh, ymesh = numpy.meshgrid(block.xrange("center"), block.yrange("center"))
        pyplot.contour(xmesh, ymesh, block["phi"][50,:,:], levels=[0])
    pyplot.tight_layout()
    pyplot.xlim([dataset.xmin, dataset.xmax])
    pyplot.ylim([dataset.ymin, dataset.ymax])
    pyplot.title("Slice X-Y Plane")
    pyplot.show()
dataset_3D=boxkit.read_dataset("/Users/Akash/Box/Jarvis-DataShare/Bubble-Box-Sample/boiling-earth/domain3D/not-chunked/INS_Pool_Boiling_hdf5_0030")
dataset_3D=boxkit.mergeblocks(dataset_3D, "phi", monitor=True, nthreads=1, backend="loky")
plot_phi_3D(dataset_3D)
../../_images/output_20_3.png
dataset_3D=boxkit.read_dataset("/Users/Akash/Box/Jarvis-DataShare/Bubble-Box-Sample/boiling-lowg/domain3D/INS_Pool_Boiling_hdf5_0030")
dataset_3D=boxkit.mergeblocks(dataset_3D, "phi", monitor=True, nthreads=2, backend="loky")
plot_phi_3D(dataset_3D)
../../_images/output_22_3.png
dataset_blocks.purge("boxmem")
dataset_oneblk.purge("boxmem")
reshaped_dataset.purge("boxmem")
dataset_lowg.purge("boxmem")
dataset_3D.purge("boxmem")