def add_frustrated_antiferromagnetism(h,m): """Add frustrated magnetism""" import geometry if h.geometry.sublattice_number==3: g = geometry.kagome_lattice() elif h.geometry.sublattice_number==4: g = geometry.pyrochlore_lattice() import films g = films.geometry_film(g,nz=1) else: raise # not implemented ms = [] for i in range(len(h.geometry.r)): # loop ii = h.geometry.sublattice[i] # index of the sublattice if callable(m): ms.append(-g.r[int(ii)]*m(h.geometry.r[i])) # save this one else: ms.append(-g.r[int(ii)]*m) # save this one h.add_magnetism(ms) # add the magnetization
def get_geometry_film(): """ Create a 0d island""" lattice_name = getbox("lattice") # get the option # lattice_name = builder.get_object("lattice").get_active_text() if lattice_name == "Cubic": geometry_builder = geometry.cubic_lattice elif lattice_name == "Diamond": geometry_builder = geometry.diamond_lattice_minimal elif lattice_name == "Pyrochlore": geometry_builder = geometry.pyrochlore_lattice else: raise g = geometry_builder() # call the geometry import films g = films.geometry_film(g, int(get("thickness"))) # g = g.supercell(nsuper) g.real2fractional() g.fractional2real() g.center() return g
def buckled_honeycomb_lattice(): """Return a buckled honeycomb lattice""" import films g = diamond_lattice_minimal() g = films.geometry_film(g, nz=1) return g
def tetrahedral_lattice(): """Return a single layer of the pyrochlore lattice""" g = pyrochlore_lattice() import films g = films.geometry_film(g, nz=1) return g
from pygra importgeometry import topology import klist import classicalspin import films import ribbon import islands g = geometry.honeycomb_lattice() # generate the geometry g = geometry.triangular_lattice() # generate the geometry g = geometry.pyrochlore_lattice() # generate the geometry #g = geometry.kagome_lattice() # geenrate the geometry #g = geometry.diamond_lattice_minimal() # generate the geometry g = films.geometry_film(g,nz=2) #g = g.remove(len(g.r)-1) #g = ribbon.bulk2ribbon(g,n=10) g = g.supercell(2) #g = islands.get_geometry(name="triangular",n=3) #g.dimensionality = 0 #g.write() #g.write() #g = geometry.kagome_lattice() # geenrate the geometry #g = g.supercell(2) sm = classicalspin.SpinModel(g) # generate a spin model sm.add_heisenberg() # add heisenber exchange #sm.add_field([0.,0.,1.5]) sm.minimize_energy() # minimize Hamiltonian #exit() h = g.get_hamiltonian() # get the Hamiltonian
import sys import os sys.path.append("../../../pygra") # add the pygra library import geometry import numpy as np import hybrid import films import operators g = geometry.diamond_lattice_minimal( ) # get the three dimensional diamond lattice g = films.geometry_film(g, nz=20) # create a film h = g.get_hamiltonian(is_multicell=True) # create hamiltonian def get_hamiltonian(): """Hamiltonian for parameter p""" h = g.get_hamiltonian(is_multicell=True, is_sparse=False) # create hamiltonian def step(z, width=0.00001): """This will yield 0 for z<0 and 1 for z>0""" out = (-np.tanh(z / width) + 1.0) / 2. # this is the interpolator return out h.add_antiferromagnetism(lambda r: 0.7 * step(r[2]), axis=[0., 0., 1.]) h.shift_fermi(lambda r: 1. * (-step(r[2], width=0.0001) + 1.0)) h.add_swave(lambda r: 0.4 * (-step(r[2]) + 1.0)) h.add_kane_mele(0.05) return h