Example #1
0
def test_symmetry_moments():
    coordinates, numbers, links, cell, symmetry = get_fake_example()

    # setup rotated multipole moments
    m0 = get_pentagon_moments()
    m00 = m0.copy()
    m01 = rotate_cartesian_moments_all(symmetry.generators[1][:,:3], m0)
    m1 = get_pentagon_moments(get_random_rotation())

    # perturb them in a controlled way
    m00[0] += 0.1
    m01[0] -= 0.1
    m00[1] += 0.1
    m01[2] -= 0.1

    # run analysis
    aim_results = {
        'cartesian_multipoles': np.array([m00, m01, m1]),
    }
    sym_results = symmetry_analysis(coordinates, cell, symmetry, aim_results)

    # check results
    assert len(sym_results) == 1
    stats = sym_results['cartesian_multipoles']
    assert abs(stats[:,0] - [m0, m1]).max() < 1e-10
    assert abs(stats[1,1]).max() < 1e-10
    assert abs(stats[0,1,:2] - np.std([-0.1, 0.1])).max() < 1e-10
    assert abs(stats[0,1,2:]).max() < 1e-10
Example #2
0
def test_rotate_cartesian_moments_general():
    for i in xrange(10):
        rmat = get_rotation_matrix(np.array([1,1,1]), 2.0*np.pi/3)
        m0 = get_pentagon_moments()
        m1 = get_pentagon_moments(rmat)
        m2 = rotate_cartesian_moments(m0, rmat)
        assert abs(m1 - m2).max() < 1e-10
Example #3
0
def test_rotate_cartesian_moments_pentagon_general():
    for i in xrange(10):
        rmat = get_random_rotation()
        m0 = get_pentagon_moments()
        m1 = get_pentagon_moments(rmat)
        m2 = rotate_cartesian_moments_all(rmat, m0)
        assert abs(m1 - m2).max() < 1e-10
Example #4
0
def test_rotate_cartesian_moments_pentagon_general():
    for i in xrange(10):
        rmat = get_random_rotation()
        m0 = get_pentagon_moments()
        m1 = get_pentagon_moments(rmat)
        m2 = rotate_cartesian_moments_all(rmat, m0)
        assert abs(m1 - m2).max() < 1e-10
Example #5
0
def test_symmetry_moments():
    coordinates, numbers, links, cell, symmetry = get_fake_example()

    # setup rotated multipole moments
    m0 = get_pentagon_moments()
    m00 = m0.copy()
    m01 = rotate_cartesian_moments_all(symmetry.generators[1][:, :3], m0)
    m1 = get_pentagon_moments(get_random_rotation())

    # perturb them in a controlled way
    m00[0] += 0.1
    m01[0] -= 0.1
    m00[1] += 0.1
    m01[2] -= 0.1

    # run analysis
    aim_results = {
        'cartesian_multipoles': np.array([m00, m01, m1]),
    }
    sym_results = symmetry_analysis(coordinates, cell, symmetry, aim_results)

    # check results
    assert len(sym_results) == 1
    stats = sym_results['cartesian_multipoles']
    assert abs(stats[:, 0] - [m0, m1]).max() < 1e-10
    assert abs(stats[1, 1]).max() < 1e-10
    assert abs(stats[0, 1, :2] - np.std([-0.1, 0.1])).max() < 1e-10
    assert abs(stats[0, 1, 2:]).max() < 1e-10
Example #6
0
def test_rotate_cartesian_moments_general():
    for i in xrange(10):
        rmat = get_rotation_matrix(np.array([1, 1, 1]), 2.0 * np.pi / 3)
        m0 = get_pentagon_moments()
        m1 = get_pentagon_moments(rmat)
        m2 = rotate_cartesian_moments(m0, rmat)
        assert abs(m1 - m2).max() < 1e-10
Example #7
0
def test_rotate_cartesian_moments_mult():
    for mult in 2, 3, 4, 5, 6, 7:
        axis = np.random.normal(0, 1, 3)
        rmat = get_rotation_matrix(axis, 2.0*np.pi/mult)
        m0 = get_pentagon_moments()
        m1 = get_pentagon_moments()
        for i in xrange(mult):
            m1 = rotate_cartesian_moments(m1, rmat)
        assert abs(m0 - m1).max() < 1e-10
Example #8
0
def test_rotate_cartesian_moments_mult():
    for mult in 2, 3, 4, 5, 6, 7:
        axis = np.random.normal(0, 1, 3)
        rmat = get_rotation_matrix(axis, 2.0 * np.pi / mult)
        m0 = get_pentagon_moments()
        m1 = get_pentagon_moments()
        for i in xrange(mult):
            m1 = rotate_cartesian_moments(m1, rmat)
        assert abs(m0 - m1).max() < 1e-10