# Software

#### This part is research code, most of them are attached to my research publications.

### CDFCI [github]

This package is a simple and efficient implementation of the Coordinate Descent Full Configuration Interaction (CDFCI) algorithm using modern C++ (C++14). CDFCI is an efficient algorithm for the electronic structure ground-state calculation in the configuration interaction framework. CDFCI solves an unconstrained nonconvex optimization problem, which is a reformulation of the full configuration interaction eigenvalue problem, via an adaptive coordinate descent method with a deterministic compression strategy. CDFCI captures and updates appreciative determinants with different frequencies proportional to their importance. This is joint work with Jianfeng Lu and Zhe Wang.

### KSSOLV [webpage]

KSSOLV is a MATLAB toolbox for solving Kohn-Sham density functional theory based electronic structure eigenvalue problems. It uses an object oriented features of MATLAB to represent atom, molecules, wavefunctions and Hamiltonians and their operations. It is designed to make it easier for users to prototype and test new algorithms for solving the Kohn-Sham problem. KSSOLV2.0 contains significant improvement over the original KSSOLV. In addition to performing ground state calculation for small molecules, it can also perform geometry optimization for both molecules and solids. It uses standard pseudopotentials and implements local density approximation, generalized gradient approximation and hybrid functionals. Future releases will also include time-dependent DFT and post DFT calculations such as the GW quasi-particle energy calculation and Bethe-Salpeter equation solver for optical absorption. This is joint work with KSSOLV Team.

### ELSI-RCI [gitlab]

ELSI-RCI provides and enhances open-source software packages which iteratively solve or circumvent eigenvalue problems in self-consistent field calculations based on the Kohn-Sham density-functional theory. This is joint work with Jianfeng Lu and ELSI Team.

### ELSI [webpage]

ELSI provides and enhances scalable, open-source software library solutions for electronic structure calculations in materials science, condensed matter physics, chemistry, molecular biochemistry, and many other fields. ELSI focuses on methods that solve or circumvent the Kohn-Sham eigenvalue problem in density-functional theory. The ELSI infrastructure should also be useful for other challenging eigenvalue problems. This is joint work with ELSI Team.

### ButterflyNet [github] and ButterflyNet2 [github]

Butterfly-Net and Butterfly-Net2 are convolutional neural network structures with sparse channel connection. The architectures are inspired by Butterfly algorithms. Both Butterfly-Nets are especially useful for signal processing and image processing tasks, where CNNs are widely used. The overall parameter complexity is $\mathcal{O}(K \log N)$ for $N$ and $K$ being the input and output sizes. Both codes are implemented using Tensorflow 2 and accept json files for input configuration. This is joint work with Xiuyuan Cheng, Jianfeng Lu, and Zhongshu Xu.

### FastBF [github]

Fast Butterfly Factorization, which is also known as the interpolative butterfly factorization (IBF), gives a data-sparse representation of matrices that satisfy the complementary low-rank property. Given the explicit expression of the kernel, IBF factorizes the kernel matrix in $\mathcal{O}(N\log N)$ operations. And the final factorization admits $\mathcal{O}(N\log N)$ operations and memory complexity with nearly optimal prefactor. This code supports the interpolative butterfly factorization of any dimensional problems with and without singularity. Several examples are provided in the test folders. This is joint work with Haizhao Yang.

### BF [github]

Butterfly Factorization (BF) gives a data-sparse representation of matrices that satisfy the complementary low-rank property. The factorization approximates such a kernel matrix of size $N\times N$ with a product of $\mathcal{O}(\log N)$ sparse matrices, each of which contains $\mathcal{O}(N)$ nonzero entries. Hence the application only requires $\mathcal{O}(N\log N)$ operations and memory. This code supports the butterfly factorization of $d$ dimensional matrices for $d\leq 2$. Several examples are provided in the test folders. This is joint work with Haizhao Yang, Eileen Martin(one dimensional code), Kenneth L. Ho(one dimensional code), and Lexing Ying.

### MBA [github]

Multiscale Butterfly Algorithm (MBA) is a code for the fast evaluation of Fourier Integral Operators (FIOs). Both 2D and 3D FIOs can be fast evaluated via this code. Several examples are provided in the test folders. This is joint work with Haizhao Yang and Lexing Ying.

### DMHM [github]

Distributed-Memory Hierarchical Matrices (DMHM) is a code for mpi based hierarchical matrix algebra. This code support both 2D and 3D $\mathcal{H}$-matrices. $\mathcal{H}$-matrix application, composition, addition and inversion are completed. This is joint work with Jack Poulson and Lexing Ying.

# Code

#### This part is research related code, while none of them is attached to any specific paper.

### MuFiM [github]

MuFiM is code for the MultiFrontal method for general sparse matrices in Matlab. This code currently supports the fast factorization of symmetric matrices, Hermitian matrices, and pattern symmetric matrices. The complexity analysis of the algorithm is available if the sparse matrix is discretized from PDEs with a local numerical scheme. For two-dimensional problems, the factorization and solving/application are of complexities $\mathcal{O}(N^{3/2})$ and $\mathcal{O}(N\log N)$ respectively. For three-dimensional problems, the factorization and solving/application are of complexities $\mathcal{O}(N^2)$ and $\mathcal{O}(N^{4/3})$ respectively. The factorization phase of MuFiM is about 4 times slower than Matlab default "/" or "\" operation. While once the factors are available, the solving/application is of lower complexity than Matlab default solving. In practice, the running time is also much faster.

### meshpart [github]

Meshpart is a Matlab toolbox for several graph and mesh partitioning methods, including geometric, spectral, geometric spectral, and coordinate bisections. It also has routines to generate recursive multiway partitions, vertex separators, and nested dissection orderings. It functions similar to MetisMex, but purely in Matlab. This is joint work with John R. Gilbert and Shang-Hua Teng.

### MetisMex [github]

Metis Mex is mex files for METIS. This code currently supports 64-bit Linux, Mac, and Windows. If any support for 32-bit computer is needed, please email me.

### FastSpecialMat [github]

Fast Special Matrices is code for fast application of special matrices. This code currently supports the fast application of circulant matrices, Hankel matrices, Hankel circulant matrices, Toeplitz matrices and Toeplitz symmetric matrices. The complexities of all these applications are $\mathcal{O}(N \log N)$ for $N$ by $N$ matrices.