I have plotted ContourPlot3D of fermi surface

e2[kx_, ky_, kz_] = 
 1/3 (2 (Cos[Sqrt[3] kx] + 2 Cos[(Sqrt[3] kx)/2] Cos[(3 ky)/2]) Cos[
      3 kz] + Sqrt[
    9 Abs[E^(-(1/2) I (Sqrt[3] kx - ky)) + E^(-I ky) + E^(
        1/2 I (Sqrt[3] kx + ky))]^2 + (3 + 
       4 (-Cos[(Sqrt[3] kx)/2] + Cos[(3 ky)/2]) Sin[(Sqrt[3] kx)/
         2] Sin[3 kz])^2])
ContourPlot3D[e2[kx, ky, kz] == 
  0, {kx, (-4 \[Pi])/(3 Sqrt[3] a), (4 \[Pi])/(
  3 Sqrt[3] a)}, {ky, (-2 \[Pi])/(3 a), (2 \[Pi])/(3 a)}, {kz, -\[Pi]/
  c, \[Pi]/c}, AxesLabel -> Automatic]

enter image description here

The Brillouin zone looks like the 3D hexagonal lattice enter image description here

How can I show the Fermi surface on the the above Hexagonal lattice? (Parameters a=1 and c=3)

  • 1
    $\begingroup$ You can use this: p = ContourPlot3D[...]; r = \[Pi]/a; h = -\[Pi]/c; \[Phi] = 0; hexP = CirclePoints[{r, \[Phi]}, 6]; hex = ConvexHullRegion[(Append[#, -h] & /@ hexP)~ Join~(Append[#, h] & /@ hexP)]; Show[Graphics3D[{EdgeForm[Black], FaceForm[None], hex}], p] However, you have to adjust r, h and \[Phi] because I don't know how exactly they relate to your parameters a, b and c. $\endgroup$
    – Domen
    Aug 11, 2021 at 15:19
  • $\begingroup$ @Domen I ran the code you sent with appropriate parameters, but its giving an error that "ConvexHullRegion is not a Graphics3D primitive or directive" $\endgroup$
    – sslucifer
    Aug 11, 2021 at 15:36
  • $\begingroup$ Can you provide us the appropriate parameters, please? $\endgroup$
    – Domen
    Aug 11, 2021 at 15:49
  • $\begingroup$ @Domen I have edited the post with parameters. I hope that should be enough. If you can show me that you are that you are able to make a 3D hexagon. I think that should answer my question. $\endgroup$
    – sslucifer
    Aug 11, 2021 at 16:03
  • 1
    $\begingroup$ I see it now, you are probably using an older version of Mathematica. Replace ConvexHullRegion with ConvexHullMesh in my code. $\endgroup$
    – Domen
    Aug 11, 2021 at 16:05

1 Answer 1


To generate hexagonal prism, you can CirclePoints[r, \[Phi]}, 6] together with ConvexHullMesh[]. This prism is defined by the radius $r$, height $h$, and it is rotated around the $z$-axis by the angle $\phi$.

a = 1;
c = 3;
p = ContourPlot3D[
   e2[kx, ky, kz] == 
    0, {kx, (-4 \[Pi])/(3 Sqrt[3] a), (4 \[Pi])/(3 Sqrt[
        3] a)}, {ky, (-2 \[Pi])/(3 a), (2 \[Pi])/(3 a)}, {kz, -\[Pi]/
     c, \[Pi]/c}, AxesLabel -> Automatic];

r = (4 \[Pi])/(3 Sqrt[3] a);
h = \[Pi]/c;
\[Phi] = 0;
hexagon = CirclePoints[{r, \[Phi]}, 6];
prism = ConvexHullMesh[(Append[#, -h/2] & /@ hexagon)~Join~(Append[#, h/2] & /@ hexagon)];
Show[p, Graphics3D[{EdgeForm[Black], FaceForm[None], prism}]]

You should appropriately change the parameters for the prism so that its dimensions match the Brillouin zone (I have forgotten my solid state physics, so I am not sure how exactly should the Fermi surface be positioned relative to the hexagonal lattice).

Mathematica graphics


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.