NiTi B19' phase lattice coordinate

Dear Lammps users,

I am trying to calculate lattice parameters of B19’ NiTi phase. In several papers, lattice parameters of B19’ phase are represented as following;

a=4.622
b=2.885
c=4.120
beta=96.8 deg

Conventional coordinates of B19’ NiTi phase are reported [1] which are

Ti 1:(0, 0, 0)
Ti 2:(0.558, 0.5, 0.055)
Ni 1:(0.472, 0, 0.580)
Ni 2:(0.086, 0.5, 0.475)

[1]Michal, G. M., and R. Sinclair. “The structure of TiNi martensite.” Acta Crystallographica Section B: Structural Crystallography and Crystal Chemistry 37.10 (1981): 1803-1807.

Using above coordinates, I created a lammps code to calculate lattice coordinates of B19’ NiTi phase. However, I am getting results which are far different from reported results. I used a FS potential file which was verified in a paper showing good lattice parameter results.

Is my lattice coordinate wrong? Or, are there something incorrect in my code?
I appreciate any comments from you.

Thank you.
Jeongwoo Lee

---------- Initialize Simulation ---------------------

clear
units metal
dimension 3
boundary p p p
atom_style atomic
atom_modify map array

---------- Create Atoms ---------------------

#Ni
lattice custom 2.88 a1 1.585 0.0 -0.230 a2 0.0 1.0 0.0 a3 0.0 0.0 1.428 &
basis 0.472 0.0 0.580 basis 0.086 0.5 0.475
region supercell block 0 1 0 1 0 1 units lattice
create_box 2 supercell
create_atoms 1 region supercell

#Ti
lattice custom 2.88 a1 1.585 0.0 -0.230 a2 0.0 1.0 0.0 a3 0.0 0.0 1.428 &
basis 0.0 0.0 0.0 basis 0.558 0.5 0.055
create_atoms 2 region supercell

---------- Define Interatomic Potential ---------------------

pair_style eam/fs
pair_coeff * * NiTi_Yuan.setfl_rc4_2.fs Ni Ti
neighbor 2.0 bin
neigh_modify delay 10 check yes

---------- Define Settings ---------------------

compute eng all pe/atom
compute eatoms all reduce sum c_eng
compute dl all pair/local dist

---------- Run Minimization ---------------------

reset_timestep 0
fix 1 all box/relax iso 0.0 vmax 0.001
thermo 10
thermo_style custom step pe lx ly lz press pxx pyy pzz c_eatoms
min_style cg
minimize 1e-25 1e-25 5000 10000

variable natoms equal “count(all)”
variable teng equal “c_eatoms”
variable lengthx equal “lx”
variable lengthy equal “ly”
variable lengthz equal “lz”
variable ecoh equal “v_teng/v_natoms”

print “Total energy (eV) = {teng};" print "Number of atoms = {natoms};”
print “Lattice constant x (Angstoms) = {lengthx};" print "Lattice constant y (Angstoms) = {lengthy};”
print “Lattice constant z (Angstoms) = {lengthz};" print "Cohesive energy (eV) = {ecoh};”
print “%% ecoh = {ecoh};" print "%% latc_x = {lengthx};”
print “%% latc_y = {lengthy};" print "%% latc_z = {lengthz};”
print “distance1 = ${zlength};”

print “All done!”

I believe your lattice custom command is not correct. According to this doc page the three edge vectors are given by a = (xhi-xlo,0,0); b = (xy,yhi-ylo,0); c = (xz,yz,zhi-zlo), and xz=c*cos(beta).

Ray

I appreciate your comments, Ray. As you recommended, I have read the doc page carefully. What I found from the doc page is that “region” command has to be changed in my code instead of “lattice command”. Previously, I set region as “block” which created an orthogonal simulation box. Region is now changed to “prism” for triclinic simulation box.

I am still not sure how lammps parameters are defined, especially lo and hi values(i.e xhi, xlo). Prism is defined using 9 parameters (xlo xhi ylo yhi zlo zhi xy xz yz). For my case, lattice parameters are as following;

a=2.885 b=4.622 c=4.120 gamma=98.26 deg alpha=beta=90 deg

In this case, what is xlo and xhi values? Considering b, xlo should be bcos(gamma) and xhi is equal to a;
xlo=b
cos(gamma)=-0.691
xhi=a=2.885

However, in this case, lammps defines initial “cella” value as 3.576(=xhi-xlo) which is far from actual a value(2.885)

I obtained the best resutls by setting as xlo=0, xhi=2.885. Please correct me if I am making mistakes. I again appreciate your help.

Jeongwoo

Other parameters are set as following;

#
#xlo=0
#xhi=a=2.885
#ylo=0
#yhi=bsin(gamma)=4.574
#zlo=0
#zhi=c=4.120
#xy=b
cos(gamma)=-0.691
#xz=yz=0

#region setting
#region ID prism xlo xhi ylo yhi zlo zhi xy xz yz
region supercell prism 0.0 2.885 0.0 4.574 0.0 4.120 -0.691 0.0 0.0 units box

LAMMPS CODE

---------- Initialize Simulation ---------------------

clear
units metal
dimension 3
boundary p p p
atom_style atomic
atom_modify map array

---------- Create Atoms ---------------------

#Ni

lattice custom 1.0 a1 2.885 0.0 0.0 a2 -0.691 4.574 0.0 a3 0.0 0.0 4.120 &
basis 0.580 0.472 0.0 basis 0.475 0.086 0.5
region supercell prism 0 2.885 0.0 4.574 0.0 4.120 -0.691 0.0 0.0 units box
create_box 2 supercell

create_atoms 1 region supercell

#replicate 1 1 1
#Ti
lattice custom 1.0 a1 2.885 0.0 0.0 a2 -0.691 4.574 0.0 a3 0.0 0.0 4.120 &
basis 0.0 0.0 0.0 basis 0.055 0.558 0.5

create_atoms 2 region supercell
#replicate 1 1 1

---------- Define Interatomic Potential ---------------------

pair_style eam/fs
pair_coeff * * NiTi.setfl.fs Ni Ti

neighbor 2.0 bin
neigh_modify delay 10 check yes

---------- Define Settings ---------------------

compute eng all pe/atom
compute eatoms all reduce sum c_eng
compute dl all pair/local dist

---------- Run Minimization ---------------------

reset_timestep 0
fix 1 all box/relax iso 0.0 vmax 0.001
thermo 10
thermo_style custom step pe cella cellb cellc cellalpha cellbeta cellgamma press pxx pyy pzz c_eatoms
min_style cg
minimize 1e-25 1e-25 5000 10000

variable natoms equal “count(all)”
variable teng equal “c_eatoms”
variable lengthx equal “cella”
variable lengthy equal “cellb”
variable lengthz equal “cellc”
variable anglealpha equal “cellalpha”
variable anglebeta equal “cellbeta”
variable anglegamma equal “cellgamma”
variable ecoh equal “v_teng/v_natoms”
variable zlength equal bound(all,zmax)-bound(all,zmin)

print “Total energy (eV) = {teng};" print "Number of atoms = {natoms};”
print “Lattice constant x (Angstoms) = {lengthx};" print "Lattice constant y (Angstoms) = {lengthy};”
print “Lattice constant z (Angstoms) = {lengthz};" print "Cohesive energy (eV) = {ecoh};”
print “%% ecoh = {ecoh};" print "%% latc_x = {lengthx};”
print “%% latc_y = {lengthy};" print "%% latc_z = {lengthz};”
print “%% A_alpha = {anglealpha};" print "%% A_beta = {anglebeta};”
print “%% A_gamma = ${anglegamma};”

print “distance1 = ${zlength};”
print “All done!”

I appreciate your comments, Ray. As you recommended, I have read the doc
page carefully. What I found from the doc page is that "region" command has
to be changed in my code instead of "lattice command". Previously, I set

Actually both.

region as "block" which created an orthogonal simulation box. Region is
now changed to "prism" for triclinic simulation box.

I am still not sure how lammps parameters are defined, especially lo and
hi values(i.e xhi, xlo). Prism is defined using 9 parameters (xlo xhi ylo
yhi zlo zhi xy xz yz)*.* For my case, lattice parameters are as following;

xlo, ylo, and zlo is where the origin is, which can be zeros.

<from paper>
a=2.885
b=4.622
c=4.120
gamma=98.26 deg
alpha=beta=90 deg

Which is the tilt angle? Gamma or beta? What degree, 98.26 or 96.8?

In this case, what is xlo and xhi values? Considering b, xlo should be
b*cos(gamma) and xhi is equal to a;
xlo=b*cos(gamma)=-0.691

This is not correct. However, your script below looks right to me. What
is your question?

Ray