Beispiel #1
0
def get_InterpolationData_object(material):
    docs_dir = os.path.dirname(os.path.abspath(__file__))
    try:
        return InterpolationData.from_castep(path=docs_dir, seedname=material)
    except FileNotFoundError:
        print('{} not found in {}. Fetching remote content.'.format(
            material, docs_dir))
    return fetch_InterpolationData_object(material)
Beispiel #2
0
 def setUp(self):
     self.seedname = 'quartz'
     self.path = os.path.join('data', 'interpolation', 'quartz')
     self.data = InterpolationData.from_castep(self.seedname,
                                               path=self.path)
     qpts = np.loadtxt(os.path.join('data', 'qgrid_444.txt'))
     self.data.calculate_fine_phonons(qpts, asr='reciprocal')
     self.dw_path = os.path.join('data', 'dw_factor', 'quartz')
Beispiel #3
0
 def setUp(self):
     self.seedname = 'La2Zr2O7'
     phonon_path = 'data'
     self.interpolation_path = os.path.join('data', 'interpolation', 'LZO')
     self.sqw_path = os.path.join('data', 'sqw_map')
     pdata = PhononData.from_castep(self.seedname, path=phonon_path)
     self.data = InterpolationData.from_castep(self.seedname,
                                               path=self.interpolation_path)
     self.data.calculate_fine_phonons(pdata.qpts, asr='realspace')
     self.scattering_lengths = {'La': 8.24, 'Zr': 7.16, 'O': 5.803}
     self.ebins = np.arange(0, 100, 1.)
def fetch_InterpolationData_object(material):
    base_url = "https://raw.githubusercontent.com/g5t/brille/master/docs/tutorials"
    file_to_fetch = material + ".castep_bin"
    with tempfile.TemporaryDirectory() as tmp_dir:
        r = requests.get(base_url + "/" + file_to_fetch)
        if not r.ok:
            raise Exception("Fetching {} failed with reason '{}'".format(file_to_fetch, r.reason))
        out_path = Path(tmp_dir, file_to_fetch)
        open(str(out_path), 'wb').write(r.content)
        idata = InterpolationData.from_castep(path=tmp_dir, seedname=material)
    return idata
Beispiel #5
0
def load_interpolation_data(named):
    """Load a data file from the tests folder."""
    b = find_spec('brille')
    if b is None:
        bdir = '.'  # punt! maybe we're in a build directory?
    else:
        bdir = b.submodule_search_locations[0]
    testdir = os.path.join(bdir, '..', 'tests')
    if not os.path.exists(testdir):
        raise Exception('Could not locate the tests directory')
    return InterpolationData(seedname=named, path=testdir)
Beispiel #6
0
def load_interpolation_data(named):
    """Load a data file from the repository tests folder

    Note that this only works if the package is installed via
        python setup.py develop [--user]
    which builds the C++ library and installs it inside of the repository
    structure with simlinks in the usual package location(s).
    """
    test_spec = find_spec('brille')
    brilleroot = test_spec.submodule_search_locations[0]
    seed = os.path.join(brilleroot, '..', 'tests', named)
    return InterpolationData(seed)
Beispiel #7
0
def main():
    parser = get_parser()
    args = parser.parse_args()

    etas = np.arange(args.min, args.max + args.step / 100, args.step)
    t_init = np.zeros(len(etas), dtype=np.float64)
    t_tot = np.zeros(len(etas), dtype=np.float64)

    idata = InterpolationData.from_castep(args.seedname)
    sfmt = '{:20s}'
    tfmt = '{: 3.2f}'
    etafmt = '{: 2.2f}'
    for i, eta in enumerate(etas):
        print(('Results for eta ' + etafmt).format(eta))
        # Time Ewald sum initialisation
        start = time.time()
        idata._dipole_correction_init(eta_scale=eta)
        end = time.time()
        t_init[i] = end - start
        print((sfmt + ': ' + tfmt + ' s').format('Ewald init time', t_init[i]))

        # Time per qpt
        start = time.time()
        for n in range(args.n):
            idata._calculate_dipole_correction(np.array([0.5, 0.5, 0.5]))
        end = time.time()
        t_tot[i] = end - start
        print((sfmt + ': ' + tfmt + ' ms\n').format('Ewald time/qpt',
                                                    t_tot[i] * 1000 / args.n))

    opt = np.argmin(t_tot)
    print('******************************')
    print(('Suggested optimum eta is ' + etafmt).format(etas[opt]))
    print((sfmt + ': ' + tfmt + ' s').format('init time', t_init[opt]))
    print((sfmt + ': ' + tfmt + ' ms\n').format('time/qpt',
                                                t_tot[opt] * 1000 / args.n))
Beispiel #8
0
 def test_empty_idata_raises_exception(self):
     empty_data = InterpolationData.from_castep(self.seedname, self.path)
     self.assertRaises(Exception, empty_data._dw_coeff)
    base_url = "https://raw.githubusercontent.com/g5t/brille/master/docs/tutorials"
    file_to_fetch = material + ".castep_bin"
    with tempfile.TemporaryDirectory() as tmp_dir:
        r = requests.get(base_url + "/" + file_to_fetch)
        if not r.ok:
            raise Exception("Fetching {} failed with reason '{}'".format(file_to_fetch, r.reason))
        out_path = Path(tmp_dir, file_to_fetch)
        open(str(out_path), 'wb').write(r.content)
        idata = InterpolationData.from_castep(path=tmp_dir, seedname=material)
    return idata

def get_InterpolationData_object(material):
	validation_dir = os.path.dirname(os.path.abspath(__file__))
    tutorial_dir = str(Path(validation_dir, '..', 'docs', 'tutorials'))
	try:
		return InterpolationData.from_castep(path=tutorial_dir, seedname=material)
	except FileNotFoundError:
		print('{} not found in {}. Fetching remote content.'.format(material, tutorial_dir))
	return fetch_InterpolationData_object(material)

class PhononEigenvectorRotationValidator(unittest.TestCase):
    """A TestCase object class to validate phonon eigenvector rotation by brille"""

    def test_NaCl(self):
        # fetch and load the NaCl.castep_bin file from the brille repository
        idata = get_InterpolationData_object('NaCl')
        # Do not sort the modes on neighbouring trellis vertices to make comparison with Euphonic easier
        breu = BrEu(idata, sort=False, trellis=True, max_volume=0.1, parallel=False)
        # pick a trellis Q vertex inside the irreducible polyhedron, away from the boundaries:
        q_ir = breu.grid.rlu[6:7] # shape = (1,3)
        # pull together the pointgroup operations
Beispiel #10
0
    def setUp(self):
        # Create both PhononData and InterpolationData objs for testing
        seedname = 'La2Zr2O7'
        ppath = 'data'
        self.pdata = PhononData.from_castep(seedname, path=ppath)
        self.pdata.convert_e_units('1/cm')
        ipath = os.path.join('data', 'interpolation', 'LZO')
        self.idata = InterpolationData.from_castep(seedname, path=ipath)
        self.idata.convert_e_units('1/cm')

        self.expected_reordered_freqs = np.array(
            [[
                65.062447, 65.062447, 70.408176, 76.847761, 76.847761,
                85.664054, 109.121893, 109.121893, 117.920003, 119.363588,
                128.637195, 128.637195, 155.905812, 155.905812, 160.906969,
                170.885818, 172.820917, 174.026075, 178.344487, 183.364621,
                183.364621, 199.25343, 199.25343, 222.992334, 225.274444,
                231.641854, 253.012884, 265.452117, 270.044891, 272.376357,
                272.376357, 275.75891, 299.890562, 299.890562, 315.067652,
                315.067652, 319.909059, 338.929562, 338.929562, 339.067304,
                340.308461, 349.793091, 376.784786, 391.288446, 391.288446,
                396.109935, 408.179774, 408.179774, 410.991152, 421.254131,
                456.215732, 456.215732, 503.360953, 532.789756, 532.789756,
                545.400861, 548.704226, 552.622463, 552.622463, 557.488238,
                560.761581, 560.761581, 618.721858, 734.650232, 739.200593,
                739.200593
            ],
             [
                 62.001197, 62.001197, 67.432601, 70.911126, 70.911126,
                 87.435181, 109.893289, 109.893289, 110.930712, 114.6143,
                 129.226412, 129.226412, 150.593502, 150.593502, 148.065107,
                 165.856823, 168.794942, 167.154743, 169.819174, 187.349434,
                 187.349434, 202.003734, 202.003734, 221.329787, 231.797486,
                 228.999412, 259.308314, 264.453017, 279.078288, 270.15176,
                 270.15176, 278.861064, 300.349651, 300.349651, 311.929653,
                 311.929653, 318.251662, 334.967743, 334.967743, 340.747776,
                 338.357732, 356.048074, 372.658152, 395.526156, 395.526156,
                 398.356528, 406.398552, 406.398552, 407.216469, 421.122741,
                 460.527859, 460.527859, 486.346855, 533.694179, 533.694179,
                 544.93361, 549.252501, 550.733812, 550.733812, 558.006939,
                 559.641583, 559.641583, 591.170512, 739.589673, 738.563124,
                 738.563124
             ],
             [
                 55.889266, 55.889266, 64.492348, 66.375741, 66.375741,
                 88.940906, 109.388591, 109.388591, 100.956751, 109.379914,
                 130.017598, 130.017598, 145.579207, 145.579207, 134.563651,
                 161.166842, 164.427227, 159.401681, 161.563336, 190.735683,
                 190.735683, 205.550607, 205.550607, 219.351563, 238.204625,
                 226.878861, 265.686284, 263.148071, 287.722953, 267.983859,
                 267.983859, 281.041577, 299.480498, 299.480498, 308.176127,
                 308.176127, 318.101514, 332.930623, 332.930623, 344.002317,
                 335.480119, 361.930637, 368.350971, 399.050499, 399.050499,
                 399.241143, 404.639113, 404.639113, 400.809087, 420.335936,
                 465.504468, 465.504468, 470.205579, 534.544778, 534.544778,
                 544.501022, 549.755212, 548.80696, 548.80696, 556.193672,
                 558.101279, 558.101279, 565.776342, 741.372005, 737.860626,
                 737.860626
             ],
             [
                 46.935517, 46.935517, 61.690137, 63.177342, 63.177342,
                 90.180632, 107.721223, 107.721223, 86.944159, 104.159787,
                 130.879196, 130.879196, 141.295304, 141.295304, 122.536218,
                 157.146893, 160.037586, 151.613374, 153.750028, 193.160653,
                 193.160653, 209.882364, 209.882364, 215.936117, 244.178665,
                 225.432553, 272.052764, 261.655838, 295.533954, 265.906764,
                 265.906764, 282.006965, 295.142911, 295.142911, 307.16826,
                 307.16826, 319.295877, 332.071847, 332.071847, 348.814514,
                 332.065989, 367.152249, 364.288189, 400.773283, 400.773283,
                 399.790407, 404.068253, 404.068253, 387.165977, 418.829125,
                 470.716023, 470.716023, 460.278318, 535.223077, 535.223077,
                 544.111882, 550.193478, 547.016352, 547.016352, 552.362689,
                 556.261571, 556.261571, 543.678775, 740.965394, 737.162508,
                 737.162508
             ],
             [
                 36.367201, 36.367201, 59.168434, 60.36167, 60.36167,
                 91.154677, 105.37576, 105.37576, 68.755044, 99.446481,
                 131.658334, 131.658334, 138.017877, 138.017877, 113.14576,
                 153.975056, 156.016054, 144.576942, 146.47047, 194.581347,
                 194.581347, 214.716315, 214.716315, 210.473211, 249.235088,
                 224.769091, 278.102009, 260.171794, 302.032435, 263.72796,
                 263.72796, 282.018114, 289.408098, 289.408098, 308.097577,
                 308.097577, 321.241146, 331.659808, 331.659808, 353.492915,
                 328.675778, 371.468173, 362.406897, 399.901709, 399.901709,
                 399.179346, 405.625572, 405.625572, 368.236337, 416.52493,
                 475.665346, 475.665346, 458.944007, 535.667484, 535.667484,
                 543.78033, 550.551048, 545.494533, 545.494533, 547.179463,
                 554.338811, 554.338811, 524.846465, 739.380608, 736.536495,
                 736.536495
             ],
             [
                 24.785718, 24.785718, 57.117299, 57.830885, 57.830885,
                 91.859898, 103.047316, 103.047316, 47.456331, 95.691927,
                 132.248074, 132.248074, 135.79383, 135.79383, 106.389552,
                 151.718169, 152.772977, 138.984268, 139.88209, 195.244028,
                 195.244028, 219.466615, 219.466615, 203.707835, 252.993107,
                 224.615517, 283.248783, 258.912028, 306.841458, 261.246129,
                 261.246129, 281.584343, 284.696598, 284.696598, 309.37963,
                 309.37963, 323.205545, 331.373295, 331.373295, 353.088149,
                 326.000428, 374.686778, 367.331006, 398.738183, 398.738183,
                 398.433921, 407.157219, 407.157219, 349.637392, 413.438689,
                 479.806857, 479.806857, 463.608166, 535.889622, 535.889622,
                 543.524255, 550.815232, 544.325882, 544.325882, 541.757933,
                 552.630089, 552.630089, 508.677347, 737.533584, 736.042236,
                 736.042236
             ],
             [
                 12.555025, 12.555025, 55.757043, 55.972359, 55.972359,
                 92.288749, 101.380298, 101.380298, 24.214202, 93.270077,
                 132.593517, 132.593517, 134.540163, 134.540163, 102.211134,
                 150.378051, 150.665566, 135.38769, 134.747421, 195.473725,
                 195.473725, 223.210107, 223.210107, 197.85154, 255.276828,
                 224.659659, 286.758828, 258.068085, 309.776254, 258.846604,
                 258.846604, 281.147316, 281.874849, 281.874849, 310.385381,
                 310.385381, 324.609898, 331.158402, 331.158402, 351.072968,
                 324.818103, 376.67194, 374.186388, 397.950964, 397.950964,
                 397.878833, 408.114477, 408.114477, 336.37863, 410.112489,
                 482.591747, 482.591747, 471.735469, 535.964134, 535.964134,
                 543.361599, 550.977172, 543.571634, 543.571634, 537.566668,
                 551.451065, 551.451065, 494.626062, 736.133131, 735.72609,
                 735.72609
             ],
             [
                 -0.019621, -0.019621, 55.277927, 55.277927, 55.277927,
                 92.432911, 100.780857, 100.780857, -0.019621, 92.432911,
                 132.696363, 132.696363, 134.147102, 134.147102, 100.780857,
                 149.934817, 149.934817, 134.147102, 132.696363, 195.519690,
                 195.519690, 224.698049, 224.698049, 195.519690, 256.039866,
                 224.698049, 288.011070, 257.771213, 310.763767, 257.771213,
                 257.771213, 280.972846, 280.972846, 280.972846, 310.763767,
                 310.763767, 325.114540, 331.073494, 331.073494, 350.234619,
                 325.114540, 377.342620, 377.342620, 397.677533, 397.677533,
                 397.677533, 408.435923, 408.435923, 331.073494, 408.435923,
                 483.578389, 483.578389, 480.948578, 535.976810, 535.976810,
                 543.305729, 551.031712, 543.305729, 543.305729, 535.976810,
                 551.031712, 551.031712, 483.578389, 735.617369, 735.617369,
                 735.617369
             ],
             [
                 12.555025, 12.555025, 55.757043, 55.972359, 55.972359,
                 92.288749, 101.380298, 101.380298, 24.214202, 93.270077,
                 132.593517, 132.593517, 134.540163, 134.540163, 102.211134,
                 150.378051, 150.665566, 135.38769, 134.747421, 195.473725,
                 195.473725, 223.210107, 223.210107, 197.85154, 255.276828,
                 224.659659, 286.758828, 258.068085, 309.776254, 258.846604,
                 258.846604, 281.147316, 281.874849, 281.874849, 310.385381,
                 310.385381, 324.609898, 331.158402, 331.158402, 351.072968,
                 324.818103, 376.67194, 374.186388, 397.950964, 397.950964,
                 397.878833, 408.114477, 408.114477, 336.37863, 410.112489,
                 482.591747, 482.591747, 471.735469, 535.964134, 535.964134,
                 543.361599, 550.977172, 543.571634, 543.571634, 537.566668,
                 551.451065, 551.451065, 494.626062, 736.133131, 735.72609,
                 735.72609
             ],
             [
                 24.785718, 24.785718, 57.117299, 57.830885, 57.830885,
                 91.859898, 103.047316, 103.047316, 47.456331, 95.691927,
                 132.248074, 132.248074, 135.79383, 135.79383, 106.389552,
                 151.718169, 152.772977, 138.984268, 139.88209, 195.244028,
                 195.244028, 219.466615, 219.466615, 203.707835, 252.993107,
                 224.615517, 283.248783, 258.912028, 306.841458, 261.246129,
                 261.246129, 281.584343, 284.696598, 284.696598, 309.37963,
                 309.37963, 323.205545, 331.373295, 331.373295, 353.088149,
                 326.000428, 374.686778, 367.331006, 398.738183, 398.738183,
                 398.433921, 407.157219, 407.157219, 349.637392, 413.438689,
                 479.806857, 479.806857, 463.608166, 535.889622, 535.889622,
                 543.524255, 550.815232, 544.325882, 544.325882, 541.757933,
                 552.630089, 552.630089, 508.677347, 737.533584, 736.042236,
                 736.042236
             ]])