clj = Clj() """ Point charge + r^12 + r^6 model. """ clj.ewald_cutoff = 80 * Ry clj.charges["A"] = -1.0 clj.charges["B"] = 1.0 structure = Structure() structure.set_cell = (1,0,0),\ (0,1,0),\ (0,0,1) structure.scale = 50 structure.add_atom = (0,0,0), "A" structure.add_atom = (a0.rescale(angstrom)/structure.scale,0,0), "B" print clj.ewald(structure).energy, hartree.rescale(eV) from pylada.crystal.A2BX4 import b5 from pylada.crystal import fill_structure from numpy import array clj.ewald_cutoff = 20 * Ry lattice = b5() lattice.sites[4].type='A' structure = fill_structure(lattice.cell, lattice) structure.scale = 8.0 clj.charges["A"] = 3.0 clj.charges["B"] = 2.0 clj.charges["X"] = -2.0 print clj.ewald(structure).energy, -498.586
def test_quantitykeyword(): from itertools import chain from numpy import all, abs, array from quantities import hartree, eV, kbar from pylada.tools.input import QuantityKeyword import quantities import numpy d = locals().copy() d.update(quantities.__dict__) d.update(numpy.__dict__) a = QuantityKeyword(units=eV, keyword='whatever') assert a.output_map() is None assert a.units is eV a.value = 5*hartree assert a.value.units == eV try: assert a.value.units == hartree except: pass else: raise Exception() assert abs(a.value - 5*hartree) < 1e-8 assert abs(a.value.magnitude - (5*hartree.rescale(eV).magnitude)) < 2e-8 try: a.value = 5*kbar except: pass else: raise Exception() a.value = 5 assert a.value.units == eV assert abs(a.value.magnitude - 5) < 2e-8 a.raw = '5.3\n' assert a.value.units == eV assert abs(a.value.magnitude - 5.3) < 2e-8 a.raw = '5.3' assert a.value.units == eV assert abs(a.value.magnitude - 5.3) < 2e-8 assert abs(eval(repr(a), d).value - a.value) < 1e-8 assert eval(repr(a), d).units == a.units assert not hasattr(eval(repr(a), d), 'shape') assert 'whatever' in a.output_map() assert a.output_map()['whatever'] == str(float(a.value)) a = QuantityKeyword(units=eV, keyword='whatever', shape=(3,3)) assert a.output_map() is None assert a.units is eV value = [[1.0, 1.2, 5], [5.6, 0, 0], [0.1, 0.2, 5]] a.value = value * hartree assert all(abs(a.value - value*hartree)) < 1e-8 assert all(abs(a.value.magnitude - value*hartree.rescale(eV).magnitude)) < 1e-8 a.raw = ' '.join(str(u) for u in chain(*value)) assert all(abs(a.value - value*eV)) < 1e-8 assert all(abs(a.value.magnitude - value)) < 1e-8 assert all(array(a.raw.split(), dtype='float64') == [u for u in chain(*value)]) assert len(a.raw.split('\n')) == 3 assert all(abs(eval(repr(a), d).value - a.value) < 1e-8) assert eval(repr(a), d).units == a.units assert eval(repr(a), d).shape == a.shape a.raw = a.raw assert all(abs(a.value - value*eV)) < 1e-8 assert len(a.output_map()['whatever'].split('\n')) == 3 assert len(a.output_map()['whatever'].split('\n')[0].split()) == 3 assert len(a.output_map()['whatever'].split('\n')[1].split()) == 3 assert len(a.output_map()['whatever'].split('\n')[2].split()) == 3 assert all(abs(array(a.output_map()['whatever'].split('\n')[0].split(), dtype='float64') - value[0]) < 1e-8) assert all(abs(array(a.output_map()['whatever'].split('\n')[1].split(), dtype='float64') - value[1]) < 1e-8) assert all(abs(array(a.output_map()['whatever'].split('\n')[2].split(), dtype='float64') - value[2]) < 1e-8) try: a.raw = '0 1 2\n2 3 4\n\n' except: pass else: raise Exception() try: a.raw = '0 a 2\n2 3 4\n56 6 7\n' except: pass else: raise Exception() try: a.raw = '0 1 2 4\n2 3 4 4\n56 6 7 4\n' except: pass else: raise Exception() try: a.value = value * kbar except: pass else: raise Exception()
def test_quantitykeyword(): from itertools import chain from numpy import all, abs, array from quantities import hartree, eV, kbar from pylada.tools.input import QuantityKeyword import quantities import numpy d = locals().copy() d.update(quantities.__dict__) d.update(numpy.__dict__) a = QuantityKeyword(units=eV, keyword='whatever') assert a.output_map() is None assert a.units is eV a.value = 5 * hartree assert a.value.units == eV try: assert a.value.units == hartree except: pass else: raise Exception() assert abs(a.value - 5 * hartree) < 1e-8 assert abs(a.value.magnitude - (5 * hartree.rescale(eV).magnitude)) < 2e-8 try: a.value = 5 * kbar except: pass else: raise Exception() a.value = 5 assert a.value.units == eV assert abs(a.value.magnitude - 5) < 2e-8 a.raw = '5.3\n' assert a.value.units == eV assert abs(a.value.magnitude - 5.3) < 2e-8 a.raw = '5.3' assert a.value.units == eV assert abs(a.value.magnitude - 5.3) < 2e-8 assert abs(eval(repr(a), d).value - a.value) < 1e-8 assert eval(repr(a), d).units == a.units assert not hasattr(eval(repr(a), d), 'shape') assert 'whatever' in a.output_map() assert a.output_map()['whatever'] == str(float(a.value)) a = QuantityKeyword(units=eV, keyword='whatever', shape=(3, 3)) assert a.output_map() is None assert a.units is eV value = [[1.0, 1.2, 5], [5.6, 0, 0], [0.1, 0.2, 5]] a.value = value * hartree assert all(abs(a.value - value * hartree)) < 1e-8 assert all( abs(a.value.magnitude - value * hartree.rescale(eV).magnitude)) < 1e-8 a.raw = ' '.join(str(u) for u in chain(*value)) assert all(abs(a.value - value * eV)) < 1e-8 assert all(abs(a.value.magnitude - value)) < 1e-8 assert all( array(a.raw.split(), dtype='float64') == [u for u in chain(*value)]) assert len(a.raw.split('\n')) == 3 assert all(abs(eval(repr(a), d).value - a.value) < 1e-8) assert eval(repr(a), d).units == a.units assert eval(repr(a), d).shape == a.shape a.raw = a.raw assert all(abs(a.value - value * eV)) < 1e-8 assert len(a.output_map()['whatever'].split('\n')) == 3 assert len(a.output_map()['whatever'].split('\n')[0].split()) == 3 assert len(a.output_map()['whatever'].split('\n')[1].split()) == 3 assert len(a.output_map()['whatever'].split('\n')[2].split()) == 3 assert all( abs( array(a.output_map()['whatever'].split('\n')[0].split(), dtype='float64') - value[0]) < 1e-8) assert all( abs( array(a.output_map()['whatever'].split('\n')[1].split(), dtype='float64') - value[1]) < 1e-8) assert all( abs( array(a.output_map()['whatever'].split('\n')[2].split(), dtype='float64') - value[2]) < 1e-8) try: a.raw = '0 1 2\n2 3 4\n\n' except: pass else: raise Exception() try: a.raw = '0 a 2\n2 3 4\n56 6 7\n' except: pass else: raise Exception() try: a.raw = '0 1 2 4\n2 3 4 4\n56 6 7 4\n' except: pass else: raise Exception() try: a.value = value * kbar except: pass else: raise Exception()