Package org.jmol.util

Class BZone

java.lang.Object
org.jmol.util.BZone

public class BZone extends Object
class to represent and produce Brillouin zone polyhedra and Wigner-Seitz cells based on https://chemapps.stolaf.edu/jmol/jsmol/spt/ext/xtal/bz.spt
  • Field Details

    • bzColors

      static String[] bzColors
    • bzDrawPointsAndEdges

      boolean bzDrawPointsAndEdges
    • bzSavePmeshes

      boolean bzSavePmeshes
    • bzones

      private javajs.util.Lst<BZone> bzones
    • bzGamma

      private javajs.util.P3 bzGamma
    • bzFaceCenters

      private javajs.util.Lst<javajs.util.P3> bzFaceCenters
    • bzLatticePts

      private javajs.util.Lst<javajs.util.P3> bzLatticePts
    • bzLatticePtsAll

      private javajs.util.P3[] bzLatticePtsAll
    • bzPlanePts

      private javajs.util.Lst<javajs.util.P3> bzPlanePts
    • subzones

      private javajs.util.Lst<BZone> subzones
    • isWignerSeitz

      private boolean isWignerSeitz
    • vwr

      private Viewer vwr
    • eval

      private JmolScriptEvaluator eval
    • id

      private String id
    • index

      private int index
    • color

      private String color
    • latticePts

      private javajs.util.Lst<javajs.util.P3> latticePts
    • newLatticePts

      private javajs.util.Lst<javajs.util.P3> newLatticePts
    • newPlanePts

      private javajs.util.Lst<javajs.util.P3> newPlanePts
    • planes

      private javajs.util.Lst<javajs.util.P4> planes
    • newPlanes

      private javajs.util.Lst<javajs.util.P4> newPlanes
    • volume

      float volume
    • zoneIndex

      int zoneIndex
    • offset

      javajs.util.P3 offset
    • center

      javajs.util.P3 center
    • planesUnused

      private javajs.util.Lst<javajs.util.P4> planesUnused
    • ptsUnused

      private javajs.util.Lst<javajs.util.P3> ptsUnused
    • pmeshes

      private javajs.util.Lst<Object> pmeshes
    • areas

      private javajs.util.Lst<Double> areas
    • faces

      private javajs.util.Lst<javajs.util.P3[]> faces
    • faceIndices

      private javajs.util.Lst<int[]> faceIndices
    • faceCenters

      private javajs.util.Lst<javajs.util.P3> faceCenters
    • totalArea

      private double totalArea
    • ptInner

      private static javajs.util.P3 ptInner
    • ret

      private Object[] ret
    • polyid

      String polyid
    • pts

      javajs.util.P3[] pts
  • Constructor Details

    • BZone

      public BZone()
  • Method Details

    • setViewer

      public BZone setViewer(Viewer vwr)
    • createBZ

      public void createBZ(int zone, Object[] array, boolean isK, String id, float scale)
      Create a Brillouin zone. /// createBZ or createBZ(1, null, false) just the 1st Brillouin zone /// createBZ(n, null, false) just the nth Brillouin zone /// createbZ(0, [a b c alpha beta gamma], false) create a BZ for a given primitive lattice unit cell /// createbZ(0, [a b c alpha beta gamma], true) create a BZ for a given reciprocal lattice unit cell
      Parameters:
      zone -
      array -
      isK -
      id -
      scale -
    • createWS

      public void createWS(String id)
      Create a Wigner-Seitz unitcell centered on {0 0 0}. /// primitive cell is assumed -- user is responsible for unitcell PRIMITIVE /// executed first (unitcell CONVENTIONAL later if desired) /// createWS("p1") for example.
      Parameters:
      id -
    • createAllBZs

      private void createAllBZs(int n, boolean discardPrev, String id, float scale)
      Starting with 1, build the Brillouin zones as polyhedra, optionally discarding the previous as we go. bNote that even for the 4th Brillouin zone, this is time consuming. If n = -1, then this is a Wigner-Seitz cell
      Parameters:
      n -
      discardPrev -
      id -
      scale -
    • createNextBZ

      private void createNextBZ(BZone zone, BZone zonePrev, String id)
    • newSubZone

      private BZone newSubZone(BZone zone, String id, int index)
    • getSubzones

      private void getSubzones(BZone zone, BZone zonePrev)
    • addBZ

      private void addBZ(javajs.util.Lst<javajs.util.P4> planes, javajs.util.Lst<javajs.util.P3> pts, javajs.util.Lst<javajs.util.P4> planes0, javajs.util.Lst<javajs.util.P3> pts0, int j)
    • getNewLatticePoints

      private void getNewLatticePoints(BZone zone)
      Loop through all points, looking for non-excluded points using St. Olaf half-distance sphere test.
      Parameters:
      zone -
    • plane

      private javajs.util.P4 plane(javajs.util.P3 pt1, javajs.util.P3 pt2, float f)
    • within

      private javajs.util.Lst<javajs.util.P3> within(float radius, javajs.util.P3 center, javajs.util.Lst<javajs.util.P3> pts)
    • newBZ

      private BZone newBZ(int i)
      initialize a new Brillouin zone
      Parameters:
      i -
      Returns:
      new BZone
    • bzColor

      private String bzColor(int i)
      give each Brillouin zone a new color
      Parameters:
      i -
      Returns:
      color as string
    • getLatticePoints

      private void getLatticePoints(int n)
      Get the needed lattice points for n Brillouin zones. A calculation is done to ensure that enough points are provided in all directions, which may not be the same number.
      Parameters:
      n -
    • newPoint

      private javajs.util.P3 newPoint(int i, int j, int k, javajs.util.P3 pt)
    • cmd

      private void cmd(String cmd)
    • demoBZ

      private void demoBZ(Object[] array, boolean isK)
      Parameters:
      array -
      isK -
    • getSubzonePmeshes

      private boolean getSubzonePmeshes(BZone subzone)
      Loop through all planes, creating a pmesh for each face. We use resolution 0.001 to indicate we only want the minimum number of triangles (that is, starting with two giant triangles, not a grid of small triangles). Also slab each plane by all other planes to form a face.
      Parameters:
      subzone -
      Returns:
      true if total area gt 0
    • toScript

      private String toScript(javajs.util.P4 p4)
    • getProperty

      private Object getProperty(String name, String key)
    • createSubzonePolyhedron

      private void createSubzonePolyhedron(BZone subzone, String id)
      Generate the polyhedra.
      Parameters:
      subzone -
      id -
    • faceIndices

      private int[] faceIndices(javajs.util.P3[] p3s, javajs.util.P3[] pts)
    • closest

      private javajs.util.P3 closest(javajs.util.P3 center, javajs.util.P3[] ap3)
    • cleanFace

      private javajs.util.P3[] cleanFace(javajs.util.P3[] face)
    • average

      private javajs.util.P3 average(javajs.util.P3[] face)
    • join

      private javajs.util.P3[] join(javajs.util.Lst<javajs.util.P3[]> faces)
    • drawZoneCenters

      private void drawZoneCenters(BZone zone)
      Parameters:
      zone -
    • drawSubzonePolygons

      private void drawSubzonePolygons(BZone subzone)
      Parameters:
      subzone -
    • finalizeZone

      private void finalizeZone(BZone zone)
      Finalize a Brillouin zone.
      Parameters:
      zone -