Generate Local Operators

The first step of using QSpace is to identify which symmetries in the system are to be exploited. Then we generate the tensors that respect such symmetries. The tensors for a local space (e.g., one lattice site) are generated by getLocalSpace. For example, we obtain the operators that act on a spin-1/2 site and respect SU(2) spin symmetry:

clear
[S,I] = getLocalSpace('Spin', 1/2);
S  % spin operator
S =
   Q: 1x [1 1 1] having 'SU2',   operator,    { , * , * }
data: 3-D double (112 bytes)     1 x 1 x 1 => 2 x 2 x 3

   1. 1x1x1      | 2x2x3     [ 1 ; 1 ; 2 ]       -1.225
I  % struct that contains various information
I = struct with fields:
    Sloc: 0.5000
     SOP: [1x1 struct]
     sym: 'SpinS'
       U: [2x2 double]
      Is: [1x1 struct]
       E: [1x1 QSpace]
I.E  % Identity operator
ans =
    Q: 1x [1 1] having 'SU2',   { , * }
 data: 2-D double (112 bytes)    1 x 1 => 2 x 2

    1. 1x1        | 2x2        [ 1 ; 1 ]         1.  {1.414}

Meaning of the displayed information will be explained in the next section.

On the other hand, the operators for one spinful fermionic site, which respect U(1) charge and SU(2) spin symmetries, are generated by:

[F,Z,S,I] = getLocalSpace('FermionS', 'Acharge,SU2spin','NC', 1);

Here 'FermionS' means spinful fermion, 'Acharge,SU2spin' means U(1) charge (A from Abelian) and SU(2) spin symmetries, and 'NC',1' means that there is only one channel (NC from number of channels).

F % particle annihilation operator
F =
    Q: 2x [2 2 2] having 'A,SU2',   operator   { , * , * }
 data: 3-D double (224 bytes)    2 x 2 x 1 => 3 x 3 x 2

    1. 1x1x1        | 1x2x2        [ -1 0 ; 0 1 ; -1 1 ]           -1.414
    2. 1x1x1        | 2x1x2        [  0 1 ; 1 0 ; -1 1 ]           -1.414
Z % fermionic sign operator
Z =
    Q: 3x [2 2] having 'A,SU2',      { , * }
 data: 2-D double (336 bytes)    3 x 3 => 4 x 4

    1. 1x1        | 1x1        [ -1 0 ; -1 0 ]           1
    2. 1x1        | 2x2        [  0 1 ; 0 1 ]           -1 (1.414)     3. 1x1        | 1x1        [ 1 0 ; 1 0 ]           1
S % spin operator
S =
    Q: 1x [2 2 2] having 'A,SU2',     operator,   { , * , * }
 data: 3-D double (112 bytes)    1 x 1 x 1 => 2 x 2 x 3

    1. 1x1x1        | 2x2x3        [ 0 1 ; 0 1 ; 0 2 ]           -1.225
I.E % identity operator
ans =
    Q: 3x [2 2] having 'A,SU2',      { , * }
 data: 2-D double (336 bytes)    3 x 3 => 4 x 4

    1. 1x1        | 1x1        [ -1 0 ; -1 0 ]          1
    2. 1x1        | 2x2        [  0 1 ; 0 1 ]           1 (1.414)
    3. 1x1        | 1x1        [ 1 0 ; 1 0 ]            1

F and S are rank-3 tensors, since they change charge and spin quantum numbers. On the other hand, Zand I.E are rank-2 tensors, since they do not change quantum numbers; that is, they are scalars in terms of the Clebsch-Gordan coefficients.

getLocalSpace can deal with general situations. For details, type in the MATLAB command window: 'help getLocalSpace'.