spinspin

◼ spinspin[a, b] returns the spin-spin scalar product (Subscript[S, a])·(Subscript[S, b]) between two S=1/2 spin operators corresponding to the levels described by the operators a and b.
◼ spinspinpm[a, b] returns the \(TraditionalForm\`\(\(S\_\(\(a\)\(+\)\)\) \(S\_\(\(b\)\(-\)\)\)\(\ \)\)\)part of the scalar product.
◼ spinspinmp[a, b] returns the \(TraditionalForm\`\(\(S\_\(\(a\)\(-\)\)\) \(S\_\(\(b\)\(+\)\)\)\(\ \)\)\)part of the scalar product.
◼ spinspinxy[a, b] returns the (Subscript[S, ax]) (Subscript[S, bx]) + (Subscript[S, ay]) (Subscript[S, by])("transversal") part of the scalar product.
◼ spinspinz[a, b] returns the \(TraditionalForm\`\(\(\(S\_az\) 
          S\_bz\ \((\*"""longitudinal\)\*""")\)\(\ \)\)\)part of the scalar product.

◼ Operators a and b must be expressed in a form which excludes the first index (creation/annihilation) and the last index (spin).

◼ See also: spinxyz, spinx, spiny, spinz, spinplus, spinminus, chargecharge.

Further examples

Load sneg and declare c and d to be fermionic operators

<< sneg`sneg`;
snegfermionoperators[c, d];

Verify definitions

spinspin[c[], d[]]
spinspinxy[c[], d[]]
spinspinz[c[], d[]]

    
spinspin[c[], d[]] == spinspinz[c[], d[]] + spinspinxy[c[], d[]] // 
      ExpandAll
1/2 (spinspinpm[c[], d[]] + spinspinmp[c[], d[]]) == 
        spinspinxy[c[], d[]] // ExpandAll

Singlet and triplet states

updo = nc[c[CR, UP], d[CR, DO]];
doup = nc[c[CR, DO], d[CR, UP]];
singlet = 
      nc[(1/(Sqrt[2])) (updo - doup), VACUUM]
triplet = 
      nc[(1/(Sqrt[2])) (updo + doup), VACUUM]
Scd = spinxyz[c[]] + spinxyz[d[]];

      
ssq = inner[Scd, Scd]; 
  
ss = spinspin[c[], d[]];

    
ssq~nc~singlet == 0  // ExpandAll
ss~nc~singlet == -3/4  singlet // 
      ExpandAll

    
ssq~nc~triplet == 1 (1 + 1) triplet // 
      ExpandAll
ss~nc~triplet == 1/4  triplet // ExpandAll

Higher powers of the spin-spin operator

pow[spinspin[c[], d[]], 2] // Expand
pow[spinspin[c[], d[]], 3] // Expand
pow[spinspin[c[], d[]], 4] // Expand