ASEconvert
Light-weight module to install ASE and provide routines for converting between the Atoms datastructure from ASE and atomistic data provided in the AtomsBase ecosystem.
Automatic ASE installation
Using the mechanism provided by PythonCall and CondaPkg ASEconvert will automatically take care of installing ASE and exporting a useful subset of its modules under the ase
variable. For example one may easily create bulk systems
using ASEconvert
ase.build.bulk("Mg")
Python: Atoms(symbols='Mg2', pbc=True, cell=[[3.21, 0.0, 0.0], [-1.605, 2.7799415461480477, 0.0], [0.0, 0.0, 5.21304]])
or surfaces
using ASEconvert
ase.build.surface(ase.build.bulk("Mg"), (1, 1, 0), 4, 0, periodic=true)
Python: Atoms(symbols='Mg8', pbc=True, cell=[5.559883092296095, 5.21304, 4.8149999999999995])
Conversion from ASE to AtomsBase
using ASEconvert
using DFTK
# Construct bulk magnesium using ASE and convert to atomsbase
mg_ase = ase.build.bulk("Mg")
mg_atb = pyconvert(AbstractSystem, mg_ase)
FlexibleSystem(Mg₂, periodic = TTT):
bounding_box : [ 3.21 0 0;
-1.605 2.77994 0;
0 0 5.21304]u"Å"
Atom(Mg, [ 0, 0, 0]u"Å")
Atom(Mg, [-8.86328e-17, 1.85329, 2.60652]u"Å")
Mg
Mg
# Attach pseudopotentials, construct LDA DFT model and solve for DFT ground state
system = attach_psp(mg_atb; Mg="hgh/lda/mg-q2")
model = model_LDA(system; temperature=1e-3, smearing=Smearing.MarzariVanderbilt())
basis = PlaneWaveBasis(model; Ecut=20, kgrid=(4, 4, 4))
scfres = self_consistent_field(basis)
scfres.energies
Energy breakdown (in Ha):
Kinetic 0.7125693
AtomicLocal 0.3212857
AtomicNonlocal 0.3386599
Ewald -2.1416410
PspCorrection -0.1823028
Hartree 0.0045839
Xc -0.8537690
Entropy 0.0000048
total -1.800609100652
Conversion from AtomsBase to ASE
using ASEconvert
using AtomsIO
# Read an extxyz file using AtomsIO.jl.
system = load_system("Mn3Si.extxyz")
Atoms(Mn₃Si, periodic = TTT):
bounding_box : [ 3.99987 0 0;
1.99993 3.46399 0;
1.99993 1.15466 3.26588]u"Å"
spacegroup : P 1
occupancy : _JSON {"0": {"Mn": 1}, "1": {"Mn": 1}, "2": {"Mn": 1}, "3": {"Si": 1}}
unit_cell : conventional
AtomView(Mn, [ 1.99993, 1.15466, 0.81647]u"Å")
AtomView(Mn, [ 5.9998, 3.46399, 2.44941]u"Å")
AtomView(Mn, [ 3.99987, 2.30933, 1.63294]u"Å")
AtomView(Si, [ 0, 0, 0]u"Å")
Mn
Mn
Mn
Si
This example uses AtomsIO to read the extended XYZ file file Mn3Si.extxyz
. The data is returned as a subtype of AtomsBase.AbstractSystem
(in this case an ExtXYZ.Atoms
from ExtXYZ). We can thus directly convert this system to an ase.Atoms
using convert_ase
and write it again as an ASE json file
ase.io.write("out.json", convert_ase(system));
Python: None