Git Product home page Git Product logo

carriercapture.jl's Introduction

License: MIT made-with-julia CI DOI DOI Julia

A set of codes to compute carrier capture and recombination rates in semiconducting compounds. This topic has a rich history starting from the work by Huang and Rhys. Our implementation was inspired by the approach (and FORTRAN code) employed by Alkauskas and coworkers, but has been adapted to also describe anharmonic potential energy surfaces.

Installation

The codes are written in Julia, while the scripts and Jupyter Notebooks also contain Python and use pymatgen and pawpyseed (tested on Scientific Linux 7 and Linux Mint 18), which are assumed to be installed. The Brooglie package is used to solve the time-independent Schrödinger equation.

Install the package by:

julia> using Pkg

julia> Pkg.add(PackageSpec(url="https://github.com/WMD-group/CarrierCapture.jl.git"))

To run the unit tests for the package, use the Pkg.test function.

julia> Pkg.test("CarrierCapture")

Development

The project is hosted on Github. Please use the issue tracker for feature requests, bug reports and more general questions. If you would like to contribute, please do so via a pull request.

Usage

A typical workflow consists of several steps, implemented in a series of programs, which may be run from the command line. Input for the calculations is provided in input.yaml.

  1. Prepare a sequence of atomic structure models with displacements that interpolate between two defect configurations (e.g. a site vacancy in charge states q=0 and q=+1). Run single-point energy calculations on these structures, and extract the total energies. Scripts for preprocessing may be found in script.

  2. Find a best fit for the energy calculations of the deformed structures (potential) to generate potential energy surfaces (PES). Solve the 1D Schrödinger equation for each PES to obtain their phonon (nuclear) wavefunctions.

  3. Construct configuration coordinate (conf_coord) to calculate the wavefunction overlap between each PES, which forms part of the temperature-dependent capture coefficient.

schematics

The command-line interface (GetPotential.jl and GetRate.jl) is depreciated. Use Jupyter Notebook examples as a template.

User warning: The values produced by this type of analysis procedure are sensitive to the quality of the input. We expect that most input data will have been generated by DFT where the basis set, k-points, and ionic forces have been carefully converged. In addition, the alignment of energy surfaces for defects in different charge states requires appropriate finite-size corrections (e.g. see Freysoldt and coworkers and consider using the doped package).

Examples

The following examples are provided to illustrate some of the applications of these codes. The input data has been generated from density functional theory (DFT) using VASP, but the framework can easily be adapted to accept output from other electronic structure calculators.

Theory

The electronic matrix element frequently causes feelings of discomfort (Stoneham, 1981)

The capture of electrons or holes by point defects in a crystalline materials requires the consideration of a number of factors including the coupling between electronic and vibrational degrees of freedom. Many theories and approximations have been developed to describe the reaction kinetics.

The capture coefficient between an initial and final state for this computational set up is given by (eq. 22 in Alkauskas and coworkers):

Here, V is the volume of the supercell, Wif is the electron-phonon overlap and ξim and ξfn describe the wavefunctions of the mth and nth phonons in the initial i and final f states. The final delta-function term serves to conserve energy and in practice is replaced by a smearing Gaussian of finite width σ.

Citation

@article{kim2020carriercapture,
  title={Carriercapture. jl: Anharmonic carrier capture},
  author={Kim, Sunghyun and Hood, Samantha N and van Gerwen, Puck and Whalley, Lucy D and Walsh, Aron},
  journal={Journal of Open Source Software},
  volume={5},
  number={47},
  pages={2102},
  year={2020},
  doi={10.21105/joss.02102},
  url={https://joss.theoj.org/papers/10.21105/joss.02102},
}

Extended Reading List

Theory Development

Applications of CarrierCapture

carriercapture.jl's People

Contributors

aronwalsh avatar danielskatz avatar frssp avatar kavanase avatar lucydot avatar m-rivera avatar palebluesam avatar puckvg avatar utf avatar xw-w avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

carriercapture.jl's Issues

Unify "Usage" and "Typical Usage" documentation

The documentation includes a section on "Usage". In addition to this, there is a separate "Typical Usage" section in the example directory that goes into much more technical detail. As far as I can tell, there are no links to this information anywhere else in the documentation; I only see a link to the /example/notebook subdirectory, which makes this easy to miss. I recommend that you incorporate the information in /example/README.md more coherently into the documentation, either by linking to it prominently or by moving it elsewhere.

calc_capt_coeff! function error

During the execution of the script, I received an error message, and I am uncertain about its root cause. The error message I encountered is as follows:

"Julia> calc_overlap!(cc_e; cut_off = cut_off, σ = σ , Q₀ = 0)

Julia> calc_capt_coeff!(cc_e, Volume, temperature)

ERROR: AssertionError: occ(ϵ_max, T_max): 2.0207251001010498e-5 should be less than 1.0e-5
Stacktrace:
[1] calc_capt_coeff!(cc::conf_coord, V::Float64, temperature::StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64})
@ CarrierCapture C:\Users\9527.julia\packages\CarrierCapture\RaoWA\src\CaptureRate.jl:118
[2] top-level scope
@ REPL[173]:1"

Clarify installation instructions

The installation instructions are straightforward enough for anyone with prior experience using Julia, but could potentially confuse others. It would be worthwhile to clarify that the "Pkg.add" command should be executed (1) within the context of the Julia REPL and (2) after executing a "using Pkg" command. Once users reach this point, you can rely on your examples to help ease them into the language.

The question of install the carriercapture.jl

Now I have a problem about the installation of Carriercapture.jl code, the question as follow:
Exception calling "DownloadFile" with "2" argument(s): "An exception occurred during a WebClient request."
At C:\ps_script\testjava.ps1:41 char:31

  •       $client.DownloadFile <<<< ($source, $destination)
    
  • CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException
  • FullyQualifiedErrorId : DotNetMethodException + ERROR: Unable to automatically install 'LAME' from 'C:\Users\zhr.julia\packages\LAME_jll\UzJad\Artifacts.toml'
    I don't know what causes this problem, and how to solve it.

Example notebooks are not clear

The example notebooks would be a lot more clear if you added some descriptions of what each section is trying to achieve. For someone with no familiarity of the code, I found it quite difficult to parse what each code block was doing. As the notebooks are the main tutorials for the bulk of the code, I think they should be made as clear as possible.

Each notebook should have some discussion at the top, maybe introducing the theory but definitely describing what the notebook will achieve. I would also add the date and version of CarrierCapture.jl used when the notebook was originally run, as this will make it clear when things go out of date.

You can see some excellent example notebooks in these repositories:

See openjournals/joss-reviews#2102

Command line scripts should have help strings

Help strings are very useful for checking what a command line program does without having to open the docs on the website. I.e., so you can type:

get_cc_struct.py -h

Currently, all the tools provided in CarrierCapture.jl/script/ do not have help strings. It would be nice to add them (even if they are only very short descriptions) to make it clear what the scripts do.

argparse makes this very easy. For example:

import argparse

parser = argparse.ArgumentParser(description='This is my help string.')

See https://docs.python.org/3.7/library/argparse.html#example for more information.

Part of openjournals/joss-reviews#2102

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.