示例#1
0
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
示例#2
0
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
示例#3
0
def buckled_honeycomb_lattice():
    """Return a buckled honeycomb lattice"""
    import films
    g = diamond_lattice_minimal()
    g = films.geometry_film(g, nz=1)
    return g
示例#4
0
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
示例#5
0


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
示例#6
0
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