def get_110_surface(monolayers, vacuum=0, constrain_layers = 0)

      # The atoms on a FCC 
      atom1 = Atom.new(0,0,0,self.cation)
      atom2 = Atom.new(self.lattice_const*1/(2*sqrt(2)), self.lattice_const*0.25, 0.0, self.anion)

      # The lattice Vectors
      v1 = Vector[1/sqrt(2), 0.0, 0.0]*self.lattice_const
      v2 = Vector[0.0, 1.0, 0.0]*self.lattice_const
      v3 = Vector[1/(2*sqrt(2)), -0.5, 1/(2*sqrt(2))]*self.lattice_const

      # The miller indices for each primitive cartesian direction
      millerX = Vector[1, -1, 0]
      millerY = Vector[0, 0, 1]
      millerZ = Vector[1, 1, 0]

      # The unit cell
      zb = Geometry.new([atom1, atom2], [v1, v2, v3])
      zb.set_miller_indices(millerX, millerY, millerZ)

      # Repeat the unit cell
      zb = zb.repeat(1,1,monolayers)


      monolayerSep = v3[2]
      if 0 < vacuum
        # Add vacuum
        zb.lattice_vectors[2] = Vector[0, 0, (monolayers-1)*monolayerSep.abs + vacuum.to_f]
        # Move everything into a nice tidy unit cell. 
        zb = zb.correct
      end

      # # Constrain the bottom layers
      zb.atoms.each{|a|
        if (a.z < monolayerSep*constrain_layers)
          a.constrain = ".true."
        end
      }

      
      # Return the completed unit cell
      return zb
    end
def get_110_surface(monolayers, vacuum=0, constrain_layers = 0)

      # The atoms on a FCC 
      atom1 = Atom.new(0,0,0,self.cation)
      atom2 = Atom.new(self.lattice_const*1/(2*sqrt(2)), self.lattice_const*0.25, 0.0, self.anion)

      # The lattice Vectors
      v1 = Vector[1/sqrt(2), 0.0, 0.0]*self.lattice_const
      v2 = Vector[0.0, 1.0, 0.0]*self.lattice_const
      v3 = Vector[1/(2*sqrt(2)), -0.5, 1/(2*sqrt(2))]*self.lattice_const

      # The miller indices for each primitive cartesian direction
      millerX = Vector[1, -1, 0]
      millerY = Vector[0, 0, 1]
      millerZ = Vector[1, 1, 0]

      # The unit cell
      zb = Geometry.new([atom1, atom2], [v1, v2, v3])
      zb.set_miller_indices(millerX, millerY, millerZ)

      # Repeat the unit cell
      zb = zb.repeat(1,1,monolayers)


      monolayerSep = v3[2]
      if 0 < vacuum
        # Add vacuum
        zb.lattice_vectors[2] = Vector[0, 0, (monolayers-1)*monolayerSep.abs + vacuum.to_f]
        # Move everything into a nice tidy unit cell. 
        zb = zb.correct
      end

      # # Constrain the bottom layers
      zb.atoms.each{|a|
        if (a.z < monolayerSep*constrain_layers)
          a.constrain = ".true."
        end
      }

      
      # Return the completed unit cell
      return zb
    end
Return a unit cell for a slab of 110
 specify the number of atomic monolayers
 and the vacuum thickness in angstrom