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()
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()
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'}
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"}
""" 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
# # 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)]