Popularity
3 Stars
Updated Last
1 Year Ago
Started In
May 2018

LatticeVis

Build Status Coverage Status codecov.io

Install the package with

Pkg.clone("git://github.com/ffreyer/LatticeVis.jl.git")

This package offers a way to create lattices from unit cells, that is a combination of basis positions and translation vectors. The dimensionality of the lattice can be choosen freely, as can the number of neighbor orders (i.e. first and second for 2).

A lattice can be created with Lattice(name_of_lattice, Ls=(Lx, Ly)), e.g. Lattice(honeycomb, Ls=(8, 6)). For this name_of_lattice has to be implemented as a ::UnitCell. Additional unit cells can be implemented fairly easily, see UnitCell.jl. They can also be passed by value, e.g. Lattice(honeycomb(), L=3).

A simple 2D plot can be generated with plot(lattice_object) where lattice_object is the Graph returned from Lattice.

l = Lattice(honeycomb)
plot(l)

Implemented 2D UnitCells:

  • square
  • triangle
  • honeycomb

Implemented 3D UnitCells

  • sc
  • bcc
  • fcc
  • diamond

Each UnitCell constructor can take the keyword arguments:

  • pos::Point{2, T} = Point{2}(0.): Starting position for this lattice.
  • a::T = 1.0: Scaling along the first lattice vector.
  • b::T = 1.0: Scaling along the second lattice vector.
  • isa::Symbol = :primitive: Lattice shape to use (:cubic or :primitive)

Lattice has the keyword arguments:

  • L::Int64 = 8: The size of the lattice
  • Ls::NTuple{D, Int64} = (L, ..., L): The size of the lattice in D dimensions.
  • do_periodic::Bool = true: Generate lattice with periodic bonds.
  • N_neighbors::Int64 = 1: The number neighbor levels used.
  • nodetype::Type{N} = StandardSite: Type of Node used to construct the lattice.
  • edgetype::Type{E} = StandardBond: Type of Edge used to construct the lattice.
  • graphtype::Type{G} = StandardGraph: Type of Graph used to construct the lattice.

where nodetype, edgetype and graphtype allow for custom nodes, edges and/or graph types to be used in the generation of a lattice. For this, the custom types must inherit from AbstractNode, AbstractEdge and AbstractGraph respectively, and implement fitting constructors. See LatticeGraph.jl.