Welcome to LatticeTools.jl

Overview

LatticeTools.jl is a Julia package for defining lattices and performing space symmetry analysis on them, useful for creating and solving quantum Hamiltonians.

Features

  • Unit cell definition: Supports definition of unit cells with arbitrary shape in arbitrary dimension and with basis sites. Orbitals within a site is not yet implemented.
  • Lattice definition: Supports definition of a lattice with a unit cell with periodic boundary condition.
  • Momentum space: Provides methods for transformations between real space and momentum space.
  • Symmetry analysis: Supports group representation theoretical analysis on translation and point symmetry. Currently, only symmorphic space groups are supported.

Installation

LatticeTools is currently not included in Julia's default package registry. To install, add the package registry KyugminLeeRegistry and then install the package:

(@v1.5) pkg> registry add https://github.com/kyungminlee/KyungminLeeRegistry.git
(@v1.5) pkg> add LatticeTools

Quick Example

using LatticeTools

unitcell = makeunitcell([1.0 0.0; 0.0 1.0]; SiteType=String)
addsite!(unitcell, "Ox", FractCoord([0,0], [0.5, 0.0]))
addsite!(unitcell, "Oy", FractCoord([0,0], [0.0, 0.5]))
lattice = makelattice(unitcell, [4 0; 0 4]);
tsym = TranslationSymmetry(lattice);
psym = project(PointSymmetryDatabase.get(13), [1 0 0; 0 1 0]);

println("Irreps and Little Groups")
println("------------------------")
for tsic in get_irrep_components(tsym)
    idx = tsic.irrep_index
    kf = tsym.fractional_momenta[idx]
    k = lattice.unitcell.reducedreciprocallatticevectors * kf
    psym_little = little_symmetry(tsym, idx, psym)
    println("- irrep_index: $(idx)")
    println("  momentum: $(k)")
    println("  little_point_group: { name: \"$(psym_little.hermann_mauguin)\", order: $(group_order(psym_little)) }")
    println("  is_psym_compatible: $(iscompatible(tsym, idx, psym))")
    println("  is_psym_little_compatible: $(iscompatible(tsym, idx, psym_little))")
end
Irreps and Little Groups
------------------------
- irrep_index: 1
  momentum: [0.0, 0.0]
  little_point_group: { name: "4mm", order: 8 }
  is_psym_compatible: true
  is_psym_little_compatible: true
- irrep_index: 2
  momentum: [0.25, 0.0]
  little_point_group: { name: "m", order: 2 }
  is_psym_compatible: false
  is_psym_little_compatible: true
- irrep_index: 3
  momentum: [0.5, 0.0]
  little_point_group: { name: "mm2", order: 4 }
  is_psym_compatible: false
  is_psym_little_compatible: true
- irrep_index: 4
  momentum: [0.75, 0.0]
  little_point_group: { name: "m", order: 2 }
  is_psym_compatible: false
  is_psym_little_compatible: true
- irrep_index: 5
  momentum: [0.0, 0.25]
  little_point_group: { name: "m", order: 2 }
  is_psym_compatible: false
  is_psym_little_compatible: true
- irrep_index: 6
  momentum: [0.25, 0.25]
  little_point_group: { name: "m", order: 2 }
  is_psym_compatible: false
  is_psym_little_compatible: true
- irrep_index: 7
  momentum: [0.5, 0.25]
  little_point_group: { name: "m", order: 2 }
  is_psym_compatible: false
  is_psym_little_compatible: true
- irrep_index: 8
  momentum: [0.75, 0.25]
  little_point_group: { name: "m", order: 2 }
  is_psym_compatible: false
  is_psym_little_compatible: true
- irrep_index: 9
  momentum: [0.0, 0.5]
  little_point_group: { name: "mm2", order: 4 }
  is_psym_compatible: false
  is_psym_little_compatible: true
- irrep_index: 10
  momentum: [0.25, 0.5]
  little_point_group: { name: "m", order: 2 }
  is_psym_compatible: false
  is_psym_little_compatible: true
- irrep_index: 11
  momentum: [0.5, 0.5]
  little_point_group: { name: "4mm", order: 8 }
  is_psym_compatible: true
  is_psym_little_compatible: true
- irrep_index: 12
  momentum: [0.75, 0.5]
  little_point_group: { name: "m", order: 2 }
  is_psym_compatible: false
  is_psym_little_compatible: true
- irrep_index: 13
  momentum: [0.0, 0.75]
  little_point_group: { name: "m", order: 2 }
  is_psym_compatible: false
  is_psym_little_compatible: true
- irrep_index: 14
  momentum: [0.25, 0.75]
  little_point_group: { name: "m", order: 2 }
  is_psym_compatible: false
  is_psym_little_compatible: true
- irrep_index: 15
  momentum: [0.5, 0.75]
  little_point_group: { name: "m", order: 2 }
  is_psym_compatible: false
  is_psym_little_compatible: true
- irrep_index: 16
  momentum: [0.75, 0.75]
  little_point_group: { name: "m", order: 2 }
  is_psym_compatible: false
  is_psym_little_compatible: true