Manual¶
The complete WESTpy reference is reported below.
Units¶
Westpy uses Hartree atomic units.
- class westpy.units.Units(*args, **kwargs)¶
Bases:
dict
Dictionary for units that supports .attribute access.
- westpy.units.set_units()¶
Sets Rydberg atomic units.
- Available units are:
Bohr
Angstrom, Ang
Rydberg, Ry
Hartree, Ha
eV
Note
westpy operates in Rydberg atomic units.
Utilities¶
Set of utilities.
- westpy.utils.bool2str(logical)¶
Converts a boolean type into a string .TRUE. or .FALSE. .
- Parameters
logical (boolean) – logical
- Returns
.TRUE. or .FALSE.
- Return type
string
- Example
>>> from westpy import * >>> t = bool2str(True) >>> f = bool2str(False) >>> print(t,f) .TRUE. .FALSE.
- westpy.utils.convertYaml2Json(fyml, fjson)¶
Converts the file from YAML to JSON.
- Parameters
fyml (string) – Name of YAML file
fjson (string) – Name of JSON file
- Example
>>> from westpy import * >>> convertYaml2Json("file.yml","file.json")
Note
The file fjon will be created, fyml will not be overwritten.
- westpy.utils.download(url, fname=None)¶
Downloads a file from url.
- Parameters
url (string) – url
fname (string) – file name, optional
- Example
>>> from westpy import * >>> download("http://www.west-code.org/database/gw100/xyz/CH4.xyz")
Note
The file will be downloaded in the current directory.
- westpy.utils.extractFileNamefromUrl(url)¶
Extracts a file name from url.
- Parameters
url (string) – url
- Returns
file name
- Return type
string
- Example
>>> from westpy import * >>> extractFileNamefromUrl("http://www.west-code.org/database/gw100/xyz/CH4.xyz")
- westpy.utils.gaussian(x, mu, sig)¶
return normal distribution at point x.
\(f(x;\mu,\sigma) = \frac{1}{\sigma\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}\)
- Parameters
- Returns
\(f(x;\mu,\sigma)\)
- Return type
- Example
>>> from westpy import * >>> gaussian(1.0,2.0,3.0)
- westpy.utils.listLinesWithKeyfromOnlineText(url, key)¶
List lines from text file located at url, with key.
- Parameters
url (string) – url
key (string) – key word
- Returns
list of lines
- Return type
- Example
>>> from westpy import * >>> url = "http://www.quantum-simulation.org/potentials/sg15_oncv/upf/Si_ONCV_PBE-1.1.upf" >>> key = "z_valence" >>> l = listLinesWithKeyfromOnlineText(url,key) >>> print(l) [' z_valence=" 4.00"']
Note
Can be used to grep values from a UPF file.
- westpy.utils.listValuesWithKeyFromOnlineXML(url, key)¶
List values from XML file located at url, with key.
- Parameters
url (string) – url
key (string) – key word
- Returns
list of values
- Return type
- Example
>>> from westpy import * >>> url = "http://www.quantum-simulation.org/potentials/sg15_oncv/xml/Si_ONCV_PBE-1.1.xml" >>> key = "valence_charge" >>> l = listLinesWithKeyfromOnlineXML(url,key) >>> print(l) ['4']
Note
Can be used to grep values from a XML file.
- westpy.utils.readJsonFile(fname)¶
Reads data from file using the JSON format.
- Parameters
fname (string) – file name
- Returns
data
- Return type
dict/list
- Example
>>> from westpy import * >>> data = readJsonFile("mass.json")
Note
The file will be read from the current directory.
- westpy.utils.read_cube(fname)¶
Read cube file into numpy array
- params:
fname: filename of cube file
returns: (data: np.array, metadata: dict)
- westpy.utils.read_imcube(rfname, ifname='')¶
Convenience function to read in two cube files at once, where one contains the real part and the other contains the imag part. If only one filename given, other filename is inferred.
- params:
rfname: filename of cube file of real part ifname: optional, filename of cube file of imag part
returns: np.array (real part + j*imag part)
- westpy.utils.writeJsonFile(fname, data)¶
Writes data to file using the JSON format.
- Parameters
fname (string) – file name
data (dict/list) – data
- Example
>>> from westpy import * >>> data = {} >>> data["mass"] = 1.0 >>> writeJsonFile("mass.json",data)
Note
The file will be generated in the current directory.
- westpy.utils.write_cube(data, meta, fname)¶
Write volumetric data to cube file along
- params:
data: volumetric data consisting real values meta: dict containing metadata with following keys:
atoms: list of atoms in the form (mass, [position])
org: origin
xvec,yvec,zvec: lattice vector basis
fname: filename of cubefile (existing files overwritten)
returns: None
- westpy.utils.write_imcube(data, meta, rfname, ifname='')¶
Convenience function to write two cube files from complex valued volumetric data, one for the real part and one for the imaginary part. Data about atoms, origin and lattice vectors are kept same for both. If only one filename given, other filename is inferred.
- params:
data: volumetric data consisting complex values meta: dict containing metadata with following keys
atoms: list of atoms in the form (mass, [position])
org: origin
xvec,yvec,zvec: lattice vector basis
rfname: filename of cube file containing real part ifname: optional, filename of cube file containing imag part
returns: None
Atom¶
- class westpy.atom.Atom(symbol='X', position=(0, 0, 0), units=1.0)¶
Bases:
object
Class for representing a single atom.
- Parameters
symbol (string) – chemical symbol
position (3-dim tuple) – position
units ("Bohr" or "Angstrom") – Units, optional
- Example
>>> from westpy import * >>> atom = Atom("Si",(0.,0.,0.))
Note
Positions are set in a.u. by default. If you set units=Angstrom a coversion to a.u. will be made.
- Bohr = 1.0¶
Geometry¶
- class westpy.geometry.Geometry(cell=None)¶
Bases:
object
Class for representing a set of atoms in a periodic cell.
- Example
>>> from westpy import * >>> geom = Geometry() >>> geom.setCell( (1,0,0), (0,1,0), (0,0,1) ) >>> geom.addAtom( "Si", (0,0,0) ) >>> geom.addSpecies( "Si", "http://www.quantum-simulation.org/potentials/sg15_oncv/upf/Si_ONCV_PBE-1.1.upf" )
Note
Vectors are set in a.u. by default. If you set units=Angstrom a coversion to a.u. will be made.
- Bohr = 1.0¶
- addAtom(symbol, position, units=1.0)¶
Adds a single atom.
- Parameters
symbol (string) – chemical symbol
position (3-dim tuple) – position
units ("Bohr" or "Angstrom") – Units, optional
- Example
>>> from westpy import * >>> geom = Geometry() >>> geom.addAtom( "Si", (0,0,0) )
- addAtomsFromOnlineXYZ(url)¶
Adds atoms from XYZ file (only one image) located at url.
- Parameters
url (string) – url
- Example
>>> from westpy import * >>> geom = Geometry() >>> geom.addAtomsFromOnlineXYZ( "http://www.west-code.org/database/gw100/xyz/CH4.xyz" )
- addAtomsFromXYZFile(fname)¶
Adds atoms from XYZ file (only one image).
- Parameters
fname (string) – file name
- Example
>>> from westpy import * >>> geom = Geometry() >>> geom.addAtomFromXYZFile( "CH4.xyz" )
- addFracCoordAtom(symbol, frac_coord)¶
adds a single atom by fractional coords :param symbol: chemical symbol :type symbol: string :param position: position :type position: 3-dim tuple
- Example
>>> from westpy import * >>> geom = Geometry() >>> geom.addFracCoordAtom( "Si", (0,1/3.0,2/3.0) )
- addSpecies(symbol, url)¶
Adds a species.
- Parameters
symbol (string) – chemical symbol
url (string) – url
- Example
>>> from westpy import * >>> geom = Geometry() >>> geom.addSpecies( "Si", "http://www.quantum-simulation.org/potentials/sg15_oncv/upf/Si_ONCV_PBE-1.1.upf" )
Note
You can use this method to add either upf or xml pseudopotentials. However it is forbidded to mix them.
- downloadPseudopotentials()¶
Download Pseudopotentials.
- Example
>>> from westpy import * >>> geom = Geometry() >>> geom.addAtomsFromOnlineXYZ( "http://www.west-code.org/database/gw100/xyz/CH4.xyz" ) >>> geom.addSpecies( "C", "http://www.quantum-simulation.org/potentials/sg15_oncv/xml/C_ONCV_PBE-1.0.xml") >>> geom.addSpecies( "H", "http://www.quantum-simulation.org/potentials/sg15_oncv/xml/H_ONCV_PBE-1.0.xml") >>> geom.downloadPseudopotentials()
Note
Pseudopotential files will be downloaded in the current directory.
- getNumberOfAtoms()¶
Returns number of atoms.
- Returns
number of atoms
- Return type
- Example
>>> from westpy import * >>> geom = Geometry() >>> geom.addAtomsFromOnlineXYZ( "http://www.west-code.org/database/gw100/xyz/CH4.xyz" ) >>> nat = geom.getNumberOfAtoms() >>> print( nat ) 5
- getNumberOfElectrons()¶
Returns number of electrons.
- Returns
number of electrons
- Return type
- Example
>>> from westpy import * >>> geom = Geometry() >>> geom.addAtomsFromOnlineXYZ( "http://www.west-code.org/database/gw100/xyz/CH4.xyz" ) >>> geom.addSpecies( "C", "http://www.quantum-simulation.org/potentials/sg15_oncv/xml/C_ONCV_PBE-1.0.xml") >>> geom.addSpecies( "H", "http://www.quantum-simulation.org/potentials/sg15_oncv/xml/H_ONCV_PBE-1.0.xml") >>> nelec = geom.getNumberOfElectrons() >>> print( nelec ) 8
- getNumberOfSpecies()¶
Returns number of species.
- Returns
number of species
- Return type
- Example
>>> from westpy import * >>> geom = Geometry() >>> geom.addAtomsFromOnlineXYZ( "http://www.west-code.org/database/gw100/xyz/CH4.xyz" ) >>> ntyp = geom.getNumberOfSpecies() >>> print( ntyp ) 2
- isValid()¶
Checks if geometry is valid
- The method checks that:
the cell is set
at least one atom has been added
the pseudopotentials of all species are defined
the pseudopotentials do not contain a mix of upf and xml formats
- setCell(a1=(0, 0, 0), a2=(0, 0, 0), a3=(0, 0, 0), units=1.0)¶
Sets cell, given the three vectors \(a_1\), \(a_2\), \(a_3\).
- Parameters
a1 (3-dim tuple) – \(a_1\)
a2 (3-dim tuple) – \(a_2\)
a3 (3-dim tuple) – \(a_3\)
units ("Bohr" or "Angstrom") – Units, optional
- Example
>>> from westpy import * >>> geom = Geometry() >>> geom.setCell( (1,0,0), (0,1,0), (0,0,1) )
- view(style='stick', width=800, height=800, ix=1, iy=1, iz=1, debug=False)¶
Display simulation box geom in Angstrom. ix, iy, iz is the perodic display to system style can be line, stick, sphere.
- Parameters
style –
width –
height –
ix –
iy –
iz –
debug –
- Returns
Ground State¶
- class westpy.groundState.GroundState(geom, xc, ecut)¶
Bases:
object
Class for representing a ground state calculation with DFT.
- Parameters
- Example
>>> from westpy import * >>> geom = Geometry() >>> geom.setCell( (1,0,0), (0,1,0), (0,0,1) ) >>> geom.addAtom( "Si", (0,0,0) ) >>> geom.addSpecies( "Si", "http://www.quantum-simulation.org/potentials/sg15_oncv/upf/Si_ONCV_PBE-1.1.upf" ) >>> gs = GroundState(geom,"PBE",30.0)
Note
Vectors are set in a.u. by default. If you set units=Angstrom a coversion to a.u. will be made.
- downloadPseudopotentials()¶
Download Pseudopotentials.
- Example
>>> gs.downloadPseudopotentials()
Note
Pseudopotential files will be downloaded in the current directory.
- generateInputPW(fname='pw.in')¶
Generates input file for pwscf. Valid only for QuantumEspresso calculations.
- Parameters
fname (string) – fname, optional
- Example
>>> gs.generateInputPW("pw.in")
- generateInputQbox(fname='qbox.in')¶
Generates input file for qbox. Valid only for Qbox calculations.
- Parameters
fname (string) – fname, optional
- Example
>>> gs.generateInputQbox("qbox.in")
- setCollinearSpin(tot_magnetization=0.0)¶
Sets collinear spin.
- Parameters
tot_magnetization (float) – Total majority spin charge - minority spin charge, optional
- Example
>>> gs.setCollinearSpin()
- setIsolated()¶
Sets isolated system. Valid only for QuantumEspresso calculations.
- Example
>>> gs.setIsolated()
- setKmesh(kmesh)¶
Sets the uniform grid for k-points sampling.
- Parameters
kmesh (3-dim tuple of int) – kmesh
- Example
>>> gs.setKmesh((2,2,2))
- setNempty(nempty)¶
Sets the number of empty bands.
- Parameters
nempty (int) – number of empty bands
- Example
>>> gs.setNempty(10)
- setNonCollinearSpin(lspinorb=False)¶
Sets non collinear spin. Requires fully relativistic pseudopotentials. Valid only for QuantumEspresso calculations.
Optionally spin-orbit can be turned on.
- Parameters
lspinorb (boolean) – spin-orbit, optional
- Example
>>> gs.setNonCollinearSpin()
- updateSpecies(symbol, url)¶
Update a species.
- Parameters
symbol (string) – chemical symbol
url (string) – url
- Example
>>> geom.addSpecies( "Si", "http://www.quantum-simulation.org/potentials/sg15_oncv/upf/Si_ONCV_PBE-1.1.upf" )
Note
You can use this method to add either upf or xml pseudopotentials. However it is forbidded to mix them.
Data Container¶
- class westpy.dataContainer.DataContainer¶
Bases:
object
Class for representing an in-memory data container.
- Example
>>> from westpy import * >>> dc = DataContainer()
- checkKeys(printSummary=True)¶
Checks that all keys are described.
- Parameters
printSummary (boolean) – if True prints summary
key (string) – key
- Returns
True if all keys are described, False otherwise.
- Return type
boolean
- Example
>>> from westpy import * >>> dc = DataContainer() >>> dc.upsertPoint({"a":1, "b":2},{"energy":-4.5}) >>> dc.upsertKey("a","the first letter") >>> dc.upsertKey("b","another letter") >>> dc.upsertKey("energy","a quantity") >>> dc.checkKeys()
- removeKey(key)¶
Removes the description of a key
- Parameters
key (string) – key
- Example
>>> from westpy import * >>> dc = DataContainer() >>> dc.upsertKey("a","the first letter") >>> dc.removeKey("a")
- removePoint(identifier)¶
Removes point with given identifier from the data container.
- Parameters
identifier – identifier
- Example
>>> from westpy import * >>> dc = DataContainer() >>> dc.upsertPoint({"a":1, "b":2},{"energy":-4.5}) >>> dc.removePoint({"a":1, "b":2})
- showPoints()¶
Shows all points of the data container.
- Example
>>> from westpy import * >>> dc = DataContainer() >>> dc.upsertPoint({"a":1, "b":2},{"energy":-4.5}) >>> dc.showPoints()
- upsertKey(key, description)¶
Updates or inserts a new key and its description.
- Parameters
key (string) – key
description – description
- Example
>>> from westpy import * >>> dc = DataContainer() >>> dc.upsertKey("a","the first letter")
- upsertPoint(identifier, document, incremental_update=True)¶
Update or inserts an entry to the data container.
If identifier exists, update the document associated to the identifier, otherwise insert the document with the identifier.
- Parameters
identifier – identifier
document – document
incremental_update (boolean) – if the document exists, only update it, do not remove its other keys.
- Example
>>> from westpy import * >>> dc = DataContainer() >>> dc.upsertPoint({"a":1, "b":2},{"energy":-4.5})
Electronic Structure¶
- class westpy.electronicStructure.ElectronicStructure¶
Bases:
object
Class for representing an electronic structure calculation.
- Example
>>> from westpy import * >>> es = ElectronicStructure()
- addDataPoint(ksb, key, what)¶
Adds datapoint to data.
- Parameters
ksb (3-dim int) – triplet of integers: k-point, spin, band (integer labels)
key (string) – key
what – content attached to key
- Example
>>> from westpy import * >>> es = ElectronicStructure() >>> es.addKey("eks","Kohn-Sham energy in eV") >>> es.addDataPoint([1,1,1],"eks",-4.6789)
- addKey(key, description)¶
Describes metadata key.
- Parameters
key (string) – key
description – description
- Example
>>> from westpy import * >>> es = ElectronicStructure() >>> es.addKey("eks","Kohn-Sham")
- plotDOS(k=1, s=1, energyKeys=['eks'], sigma=0.1, weight=1.0, energyRange=[- 20.0, 0.0, 0.01], fname='dos.png')¶
Plots desnity of states (DOS).
- Parameters
k (int) – k-point integer label
s (int) – spin integer label
energyKeys (list of string (needs to match the available keys)) – energy keys
sigma (float .OR. list of string (needs to match the available keys)) – standard deviation of gaussian (eV), optional
weight (float .OR. list of string (needs to match the available keys)) – weight, optional
energyRange (3-dim float) – energy range = min, max, step (eV), optional
fname (string) – output file name
- Example
>>> from westpy import * >>> es = ElectronicStructure() >>> es.addKey("eks","Kohn-Sham energy in eV") >>> es.addDataPoint([1,1,1],"eks",-4.6789) >>> es.plotDOS(k=1,s=1,energyKeys=["eks"],energyRange=[-5.,-3,0.01])
- removeKey(key)¶
Removes key from metadata.
- Parameters
key (string) – key
- Example
>>> from westpy import * >>> es = ElectronicStructure() >>> es.addKey("eks","Kohn-Sham") >>> es.removeKey("eks")
- showKeys()¶
Shows keys in metadata.
- Example
>>> from westpy import * >>> es = ElectronicStructure() >>> es.showKeys()
Session¶
- class westpy.session.Session(emailId)¶
Bases:
object
Class for setting up a session, connected to a remove server via rest APIs.
- Example
>>> from westpy import * >>> session = Session("your.email@domain.edu")
- getToken()¶
Returns the token of the session.
- Example
>>> from westpy import * >>> session = Session("your.email@domain.edu") >>> token = session.getToken() >>> print(token)
- run(executable=None, inputFile=None, outputFile=None, downloadUrl=[], number_of_cores=2)¶
Runs the executable on the remote server.
- Parameters
executable (string) – name of executable
inputFile (string) – name of input file
outputFile (string) – name of output file
downloadUrl (list of string) – URLs to be downloaded
number_of_cores (int) – number of cores
- Example
>>> from westpy import * >>> session = Session("your.email@domain.edu") >>> session.run( "pw", "pw.in", "pw.out", ["http://www.quantum-simulation.org/potentials/sg15_oncv/upf/C_ONCV_PBE-1.0.upf"] , 2 ) >>> session.stop()
- status()¶
Returns whether the session is active and time left.
- Example
>>> from westpy import * >>> session = Session("your.email@domain.edu") >>> session.status()
- stop()¶
Stops the session and clears the remote workspace.
- Example
>>> from westpy import * >>> session = Session("your.email@domain.edu") >>> session.stop()