Using QUIP potentials with Atomic Simulation Environment
quippy
Potential
objects can be used as ASE calculatorsCommunicate with other packages using ASE as lingua franca
Example: vacancy formation energy
Generate structure with
ASE
lattice toolsStillinger-Weber potential implementation from
QUIP
Elastic constant fitting routine from
matscipy
, internal relaxations withASE
FIRE minimiser
[5]:
from ase.build import bulk
from ase.optimize import LBFGS
from quippy.potential import Potential
si = bulk('Si', a=5.44, cubic=True)
sw_pot = Potential('IP SW', param_str="""
<SW_params n_types="3" label="PRB_31_plus_H_Ge">
<per_type_data type="1" atomic_num="14" />
<per_pair_data atnum_i="14" atnum_j="14" AA="7.049556277" BB="0.6022245584"
p="4" q="0" a="1.80" sigma="2.0951" eps="2.1675" />
<per_triplet_data atnum_c="14" atnum_j="14" atnum_k="14"
lambda="21.0" gamma="1.20" eps="2.1675" />
</SW_params>
""") # call into Fortran code
si.set_calculator(sw_pot)
e_bulk_per_atom = si.get_potential_energy()/len(si)
# call general purpose elastic constants calculator
# using ASE Atoms and QUIP Potential
from matscipy.elasticity import fit_elastic_constants
Cij = fit_elastic_constants(si, optimizer=LBFGS,
symmetry='cubic', logfile='-')
vac1 = si.copy()
vac1 *= (3, 3, 3)
half_cell = np.diag(vac1.cell)/2.
vac_atom = ((vac1.positions - half_cell)**2).sum(axis=1).argmin()
del vac1[vac_atom]
vac1.set_calculator(sw_pot)
vac1.rattle(0.01)
opt = LBFGS(vac1)
opt.run(fmax=1e-6)
e_vac = vac1.get_potential_energy() - e_bulk_per_atom*len(vac1)
print('SW vacancy formation energy', e_vac, 'eV')
Step Time Energy fmax
*Force-consistent energies used in optimization.
LBFGS: 0 16:55:25 -34.635777* 0.3247
LBFGS: 1 16:55:25 -34.644590* 0.1504
LBFGS: 2 16:55:25 -34.646997* 0.0001
Step Time Energy fmax
*Force-consistent energies used in optimization.
LBFGS: 0 16:55:25 -34.670667* 0.1584
LBFGS: 1 16:55:25 -34.672777* 0.0749
LBFGS: 2 16:55:25 -34.673385* 0.0000
Step Time Energy fmax
*Force-consistent energies used in optimization.
LBFGS: 0 16:55:25 -34.678737* 0.0000
Step Time Energy fmax
*Force-consistent energies used in optimization.
LBFGS: 0 16:55:25 -34.660845* 0.1508
LBFGS: 1 16:55:25 -34.662784* 0.0742
LBFGS: 2 16:55:25 -34.663403* 0.0000
Step Time Energy fmax
*Force-consistent energies used in optimization.
LBFGS: 0 16:55:25 -34.617822* 0.2945
LBFGS: 1 16:55:25 -34.625262* 0.1477
LBFGS: 2 16:55:25 -34.627763* 0.0001
Fitting C_11
Strain array([-0.02, -0.01, 0. , 0.01, 0.02])
Stress array([-2.56044687, -1.01247671, 0.5027424 , 1.98366491, 3.42893711]) GPa
Cij (gradient) / GPa : 149.74909575669915
Error in Cij / GPa : 1.1696996170085603
Correlation coefficient : 0.9999084935045536
Setting C11 (1) to 0.934660 +/- 0.007301
Fitting C_21
Strain array([-0.02, -0.01, 0. , 0.01, 0.02])
Stress array([-1.07663577, -0.26643655, 0.5027424 , 1.23345414, 1.92818198]) GPa
Cij (gradient) / GPa : 75.0952617697293
Error in Cij / GPa : 1.3149075235415504
Correlation coefficient : 0.9995404242109733
Setting C21 (7) to 0.468708 +/- 0.008207
Fitting C_31
Strain array([-0.02, -0.01, 0. , 0.01, 0.02])
Stress array([-1.07663577, -0.26643655, 0.5027424 , 1.23345414, 1.92818198]) GPa
Cij (gradient) / GPa : 75.09526176972929
Error in Cij / GPa : 1.31490752354155
Correlation coefficient : 0.9995404242109733
Updating C31 (7) with value 0.468708 +/- 0.008207
Fitting C_44
Strain array([-0.02, -0.01, 0. , 0.01, 0.02])
Stress array([-1.13572340e+00, -5.65842409e-01, -9.46072689e-15, 5.60142655e-01,
1.11304586e+00]) GPa
Cij (gradient) / GPa : 56.23523568430934
Error in Cij / GPa : 0.19437884854805132
Correlation coefficient : 0.9999820790695022
Setting C44 (4) to 0.350993 +/- 0.001213
[[b C11 b C12 b C12 b b b ]
[b C12 b C11 b C12 b b b ]
[b C12 b C12 b C11 b b b ]
[b b b b C44 b b ]
[b b b b b C44 b ]
[b b b b b b C44]]
=
[[149.75 75.1 75.1 0. 0. 0. ]
[ 75.1 149.75 75.1 0. 0. 0. ]
[ 75.1 75.1 149.75 0. 0. 0. ]
[ 0. 0. 0. 56.24 0. 0. ]
[ 0. 0. 0. 0. 56.24 0. ]
[ 0. 0. 0. 0. 0. 56.24]]
C_11 = 149.75 +/- 1.17 GPa
C_12 = 75.10 +/- 1.31 GPa
C_44 = 56.24 +/- 0.19 GPa
Step Time Energy fmax
*Force-consistent energies used in optimization.
LBFGS: 0 16:55:25 -927.087471* 0.8332
LBFGS: 1 16:55:25 -927.431001* 0.4667
LBFGS: 2 16:55:25 -927.618490* 0.1404
LBFGS: 3 16:55:25 -927.627345* 0.1185
LBFGS: 4 16:55:25 -927.645023* 0.0525
LBFGS: 5 16:55:25 -927.647485* 0.0567
LBFGS: 6 16:55:25 -927.652217* 0.0421
LBFGS: 7 16:55:25 -927.653638* 0.0372
LBFGS: 8 16:55:25 -927.654968* 0.0298
LBFGS: 9 16:55:25 -927.655716* 0.0221
LBFGS: 10 16:55:25 -927.656230* 0.0185
LBFGS: 11 16:55:25 -927.656496* 0.0136
LBFGS: 12 16:55:25 -927.656686* 0.0109
LBFGS: 13 16:55:25 -927.656814* 0.0104
LBFGS: 14 16:55:25 -927.656908* 0.0091
LBFGS: 15 16:55:25 -927.656982* 0.0072
LBFGS: 16 16:55:25 -927.657045* 0.0061
LBFGS: 17 16:55:25 -927.657090* 0.0049
LBFGS: 18 16:55:25 -927.657121* 0.0045
LBFGS: 19 16:55:25 -927.657144* 0.0046
LBFGS: 20 16:55:25 -927.657163* 0.0033
LBFGS: 21 16:55:25 -927.657178* 0.0029
LBFGS: 22 16:55:25 -927.657189* 0.0027
LBFGS: 23 16:55:25 -927.657199* 0.0024
LBFGS: 24 16:55:25 -927.657207* 0.0025
LBFGS: 25 16:55:25 -927.657212* 0.0021
LBFGS: 26 16:55:25 -927.657216* 0.0016
LBFGS: 27 16:55:25 -927.657218* 0.0012
LBFGS: 28 16:55:25 -927.657220* 0.0013
LBFGS: 29 16:55:25 -927.657221* 0.0010
LBFGS: 30 16:55:25 -927.657222* 0.0012
LBFGS: 31 16:55:25 -927.657223* 0.0010
LBFGS: 32 16:55:25 -927.657224* 0.0008
LBFGS: 33 16:55:25 -927.657225* 0.0006
LBFGS: 34 16:55:25 -927.657225* 0.0006
LBFGS: 35 16:55:25 -927.657225* 0.0005
LBFGS: 36 16:55:25 -927.657226* 0.0004
LBFGS: 37 16:55:25 -927.657226* 0.0004
LBFGS: 38 16:55:25 -927.657226* 0.0003
LBFGS: 39 16:55:25 -927.657226* 0.0002
LBFGS: 40 16:55:25 -927.657226* 0.0002
LBFGS: 41 16:55:25 -927.657226* 0.0002
LBFGS: 42 16:55:25 -927.657226* 0.0001
LBFGS: 43 16:55:25 -927.657226* 0.0001
LBFGS: 44 16:55:25 -927.657226* 0.0001
LBFGS: 45 16:55:25 -927.657226* 0.0001
LBFGS: 46 16:55:25 -927.657226* 0.0001
LBFGS: 47 16:55:25 -927.657226* 0.0001
LBFGS: 48 16:55:25 -927.657226* 0.0001
LBFGS: 49 16:55:25 -927.657226* 0.0001
LBFGS: 50 16:55:25 -927.657226* 0.0000
LBFGS: 51 16:55:25 -927.657226* 0.0000
LBFGS: 52 16:55:25 -927.657226* 0.0000
LBFGS: 53 16:55:25 -927.657226* 0.0000
LBFGS: 54 16:55:25 -927.657226* 0.0000
LBFGS: 55 16:55:25 -927.657226* 0.0000
LBFGS: 56 16:55:25 -927.657226* 0.0000
LBFGS: 57 16:55:26 -927.657226* 0.0000
LBFGS: 58 16:55:26 -927.657226* 0.0000
LBFGS: 59 16:55:26 -927.657226* 0.0000
LBFGS: 60 16:55:26 -927.657226* 0.0000
LBFGS: 61 16:55:26 -927.657226* 0.0000
LBFGS: 62 16:55:26 -927.657226* 0.0000
LBFGS: 63 16:55:26 -927.657226* 0.0000
LBFGS: 64 16:55:26 -927.657226* 0.0000
LBFGS: 65 16:55:26 -927.657226* 0.0000
LBFGS: 66 16:55:26 -927.657226* 0.0000
LBFGS: 67 16:55:26 -927.657226* 0.0000
LBFGS: 68 16:55:26 -927.657226* 0.0000
LBFGS: 69 16:55:26 -927.657226* 0.0000
LBFGS: 70 16:55:26 -927.657226* 0.0000
LBFGS: 71 16:55:26 -927.657226* 0.0000
LBFGS: 72 16:55:26 -927.657226* 0.0000
LBFGS: 73 16:55:26 -927.657226* 0.0000
LBFGS: 74 16:55:26 -927.657226* 0.0000
LBFGS: 75 16:55:26 -927.657226* 0.0000
LBFGS: 76 16:55:26 -927.657226* 0.0000
LBFGS: 77 16:55:26 -927.657226* 0.0000
SW vacancy formation energy 4.333840201785051 eV
[ ]: