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)$:
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
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_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.