A set of functions to work with representations in the O(3) group. In particular:
- a module (
o3
) supporting implementations of irreducible representations (irreps) (irreps.jl
) - functions to find a change-of-basis matrix
Q
to contract reducible representations to a single set of irreps (rtp.jl
)
The file rtp.jl
defines a module ReducedTensorProduct
containing two functions reduced_product
and reduced_product_dq
, which both can be used to find Q
as described above. Both can be run as serial functions or in parallel through multithreading. reduced_product_dq
is the divide-and-conquer version of reduced_product
and, except for very small cases, the parallelized version of reduced_product_dq
is generally faster than either the serial reduced_product_dq
or either version of reduced_product
.
include("rtp.jl")
irreps_in, irreps_out, Q = ReducedTensorProduct.reduced_product_dq("ijkl=jikl=klij", Dict('i' => "1o"), parallel=true)
# or:
irreps_in, irreps_out, Q = ReducedTensorProduct.reduced_product("ijkl=jikl=klij", Dict('i' => "1o"), parallel=false)
This code was benchmarked on MIT Supercloud using the problem ijk=jik=jki
with the irrep for index i
being of the form 0e + 1o + 2e + ...
. As referenced in benchmark.csv
, the parameters are
n
: total number of CPUsN
: number of CPUs per nodel
: the highest degree represented ini
's irrep;l = 2
would be0e + 1o + 2e
, etc.