Example #1
0
def test_bringup(tmpdir, espresso):
    from pylada.crystal.A2BX4 import b5
    structure = b5()
    # create fake pseudo files: _bring_up checks that the files exist
    tmpdir.join('pseudos', 'A.upf').ensure(file=True)
    tmpdir.join('pseudos', 'B.upf').ensure(file=True)
    tmpdir.join('pseudos', 'X.upf').ensure(file=True)

    espresso.control.pseudo_dir = str(tmpdir.join('pseudos'))
    espresso.add_specie('A', 'A.upf', mass=1)
    espresso.add_specie('B', 'B.upf', mass=2)
    espresso.add_specie('X', 'X.upf', mass=3)
    espresso._bring_up(outdir=tmpdir.join('runhere'), structure=structure)
    assert tmpdir.join('runhere', 'pwscf.in').check()
Example #2
0
def test_bringup(tmpdir, espresso):
    from pylada.crystal.A2BX4 import b5

    structure = b5()
    # create fake pseudo files: _bring_up checks that the files exist
    tmpdir.join("pseudos", "A.upf").ensure(file=True)
    tmpdir.join("pseudos", "B.upf").ensure(file=True)
    tmpdir.join("pseudos", "X.upf").ensure(file=True)

    espresso.control.pseudo_dir = str(tmpdir.join("pseudos"))
    espresso.add_specie("A", "A.upf", mass=1)
    espresso.add_specie("B", "B.upf", mass=2)
    espresso.add_specie("X", "X.upf", mass=3)
    espresso._bring_up(outdir=tmpdir.join("runhere"), structure=structure)
    assert tmpdir.join("runhere", "pwscf.in").check()
Example #3
0
def test_atomic_specie(tmpdir, espresso):
    from pylada.crystal.A2BX4 import b5
    structure = b5()

    tmpdir.join('pseudos', 'A.upf').ensure(file=True)
    tmpdir.join('pseudos', 'B.upf').ensure(file=True)
    tmpdir.join('pseudos', 'X.upf').ensure(file=True)

    espresso.control.pseudo_dir = str(tmpdir.join('pseudos'))
    espresso.add_specie('A', 'A.upf', mass=1)
    espresso.add_specie('B', 'B.upf', mass=2)
    espresso.add_specie('X', 'X.upf', mass=3)

    card = espresso._write_atomic_species_card(structure)
    assert card.name == "atomic_species"
    assert card.subtitle is None
    lines = card.value.rstrip().lstrip().split('\n')
    assert len(lines) == 3
    assert all(len(u.split()) == 3 for u in lines)
    assert set([u.split()[0] for u in lines]) == {'A', 'B', 'X'}
    assert set([int(float(u.split()[1])) for u in lines]) == {1, 2, 3}
    assert set([u.split()[2] for u in lines]) == {'A.upf', 'B.upf', 'X.upf'}
Example #4
0
def test_atomic_specie(tmpdir, espresso):
    from pylada.crystal.A2BX4 import b5

    structure = b5()

    tmpdir.join("pseudos", "A.upf").ensure(file=True)
    tmpdir.join("pseudos", "B.upf").ensure(file=True)
    tmpdir.join("pseudos", "X.upf").ensure(file=True)

    espresso.control.pseudo_dir = str(tmpdir.join("pseudos"))
    espresso.add_specie("A", "A.upf", mass=1)
    espresso.add_specie("B", "B.upf", mass=2)
    espresso.add_specie("X", "X.upf", mass=3)

    card = espresso._write_atomic_species_card(structure)
    assert card.name == "atomic_species"
    assert card.subtitle is None
    lines = card.value.rstrip().lstrip().split("\n")
    assert len(lines) == 3
    assert all(len(u.split()) == 3 for u in lines)
    assert set([u.split()[0] for u in lines]) == {"A", "B", "X"}
    assert set([int(float(u.split()[1])) for u in lines]) == {1, 2, 3}
    assert set([u.split()[2] for u in lines]) == {"A.upf", "B.upf", "X.upf"}
Example #5
0
""" 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
Example #6
0
# 
#  PyLaDa is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
#  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
#  Public License for more details.
# 
#  You should have received a copy of the GNU General Public License along with PyLaDa.  If not, see
#  <http://www.gnu.org/licenses/>.
###############################

from pylada.crystal.A2BX4 import b5
from pylada.enumeration import Enum
from spinel_check import checkme


# create spinel lattice and make it inverse.
lattice = Enum(b5())
for site in lattice.sites:
  if "X" in site.type: continue
  site.type = 'A' if 'B' in site.type else ('A', 'B')
lattice.find_space_group()

# look at inverse only.
def check_concentration(x, flavorbase, smith):
  from pylada.enumeration import as_numpy

  types = as_numpy(x, flavorbase) 
  result = 2*len(types[types == 1]) == len(types)

  return result, None if result else False

result = [i for i, dummy, dummy, dummy in lattice.xn(2)]