Elphbolt
A solver for the coupled and decoupled electron and phonon Boltzmann transport equations.
Install / Use
/learn @nakib/ElphboltREADME
#+OPTIONS: ^:{} [[./logo/logo.png]]
- elphbolt + superconda ~elphbolt~ (short for electron-phonon Boltzmann transport) is a modern Fortran (2018 standard) suite of transport codes. It provides a solver for both the coupled /and/ decoupled electron and phonon Boltzmann transport equations (BTEs). You can read about the methodology and implementation here: https://www.nature.com/articles/s41524-022-00710-0. In addition, you get the ~superconda~ app for solving the phonon-mediated superconducting properties within the Eliashberg formalism.
Using /ab initio/ electron-phonon and 3- and 4-phonon interactions and a fully wave vector and electron band/phonon branch resolved formulation of the BTEs, the ~elphbolt~ app gives you the
- phonon and electronic thermal conductivities;
- electronic conductivity;
- phonon and electronic contributions to the thermopower; and
- effect of the mutual electron-phonon drag on the transport coefficients listed above;
- effective thermoelectric transport coefficients for nanostructures (nanowires, nanoribbons, and thin-films).
Using /ab initio/ electron-phonon and a fully wave vector and electron band/phonon branch resolved, Eliashberg formulation of superconductivity, the ~superconda~ app gives you the
- anisotropic and isotropic Eliashberg spectral function and
- phonon-mediated superconducting transition temperature.
To date (April 28, 2025), ~elphbolt~ / ~superconda~ has been used in the following works: | material(s) | physics probed | publication | |------------------------------------+-------------------------------------------------------------------------------------------------------+-------------------------------------------| | Si | phonon mean-free-path spectroscopy by Raman thermometry | [[https://www.sciencedirect.com/science/article/pii/S2542529325001403][Mat. Tod. Phys. 2025, 101784]] | | θ-TaN | drag asymmetry and reverse heat flow | [[https://doi.org/10.1016/j.mtphys.2025.101706][Mat. Tod. Phys 53, 101706]] | | MoS_{2} | coupled electron-phonon hydrodynamics | [[https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.134.226301][Phys. Rev. Lett. 134, 226301]] | | NbGe_{2} & NbSe_{2} | drag | [[https://cpl.iphy.ac.cn/en/article/doi/10.1088/0256-307X/41/12/126301?viewType=HTML][Chin. Phys. Lett. > 2024 > 41(12), 126301]] | | wGaN | thermal analysis of GaN-based photonic membranes for optoelectronics | [[https://arxiv.org/abs/2410.12515][preprint]] | | Surface halogenated Ti_{2}O Moenes | drag enhancement of thermoelectric transport | [[https://doi.org/10.1016/j.apsusc.2024.161766][Appl. Surf. Sci. 683, 161766]] | | TiSe_{2} | phonon transport manipulation via reversible charge density wave melting | [[https://www.nature.com/articles/s41699-024-00501-9][npj 2D mat. & app. 8, 64]] | | MoS_{2}, silicene, & AlN | electron drag enhancement of phonon thermal conductivity in 2D materials | [[https://pubs.acs.org/doi/full/10.1021/acs.nanolett.4c02097][Nano Lett. 20, 26]] | | Ti_{2}OX_{2} (X = F, Cl) MOene | thermoelectric performance | [[https://doi.org/10.1063/5.0196117][J. Appl. Phys. 135, 125106]] | | Si, BAs, LiF, & wGaN | new models of phonon-isotope interaction and temperature dependent 3+4ph limited thermal conductivity | [[https://doi.org/10.1103/PhysRevB.109.165201][Phys. Rev. B 109, 165201]] | | Si nanowires | effect of nanostructuring on drag and thermoelectric figure of merit, ZT | [[https://www.sciencedirect.com/science/article/pii/S0017931024002163][Intl. J. Heat & Mass Trans. 225, 125385]] | | wGaN | 3+4 phonons and thin-film scattering limited thermal conductivity | [[https://journals.aps.org/prb/abstract/10.1103/PhysRevB.108.235313][Phys. Rev. B 108, 235313]] | | wGaN & wAlN | drag | [[https://journals.aps.org/prb/abstract/10.1103/PhysRevB.107.245202][Phys. Rev. B 107, 245202]] | | MgB_{2} | superconductivity enhancement | [[https://journals.aps.org/prb/abstract/10.1103/PhysRevB.107.184518][Phys. Rev. B 107, 184518]] | | BAs | drag | [[https://doi.org/10.1103/PhysRevB.107.L081202][Phys. Rev. B 107, L081202]] | | Diamond | drag | [[https://doi.org/10.1016/j.mtphys.2022.100740][Mat. Tod. Phys 27, 100740]] | | Si | drag | [[https://www.nature.com/articles/s41524-022-00710-0][npj Comp. Mat. 8, 28]] |
Stylistically, ~elphbolt~ is designed to be simple, small, fast, and extensible. It uses an object-based procedural style, which allows fast development, while resulting in a rather compact source. The symmetries of the crystal are fully exploited and the transport active Fermi window is used to allow the sampling of extremely fine wave vector meshes needed for accurate solutions of the BTEs and Eliashberg equations. Parallelism is achieved through modern Fortran's intrinsic ~coarrays~ feature that is fully supported by recent versions of the ~gcc~ compiler.
~elphbolt~ currently works with the ~Quantum Espresso~ (https://www.quantum-espresso.org/) suite and its core module ~EPW~ (https://epw-code.org/) for the phonon quantities and the Wannier space information, respectively. An partial interface with all-electron ~exciting~ (https://exciting-code.org/) code exists.
~elphbolt~ is a "free as in freedom" code distributed under the GNU General Public License (GPL) version 3. You can read more about the philosophy of software freedom here: [[https://www.gnu.org/philosophy/free-sw.en.html]].
~elphbolt~ is for all of the transport physics community. Feel free to fork and contribute. Create a pull request to incorporate your changes to this project. Tailor it to your own liking/needs and please pay it forward in the spirit of free software and open science. Let me know of bugs, suggestions for improvement, feature requests, criticism, and praises. You may use the Discussions section of this repository for this purpose. There is also a [[https://discord.gg/SZN66GsCHb][discord server]] for informal discussions about theory, set up, usage, extensions, maintenance, possible collaborations, etc. You might find me hanging out there from time to time. I'd love to have a coffee with you and talk physics there in the office-hour voice channel.
** Documentation
The source is heavily commented and can be auto-documented with ~FORD~ (https://github.com/cmacmackin/ford). For installation of ~FORD~, consult https://forddocs.readthedocs.io/en/latest/. To generate the documentation and the call graphs (you need ~graphviz~ for the latter), say ~ford projectfile.md~. Then read ~./documentation/index.html~ with your browser.
** Install on HPC systems with ~gcc~
*** 1. Get compiler
You will need a *recent* version of ~gcc~ that supports Fortran 2018 features. Most HPC systems will have a module that you can load. If not, build your own. Here I show how you can build it with spack (https://spack.io/). I suggest building with ~nvptx~ since that will allow you to use gpu acceleration later on. If you do not care for gpus at the moment, leave out the ~+nvptx~ bit in the following command.
#+BEGIN_SRC bash
spack install gcc@12.3.0+nvptx
#+END_SRC
I like to add the ~<path to spack build of gcc>/bin~ directory to my system ~$PATH~. Alternatively, you can follow spack's own recommendations for using its packages.
*** 2. Get Fortran package manager (~fpm~ [v>=0.7]) Follow the instructions here: https://fpm.fortran-lang.org/install/index.html#install to install ~fpm~. I, personally, like to build from source, as described here: https://fpm.fortran-lang.org/install/index.html#building-from-source. Alternatively, grab the binary, ~chmod +x~ it, and place in your system ~$PATH~.
*** 3. Get ~OpenCoarrays~
~OpenCoarrays~ ([[http://www.opencoarrays.org]]) is an implementation of the ~coarrays~ functionalities. Follow its installation guide to build it on your system. I personally like to use its install script where I pass my compiler explicitly. So something like the following should work. ~Opencoarrays~ will internally download a compatible MPI implementation. It is advisable that you remove any other MPI implementation (OpenMPI or MPICH) that you might have accessible on your system before running the following script. At the momen
