Tensors

AngularMomentumAlgebra.OrbitalRadialOverlapType
OrbitalRadialOverlap(a,b)

Represents the radial overlap between the orbitals a and b in a N-body matrix element expansion. This is different from EnergyExpressions.OrbitalOverlap, which represents integration over all coordinates. An OrbitalRadialOverlap might result when integrating over the spin–angular degrees of freedom of a matrix element. As an example, with spin-orbitals on the form

\[\phi_{n\ell m_\ell s m_s}(\spatialspin) = \frac{P_{n\ell m_\ell s m_s}(r)}{r} Y^\ell_m(\theta,\phi) \chi_{m_s}(s), \quad \spatialspin = \{\vec{r},s\},\]

in the spin-restricted case, we have

\[\int\diff{r} \conj{P_{\textrm{1s}_0\alpha}}(r) P_{\textrm{1s}_0\beta}(r) = 1\]

(provided $P$ is normalized) whereas integration over all coordinates (spatial and spin)

\[\int\diff{\spatialspin} \conj{\phi_{\textrm{1s}_0\alpha}}(\spatialspin) \phi_{\textrm{1s}_0\beta}(\spatialspin) = 0\]

by symmetry.

Examples

julia> AngularMomentumAlgebra.OrbitalRadialOverlap(so"1s₀α", so"1s₀β")
⟨1s₀α|1s₀β⟩ᵣ
source
AngularMomentumAlgebra.TensorOperatorType
TensorOperator{N}(T)

Create an NBodyOperator out of a tensor component (either a TensorComponent or a TensorScalarProduct, which implicitly only has one component, 0).

Example

julia> 𝐉 = TotalAngularMomentum()
𝐉̂⁽¹⁾

julia> 𝐉₀ = TensorComponent(𝐉, 0)
𝐉̂⁽¹⁾₀

julia> A = TensorOperator{1}(𝐉₀)
[𝐉̂⁽¹⁾₀]

julia> cfgs = scs"1s2"
1-element Vector{SpinConfiguration{SpinOrbital{Orbital{Int64}, Tuple{Int64, HalfIntegers.Half{Int64}}}}}:
 1s₀α 1s₀β

julia> Matrix(A, cfgs)
1×1 SparseArrays.SparseMatrixCSC{NBodyMatrixElement, Int64} with 1 stored entry:
 0.5⟨1s₀α|1s₀α⟩ - 0.5⟨1s₀β|1s₀β⟩
source
AngularMomentumAlgebra.many_electron_scalar_productFunction
many_electron_scalar_product(𝐓::Tensor{k}, 𝐔::Tensor{k}=𝐓) where k

Create the total tensor acting on a many-electron state according to

\[\begin{equation} \begin{aligned} (\tensor{T}^{(k)} \cdot \tensor{U}^{(k)}) &= \sum_{i,j} [\tensor{t}^{(k)}(i) \cdot \tensor{u}^{(k)}(j)] \\ &\equiv \sum_i [\tensor{t}^{(k)}(i) \cdot \tensor{u}^{(k)}(i)] + \sum_{i\ne j} 2[\tensor{t}^{(k)}(i) \cdot \tensor{u}^{(k)}(j)], \end{aligned} \tag{H11-32*} \end{equation}\]

where $\tensor{t}^{(k)}(i)$ and $\tensor{u}^{(k)}(j)$ act only on electron $i$ and $j$, respectively [cf. John E. Harriman: Theoretical Foundations of Electron Spin Resonance (1978); note that Harriman uses another normalization of the ladder operators compared to ours: Eq. (V3.1.1), which explains why his Eq. (H11-32) is missing a factor of $2$].

Examples

julia> 𝐉 = TotalAngularMomentum()
𝐉̂⁽¹⁾

julia> A = many_electron_scalar_product(𝐉)
[𝐉̂⁽¹⁾]² + 2.0[𝐉̂⁽¹⁾(1)⋅𝐉̂⁽¹⁾(2)]

julia> 𝐋 = OrbitalAngularMomentum()
𝐋̂⁽¹⁾

julia> 𝐒 = SpinAngularMomentum()
𝐒̂⁽¹⁾

julia> B = many_electron_scalar_product(𝐋, 𝐒)
[𝐋̂⁽¹⁾⋅𝐒̂⁽¹⁾] + 2.0[𝐋̂⁽¹⁾(1)⋅𝐒̂⁽¹⁾(2)]

julia> cfgs = rscs"1s2"
1-element Vector{SpinConfiguration{SpinOrbital{RelativisticOrbital{Int64}, Tuple{HalfIntegers.Half{Int64}}}}}:
 1s(-1/2) 1s(1/2)

julia> Matrix(A, cfgs)
1×1 SparseArrays.SparseMatrixCSC{NBodyMatrixElement, Int64} with 1 stored entry:
 0.75⟨1s(-1/2)|1s(-1/2)⟩ + 0.75⟨1s(1/2)|1s(1/2)⟩ - ⟨1s(-1/2)|1s(1/2)⟩⟨1s(1/2)|1s(-1/2)⟩ - 0.5⟨1s(-1/2)|1s(-1/2)⟩⟨1s(1/2)|1s(1/2)⟩

julia> Matrix(B, cfgs)
1×1 SparseArrays.SparseMatrixCSC{NBodyMatrixElement, Int64} with 0 stored entries:
 ⋅
source

Cartesian tensor components

The transformation of the tensor components of a rank-1 tensor from the Cartesian basis to the "natural" basis is given by:

\[\begin{equation} M(+1,0,-1 \leftarrow x, y, z)= \begin{bmatrix} -\frac{1}{\sqrt{2}}&\frac{\im}{\sqrt{2}}&\cdot\\ \cdot&\cdot&1\\ \frac{1}{\sqrt{2}}&\frac{\im}{\sqrt{2}}&\cdot \end{bmatrix} \end{equation}\]

AngularMomentumAlgebra.cartesian_tensor_componentFunction
cartesian_tensor_component(t::Tensor{1}, c)

This returns the Cartesian tensor component c (valid choices are :x, :y, or :z) of the rank-1 tensor t, as a linear combination of its "natural" TensorComponents 1, 0, and -1. The transform matrix is M(+1, 0, -1 ← x, y, z) given in Table 1.2 on p. 14 of Varshalovich (1988).

Examples

julia> cartesian_tensor_component(Gradient(), :x)
- 0.707107 𝛁̂⁽¹⁾₁ + 0.707107 𝛁̂⁽¹⁾₋₁
source

Product tensors

AngularMomentumAlgebra.TensorProductType
TensorProduct{K}(T, U)

A tensor of rank K formed from the product of the tensors T and U, according to

\[\begin{equation} \tag{V3.1.20} \tensor{X}^{(K)}_Q \equiv \{\tensor{T}^{(k_1)}\tensor{U}^{(k_2)}\}^{(K)}_Q \defd \tensor{T}^{(k_1)}_{q_1} \tensor{U}^{(k_2)}_{q_2} C_{k_1q_1k_2q_2}^{KQ} \end{equation}\]

source

Scalar product

AngularMomentumAlgebra.TensorScalarProductType
TensorScalarProduct(T, U)

A tensor of rank 0 (and thus implicitly 0 projection) formed from the product of the tensors T and U (which have to have the same rank), according to

\[\begin{equation} \tag{V3.1.30,35} (\tensor{T}^{(k)} \cdot \tensor{U}^{(k)}) \defd (-)^k\angroot{k} \{\tensor{T}^{(k)} \tensor{U}^{(k)}\}^{(0)}_0 \equiv (-)^q \tensor{T}^{(k)}_{q} \tensor{U}^{(k)}_{-q} \end{equation}\]

source
LinearAlgebra.dotMethod
dot(T::Tensor, U::Tensor)

Form the scalar product of the two tensors T and U, which need to have the same rank.

Examples

julia> SphericalTensor(4)⋅SphericalTensor(4)
(𝐂̂⁽⁴⁾⋅𝐂̂⁽⁴⁾)
source