Software

Besides reading articles and drafting manuscripts, I enjoy writing code. These are a few examples of software applications I developed for research and for class projects.

**Note: many of the codes described here are proprietary and owned by the labs I worked for. This page only provides a description of the codes. No distribution is intended.

Neutron Transport

2D Discontinuous Galerkin Neutron Transport Solver

I developed a 2D Sn neutron transport solver in C++. The code uses discontinuous galerkin finite element method and has been shown to be third order accurate using the method of manufactured solutions. During the same NE 520 course, I developed a 1D Sn solver with diffusion synthetic acceleration, an analytical Sn solver, and a Peierl's equation solver under the guidance of Dr. James Warsa of Los Alamos National Laboratory.


1D Sn Method Neutron Transport

I developed and benchmarked a 1D discrete ordinates method neutron transport code as part of a class project for Anil Prinja's NE 610. The code was developed in C++ and implemented weighted diamond differencing. The code allows for multi-region problems with fission and volumetric sources and supports both albido and incident source boundary conditions. The project report is temporarily available here.



Multi-region Diffusion Solver with First-Order Perturbations

For the NE 511 class project, I developed a multi-region, 1 group diffusion approximation solver for cylindrical geometry. The code mainly features first-order perturbations in materials, interfaces, and boundaries and calculates the perturbed flux and k-eigenvalue.


Two-Group Multi-region Diffusion Solver

For the NE 410 class project, I developed a multi-region, 2 group diffusion approximation solver for cylindrical geometry.

Anubis: A MCNP-OpenFOAM/STAR-CCM+ Coupling Utility

I developed a quasi-steady state coupling utility that coupled MCNP and OpenFOAM externally in a fully automated manner. The utility reads and manipulates the input and output files of both OpenFOAM and MCNP. The utility first maps the temperature field from OpenFOAM regions to MCNP cells. Using Makxsf, the utility obtains temperature-adjusted doppler broadened cross-sections for all nuclides in the system. The utility then adjusts the density of the MCNP cells and updates the surface parameters to account for thermal expansion. After running the MCNP case, the utility obtains the power distribution from the energy distribution tallies after unnorming the per source particle values. The utility then updates the heat sources in OpenFOAM and runs a new iteration. The code was built to work for any geometry and any valid MCNP input under the assumption that an MCNP cell should correspond to an OpenFOAM region. The code relies on user defined files to update the surfaces anisotropically. The current version of the code assumes that the power is known and fixed. It hasn't been integrated to kinetic models. The program implements an object-oriented structure and is > 2000 lines of code. The new version of Anubis supports STAR-CCM+ as an option for CFD. Automated coupling with STAR-CCM+ (commercial code) is achieved through the use of Java macros which Anubis can automatically write for any geometry.


Computational Fluid Dynamics and Thermal Hydraulics

Navier-Stokes Solvers with Mass and Heat Transfer

Under the guidance of Dr. Sang Lee, I developed 2D and 3D Navier-Stokes numerical solvers for cartesian and cylindrical coordinates. The codes also solve the scalar transport equation which is used to obtain temperature and mass concentration fields given the velocity field from the Navier-Stokes solver. The codes implement Adam-Bashforth method for the convection terms, Crank-Nicolson for time stepping, and fractional step method for factorization and line-by-line solution. No turbulence models are currently implemented in the codes.


DPM2MCNP

The utility registers polydisperse particles obtained from Lagrangian particle tracking in Fluent to George Xu's VIP-Man phantom in MCNP as photon/beta/alpha radiation source particles. Aerosol particle volume is accounted for through weighting of the radiation source positions.


SnappyHexMesh Dictionary Generator

The utility generates a SnappyHexMesh dictionary for a set of given .stl files.

PWR Thermal Hydraulic Design

For the NE 464 class project, I developed an 800-line MATLAB program that implemented a genetic search algorithm to search for PWR reactor designs that meet economic and thermal hydraulic constraints on heat flux, fuel temperature, cladding temperature, coolant exit temperature, coolant flow rate, fuel rod diameter, total reactor thermal power, and reactor dimensions. The total thermal power is calculated by integrating the power generated by each zone in the reactor. The program iteratively solves coupled material/thermal hydraulics equations that involve thermal conductivity and specific heat which are both temperature dependent. Additionally, the program calculates and applies hotspot factors, calculates radial and axial temperature distributions in the hottest fuel rod, and calculates axial CHFR distribution. Further, the program automatically distributes and visualizes the fuel bundles in the reactor for any radius, P/D, rod diameter, and bundle size such that the nearest rod to the vessel is at least half a bundle width distance from the vessel. My work exceeded what was required for the class project. The code is available upon request.


Functional Magnetic Resonance Imaging

TurboFilt

TurboFilt is a toolbox I developed in MATLAB for processing and filtering fMRI data. The toolbox has many features such as frequency analysis, PCA regression, p-value maps, novel methods for automated physiological noise detection and FIR filtering, mask-based filtering, Gaussian smoothing, connectivity analysis, and simulation. The code is object-oriented (~8500 lines). The code was developed from the scratch. Work was supervised and guided by Dr. Stefan Posse. Click on the arrows to see a demo.




S.W.A.T.

S.W.A.T. is a toolbox I developed in MATLAB for the simulation of noise regression and sliding window analysis of BOLD signals in fMRI. The code features a GUI and a macro system with an in-house developed mark-up language. The toolbox extends on simulation work done by Cameron Trapp under the supervision of Dr. Stefan Posse. Click on the arrows to see a demo.

Internet of Things

IoT-CMU Web Component

For my undergraduate senior design project with Dr. Kumar Yelamarthi at Central Michigan University, I developed the IoT-CMU website and APIs. The website was developed in PHP on the backend. On the front-end, I used AJAX to allow the charts and the tables to update automatically as sensor data came in. Google Charts was integrated for the data display. IoT-CMU had a user system that allowed anyone to sign up and register hubs. Each user could register multiple hubs, and each hub could have multiple nodes.