Esempio n. 1
0
def test_average():
    structure = Structure(symbols=['C', 'O'], positions=[(0, 0, 0), (0.5, 0, 0)], unitcell=5)
    structure.repeat(5)

    four = Fourier()
    four.grid.bins = [2, 21]
    four.grid.set_corners(lr=[4.0, 0.0, 0.0],
                          ul=[0.0, 2.0, 0.0])
    four.structure = structure
    four._average = True
    results = four.calc()

    expected_result = [1.32348898e-23, 5.71594728e-24, 8.12875148e-56,
                       8.37681929e-25, 6.37686377e-56, 5.46068451e-25,
                       2.54939667e-55, 8.37681929e-25, 7.16891360e-55,
                       5.21188409e-24, 1.32348898e-23, 5.71594728e-24,
                       3.46656800e-54, 8.37681929e-25, 5.74150325e-55,
                       5.46068451e-25, 2.74171118e-55, 8.37681929e-25,
                       1.00428514e-54, 5.21188409e-24, 1.32348898e-23]
    assert_array_almost_equal(results[0, :, 0], expected_result)

    # Random move
    structure.rattle(seed=0)
    results = four.calc()

    expected_result = [1.32348898e-23, 8.88939203e-04, 7.27741076e-03,
                       1.91258313e-02, 5.94954973e-02, 1.26500450e-01,
                       1.34462469e-01, 1.04512735e-01, 1.17228978e-01,
                       7.24444566e-02, 5.87435134e-26, 1.06907925e-01,
                       2.60217008e-01, 3.57817285e-01, 7.25525103e-01,
                       1.13842501e+00, 9.60372378e-01, 6.18668588e-01,
                       5.97492048e-01, 3.24844518e-01, 2.34454638e-25]
    assert_array_almost_equal(results[0, :, 0], expected_result)
Esempio n. 2
0
def test_except():
    from javelin.fourier import get_ff

    four = Fourier()

    with pytest.raises(ValueError):
        four.radiation = 'electron'

    with pytest.raises(ValueError):
        four.lots = 4, 1

    with pytest.raises(ValueError):
        get_ff(10, 'electron')
Esempio n. 3
0
def test_Foutier_ASE_C_Ring():
    pytest.importorskip("ase")
    from ase.structure import nanotube
    cnt = nanotube(3, 3, length=1, bond=1.4)
    four = Fourier()
    four.grid.bins = [6, 6, 2]
    four.structure = cnt
    four.grid.ll = [0.0, 0.0, 0.0]
    four.grid.lr = [2.0, 0.0, 0.0]
    four.grid.ul = [0.0, 2.0, 0.0]
    four.grid.tl = [0.0, 0.0, 0.5]
    results = four.calc()
    expected_result = [[[6.36497605e+03,   3.18248802e+03],
                        [5.19826149e+03,   2.62430530e+03],
                        [2.62792897e+03,   1.44984089e+03],
                        [5.38964665e+02,   4.77287736e+02],
                        [1.77345692e+01,   5.96777257e+01],
                        [5.61330972e+02,   2.13240090e-01]],
                       [[5.19824634e+03,   2.58464390e+03],
                        [4.19804025e+03,   2.08045239e+03],
                        [2.02566353e+03,   1.13472923e+03],
                        [3.43108613e+02,   3.82910378e+02],
                        [4.89415344e+01,   6.29938344e+01],
                        [5.92919277e+02,   4.58410816e+00]],
                       [[2.62726847e+03,   1.23823945e+03],
                        [2.02670889e+03,   8.48260672e+02],
                        [7.91958690e+02,   3.42380372e+02],
                        [3.33463046e+01,   5.27598268e+01],
                        [2.30729880e+02,   5.28798893e-01],
                        [7.98830716e+02,   8.58598324e+00]],
                       [[5.35796499e+02,   1.75090475e+02],
                        [3.44314616e+02,   3.58530973e+01],
                        [3.54586483e+01,   1.01212665e+01],
                        [1.11489239e+02,   1.22750852e+02],
                        [6.43708514e+02,   2.21345300e+02],
                        [1.09996107e+03,   1.70969809e+02]],
                       [[2.07782589e+01,   8.83691575e+01],
                        [4.95216235e+01,   3.06779369e+02],
                        [2.12904292e+02,   6.20110076e+02],
                        [6.00173935e+02,   8.55468985e+02],
                        [1.07400507e+03,   8.34634162e+02],
                        [1.26315713e+03,   5.49870658e+02]],
                       [[6.17667297e+02,   7.27129729e+02],
                        [6.16759220e+02,   1.22358912e+03],
                        [7.37019649e+02,   1.60499636e+03],
                        [9.37950901e+02,   1.66971846e+03],
                        [1.09292588e+03,   1.35970016e+03],
                        [1.03004750e+03,   8.27690724e+02]]]
    assert_array_almost_equal(results, expected_result, 5)
    results = four.calc(fast=False)
    assert_array_almost_equal(results, expected_result, 5)
Esempio n. 4
0
def test_Fourier_two_atoms():
    atom = Structure(symbols=['C', 'O'], positions=[(0, 0, 0), (1, 0, 0)])
    four = Fourier()
    four.grid.bins = [21, 2]
    four.grid.set_corners(lr=[2.0, 0.0, 0.0])
    four.structure = atom

    expected_result = [155.08717156, 140.34558984, 101.75162784,
                       54.04686728, 15.45290528, 0.71132356,
                       15.45290528, 54.04686728, 101.75162784,
                       140.34558984, 155.08717156, 140.34558984,
                       101.75162784, 54.04686728, 15.45290528,
                       0.71132356, 15.45290528, 54.04686728,
                       101.75162784, 140.34558984, 155.08717156]

    results = four.calc()
    assert_array_almost_equal(results[:, 0, 0], expected_result)

    results = four.calc(fast=False)
    assert_array_almost_equal(results[:, 0, 0], expected_result)

    four.radiation = 'xray'
    expected_result = [1.95913322e+02, 1.66402201e+02, 1.01484495e+02,
                       4.32239232e+01, 1.19068361e+01, 3.45460097e+00,
                       6.43534873e+00, 1.22093365e+01, 1.64467400e+01,
                       1.77365894e+01, 1.61657550e+01, 1.25362565e+01,
                       8.00992867e+00, 3.83255349e+00, 1.01694147e+00,
                       6.55602457e-02, 8.51717961e-01, 2.71350261e+00,
                       4.72586766e+00, 6.04617986e+00, 6.20124769e+00]

    results = four.calc()
    assert_array_almost_equal(results[:, 0, 0], expected_result)

    results = four.calc(fast=False)
    assert_array_almost_equal(results[:, 0, 0], expected_result)
Esempio n. 5
0
def test_lots():
    import numpy as np
    np.random.seed(42)  # Make random lot selection not random

    structure = Structure(symbols=['C', 'O'], positions=[(0, 0, 0), (0.5, 0, 0)], unitcell=5)
    structure.repeat(5)

    four = Fourier()
    four.grid.bins = [2, 21]
    four.grid.set_corners(lr=[4.0, 0.0, 0.0],
                          ul=[0.0, 2.0, 0.0])
    four.structure = structure
    four.lots = None
    results = four.calc()

    expected_result = [2.42323706e+06, 1.01505872e+06, 1.46887112e-26,
                       1.48095071e+05, 1.16378024e-26, 9.69294822e+04,
                       5.01755975e-26, 1.48095071e+05, 1.35809407e-25,
                       1.01505872e+06, 2.42323706e+06, 1.01505872e+06,
                       6.70205900e-25, 1.48095071e+05, 1.03080955e-25,
                       9.69294822e+04, 5.35400081e-26, 1.48095071e+05,
                       1.77832044e-25, 1.01505872e+06, 2.42323706e+06]
    assert_allclose(results[0, :, 0], expected_result, atol=1e-25)

    four.lots = 3, 3, 3
    four.number_of_lots = 3
    results = four.calc()

    expected_result = [339175.64420172,  202125.69466616,   98663.70718625,
                       61677.5841574,   14394.84088099,   37686.18268908,
                       14394.84088099,   61677.5841574,   98663.70718625,
                       202125.69466616,  339175.64420172,  202125.69466616,
                       98663.70718625,   61677.5841574,   14394.84088099,
                       37686.18268908,   14394.84088099,   61677.5841574,
                       98663.70718625,  202125.69466616,  339175.64420172]
    assert_allclose(results[0, :, 0], expected_result)

    # Random move + average subtraction
    structure.rattle(seed=0)
    four._average = True
    results = four.calc()

    expected_result = [1.63820535e-24, 2.55360350e+05, 2.83431155e+05,
                       5.87063567e+04, 3.06182580e+04, 6.47880007e-03,
                       3.06274940e+04, 5.87242408e+04, 2.83411515e+05,
                       2.55140706e+05, 3.20451398e-01, 2.55556564e+05,
                       2.83427875e+05, 5.86850273e+04, 3.06047773e+04,
                       5.83516439e-02, 3.06324860e+04, 5.87386761e+04,
                       2.83368966e+05, 2.54897708e+05, 1.28156664e+00]
    assert_allclose(results[0, :, 0], expected_result)
Esempio n. 6
0
def test_Fourier_init():
    four = Fourier()
    assert four.radiation == 'neutron'
    assert four.structure is None
    assert four.grid.bins == (101, 101)
    assert_array_equal(four.grid.ll, [0.0, 0.0, 0.0])
    assert_array_equal(four.grid.lr, [1.0, 0.0, 0.0])
    assert_array_equal(four.grid.ul, [0.0, 1.0, 0.0])
    assert_array_equal(four.grid.tl, [0.0, 0.0, 1.0])
Esempio n. 7
0
def test_Fourier_ASE_single_atom():
    pytest.importorskip("ase")
    from ase import Atoms
    atom = Atoms('C2', positions=[(0, 0, 0), (1, 0, 0)])
    four = Fourier()
    four.grid.bins = [21, 2]
    four.grid.lr = [2.0, 0.0, 0.0]
    four.structure = atom
    results = four.calc()
    expected_result = [1.76804890e+02,   1.59921526e+02,   1.15720303e+02,
                       6.10845872e+01,   1.68833647e+01,   6.62912159e-31,
                       1.68833647e+01,   6.10845872e+01,   1.15720303e+02,
                       1.59921526e+02,   1.76804890e+02,   1.59921526e+02,
                       1.15720303e+02,   6.10845872e+01,   1.68833647e+01,
                       5.96620943e-30,   1.68833647e+01,   6.10845872e+01,
                       1.15720303e+02,   1.59921526e+02,   1.76804890e+02]
    assert_array_almost_equal(results[:, 0], expected_result)
    results = four.calc(fast=False)
    assert_array_almost_equal(results[:, 0], expected_result)
Esempio n. 8
0
def test_magnetic():
    import numpy as np
    structure = Structure(symbols=['V']*25, positions=np.tile([0, 0, 0], (25, 1)),
                          unitcell=5, ncells=(5, 5, 1, 1), magnetic_moments=True)

    structure.magmons.spinx = 0
    structure.magmons.spiny = 0
    structure.magmons.spinz = 1

    four = Fourier()
    four.grid.bins = [11, 2]
    four.grid.set_corners(lr=[1.0, 0.0, 0.0],
                          ul=[0.0, 0.5, 0.0])
    four.structure = structure

    expected_result = [[np.nan, 2.35532329e+01],
                       [2.61228206e+02, 9.84260348e+00],
                       [3.17478196e-30, 9.20193707e-32],
                       [3.73888434e+01, 1.40890591e+00],
                       [2.37298181e-30, 1.11786157e-31],
                       [2.35532329e+01, 8.87748695e-01],
                       [1.31222666e-29, 3.94457437e-31],
                       [3.39894870e+01, 1.28153986e+00],
                       [2.85072172e-29, 4.81542884e-31],
                       [2.16003995e+02, 8.14786919e+00],
                       [4.93162100e+02, 1.86074202e+01]]

    results = four.calc(mag=True)
    assert_array_almost_equal(results[:, :, 0], expected_result)
    results = four.calc(mag=True, fast=False)
    assert_array_almost_equal(results[:, :, 0], expected_result)

    structure.magmons.spinz[1::2] = -1

    expected_result = [[np.nan, 2.35532329e+01],
                       [0.00000000e+00, 8.57288301e-31],
                       [1.51357800e+00, 3.56445825e+01],
                       [9.44108954e-31, 1.93226489e-29],
                       [1.00804339e+01, 2.37433966e+02],
                       [2.35532329e+01, 5.54842934e+02],
                       [9.61093588e+00, 2.26440052e+02],
                       [6.69067886e-31, 1.98917474e-29],
                       [1.31214770e+00, 3.09272932e+01],
                       [2.94920500e-31, 8.84219640e-30],
                       [7.89059360e-01, 1.86074202e+01]]

    results = four.calc(mag=True)
    assert_array_almost_equal(results[:, :, 0], expected_result)
    results = four.calc(mag=True, fast=False)
    assert_array_almost_equal(results[:, :, 0], expected_result)
Esempio n. 9
0
def test_Foutier_C_Ring():
    cnt = Structure(symbols=['C']*12, unitcell=(8.02140913, 8.02140913, 2.42487113),
                    positions=[[0.75,       0.5,        0.25],
                               [0.69151111, 0.6606969,  0.25],
                               [0.625,      0.71650635, 0.75],
                               [0.45658796, 0.74620194, 0.75],
                               [0.375,      0.71650635, 0.25],
                               [0.26507684, 0.58550504, 0.25],
                               [0.25,       0.5,        0.75],
                               [0.30848889, 0.3393031,  0.75],
                               [0.375,      0.28349365, 0.25],
                               [0.54341204, 0.25379806, 0.25],
                               [0.625,      0.28349365, 0.75],
                               [0.73492316, 0.41449496, 0.75]])
    four = Fourier()
    four.grid.bins = [6, 6, 2]
    four.structure = cnt
    four.grid.set_corners(ll=[0.0, 0.0, 0.0],
                          lr=[2.0, 0.0, 0.0],
                          ul=[0.0, 2.0, 0.0],
                          tl=[0.0, 0.0, 0.5])
    expected_result = [[[6.36497605e+03, 3.18248802e+03],
                        [5.19826149e+03, 2.62430530e+03],
                        [2.62792897e+03, 1.44984089e+03],
                        [5.38964665e+02, 4.77287745e+02],
                        [1.77345695e+01, 5.96777314e+01],
                        [5.61330978e+02, 2.13239655e-01]],
                       [[5.19824633e+03, 2.58464387e+03],
                        [4.19804025e+03, 2.08045238e+03],
                        [2.02566353e+03, 1.13472923e+03],
                        [3.43108617e+02, 3.82910389e+02],
                        [4.89415326e+01, 6.29938444e+01],
                        [5.92919274e+02, 4.58411202e+00]],
                       [[2.62726845e+03, 1.23823941e+03],
                        [2.02670888e+03, 8.48260647e+02],
                        [7.91958685e+02, 3.42380363e+02],
                        [3.33463043e+01, 5.27598283e+01],
                        [2.30729879e+02, 5.28798082e-01],
                        [7.98830713e+02, 8.58597753e+00]],
                       [[5.35796488e+02, 1.75090464e+02],
                        [3.44314604e+02, 3.58530907e+01],
                        [3.54586437e+01, 1.01212697e+01],
                        [1.11489247e+02, 1.22750858e+02],
                        [6.43708532e+02, 2.21345294e+02],
                        [1.09996108e+03, 1.70969791e+02]],
                       [[2.07782598e+01, 8.83691594e+01],
                        [4.95216290e+01, 3.06779385e+02],
                        [2.12904313e+02, 6.20110108e+02],
                        [6.00173980e+02, 8.55469020e+02],
                        [1.07400513e+03, 8.34634177e+02],
                        [1.26315718e+03, 5.49870647e+02]],
                       [[6.17667281e+02, 7.27129707e+02],
                        [6.16759232e+02, 1.22358914e+03],
                        [7.37019696e+02, 1.60499641e+03],
                        [9.37950983e+02, 1.66971853e+03],
                        [1.09292598e+03, 1.35970021e+03],
                        [1.03004758e+03, 8.27690735e+02]]]
    results = four.calc()
    assert_array_almost_equal(results, expected_result, 5)
    results = four.calc(fast=False)
    assert_array_almost_equal(results, expected_result, 5)

    four.radiation = 'xray'

    expected_result = [[[5.17915927e+03, 1.84520226e+03],
                        [4.14079683e+03, 1.49403563e+03],
                        [1.96612817e+03, 7.82168405e+02],
                        [3.64548911e+02, 2.36155155e+02],
                        [1.04927182e+01, 2.63280310e+01],
                        [2.82969419e+02, 8.20150027e-02]],
                       [[4.14078476e+03, 1.47145610e+03],
                        [3.27428489e+03, 1.16317490e+03],
                        [1.48473429e+03, 6.01482538e+02],
                        [2.27561202e+02, 1.86296052e+02],
                        [2.84272873e+01, 2.73553635e+01],
                        [2.93854508e+02, 1.73761591e+00]],
                       [[1.96563399e+03, 6.68012436e+02],
                        [1.48550048e+03, 4.49634990e+02],
                        [5.46390863e+02, 1.72307091e+02],
                        [2.08728021e+01, 2.44270522e+01],
                        [1.26929387e+02, 2.19188322e-01],
                        [3.76562850e+02, 3.11777720e+00]],
                       [[3.62405996e+02, 8.66322593e+01],
                        [2.28361053e+02, 1.74434788e+01],
                        [2.21950009e+01, 4.68600433e+00],
                        [6.35847874e+01, 5.24769977e+01],
                        [3.24496306e+02, 8.51325467e+01],
                        [4.78399877e+02, 5.79418881e+01]],
                       [[1.22935279e+01, 3.89858313e+01],
                        [2.87642316e+01, 1.33220343e+02],
                        [1.17123166e+02, 2.57037419e+02],
                        [3.02550346e+02, 3.29025546e+02],
                        [4.82189861e+02, 2.90671251e+02],
                        [4.93736251e+02, 1.70033011e+02]],
                       [[3.11368797e+02, 2.79664422e+02],
                        [3.05669741e+02, 4.63803665e+02],
                        [3.47425597e+02, 5.82813221e+02],
                        [4.07937737e+02, 5.65869815e+02],
                        [4.27197174e+02, 4.20451470e+02],
                        [3.54323772e+02, 2.29315232e+02]]]

    results = four.calc()
    assert_array_almost_equal(results, expected_result, 5)
    results = four.calc(fast=False)
    assert_array_almost_equal(results, expected_result, 5)