def Pyrochlore(extent: Sequence[int], *, pbc: Union[bool, Sequence[bool]] = True, **kwargs) -> Lattice: """Constructs a pyrochlore lattice of a given spatial extent. Periodic boundary conditions can also be imposed. Sites are returned at the 16c Wyckoff positions of the FCC lattice ([111]/8, [1 -1 -1]/8, [-1 1 -1]/8, [-1 -1 1]/8, and translations thereof). Arguments: extent: Number of primitive unit cells along each direction, needs to be an array of length 3 pbc: If `True`, the lattice will have periodic boundary conditions (PBC); if `False`, the lattice will have open boundary conditions (OBC). This parameter can also be a list of booleans with same length as the parameter `length`, in which case each dimension will have PBC/OBC depending on the corresponding entry of `pbc`. kwargs: Additional keyword arguments are passed on to the constructor of :ref:`netket.graph.Lattice`. Example: Construct a pyrochlore lattice with 3×3×3 primitive unit cells: >>> from netket.graph import Pyrochlore >>> g = Pyrochlore(extent=[3,3,3]) >>> print(g.n_nodes) 108 """ basis = [[0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]] sites = np.array([[1, 1, 1], [1, 3, 3], [3, 1, 3], [3, 3, 1]]) / 8 # determine if full point group is realised by the simulation box point_group = cubic.Fd3m() if np.all(pbc) and len( set(extent)) == 1 else None return Lattice( basis_vectors=basis, site_offsets=sites, extent=extent, pbc=pbc, point_group=point_group, **kwargs, )
def Diamond(extent: Sequence[int], *, pbc: Union[bool, Sequence[bool]] = True) -> Lattice: """Constructs a diamond lattice of a given spatial extent. Periodic boundary conditions can also be imposed. Sites are returned at the 8a Wyckoff positions of the FCC lattice ([000], [1/4,1/4,1/4], and translations thereof). Arguments: extent: Number of primitive unit cells along each direction, needs to be an array of length 3 pbc: If `True`, the lattice will have periodic boundary conditions (PBC); if `False`, the lattice will have open boundary conditions (OBC). This parameter can also be a list of booleans with same length as the parameter `length`, in which case each dimension will have PBC/OBC depending on the corresponding entry of `pbc`. Example: Construct a diamond lattice with 3×3×3 primitive unit cells: >>> from netket.graph import Diamond >>> g = Diamond(extent=[3,3,3]) >>> print(g.n_nodes) 54 """ basis = [[0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]] sites = [[0, 0, 0], [0.25, 0.25, 0.25]] # determine if full point group is realised by the simulation box point_group = cubic.Fd3m() if np.all(pbc) and len( set(extent)) == 1 else None return Lattice( basis_vectors=basis, site_offsets=sites, extent=extent, pbc=pbc, point_group=point_group, )