Tensors
AngularMomentumAlgebra.Tensor
— TypeTensor{k,label}
Abstract base for any tensor of rank k
.
AngularMomentumAlgebra.TensorComponent
— TypeTensorComponent(tensor, q)
Represents the q
th component of a tensor
; abs(q) ≤ rank(tensor)
.
AngularMomentumAlgebra.LinearCombinationTensor
— TypeLinearCombinationTensor
Represents a linear combination of tensor components.
AngularMomentumAlgebra.system
— Methodsystem(::Tensor)
A general tensor acts on the full system, i.e. all coordinates.
AngularMomentumAlgebra.OrbitalRadialOverlap
— TypeOrbitalRadialOverlap(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₀β⟩ᵣ
AngularMomentumAlgebra.TensorOperator
— TypeTensorOperator{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₀β⟩
AngularMomentumAlgebra.many_electron_scalar_product
— Functionmany_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:
⋅
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_component
— Functioncartesian_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" TensorComponent
s 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 𝛁̂⁽¹⁾₋₁
Product tensors
AngularMomentumAlgebra.TensorProduct
— TypeTensorProduct{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}\]
Scalar product
AngularMomentumAlgebra.TensorScalarProduct
— TypeTensorScalarProduct(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}\]
LinearAlgebra.dot
— Methoddot(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)
(𝐂̂⁽⁴⁾⋅𝐂̂⁽⁴⁾)