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) booleanprivate javajs.util.Lst<javajs.util.P3>private javajs.util.P3private 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.P3private Stringprivate JmolScriptEvaluatorprivate javajs.util.Lst<javajs.util.P3>private javajs.util.Lst<int[]>private javajs.util.Lst<javajs.util.P3[]>private Stringprivate intprivate booleanprivate 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.P3private javajs.util.Lst<javajs.util.P4>private javajs.util.Lst<javajs.util.P4>private javajs.util.Lst<Object>(package private) Stringprivate 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) floatprivate Viewer(package private) int -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate voidaddBZ(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.P3average(javajs.util.P3[] face) private StringbzColor(int i) give each Brillouin zone a new colorprivate javajs.util.P3[]cleanFace(javajs.util.P3[] face) private javajs.util.P3closest(javajs.util.P3 center, javajs.util.P3[] ap3) private voidprivate voidcreateAllBZs(int n, boolean discardPrev, String id, float scale) Starting with 1, build the Brillouin zones as polyhedra, optionally discarding the previous as we go.voidCreate a Brillouin zone.private voidcreateNextBZ(BZone zone, BZone zonePrev, String id) private voidcreateSubzonePolyhedron(BZone subzone, String id) Generate the polyhedra.voidCreate a Wigner-Seitz unitcell centered on {0 0 0}.private voidprivate voiddrawSubzonePolygons(BZone subzone) private voiddrawZoneCenters(BZone zone) private int[]faceIndices(javajs.util.P3[] p3s, javajs.util.P3[] pts) private voidfinalizeZone(BZone zone) Finalize a Brillouin zone.private voidgetLatticePoints(int n) Get the needed lattice points for n Brillouin zones.private voidgetNewLatticePoints(BZone zone) Loop through all points, looking for non-excluded points using St.private ObjectgetProperty(String name, String key) private booleangetSubzonePmeshes(BZone subzone) Loop through all planes, creating a pmesh for each face.private voidgetSubzones(BZone zone, BZone zonePrev) private javajs.util.P3[]join(javajs.util.Lst<javajs.util.P3[]> faces) private BZonenewBZ(int i) initialize a new Brillouin zoneprivate javajs.util.P3newPoint(int i, int j, int k, javajs.util.P3 pt) private BZonenewSubZone(BZone zone, String id, int index) private javajs.util.P4plane(javajs.util.P3 pt1, javajs.util.P3 pt2, float f) private StringtoScript(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-
-