Ejemplo n.º 1
0
def tensors_scalarproduct(dec_x, dec_y, dec_z, tilt_x, tilt_y, tilt_z,
                          directions1, directions2, tensor1, tensor2):
    """
    Vectors/tensors have same contractions in different coordinate systems.
    """
    system = LocalCoordinates(name="1",
                              decx=100.*(2.*dec_x-1.),
                              decy=100.*(2.*dec_y-1.),
                              decz=100.*(2.*dec_z-1.),
                              tiltx=2.*math.pi*tilt_x,
                              tilty=2.*math.pi*tilt_y,
                              tiltz=2.*math.pi*tilt_z)
    global_directions1 = system.returnLocalToGlobalDirections(directions1)
    global_directions2 = system.returnLocalToGlobalDirections(directions2)
    global_tensor1 = system.returnLocalToGlobalTensors(tensor1)
    global_tensor2 = system.returnLocalToGlobalTensors(tensor2)

    # check whether a transformation between coordinate
    # systems changes indeed the components
    # assert np.any(t1glob - t1loc != 0) FIXME: currently breaks
    # assert np.any(t2glob - t2loc != 0) FIXME: currently breaks
    # assert np.any(v1glob - v1loc != 0) FIXME: currently breaks
    # assert np.any(v2glob - v2loc != 0) FIXME: currently breaks

    # test trace of tensor
    assert np.allclose((np.trace(global_tensor1, axis1=0, axis2=1)-
                        np.trace(tensor1, axis1=0, axis2=1)),
                       0)
    # test t1 t2 tensor contraction
    assert np.allclose((np.einsum('ij...,ij...',
                                  global_tensor1, global_tensor2)-
                        np.einsum('ij...,ij...', tensor1, tensor2)),
                       0)
    # test v1 t1 v2
    assert np.allclose((np.einsum('i...,ij...,j...',
                                  global_directions1,
                                  global_tensor1,
                                  global_directions2)-
                        np.einsum('i...,ij...,j...',
                                  directions1,
                                  tensor1,
                                  directions2)),
                       0)
    # test v1 t1 t2 v2
    assert np.allclose((np.einsum('i...,ij...,jk...,k...',
                                  global_directions1,
                                  global_tensor1,
                                  global_tensor2,
                                  global_directions2)-
                        np.einsum('i...,ij...,jk...,k...',
                                  directions1,
                                  tensor1,
                                  tensor2,
                                  directions2)),
                       0)
Ejemplo n.º 2
0
def transform_directions(dec_x, dec_y, dec_z, tilt_x, tilt_y, tilt_z,
                         local_directions):
    """
    Sequential local/global and back transformation yields original vector.
    """
    system = LocalCoordinates(name="1",
                              decx=100. * (2. * dec_x - 1.),
                              decy=100. * (2. * dec_y - 1.),
                              decz=100. * (2. * dec_z - 1.),
                              tiltx=2. * math.pi * tilt_x,
                              tilty=2. * math.pi * tilt_y,
                              tiltz=2. * math.pi * tilt_z)
    global_directions = system.returnLocalToGlobalDirections(local_directions)
    local_directions2 = system.returnGlobalToLocalDirections(global_directions)
    assert np.allclose(local_directions2 - local_directions, 0)
Ejemplo n.º 3
0
def transform_directions(dec_x, dec_y, dec_z, tilt_x, tilt_y, tilt_z,
                         local_directions):
    """
    Sequential local/global and back transformation yields original vector.
    """
    system = LocalCoordinates(name="1",
                              decx=100.*(2.*dec_x-1.),
                              decy=100.*(2.*dec_y-1.),
                              decz=100.*(2.*dec_z-1.),
                              tiltx=2.*math.pi*tilt_x,
                              tilty=2.*math.pi*tilt_y,
                              tiltz=2.*math.pi*tilt_z)
    global_directions = system.returnLocalToGlobalDirections(local_directions)
    local_directions2 = system.returnGlobalToLocalDirections(global_directions)
    assert np.allclose(local_directions2-local_directions, 0)
Ejemplo n.º 4
0
def directions_scalarproduct(dec_x, dec_y, dec_z, tilt_x, tilt_y, tilt_z,
                             local1, local2):
    """
    Two vectors have same scalar product in two different coordinate systems.
    """
    system = LocalCoordinates(name="1",
                              decx=100. * (2. * dec_x - 1.),
                              decy=100. * (2. * dec_y - 1.),
                              decz=100. * (2. * dec_z - 1.),
                              tiltx=2. * math.pi * tilt_x,
                              tilty=2. * math.pi * tilt_y,
                              tiltz=2. * math.pi * tilt_z)
    global1 = system.returnLocalToGlobalDirections(local1)
    global2 = system.returnLocalToGlobalDirections(local2)
    scalarproduct_local = np.einsum('i...,i...', local1, local2)
    scalarproduct_global = np.einsum('i...,i...', global1, global2)
    assert np.allclose(scalarproduct_local - scalarproduct_global, 0)
Ejemplo n.º 5
0
def directions_scalarproduct(dec_x, dec_y, dec_z, tilt_x, tilt_y, tilt_z,
                             local1, local2):
    """
    Two vectors have same scalar product in two different coordinate systems.
    """
    system = LocalCoordinates(name="1",
                              decx=100.*(2.*dec_x-1.),
                              decy=100.*(2.*dec_y-1.),
                              decz=100.*(2.*dec_z-1.),
                              tiltx=2.*math.pi*tilt_x,
                              tilty=2.*math.pi*tilt_y,
                              tiltz=2.*math.pi*tilt_z)
    global1 = system.returnLocalToGlobalDirections(local1)
    global2 = system.returnLocalToGlobalDirections(local2)
    scalarproduct_local = np.einsum('i...,i...', local1, local2)
    scalarproduct_global = np.einsum('i...,i...', global1, global2)
    assert np.allclose(scalarproduct_local-scalarproduct_global, 0)
Ejemplo n.º 6
0
def tensors_scalarproduct(dec_x, dec_y, dec_z, tilt_x, tilt_y, tilt_z,
                          directions1, directions2, tensor1, tensor2):
    """
    Vectors/tensors have same contractions in different coordinate systems.
    """
    system = LocalCoordinates(name="1",
                              decx=100. * (2. * dec_x - 1.),
                              decy=100. * (2. * dec_y - 1.),
                              decz=100. * (2. * dec_z - 1.),
                              tiltx=2. * math.pi * tilt_x,
                              tilty=2. * math.pi * tilt_y,
                              tiltz=2. * math.pi * tilt_z)
    global_directions1 = system.returnLocalToGlobalDirections(directions1)
    global_directions2 = system.returnLocalToGlobalDirections(directions2)
    global_tensor1 = system.returnLocalToGlobalTensors(tensor1)
    global_tensor2 = system.returnLocalToGlobalTensors(tensor2)

    # check whether a transformation between coordinate
    # systems changes indeed the components
    # assert np.any(t1glob - t1loc != 0) FIXME: currently breaks
    # assert np.any(t2glob - t2loc != 0) FIXME: currently breaks
    # assert np.any(v1glob - v1loc != 0) FIXME: currently breaks
    # assert np.any(v2glob - v2loc != 0) FIXME: currently breaks

    # test trace of tensor
    assert np.allclose((np.trace(global_tensor1, axis1=0, axis2=1) -
                        np.trace(tensor1, axis1=0, axis2=1)), 0)
    # test t1 t2 tensor contraction
    assert np.allclose(
        (np.einsum('ij...,ij...', global_tensor1, global_tensor2) -
         np.einsum('ij...,ij...', tensor1, tensor2)), 0)
    # test v1 t1 v2
    assert np.allclose(
        (np.einsum('i...,ij...,j...', global_directions1, global_tensor1,
                   global_directions2) -
         np.einsum('i...,ij...,j...', directions1, tensor1, directions2)), 0)
    # test v1 t1 t2 v2
    assert np.allclose(
        (np.einsum('i...,ij...,jk...,k...', global_directions1, global_tensor1,
                   global_tensor2, global_directions2) -
         np.einsum('i...,ij...,jk...,k...', directions1, tensor1, tensor2,
                   directions2)), 0)