Studying Dirac nodal line with z2pack

Dominik Gresch greschd at
Thu May 18 14:31:56 CEST 2017

Hi Stephanie,

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=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 
<>). 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, 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:
> Hello,
> 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 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 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!
> Best,
> Stephanie

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the Z2Pack mailing list