Studying Dirac nodal line with z2pack
greschd at phys.ethz.ch
Thu May 18 14:31:56 CEST 2017
There is no built-in shape for this task. However, you can define almost
any shape by providing a function which parametrizes this shape.
For lines, this function should take one parameter t in [0, 1], and
return the position in reduced/direct coordinates (to answer your last
question, Z2Pack always works with direct coordinates). So for example,
you could create a circle in y-z coordinates with
from numpy import sin, cos, pi
line.run(..., line=lambda t: [0, cos(2 * pi * t), sin(2 * pi * t)])
where obviously you need to change the function such that it actually
goes around your Dirac node. To get a well-defined result, the line must
be closed (in the periodic sense), meaning that f(t=1) = f(t=0) + G,
where G is a reciprocal lattice vector.
The same basic principle can be applied if you want to create an
arbitrary shape for a surface (described here
<http://z2pack.ethz.ch/doc/2.0/tutorial_surface.html>). You could use
this to create a torus around your nodal line. Now the full surface must
be closed (in the periodic sense) to get a well-defined Chern number,
and each line within the surface (which you get if you keep the first
parameter constant) must also be closed.
There is actually nothing special about the classes being defined in
shape.py, that's just to simplify creating this function for certain
special cases. Something like a "Circle" class for lines where one could
specify the position, radius and rotation angles would make perfect
sense to put there. Also, if the torus approach works for your system it
could make sense to make a class for that. Maybe one could give a
function describing the nodal line, and it would create a torus of a
certain radius enclosing it.
Feel free to let me know if you have some further questions, or you need
help implementing some of this.
On 18.05.2017 02:52, Stephanie Mack wrote:
> I'm a graduate student in Jeff Neaton's group at Berkeley and am
> currently using Z2pack to study a few of my systems. It's been going
> well so far, but I had a few questions if you would be able to provide
> some guidance.
> One of my systems is a Dirac nodal line and I wanted to compute the
> Berry phase using a ring around the nodal line to show it's
> nontrivial. I can see how to do it for the case of a single Dirac
> point with the Sphere in the shape module, but is that the only shape
> currently implemented? Is there a "ring" to use as the shape for
> The nodal line is in the kz=0 plane, so one thing I've tried so far is
> finding the point on the nodal line with a minimal kx value and then
> calculating one string around the sphere still using the surface
> module. However, I'm not sure how to specify I want the line to be at
> constant x and just traverse around the sphere in the y-z directions.
> Another idea I was trying was to add a "class" to the shapes.py module
> for a ring, just based on the sphere one that's already there, the
> only difference being that I don't update the x value. (I realize this
> is very system specific and not a general solution). It's not clear to
> me how line.py actually iterates around this ring to calculate the
> wannier charge centres (and thereby get the Chern number).
> Do either of these seem plausible? I could also send my inputs and/or
> errors if you want. Although if there's already something implemented
> I've missed please let me know...
> Lastly, one quick question, would you mind clarifying if the
> coordinates for the centre of a sphere should be given in cartesian or
> direct coordinates?
> Thank you in advance for any feedback!
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Z2Pack