Package org.jmol.util
Class BZone
java.lang.Object
org.jmol.util.BZone
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 Summary
FieldsModifier and TypeFieldDescriptionprivate javajs.util.Lst<Double>
(package private) static String[]
(package private) boolean
private javajs.util.Lst<javajs.util.P3>
private javajs.util.P3
private javajs.util.Lst<javajs.util.P3>
private javajs.util.P3[]
private javajs.util.Lst<BZone>
private javajs.util.Lst<javajs.util.P3>
(package private) boolean
(package private) javajs.util.P3
private String
private JmolScriptEvaluator
private javajs.util.Lst<javajs.util.P3>
private javajs.util.Lst<int[]>
private javajs.util.Lst<javajs.util.P3[]>
private String
private int
private boolean
private javajs.util.Lst<javajs.util.P3>
private javajs.util.Lst<javajs.util.P3>
private javajs.util.Lst<javajs.util.P3>
private javajs.util.Lst<javajs.util.P4>
(package private) javajs.util.P3
private javajs.util.Lst<javajs.util.P4>
private javajs.util.Lst<javajs.util.P4>
private javajs.util.Lst<Object>
(package private) String
private static javajs.util.P3
(package private) javajs.util.P3[]
private javajs.util.Lst<javajs.util.P3>
private Object[]
private javajs.util.Lst<BZone>
private double
(package private) float
private Viewer
(package private) int
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate 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) private javajs.util.P3
average
(javajs.util.P3[] face) private String
bzColor
(int i) give each Brillouin zone a new colorprivate javajs.util.P3[]
cleanFace
(javajs.util.P3[] face) private javajs.util.P3
closest
(javajs.util.P3 center, javajs.util.P3[] ap3) private void
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.void
Create a Brillouin zone.private void
createNextBZ
(BZone zone, BZone zonePrev, String id) private void
createSubzonePolyhedron
(BZone subzone, String id) Generate the polyhedra.void
Create a Wigner-Seitz unitcell centered on {0 0 0}.private void
private void
drawSubzonePolygons
(BZone subzone) private void
drawZoneCenters
(BZone zone) private int[]
faceIndices
(javajs.util.P3[] p3s, javajs.util.P3[] pts) private void
finalizeZone
(BZone zone) Finalize a Brillouin zone.private void
getLatticePoints
(int n) Get the needed lattice points for n Brillouin zones.private void
getNewLatticePoints
(BZone zone) Loop through all points, looking for non-excluded points using St.private Object
getProperty
(String name, String key) private boolean
getSubzonePmeshes
(BZone subzone) Loop through all planes, creating a pmesh for each face.private void
getSubzones
(BZone zone, BZone zonePrev) private javajs.util.P3[]
join
(javajs.util.Lst<javajs.util.P3[]> faces) private BZone
newBZ
(int i) initialize a new Brillouin zoneprivate javajs.util.P3
newPoint
(int i, int j, int k, javajs.util.P3 pt) private BZone
newSubZone
(BZone zone, String id, int index) private javajs.util.P4
plane
(javajs.util.P3 pt1, javajs.util.P3 pt2, float f) private String
toScript
(javajs.util.P4 p4) private javajs.util.Lst<javajs.util.P3>
within
(float radius, javajs.util.P3 center, javajs.util.Lst<javajs.util.P3> pts)
-
Field Details
-
bzColors
-
bzDrawPointsAndEdges
boolean bzDrawPointsAndEdges -
bzSavePmeshes
boolean bzSavePmeshes -
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
-
isWignerSeitz
private boolean isWignerSeitz -
vwr
-
eval
-
id
-
index
private int index -
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
-
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
-
polyid
String polyid -
pts
javajs.util.P3[] pts
-
-
Constructor Details
-
BZone
public BZone()
-
-
Method Details
-
setViewer
-
createBZ
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
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
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
-
newSubZone
-
getSubzones
-
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
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
initialize a new Brillouin zone- Parameters:
i
-- Returns:
- new BZone
-
bzColor
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
-
demoBZ
- Parameters:
array
-isK
-
-
getSubzonePmeshes
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
-
getProperty
-
createSubzonePolyhedron
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
- Parameters:
zone
-
-
drawSubzonePolygons
- Parameters:
subzone
-
-
finalizeZone
Finalize a Brillouin zone.- Parameters:
zone
-
-