Csg.py
From EVOCD
It is a python based code to generate the basic crystal structures
#!/usr/bin/python import math import os import sys a = float(sys.argv[1]) dataout = file('bcc.POSCAR', 'w') b = a c = a dataout.write("Position data for a BCC system\n") dataout.write("1\n") S=" %12f 0.00 0.00\n" % (2*a); dataout.write(S) S=" 0.00 %12f 0.00\n" % (2*b); dataout.write(S) S=" 0.00 0.00 %12f\n" % (2*c); dataout.write(S) dataout.write("16\n") # 2X2X2 X2(basis atoms) = 16 atoms dataout.write("Cartesian\n") count = 1 for i in range(2): for j in range(2): for k in range(2): S = "%i 1 %12f %12f %12f\n" % (count, i*a, j*b, k*c); dataout.write(S); count=count+1 S = "%i 1 %12f %12f %12f\n" % (count, i*a+a/2,j*b+b/2,k*c+c/2);dataout.write(S); count=count+1 dataout.close() dataout = file('fcc.POSCAR', 'w') b = a c = a dataout.write("Position data for a BCC system\n") dataout.write("1\n") S=" %12f 0.00 0.00\n" % (2*a); dataout.write(S) S=" 0.00 %12f 0.00\n" % (2*b); dataout.write(S) S=" 0.00 0.00 %12f\n" % (2*c); dataout.write(S) dataout.write("32\n") # 2X2X2 X4(basis atoms) = 32 atoms dataout.write("Cartesian\n") count = 1 for i in range(2): for j in range(2): for k in range(2): S = "%i 1 %12f %12f %12f\n" % (count, i*a, j*b, k*c); dataout.write(S); count=count+1 S = "%i 1 %12f %12f %12f\n" % (count, i*a+a/2,j*b+b/2,k*c);dataout.write(S); count=count+1 S = "%i 1 %12f %12f %12f\n" % (count, i*a+a/2,j*b,k*c+c/2);dataout.write(S); count=count+1 S = "%i 1 %12f %12f %12f\n" % (count, i*a,j*b+b/2,k*c+c/2);dataout.write(S); count=count+1 dataout.close() dataout = file('hcp.POSCAR', 'w') b = a*math.sqrt(3) c = 1.6329*a dataout.write("Position data for a BCC system\n") dataout.write("1\n") S=" %12f 0.00 0.00\n" % (2*a); dataout.write(S) S=" 0.00 %12f 0.00\n" % (2*b); dataout.write(S) S=" 0.00 0.00 %12f\n" % (2*c); dataout.write(S) dataout.write("32\n") # 2X2X2 X4(basis atoms) = 32 atoms dataout.write("Cartesian\n") count = 1 for i in range(2): for j in range(2): for k in range(2): S = "%i 1 %12f %12f %12f\n" % (count, i*a+a/4, j*b+b/3, k*c+c/4); dataout.write(S); count=count+1 S = "%i 1 %12f %12f %12f\n" % (count, i*a+3*a/4,j*b+5*b/6,k*c+c/4);dataout.write(S); count=count+1 S = "%i 1 %12f %12f %12f\n" % (count, i*a+a/4,j*b,k*c+3*c/4);dataout.write(S); count=count+1 S = "%i 1 %12f %12f %12f\n" % (count, i*a+3*a/4,j*b+b/2,k*c+3*c/4);dataout.write(S); count=count+1 dataout.close()