I grew up in a computer oriented household.
My first memories of computers are of playing
Alpiner on a TI-99/4A. Since that time my family always
made an effort to have a current PC. As a result,
I picked up many computer skills over the years. In high school,
I learned to program in PASCAL. Next I learned to program in
C/C++. After that, I branched out into many areas. Because I
had the opportunity to work on many different projects as part of
studying applied mathematics, I have learned how to use a variety
of software.
The following is a list of programming languages and software I currently use or have used
for various
projects in the past.
I used C++ in combination with Fortran while developing particle collision models within an adaptive mesh framework. This work was part of an effort in exploring the potential to modernize the Multiphase Flow Software Suite, MFiX, for optimal performance on exascale computing machines.
Fortran has advantages in the way it handles matrix arithmetic. In addition, a large amount of time-tested code for scientific applications in existence today was written in Fortran. For these reasons, it is still commonly found in high performance computing applications today. I wrote and profiled code in Fortran as part of my contribution towards overhauling a multiphase flow simulation for use on the next generation of super computers.
My most recent coursework and self study has been with C. I learned basic programming structure with C in classes. Later I taught myself how to use pointers. Finally, working with CUDA has forced me to think quite a bit about how memory and data is stored and moved around.
Link to github: Random Number TestCUDA is an API created by Nvidia. I use it within the C programming language in order to use Nvidia GPUs to accelerate parallelizable computations. The multiscale stochastic partial differential equation model for the exploration of lung mucus would be too slow to be useful if it were not for the speedup GPUs provide. You can find code for a baseline model that was written to validate the approach at my GitHub.
Link to github: Maxwell Model
I use Python for the analysis of output data and to prototype
model behavior. I have found that Pandas and Numpy make it easy to
read-in and manipulate data. I use Matplotlib for basic graphing, but
it is capable of doing everything. For
beautiful graphs and interactive visualizations the easy way, Bokeh
is best, however I have found Matplotlib does things it cannot, such as
a two line title.
Link to github: Coming Soon
I wrote scripts to setup and run large numbers of simulations with
different input parameters. The example below reads lines from a
text file, creates folders, runs the simulations and saves them
in the appropriate folder.
Link to github: SH Files
I made this responsive website using the font-end framework Bootstrap.
I also made an updated website for the University of South Carolina SIAM
Chapter. Since the SIAM website is a more recent work, the code is bit
cleaner.
See the website:
University of South Carolina SIAM Chapter
I use Jupyter to develop reports in conjunction with python, pandas, numpy, matplotlib
and bokeh. Jupyter has some nice features, such as being able to combine latex equations,
commentary, code, and visualizations all in the same place.
Link to github: Coming Soon
I have been using Git for version control since January 2017. Before Git I
had over 20 files in my working directory. After Git, I only have 3.
Link my github page: GitHub
I highly recommend spending the time to learn vim if you expect you'll be
coding for more than a few months. It makes it faster for me to implement
many of the things I have listed above.
Link to Vim: Vim
The advantage of vim becomes apparent when you start learning how to
use its features. For this I recommend Practical Vim by
Drew Neil.
Publisher's page:
The Pragmatic Bookshelf
I am also a fan of Ubuntu and GNU/Linux. I started dual-booting in 2009.
Now my home machine only runs Ubuntu. Ubuntu is free and open source. You
can try it by booting from a thumb drive.
Get Ubuntu: Ubuntu Homepage
SageMath is free open-source mathematics software. I used it
to automate and compute a large number of integrals for my
Math and Music project at the California State University, East Bay.
Link to github: Coming Soon
Most of my course work in linear algebra, numerical computation and numerical
differential equations at UC Davis and the University of South Carolina
was done in MATLAB.
In addition, I have
written scripts in MATLAB to test analysis methods, analyze data and produce
visualizations.
Link to github: Coming Soon
R is a free software environment for statistical computing and graphics.
I wrote scripts in R analyze of large amounts of output data. My favorite
part of R is all the examples in the help.
See an example script on GitHub: Coming Soon
I used Mathematica for course assignments at California State University,
East Bay. When I was taking real analysis, I made the animation below of
Lebesgue integration.
See the code: Wolfram Mathematica Plots
I taught Maple labs as part of my Calculus teaching assistant duties.
Students learned how to make basic graphs and do standard Calculus
operations with the software. They also learned basic for loops and
some iterative processes. Final projects consisted of fractal designs
and solids of revolution.
Link to github: Coming Soon
GIMP is a free software image editor which allows you to do all
sorts of things with creating images and manipulating photos.
I learned how to use GIMP by watching
video pod casts on the subway on my way to work
when I lived in Beijing.
Most the graphics created in my Powerpoint slides and on my
posters were done with GIMP.