Germanium Solid

All that remains for calculations in solids is to add capability for multiple atoms to both ``Ge.m'' and ``poissonGe.m'' and to specify the locations of the atoms in the crystal.

The strategy for including multiple atoms which is most easily implemented from a coding point of view is the use of a ``structure factor''. The basic idea is that if

\begin{displaymath}
f(\vec x) = \sum_\alpha \hat f_\alpha e^{i\vec G_\alpha \cdot \vec x}
\end{displaymath}

is a potential or a density function (such as $V_ps(\vec x)$ in ``Ge.m'' or $n(\vec x)$ in ``poissonGe.m''), then if we shift the center of $f(\vec x)$ to a new point $\vec x_0$, it's expansion will change to

\begin{eqnarray*}
f(\vec x-\vec x_0) & = &
\sum_\alpha \hat f_\alpha e^{i\vec G_...
..._\alpha \cdot \vec x_0}
\right) e^{i\vec G_\alpha \cdot \vec x}.
\end{eqnarray*}


Thus, to move the center of the function $f(\vec x)$ over to the point $\vec x_0$, we need only multiply the expansion coefficients $\hat
f_\alpha$ by the phase factors $e^{-i\vec G_\alpha \cdot \vec x_0}$. If we have several copies of $f(\vec x)$ at different locations $\vec
x_i$ and wish to add them together, such as to compute the total pseudopotential $V_{ps}(\vec x)$ or nuclear density $n(\vec x)$ from multiple atoms, we thus multiply the corresponding expansion coefficients by the sum of such factors, the so called ``structure factor,''
\begin{displaymath}
S_f(\vec G) \equiv \sum_i e^{-i\vec G_\alpha \cdot \vec x_i}.
\end{displaymath} (5)

Note that, in octave, if X is a matrix, each of whose columns $i$ contains the location $\vec
x_i$ of one of the atoms, then the above dot products can all be evaluated in the single BLAS operation G*X, where G is our matrix of $\vec G_\alpha$'s.



Subsections
Tomas Arias 2005-05-04