Exemplo n.º 1
0
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
Exemplo n.º 2
0
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()
Exemplo n.º 3
0
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()