• image

    Current projects

    Some of the projects that I am currently working on, either professionally or during my spare time.

    • Thermodynamic properties of alloying elements in iron via quantum mechanical calculations.

      I am interested in determining the tendency for a number of impurity elements to concentrate in specific microscopic areas within iron. Pronounced local concentrations of impurities create non-homogeneity, thus strongly affecting the behaviour of iron at macroscopic level, particularly when iron is subjected to loading and/or heating. I approach this problem by employing numerical techniques to solve Schrödinger's equations.

      Status: project was commenced on January 2016; preliminary results were presented at an international conference in San Diego, March 2017.

    • Motion of dislocations in iron that contains helium clusters.

      This project is a collaboration between The University of British Columbia and Tsinghua University. My role was to propose a research topic and to aid a master student who would be working on the project.

      Status: project was commenced on March 2016; results were presented at an international conference in San Diego, March 2017.

    • Assembling genome from series of short error-prone reads

      This is a capstone project for a specialization on Advanced Algorithms and Complexity that I'm currently finishing. I borrow the exploding newspapers analogy from Compeau and Pevzner to talk about the problem.

      Consider a stack of identical newspapers that explode, leaving thousands pieces of paper that contain few full sentences and some partial words. The problem asks if we can return the original newspaper using these pieces.

      This analogy is an exaggeration of genome assembly problem. In this case, its piece of paper is a read, a string that contains tens or hundreds of letters of A, T, C and G. There are many of these reads. Upon applying a series of algorithms to these reads, including finding a Eulerian cycle and constructing de Bruijn graph, the original genome can be constructed. Identifying a genome is an important problem in modern biology.

      Status: commenced in March 2017, working on de Bruijn graph of the reads

  • image

    Diffusion in a multi-component system

    An object-oriented C++ code for simulating diffusion of atoms in a face-centered cubic crystal lattice using a kinetic Monte Carlo method.

    The code was originally written for my former doctoral advisor. The initial purpose is to simulate formation of small clusters of solute atoms in aluminum alloys. Up to 9 type (elements) of solute atoms can be simulated, thus making it a 10-component system. The code is capable of considering an interaction energy between two elements that extends to fifth nearest neighbour distance (~1.6× lattice parameter).

    The code has been tested and validated for a system of 8 million atoms. The code can be cloned or forked (if interested in collaboration) from this repository. To build the code, a C++11 compiler is required.

    An example of input file to run the simulation can be found in /input/ subdirectory of the repository. If there is an additional feature that you want to request, you can contact me via the contact page of this site.

  • image

    Simple movie recommender

    A recommender system written in Java for a capstone project that provides recommended titles based on several metrics, including genre, similarities with other users, and rating from movie critics.

    The capstone aims to give avenue to implement several concepts in Java, including polymorphism and interfaces, into an integrated project. The codes written for this capstone is kept in this repository.

  • image

    Short game projects

    Few simple games developed in Unity for Game Development specialization with Michigan State University.

  • image

    LAMMPS: Large-scale Atomic/Molecular Massively Parallel Simulator

    An open-source collaborative code in C++ (in which I am a contributor) distributed by Sandia Lab, a U.S. national laboratory.

      LAMMPS is an open-source collaborative code to simulate motion of atoms, that is distributed and maintained by Sandia Laboratory. LAMMPS is widely used by different scientific communities, including materials science, structural biology, biochemistry, civil engineering, and solid-state physics.

      I contribute a feature which helps identifying a given atom based on the structure of its neighbours. This feature is documented here and the source code is maintained in a github repository. I have a publication based on a work that implements this feature along with a tutorial note that explains the feature in great detail.

  • image

    Integer optimization problems

    Subroutines to solve several simple integer optimization problems, e.g. knapsack problem implemented in Python and MiniZinc.

  • image

    Ferroelectric domain switching in thin-film materials

    A C++ project developed by Institute of High Performance Computing, Singapore during my research internship to simulate the switching behaviour of thin-film ferroelactric materials.

    A good analogy for ferroelectric materials is magnets (or, specifically, ferromagnetic materials). Magnetic materials are essential for devices that store data, due to their ability to switch between magnetic and non-magnetic state (resembling an on/off switch). Similarly, ferroelectric materials exhibit a state switching that can be used to store data.

    Recent development in data storage technology requires the materials that store data to be few atomic layers thick. When there is only such little material to work with, the on/off state can be perturbed easily, e.g. by electric noise. The C++ project aims to simulate the switching behaviour of ferroelectric materials of a given thickness under different types of operational conditions.

    While the code is not distributed openly, its underlying assumptions and implementation are described in my master thesis ( PDF).