예제 #1
0
파일: mdfile.py 프로젝트: wwmeng/gosam
def get_orthorhombic_pbc(full_pbc):
    """\
    the input is matrix 3x3, the output is diagonal.
    Non-diagonal elements must be zero.
    """
    if full_pbc is None or len(full_pbc) == 0:
        raise ValueError("no PBC")
    assert is_diagonal(numpy.array(full_pbc))
    return numpy.diagonal(full_pbc)
예제 #2
0
파일: mdfile.py 프로젝트: hoang6/gosam
def get_orthorhombic_pbc(full_pbc):
    """\
    the input is matrix 3x3, the output is diagonal.
    Non-diagonal elements must be zero.
    """
    if full_pbc is None or len(full_pbc) == 0:
        raise ValueError("no PBC")
    assert is_diagonal(numpy.array(full_pbc))
    return numpy.diagonal(full_pbc)
예제 #3
0
파일: mdprim.py 프로젝트: hoang6/gosam
 def __init__(self, atoms, r, pbc=None):
     self.atoms = atoms
     if pbc is not None:
         assert rotmat.is_diagonal(pbc)
         self.box_d = self.pbc = pbc.diagonal()
     else:
         box_min, box_max = self._find_containing_box()
         self.box_d = box_max - box_min
         self.pbc = None
     self._make_cells(r)
예제 #4
0
파일: model.py 프로젝트: hoang6/gosam
def _get_orthorhombic_pbc(m):
    """\
    the input is matrix 3x3, the output is diagonal.
    Distorts the input matrix such that the output
    is orthorhombic with the same volume as the
    space defined by the input matrix.
    """
    if is_diagonal(m):
        return m
    else:
        # x, y, z === unit vector in orthogonal cartesian space
        x, y, z = numpy.identity(3)
        # xi, yi, zi === initial matrix (m)
        xi, yi, zi = m
        # xf, yf, zf === final matrix (orthorhombic matrix)
        #
        # rotate full_pbc to make xi colinear with x
        angle = -1.0*numpy.sign(xi[0])*math.acos(xi[0]/linalg.norm(xi))
        ortho = numpy.dot(m, rodrigues(z, angle))
        # yf (zf) is the projection of the rotated yi (zi) onto y (z)
        ortho = numpy.diag(numpy.diagonal(ortho))
        return ortho
예제 #5
0
파일: model.py 프로젝트: wwmeng/gosam
def _get_orthorhombic_pbc(m):
    """\
    the input is matrix 3x3, the output is diagonal.
    Distorts the input matrix such that the output
    is orthorhombic with the same volume as the
    space defined by the input matrix.
    """
    if is_diagonal(m):
        return m
    else:
        # x, y, z === unit vector in orthogonal cartesian space
        x, y, z = numpy.identity(3)
        # xi, yi, zi === initial matrix (m)
        xi, yi, zi = m
        # xf, yf, zf === final matrix (orthorhombic matrix)
        #
        # rotate full_pbc to make xi colinear with x
        angle = -1.0 * numpy.sign(xi[0]) * math.acos(xi[0] / linalg.norm(xi))
        ortho = numpy.dot(m, rodrigues(z, angle))
        # yf (zf) is the projection of the rotated yi (zi) onto y (z)
        ortho = numpy.diag(numpy.diagonal(ortho))
        return ortho
예제 #6
0
파일: model.py 프로젝트: hoang6/gosam
 def get_atoms_to_be_removed(self, atoms, distance):
     assert rotmat.is_diagonal(self.pbc)
     cm = mdprim.CellMethod(atoms, distance, self.pbc)
     return cm.get_atoms_to_remove()
예제 #7
0
파일: model.py 프로젝트: wwmeng/gosam
 def get_atoms_to_be_removed(self, atoms, distance):
     assert rotmat.is_diagonal(self.pbc)
     cm = mdprim.CellMethod(atoms, distance, self.pbc)
     return cm.get_atoms_to_remove()