Michael Harmon

About

This website contains information on my work as a PhD student in Computational Applied Mathematics at the University of Texas at Austin. To find out more information on what I am up to now check out: www.michael-harmon.com

My research focused on the intersection of mathematical analysis, high performance computing and engineering in renewable energy. My worked involved developing high performance, multi-threaded finite element based software in C++ for chemists to numerically model photoelectrochemical solar cells and optimize the cell design. The bulk of my time was spent designing, implementing and analyzing different numerical algorithms to speed up simulation time. In the end I was able to produce algorithms that resulted in a reduction in runtime by a factor of 24. The source code I developed for simulations in one and two dimensions can be found below.

As a student I worked extensively with the deal.ii library, an open source finite element library written in C++. In addition to working with the library I was able to contribute to it as well. I mostly improved their library's distributed (MPI) direct solver to be more efficient. I also wrote example code on how to implement local discontinuous Galerkin methods in a distributed computing framework. Links to the source code for these projects, as well as others I completed using the deal.ii finite element library, can be found below.


Publications


M. Harmon, I. M. Gamba and K. Ren
To be published in Journal of Computational Physics

Projects


This C++ code solves the coupled drift-diffusion-Poisson equations that model a photoelectrochemical solar cell in 2D using the deal.ii finite element library. It will automatically run in parallel using the Thread Building Blocks for multithreading. The main challenges in constructing numerical algorithms that produces reliable simulations of PECs are due to the highly nonlinear nature of the system and the different time scales of the semiconductor and electrolyte charge carrier. Furthermore, regions of stiffness caused by boundary layer formation where sharp transitions in densities and electric potential occur near the interface and pose severe constraints on the choice of discretization strategy in order to maintain numerical stability. To overcome these challenges I used a mixed finite element method to solve the Poisson equation and local discontinuous Galerkin method along with implicit-explicit time stepping method for the drift-diffusion equations.

The code is throughly tested and extensively documented using doxygen automatic documentation generation. The documentation can be found here: http://michael-harmon.com/PECS/


This fully-tested C++ code solves the coupled drift-diffusion-Poisson that model a photoelectrochemical solar cell in 1D using the linear algebra library Eigen, Boost library, and OpenMP. The main challenges in constructing numerical algorithms that produces reliable simulations of PECs are due to the highly nonlinear nature of the system and the different time scales of the semiconductor and electrolyte charge carrier. Furthermore, regions of stiffness caused by boundary layer formation where sharp transitions in densities and electric potential occur near the interface and pose severe constraints on the choice of discretization strategy in order to maintain numerical stability. To overcome these challenges I used a mixed finite element method to solve the Poisson equation and local discontinuous Galerkin method along with implicit-explicit time stepping method for the drift-diffusion equations.


This is an example code I wrote for the deal.ii finite element library's code gallery. It is a large-scale distributed solver for Poisson equation in 2D and 3D solver that uses the local discontinuous Galerkin method. It mainly uses the deal.ii C++ library and the Trilinos library for distributed linear algebra using MPI. I thought it would be helpful for others to have access to this example that goes through writing a discontinuous Galerkin method from scratch and also shows how to do it in a distributed setting using the Trilinos library, both of which were not talked about in other examples in the deal.ii library. This code may also be of interest to users that wish to use the LDG method, as the method is distinctly different from the Interior Penalty Discontinuous Galerkin (IPDG) methods and was not covered in other tutorials on DG methods.


I contributed to the open source deal.ii C++ library by adding functionality to its interface with the Trilinos library and also added unit test to testing-suite. Specifically, I added the ability to use direct solvers for large-scale distributed linear systems (using MPI) without the need to re-factorize the matrix every time a solve is performed. This functionality was immediately adopted by users and resulted in improved runtimes which were a 250x faster in my case.


This code is designed to numerically solve the Drift-Diffusion-Poisson equations for semiconductor devices in 2D and 3D. The code runs in parallel using multithreading through the Intel Thread Building Blocks. Poisson's equation is solved using the mixed finite element method. The drift-diffusion equations for electron and hole transport are discrititzed with the local discontinuous Galerkin method and time stepping is performed using implicit-explicit (IMEX) methods.


This code is designed to numerically solve the Poisson equation using the mixed finite element method. The code runs in parallel using multithreading through the Intel Thread Building Blocks.

Note: This project improves upon step-20 in the deal.ii tutorial by:

Adding Neumann boundary conditions.

Allowing for multithreading to reduce runtimes.


This code is designed to numerically solve the steady-state advection equation using the discontinuous Galerkin (DG) method.

Note: This is refactored code from the step-30 in the deal.ii tutorial. The capabilities of anisotropic mesh refinement has been removed to more clearly show how to implement DG methods using the deal.ii library.


This code is designed to numerically solve the Poisson equation using the finite Element Method (FEM).


Teaching


Honors Vector Calculus
Fall 2015

University of Texas at Austin


Linear Algebra and Honors Linear Algebra
Fall 2014 and Spring 2015

University of Texas at Austin


Scientific Computing
Fall 2014

The University of Texas at Austin


Differential Equations
Fall 2011, Fall 2013, Spring and Summer 2014

The University of Texas at Austin


Calculus 1, 2, and 3
Fall 2012, Fall 2008, Summer 2013

The University of Texas at Austin


Basic Statistics
Spring 2011

Fisher College


College Algebra
Fall 2010, Spring 2011

Fisher College


People


Professor

Ph.D. Supervisor


Professor

Ph.D. Supervisor