Particle System

Smoothed-particle hydrodynamics (SPH)

Smoothed-particle hydrodynamics (SPH) is a particle-based computational method used for simulating the dynamics of continuum media. A header-only implementation was implemented and it is available on GitHub.



Finite Element Method

Static and dynamic finite element method (FEM)

In the past three years, the author programs finite element method heavily inside Real-ESSI simulator.. The coding experiences cover almost all aspects of FEM, from constitutive modeling, element technique, to solution methods and stability.


Finite Element Method with Beams

This is a 3D finite element method for beams written in Matlab. The code is available on GitHub.


Numerical Library

Small Tensor Library (Einstein Notation)

Small tensor operations are widely used in computational mechanics. The author implemented a header-only small tensor library with in-built template meta-programming engine such that the required memory size is determined at compile time. In this way, the dynamic heap allocation is avoided and the engine can always allocate exactly the right amount of stack memory required. In addition, the tensor library supports Einstein Notations for user's convenience. The code is available on GitHub.


Small Tensor Library (Automatic Differentiation)

Automatic differentiation (AD), also called algorithmic differentiation or computational differentiation, is a set of techniques to numerically evaluate the derivative of a function specified by a computer program. AD is between symbolic differentiation and numerical differentiation (the method of finite differences). In this library, AD is implemented in the tensor level and the code is available on GitHub.


Tensor Derivative Library (Symbolic)

For a complicated/realistic constitutive model, the derivative of the tensor function can be quite complicated. The symbolic tensor derivative framework designed for the elastoplastic algorithm is implemented in Mathematica. The implementation and examples are available on GitHub.


Wave Propagation

1D and 3x1D inhomogeneous Wave Propagation

Earthquakes waves are usually measured at the surface. The earthquake waves at the bedrock are required for the soil-structure interaction simulation. This implementation is able to do convolution and deconvolution across the inhomogeneous layers of different material properties. FFT and the analytical solutions in the frequencies domain is used. The implementation and examples are available on GitHub.


Domain Reduction Method

Domain Reduction Method a modular finite-element methodology for modeling earthquake ground motion in highly heterogeneous localized regions with large contrasts in wavelengths. Domain reduction method was implemented in Real-ESSI and can be used with the wave propagation directly.


Solid Constitutive Modeling

Multi-surface Plasticity

Multi-surface material model is used describe the elastoplastic behavior accurately, especially for matching the field measurement. Three yield surfaces were implemented for the multi-surface-material model: von-Mises, Drucker-Prager, and rounded-Mohr-Coulomb yield surfaces.


Cosserat Plasticity

Cosserat theory, also called micro-polar elasticity, is a augmented elasticity theory, where the micro-rotation (spin) is considered. The Cosserat elasticity and plasticity are implemented. The code will be available after some publication.


Various Drucker-Prager Material Model

Drucker-Prager is used for pressure-dependent material model. There are various modified versions of Drucker-Prager materials, like hyperbolic and tension hardening. The code will be available after some publication.


High Performance Computing

Asynchronous Writer Prototype with TBB (shared memory)

Asynchronous writing with TBB saves 40 percent of time in some cases. The Asynchronous Writer Prototype is available on GitHub.


Actor Model Prototype with MPI (distributed memory)

Actor model is a mathematical model for distributed computing. The Actor model prototype (implemented with MPI). is available on GitHub.


Miscellaneous

A lock-free multi-thread Web Crawler

The lock-free multi-thread web crawler uses BeautifulSoup4 to process the web-page, and uses redis to save and read the index-page. The code is available on GitHub.


Benchmark Preconditioning

Subspace projection methods (CG and GMRES) provide very nice iterative algorithms to solve symmetric and non-symmetric linear systems respectively. But they often suffer from low convergence rate. Preconditioning provides a way to address this issue. The basic idea is to use the Krylov subspace method on a modified system. This study focus on comparing performance of different preconditioning techniques starting from the simpler ones to more complicated ones on GMRES and CG methods.