In this file, the wrappers are defined to include different external libraries which compute -symbols for . The wrappers are called coupl_Xj_base. All of these functions take values in the format q=2S+1 and q_z=2M which is always of type integer. Internally these values are converted to the respective convention of the used library. For example gsl uses the convention q_gsl=2S and q_z_gsl=2M, so that we have to use q_gsl = q-1 and q_gsl_z = q_z. Currently, one can use three different libraries for the -symbols:
WIGXJPF: Specific implementation for 3j, 6j, and 9j-symbols using prime factorization and multiword integer arithmetic. Provides the coefficients for arbitrary angular momenta to machine precision. See http://fy.chalmers.se/subatom/wigxjpf for reference and download. The library needs to be compiled first.
Link parameter: -lwigxjpf (with /path_to_wig/lib in the library path -L/path_to_wig/lib)
macro: USE_WIG_SU2_COEFFS
Note
When extensively using this library you may cite the corresponding publication (See website above for details)
FASTWIGXJ: A implementation wich uses hash-tables with precomputed symbols. This library builds up on top of WIGXJPF. See http://fy.chalmers.se/subatom/fastwigxj for reference and download. The library needs to be compiled first.
Link parameter: -lwigxjpf -lfastwigxj -lwigxjpf_quadmath -lquadmath (Note, the order is important! with /path_to_fastwig/lib in the library path -L/path_to_fastwig/lib)
macro: USE_FAST_WIG_SU2_COEFFS
Note
The hash-tables need to be precomputed by the user and passed to Sym::initialize(). See manual http://fy.chalmers.se/subatom/fastwigxj/README for instructions. The precomputed tables are commonly named as table_Y.Xj, where X is {3,6,9} and Y the maximal value of J. The tables are commonly stored in the folder cgc_hash within the root-folder of the project.
For 9j-symbols which are not pre-computed, the library uses a fallback and compute the 9j-symbol from 6j-symbol. To do so, the library needs 128bit floats (quadmath). This enforces the compiler gcc, since clang does not support quadmath.
When extensively using this library you may cite the corresponding publication (See website above for details)
General library + own hash function: A naive hash implementation which uses the coupl_Xj_base-functions but also handles a std::unordered_map for hashing the symbols. Note that this implmentation is not thread-safe! This is turned off per default but can be used by defining OWN_HASH_CGC.