Code Monkey home page Code Monkey logo

interactpolate's Introduction

Coulomb Interactions in real-space, but fast

This small library helps with Coulomb interactions that don't follow a simple (as in computationally simple/fast) functional form, but are expensive to calculate. Currently, the only interaction profile that's implemented is the dual-gated Coulomb interaction [cf. Phys. Rev. B 86, 115447 (2012)], but with an $r=0$ regularization a la Ohno. Other profiles could be implemented trivially in the future.

The long-ranged part of the interaction is given as $V_\mathrm{long}(r)$:

$$V_\mathrm{long}(r) = 4V_0 \sum_{k=0}^{\infty} K_0\left[ 2(k+1)\, \pi \frac{r}{\xi} \right] \,,$$

where $\xi$ is the gate distance to both gates, s.t. the two gates have a distance $2\xi$ with the 2D sample in between. $K_0$ is a Bessel function of the second kind, and $V_0$ is an energy scale.

The short-ranged part $V_\mathrm{short}(r)$ must follow

$$V_\mathrm{short}(r) = \frac{U}{\sqrt{1+r^2/a^2}}\,,$$

where $U$ is the on-site interaction strength (Hubbard-$U$) and $a$ the "Ohno-parameter".

We make a smooth version of both profiles (i.e. a long- and short-ranged screened Coulomb interaction) by plugging the one into the other (one can check that the limits work out...). We arrive at

$$V(r) = 4V_0\sum_{k=0}^{\infty} K_0\left[ 2(k+1)\, \pi \frac{\sqrt{r^2+a^2}}{\xi} \right] \,,$$

with the following constraints on $V_0$ and $a$:

$$V_0 = \frac{\alpha}{\epsilon\,\xi} \,,\qquad a = \frac{\alpha}{\epsilon\,U} \,.$$

The fine-structure constant $\alpha$ and the dielectric constant $\epsilon$ determine the interaction strength s.t. it follwos $\alpha/\epsilon r$ in intermediate distances. Note that $\epsilon$ should not carry any units, and $\alpha = 14.40\,\mathrm{eV}\text{ร…}$ in SI units (inserted some $\hbar c$ to get those units).

Usage

see test/use.c and test/Makefile for how to use this library. It's fast as long as you have one handle (roughly as fast as evaluating exp(..)/sqrt(..)). Creation of the handle is what's slow.

Compilation

If you don't like to use C++ and its library implementation of the Bessel function $K_0(x)$, you can use the DEFINE USE_BARE_C_BESSEL, i.e., put DEFINES += -DUSE_BARE_C_BESSEL in your Makefile.local/Makefile.inc.

interactpolate's People

Watchers

Lennart Klebl avatar

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.