243 lines
10 KiB
Python
243 lines
10 KiB
Python
|
|
import sys,os,unittest
|
|
from lammps import lammps
|
|
|
|
has_full=False
|
|
try:
|
|
machine=None
|
|
if 'LAMMPS_MACHINE_NAME' in os.environ:
|
|
machine=os.environ['LAMMPS_MACHINE_NAME']
|
|
lmp=lammps(name=machine)
|
|
has_full = lmp.has_style("atom","full")
|
|
lmp.close()
|
|
except:
|
|
pass
|
|
|
|
class PythonGather(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
machine=None
|
|
if 'LAMMPS_MACHINE_NAME' in os.environ:
|
|
machine=os.environ['LAMMPS_MACHINE_NAME']
|
|
self.lmp=lammps(name=machine,
|
|
cmdargs=['-nocite',
|
|
'-log','none',
|
|
'-echo','screen'])
|
|
self.lmp.command('shell cd ' + os.environ['TEST_INPUT_DIR'])
|
|
|
|
# clean up temporary files
|
|
def tearDown(self):
|
|
self.lmp.close()
|
|
|
|
# bond data comparison
|
|
def checkBond(self, vals, btype, batom1, batom2):
|
|
if ((vals[1] == batom1 and vals[2] == batom2)
|
|
or (vals[1] == batom2 and vals[2] == batom1)):
|
|
self.assertEqual(vals[0], btype)
|
|
return 1
|
|
else:
|
|
return 0
|
|
|
|
# angle data comparison
|
|
def checkAngle(self, vals, atype, aatom1, aatom2, aatom3):
|
|
set1 = {aatom1, aatom2, aatom3}
|
|
set2 = {vals[1], vals[2], vals[3]}
|
|
if len(set1.intersection(set2)) == 3:
|
|
self.assertEqual(vals[0], atype)
|
|
return 1
|
|
else:
|
|
return 0
|
|
|
|
# dihedral data comparison
|
|
def checkDihedral(self, vals, dtype, datom1, datom2, datom3, datom4):
|
|
set1 = {datom1, datom2, datom3, datom4}
|
|
set2 = {vals[1], vals[2], vals[3], vals[4]}
|
|
if len(set1.intersection(set2)) == 4:
|
|
self.assertEqual(vals[0], dtype)
|
|
return 1
|
|
else:
|
|
return 0
|
|
|
|
# improper data comparison
|
|
def checkImproper(self, vals, itype, iatom1, iatom2, iatom3, iatom4):
|
|
set1 = {iatom1, iatom2, iatom3, iatom4}
|
|
set2 = {vals[1], vals[2], vals[3], vals[4]}
|
|
if len(set1.intersection(set2)) == 4:
|
|
self.assertEqual(vals[0], itype)
|
|
return 1
|
|
else:
|
|
return 0
|
|
|
|
##############################
|
|
@unittest.skipIf(not has_full, "Gather_bonds test")
|
|
def testGatherBond_newton_on(self):
|
|
"""Test gather_bonds() with newton on"""
|
|
self.lmp.command("newton on on")
|
|
self.lmp.file("in.fourmol")
|
|
self.lmp.command("run 0 post no")
|
|
nbonds, bonds = self.lmp.gather_bonds()
|
|
self.assertEqual(nbonds, 24)
|
|
self.assertEqual(len(bonds), 3*24)
|
|
count = 0;
|
|
for i in range(0,nbonds):
|
|
count += self.checkBond(bonds[3*i:3*i+3], 5, 1, 2)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 3, 1, 3)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 2, 3, 4)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 2, 3, 5)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 1, 6, 3)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 3, 6, 8)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 4, 6, 7)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 5, 8, 9)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 5, 27, 28)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 5, 29, 27)
|
|
self.assertEqual(count,10)
|
|
|
|
@unittest.skipIf(not has_full, "Gather_bonds test")
|
|
def testGatherBond_newton_off(self):
|
|
"""Test gather_bonds() with newton off"""
|
|
self.lmp.command("newton off off")
|
|
self.lmp.file("in.fourmol")
|
|
self.lmp.command("run 0 post no")
|
|
nbonds, bonds = self.lmp.gather_bonds()
|
|
self.assertEqual(nbonds, 24)
|
|
self.assertEqual(len(bonds), 3*24)
|
|
count = 0;
|
|
for i in range(0,nbonds):
|
|
count += self.checkBond(bonds[3*i:3*i+3], 5, 1, 2)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 3, 1, 3)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 2, 3, 4)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 2, 3, 5)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 1, 3, 6)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 3, 6, 8)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 4, 6, 7)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 5, 8, 9)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 5, 27, 28)
|
|
count += self.checkBond(bonds[3*i:3*i+3], 5, 27, 29)
|
|
self.assertEqual(count,10)
|
|
|
|
@unittest.skipIf(not has_full, "Gather_angles test")
|
|
def testGatherAngle_newton_on(self):
|
|
"""Test gather_angles() with newton on"""
|
|
self.lmp.command("newton on on")
|
|
self.lmp.file("in.fourmol")
|
|
self.lmp.command("run 0 post no")
|
|
nangles, angles = self.lmp.gather_angles()
|
|
self.assertEqual(nangles, 30)
|
|
self.assertEqual(len(angles), 120)
|
|
count = 0;
|
|
for i in range(0,nangles):
|
|
count += self.checkAngle(angles[4*i:4*i+4], 4, 2, 1, 3)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 4, 1, 3, 6)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 2, 4, 3, 6)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 3, 7, 6, 8)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 3, 8, 10, 16)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 2, 8, 10, 11)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 1, 12, 10, 16)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 2, 10, 12, 14)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 1, 19, 18, 20)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 1, 28, 27, 29)
|
|
self.assertEqual(count,10)
|
|
|
|
@unittest.skipIf(not has_full, "Gather_angles test")
|
|
def testGatherAngle_newton_off(self):
|
|
"""Test gather_angles() with newton off"""
|
|
self.lmp.command("newton off off")
|
|
self.lmp.file("in.fourmol")
|
|
self.lmp.command("run 0 post no")
|
|
nangles, angles = self.lmp.gather_angles()
|
|
self.assertEqual(nangles, 30)
|
|
self.assertEqual(len(angles), 120)
|
|
count = 0;
|
|
for i in range(0,nangles):
|
|
count += self.checkAngle(angles[4*i:4*i+4], 4, 2, 1, 3)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 4, 1, 3, 6)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 2, 4, 3, 6)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 3, 7, 6, 8)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 3, 8, 10, 16)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 2, 8, 10, 11)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 1, 12, 10, 16)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 2, 10, 12, 14)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 1, 19, 18, 20)
|
|
count += self.checkAngle(angles[4*i:4*i+4], 1, 28, 27, 29)
|
|
self.assertEqual(count,10)
|
|
|
|
@unittest.skipIf(not has_full, "Gather_dihedrals test")
|
|
def testGatherDihedral_newton_on(self):
|
|
"""Test gather_dihedrals() with newton on"""
|
|
self.lmp.command("newton on on")
|
|
self.lmp.file("in.fourmol")
|
|
self.lmp.command("run 0 post no")
|
|
ndihedrals, dihedrals = self.lmp.gather_dihedrals()
|
|
self.assertEqual(ndihedrals, 31)
|
|
self.assertEqual(len(dihedrals), 155)
|
|
count = 0;
|
|
for i in range(0,ndihedrals):
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 2, 2, 1, 3, 6)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 3, 2, 1, 3, 5)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 1, 1, 3, 6, 7)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 5, 4, 3, 6, 7)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 4, 3, 6, 8, 9)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 2, 6, 8, 10, 16)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 5, 8, 10, 12, 13)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 1, 8, 10, 12, 14)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 2, 11, 10, 16, 17)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 5, 16, 10, 12, 14)
|
|
self.assertEqual(count,10)
|
|
|
|
@unittest.skipIf(not has_full, "Gather_dihedrals test")
|
|
def testGatherDihedral_newton_off(self):
|
|
"""Test gather_dihedrals() with newton off"""
|
|
self.lmp.command("newton off off")
|
|
self.lmp.file("in.fourmol")
|
|
self.lmp.command("run 0 post no")
|
|
ndihedrals, dihedrals = self.lmp.gather_dihedrals()
|
|
self.assertEqual(ndihedrals, 31)
|
|
self.assertEqual(len(dihedrals), 155)
|
|
count = 0;
|
|
for i in range(0,ndihedrals):
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 2, 2, 1, 3, 6)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 3, 2, 1, 3, 5)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 1, 1, 3, 6, 7)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 5, 4, 3, 6, 7)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 4, 3, 6, 8, 9)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 2, 6, 8, 10, 16)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 5, 8, 10, 12, 13)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 1, 8, 10, 12, 14)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 2, 11, 10, 16, 17)
|
|
count += self.checkDihedral(dihedrals[5*i:5*i+5], 5, 16, 10, 12, 14)
|
|
self.assertEqual(count,10)
|
|
|
|
@unittest.skipIf(not has_full, "Gather_impropers test")
|
|
def testGatherImproper_newton_on(self):
|
|
"""Test gather_impropers() with newton on"""
|
|
self.lmp.command("newton on on")
|
|
self.lmp.file("in.fourmol")
|
|
self.lmp.command("run 0 post no")
|
|
nimpropers, impropers = self.lmp.gather_impropers()
|
|
self.assertEqual(nimpropers, 2)
|
|
self.assertEqual(len(impropers), 10)
|
|
count = 0;
|
|
for i in range(0,nimpropers):
|
|
count += self.checkImproper(impropers[5*i:5*i+5], 1, 6, 3, 8, 7)
|
|
count += self.checkImproper(impropers[5*i:5*i+5], 2, 8, 6, 10, 9)
|
|
self.assertEqual(count,2)
|
|
|
|
@unittest.skipIf(not has_full, "Gather_impropers test")
|
|
def testGatherImproper_newton_off(self):
|
|
"""Test gather_impropers() with newton off"""
|
|
self.lmp.command("newton off off")
|
|
self.lmp.file("in.fourmol")
|
|
self.lmp.command("run 0 post no")
|
|
nimpropers, impropers = self.lmp.gather_impropers()
|
|
self.assertEqual(nimpropers, 2)
|
|
self.assertEqual(len(impropers), 10)
|
|
count = 0;
|
|
for i in range(0,nimpropers):
|
|
count += self.checkImproper(impropers[5*i:5*i+5], 1, 6, 3, 8, 7)
|
|
count += self.checkImproper(impropers[5*i:5*i+5], 2, 8, 6, 10, 9)
|
|
self.assertEqual(count,2)
|
|
|
|
##############################
|
|
if __name__ == "__main__":
|
|
unittest.main()
|