VectorCoupling Type

Contains vector coupling functions.

Constructors

Constructor Description

VectorCoupling()

Full Usage: VectorCoupling()

Static members

Static member Description

VectorCoupling.ClebschGordan(l1, m1, l2, m2, l3, m3, errflag)

Full Usage: VectorCoupling.ClebschGordan(l1, m1, l2, m2, l3, m3, errflag)

Parameters:
    l1 : float - Parameter in 3j symbol.
    m1 : float - Parameter in 3j symbol.
    l2 : float - Parameter in 3j symbol.
    m2 : float - Parameter in 3j symbol.
    l3 : float - Parameter in 3j symbol.
    m3 : float - Parameter in 3j symbol.
    errflag : byref<int> - Error flag.

    errflag=0 No errors.

    errflag=1 Either l1 < abs(m1) or l1+abs(m1) non-integer.

    errflag=2 abs(l1-l2)<= l3 <= l1+l2 not satisfied.

    errflag=3 l1+l2+l3 not an integer.

    errflag=4 m2max-m2min not an integer.

    errflag=5 m2max less than m2min.

    errflag=6 ndim less than m2max-m2min+1.

    errflag=7 m1+m2-m3 is not zero.



Returns: float The value of the Clebsch-Gordan coefficient.

Calculate Clebsch-Gordan coefficient using the relation to the Wigner 3-j symbol:

                                           l1-l2+m3         1/2   ( l1  l2  l3 )
               (l1 m1 l2 m2 | l3 m3) = (-1)         (2*l3+1)      ( m1  m2 -m3 )

             References:
             -----------
              1. See routines in "threejj.cc" and "threejm.cc" for references about
                 the calculation of the Wigner 3-j symbols.
              2. C++ Implementation for the Matpack C++ Numerics and Graphics Library
                 by Berndt M. Gammel in June 1997.
            
             Note:
             -----
              Whenever you have to calculate a series of Clebsch-Gordan coefficients for
              a range of l-values or m-values you should probably use the 3-j symbol
              routines. These calculate the 3-j symbols iteratively for a series of
              l-values or m-values and are therefore much more efficient. Use the relation
              between Clebsch-Gordan coefficients and Wigner 3-j symbols as given above.

l1 : float

Parameter in 3j symbol.

m1 : float

Parameter in 3j symbol.

l2 : float

Parameter in 3j symbol.

m2 : float

Parameter in 3j symbol.

l3 : float

Parameter in 3j symbol.

m3 : float

Parameter in 3j symbol.

errflag : byref<int>

Error flag.

errflag=0 No errors.

errflag=1 Either l1 < abs(m1) or l1+abs(m1) non-integer.

errflag=2 abs(l1-l2)<= l3 <= l1+l2 not satisfied.

errflag=3 l1+l2+l3 not an integer.

errflag=4 m2max-m2min not an integer.

errflag=5 m2max less than m2min.

errflag=6 ndim less than m2max-m2min+1.

errflag=7 m1+m2-m3 is not zero.

Returns: float

The value of the Clebsch-Gordan coefficient.

VectorCoupling.SixJSymbol(l2, l3, l4, l5, l6, l1min, l1max, sixcof, ndim, errflag)

Full Usage: VectorCoupling.SixJSymbol(l2, l3, l4, l5, l6, l1min, l1max, sixcof, ndim, errflag)

Parameters:
    l2 : float - Parameter in 6j symbol.
    l3 : float - Parameter in 6j symbol.
    l4 : float - Parameter in 6j symbol.
    l5 : float - Parameter in 6j symbol.
    l6 : float - Parameter in 6j symbol.
    l1min : byref<float> - Smallest allowable l1 in 6j symbol.
    l1max : byref<float> - Largest allowable l1 in 6j symbol.
    sixcof : float[] - Set of 6j coefficients generated by evaluating the 6j symbol for all allowed values of l1. sixcof(i) will contain h(l1min+i), i=0,2,...,l1max-l1min.
    ndim : int - Declared length of sixcof in calling program.
    errflag : byref<int> - Error flag.

    errflag=0 no errors.

    errflag=1 l2+l3+l5+l6 or l4+l2+l6 not an integer.

    errflag=2 l4, l2, l6 triangular condition not satisfied.

    errflag=3 l4, l5, l3 triangular condition not satisfied.

    errflag=4 l1max-l1min not an integer.

    errflag=5 l1max less than l1min.

    errflag=6 ndim less than l1max-l1min+1.



Evaluate the 6j symbol

                  h(l1) = { l1  l2  l3 }
                          { l4  l5  l6 }
for all allowed values of l1, the other parameters being held fixed.

             Description:
             ------------
            
              The definition and properties of 6j symbols can be found, for
              example, in Appendix C of Volume II of A. Messiah. Although the
              parameters of the vector addition coefficients satisfy certain
              conventional restrictions, the restriction that they be non-negative
            
              integers or non-negative integers plus 1/2 is not imposed on input
              to this subroutine. The restrictions imposed are
            
                   1. l2+l3+l5+l6 and l2+l4+l6 must be integers;
                   2. abs(l2-l4) <= l6 <= l2+l4 must be satisfied;
                   3. abs(l4-l5) <= l3 <= l4+l5 must be satisfied;
                   4. l1max-l1min must be a non-negative integer, where
                      l1max=min(l2+l3,l5+l6) and l1min=max(abs(l2-l3),abs(l5-l6)).
            
              If all the conventional restrictions are satisfied, then these
              restrictions are met. Conversely, if input to this subroutine meets
              all of these restrictions and the conventional restriction stated
              above, then all the conventional restrictions are satisfied.
            
              The user should be cautious in using input parameters that do
              not satisfy the conventional restrictions. For example, the
              the subroutine produces values of
            
                   h(L1) = {  L1  2/3   1  }
                           { 2/3  2/3  2/3 }
            
              for L1=1/3 and 4/3 but none of the symmetry properties of the 6j
              symbol, set forth on pages 1063 and 1064 of Messiah, is satisfied.
            
              The subroutine generates h(l1min), h(l1min+1), ..., h(l1max)
              where l1min and l1max are defined above. The sequence h(l1) is
              generated by a three-term recurrence algorithm with scaling to
              control overflow. Both backward and forward recurrence are used to
              maintain numerical stability. The two recurrence sequences are
              matched at an interior point and are normalized from the unitary
              property of 6j coefficients and Wigner's phase convention.
            
              The algorithm is suited to applications in which large quantum
              numbers arise, such as in molecular dynamics.
            
             References:
             -----------
             1. Messiah, Albert., Quantum Mechanics, Volume II,
                North-Holland Publishing Company, 1963.
             2. Schulten, Klaus and Gordon, Roy G., Exact recursive
                evaluation of 3j and 6j coefficients for quantum-
                mechanical coupling of angular momenta, J Math
                Phys, v 16, no. 10, October 1975, pp. 1961-1970.
             3. Schulten, Klaus and Gordon, Roy G., Semiclassical
                approximations to 3j and 6j coefficients for
                quantum-mechanical coupling of angular momenta,
                J Math Phys, v 16, no. 10, October 1975,
                pp. 1971-1988.
             4. Schulten, Klaus and Gordon, Roy G., Recursive
                evaluation of 3j and 6j coefficients, Computer
                Phys Comm, v 11, 1976, pp. 269-278.
             5. SLATEC  library, category  C19,
                double precision algorithm DRC6J.F
                Keywords: 6j coefficients, 6j symbols, Clebsch-Gordan coefficients,
                         Racah coefficients, vector addition coefficients,
                         Wigner coefficients
                 Author:   Gordon, R. G., Harvard University
                           Schulten, K., Max Planck Institute
                 Revision history  (YYMMDD)
                 750101  DATE WRITTEN
                 880515  SLATEC prologue added by G. C. Nielson, NBS; parameters
                         HUGE and TINY revised to depend on D1MACH.
                 891229  Prologue description rewritten; other prologue sections
                         revised; LMATCH (location of match point for recurrences)
                         removed from argument list; argument IER changed to serve
                         only as an error flag (previously, in cases without error,
                         it returned the number of scalings); number of error codes
                         increased to provide more precise error information;
                         program comments revised; SLATEC error handler calls
                         introduced to enable printing of error messages to meet
                         SLATEC standards. These changes were done by D. W. Lozier,
                         M. A. McClain and J. M. Smith of the National Institute
                         of Standards and Technology, formerly NBS.
                 910415  Mixed type expressions eliminated; variable C1 initialized;
                         description of SIXCOF expanded. These changes were done by
                         D. W. Lozier.
              6. Rewritting of the SLATEX algorithm in C++ and adaption to the
                 Matpack C++ Numerics and Graphics Library by Berndt M. Gammel
                 in June 1997.

l2 : float

Parameter in 6j symbol.

l3 : float

Parameter in 6j symbol.

l4 : float

Parameter in 6j symbol.

l5 : float

Parameter in 6j symbol.

l6 : float

Parameter in 6j symbol.

l1min : byref<float>

Smallest allowable l1 in 6j symbol.

l1max : byref<float>

Largest allowable l1 in 6j symbol.

sixcof : float[]

Set of 6j coefficients generated by evaluating the 6j symbol for all allowed values of l1. sixcof(i) will contain h(l1min+i), i=0,2,...,l1max-l1min.

ndim : int

Declared length of sixcof in calling program.

errflag : byref<int>

Error flag.

errflag=0 no errors.

errflag=1 l2+l3+l5+l6 or l4+l2+l6 not an integer.

errflag=2 l4, l2, l6 triangular condition not satisfied.

errflag=3 l4, l5, l3 triangular condition not satisfied.

errflag=4 l1max-l1min not an integer.

errflag=5 l1max less than l1min.

errflag=6 ndim less than l1max-l1min+1.

VectorCoupling.ThreeJSymbolJ(l2, l3, m2, m3, l1min, l1max, thrcof, ndim, errflag)

Full Usage: VectorCoupling.ThreeJSymbolJ(l2, l3, m2, m3, l1min, l1max, thrcof, ndim, errflag)

Parameters:
    l2 : float - Parameter in 3j symbol.
    l3 : float - Parameter in 3j symbol.
    m2 : float - Parameter in 3j symbol.
    m3 : float - Parameter in 3j symbol.
    l1min : byref<float> - Smallest allowable l1 in 3j symbol.
    l1max : byref<float> - Largest allowable l1 in 3j symbol.
    thrcof : float[] - Set of 3j coefficients generated by evaluating the 3j symbol for all allowed values of l1. thrcof(i) will contain f(l1min+i), for i = 0, 2, ... , l1max+l1min.
    ndim : int - Declared length of thrcof in calling program.
    errflag : byref<int> -

    errflag=0 No errors.

    errflag=1 Either l2 < abs(m2) or l3 < abs(m3).

    errflag=2 Either l2+abs(m2) or l3+abs(m3) non-integer.

    errflag=3 l1max-l1min not an integer.

    errflag=4 l1max less than l1min.

    errflag=5 ndim less than l1max-l1min+1.



Evaluate the Wigner 3j symbol

                   f(l1) = (   l1    l2   l3 )
                           ( -m2-m3  m2   m3 )
for all allowed values of l1, the other parameters being held fixed.

             Description:
             ------------
            
             Although conventionally the parameters of the vector addition
             coefficients satisfy certain restrictions, such as being integers
             or integers plus 1/2, the restrictions imposed on input to this
             subroutine are somewhat weaker. See, for example, Section 27.9 of
             Abramowitz and Stegun or Appendix C of Volume II of A. Messiah.
            
             The restrictions imposed by this subroutine are
            
                   1. l2 >= abs(m2) and l3 >= abs(m3)
                   2. l2+abs(m2) and l3+abs(m3) must be integers
                   3. l1max-l1min must be a non-negative integer, where
                      l1max=l2+l3 and l1min=max(abs(l2-l3),abs(m2+m3))
            
             If the conventional restrictions are satisfied, then these
             restrictions are also met.
            
             The user should be cautious in using input parameters that do
             not satisfy the conventional restrictions. For example, the
             the subroutine produces values of
                   f(L1) = ( l1  2.5  5.8)
                           (-0.3 1.5 -1.2)
             for l1=3.3,4.3,...,8.3 but none of the symmetry properties of the 3j
             symbol, set forth on page 1056 of Messiah, is satisfied.
            
             The subroutine generates f(l1min), f(l1min+1), ..., f(l1max)
             where l1min and l1max are defined above. The sequence f(l1) is
             generated by a three-term recurrence algorithm with scaling to
             control overflow. Both backward and forward recurrence are used to
             maintain numerical stability. The two recurrence sequences are
             matched at an interior point and are normalized from the unitary
             property of 3j coefficients and Wigner's phase convention.
            
             The algorithm is suited to applications in which large quantum
             numbers arise, such as in molecular dynamics.
            
             References:
             -----------
              1. Abramowitz, M., and Stegun, I. A., Eds., Handbook
                 of Mathematical Functions with Formulas, Graphs
                 and Mathematical Tables, NBS Applied Mathematics
                 Series 55, June 1964 and subsequent printings.
              2. Messiah, Albert., Quantum Mechanics, Volume II,
                 North-Holland Publishing Company, 1963.
              3. Schulten, Klaus and Gordon, Roy G., Exact recursive
                 evaluation of 3j and 6j coefficients for quantum-
                 mechanical coupling of angular momenta, J Math
                 Phys, v 16, no. 10, October 1975, pp. 1961-1970.
              4. Schulten, Klaus and Gordon, Roy G., Semiclassical
                 approximations to 3j  and 6j coefficients for
                 quantum-mechanical coupling of angular momenta,
                 J Math Phys, v 16, no. 10, October 1975, pp. 1971-1988.
              5. Schulten, Klaus and Gordon, Roy G., Recursive
                 evaluation of 3j and 6j coefficients, Computer
                 Phys Comm, v 11, 1976, pp. 269-278.
              6. SLATEC library, category  C19,
                 double precision algorithm DRC3JJ.F
                 Keywords: 3j coefficients, 3j symbols, Clebsch-Gordan coefficients,
                           Racah coefficients, vector addition coefficients,
                           Wigner coefficients
                 Author:   Gordon, R. G., Harvard University
                           Schulten, K., Max Planck Institute
                 Revision history  (YYMMDD)
                 750101  DATE WRITTEN
                 880515  SLATEC prologue added by G. C. Nielson, NBS; parameters
                         HUGE and TINY revised to depend on D1MACH.
                 891229  Prologue description rewritten; other prologue sections
                         revised; LMATCH (location of match point for recurrences)
                         removed from argument list; argument errflag changed to serve
                         only as an error flag (previously, in cases without error,
                         it returned the number of scalings); number of error codes
                         increased to provide more precise error information;
                         program comments revised; SLATEC error handler calls
                         introduced to enable printing of error messages to meet
                         SLATEC standards. These changes were done by D. W. Lozier,
                         M. A. McClain and J. M. Smith of the National Institute
                         of Standards and Technology, formerly NBS.
                 910415  Mixed type expressions eliminated; variable C1 initialized;
                         description of THRCOF expanded. These changes were done by
                         D. W. Lozier.
              7. Rewritting of the SLATEX algorithm in C++ and adaption to the
                 Matpack C++ Numerics and Graphics Library by Berndt M. Gammel
                 in June 1997.

l2 : float

Parameter in 3j symbol.

l3 : float

Parameter in 3j symbol.

m2 : float

Parameter in 3j symbol.

m3 : float

Parameter in 3j symbol.

l1min : byref<float>

Smallest allowable l1 in 3j symbol.

l1max : byref<float>

Largest allowable l1 in 3j symbol.

thrcof : float[]

Set of 3j coefficients generated by evaluating the 3j symbol for all allowed values of l1. thrcof(i) will contain f(l1min+i), for i = 0, 2, ... , l1max+l1min.

ndim : int

Declared length of thrcof in calling program.

errflag : byref<int>

errflag=0 No errors.

errflag=1 Either l2 < abs(m2) or l3 < abs(m3).

errflag=2 Either l2+abs(m2) or l3+abs(m3) non-integer.

errflag=3 l1max-l1min not an integer.

errflag=4 l1max less than l1min.

errflag=5 ndim less than l1max-l1min+1.

VectorCoupling.ThreeJSymbolM(l1, l2, l3, m1, m2min, m2max, thrcof, ndim, errflag)

Full Usage: VectorCoupling.ThreeJSymbolM(l1, l2, l3, m1, m2min, m2max, thrcof, ndim, errflag)

Parameters:
    l1 : float - Parameter in 3j symbol.
    l2 : float - Parameter in 3j symbol.
    l3 : float - Parameter in 3j symbol.
    m1 : float - Parameter in 3j symbol.
    m2min : byref<float> - Smallest allowable m2 in 3j symbol.
    m2max : byref<float> - Largest allowable m2 in 3j symbol.
    thrcof : float[] - Set of 3j coefficients generated by evaluating the 3j symbol for all allowed values of m2. thrcof(i) will contain g(m2min+i), i=0,2,...,m2max-m2min.
    ndim : int - Declared length of thrcof in calling program.
    errflag : byref<int> - Error flag.

    errflag=0 No errors.

    errflag=1 Either l1 < abs(m1) or l1+abs(m1) non-integer.

    errflag=2 abs(l1-l2)<= l3 <= l1+l2 not satisfied.

    errflag=3 l1+l2+l3 not an integer.

    errflag=4 m2max-m2min not an integer.

    errflag=5 m2max less than m2min.

    errflag=6 ndim less than m2max-m2min+1.



Evaluate the Wigner 3j symbol

                   g(m2) = ( l1  l2     l3  )
                           ( m1  m2  -m1-m2 )
for all allowed values of m2, the other parameters being held fixed.

             Description:
             ------------
            
             Although conventionally the parameters of the vector addition
             coefficients satisfy certain restrictions, such as being integers
             or integers plus 1/2, the restrictions imposed on input to this
             subroutine are somewhat weaker. See, for example, Section 27.9 of
             Abramowitz and Stegun or Appendix C of Volume II of A. Messiah.
            
             The restrictions imposed by this subroutine are
            
                   1. l1 >= abs(m1) and l1+abs(m1) must be an integer
                   2. abs(l1-l2) <= l3 <= l1+l2
                   3. l1+l2+l3 must be an integer
                   4. m2max-m2min must be an integer, where
                      m2max=min(l2,l3-m1) and m2min=max(-l2,-l3-m1)
            
             If the conventional restrictions are satisfied, then these
             restrictions are also met.
            
             The user should be cautious in using input parameters that do
             not satisfy the conventional restrictions. For example, the
             the subroutine produces values of
                   g(m2) = (0.75 1.50   1.75  )
                           (0.25  m2  -0.25-m2)
             for m2=-1.5,-0.5,0.5,1.5 but none of the symmetry properties of the
             3j symbol, set forth on page 1056 of Messiah, is satisfied.
            
             The subroutine generates g(m2min), g(m2min+1), ..., g(m2max)
             where m2min and m2max are defined above. The sequence g(m2) is
             generated by a three-term recurrence algorithm with scaling to
             control overflow. Both backward and forward recurrence are used to
             maintain numerical stability. The two recurrence sequences are
             matched at an interior point and are normalized from the unitary
             property of 3j coefficients and Wigner's phase convention.
            
             The algorithm is suited to applications in which large quantum
             numbers arise, such as in molecular dynamics.
            
             References:
             -----------
              1. Abramowitz, M., and Stegun, I. A., Eds., Handbook
                 of Mathematical Functions with Formulas, Graphs
                 and Mathematical Tables, NBS Applied Mathematics
                 Series 55, June 1964 and subsequent printings.
              2. Messiah, Albert., Quantum Mechanics, Volume II,
                 North-Holland Publishing Company, 1963.
              3. Schulten, Klaus and Gordon, Roy G., Exact recursive
                 evaluation of 3j and 6j coefficients for quantum-
                 mechanical coupling of angular momenta, J Math
                 Phys, v 16, no. 10, October 1975, pp. 1961-1970.
              4. Schulten, Klaus and Gordon, Roy G., Semiclassical
                 approximations to 3j  and 6j coefficients for
                 quantum-mechanical coupling of angular momenta,
                 J Math Phys, v 16, no. 10, October 1975, pp. 1971-1988.
              5. Schulten, Klaus and Gordon, Roy G., Recursive
                 evaluation of 3j and 6j coefficients, Computer
                 Phys Comm, v 11, 1976, pp. 269-278.
              6. SLATEC library, category  C19,
                 double precision algorithm DRC3JM.F
                 Keywords: 3j coefficients, 3j symbols, Clebsch-Gordan coefficients,
                           Racah coefficients, vector addition coefficients,
                           Wigner coefficients
                 Author:   Gordon, R. G., Harvard University
                           Schulten, K., Max Planck Institute
                 Revision history  (YYMMDD)
                 750101  DATE WRITTEN
                 880515  SLATEC prologue added by G. C. Nielson, NBS; parameters
                         HUGE and TINY revised to depend on D1MACH.
                 891229  Prologue description rewritten; other prologue sections
                         revised; MMATCH (location of match point for recurrences)
                         removed from argument list; argument IER changed to serve
                         only as an error flag (previously, in cases without error,
                         it returned the number of scalings); number of error codes
                         increased to provide more precise error information;
                         program comments revised; SLATEC error handler calls
                         introduced to enable printing of error messages to meet
                         SLATEC standards. These changes were done by D. W. Lozier,
                         M. A. McClain and J. M. Smith of the National Institute
                         of Standards and Technology, formerly NBS.
                 910415  Mixed type expressions eliminated; variable C1 initialized;
                         description of THRCOF expanded. These changes were done by
                         D. W. Lozier.
              7. Rewritting of the SLATEX algorithm in C++ and adaption to the
                 Matpack C++ Numerics and Graphics Library by Berndt M. Gammel
                 in June 1997.

l1 : float

Parameter in 3j symbol.

l2 : float

Parameter in 3j symbol.

l3 : float

Parameter in 3j symbol.

m1 : float

Parameter in 3j symbol.

m2min : byref<float>

Smallest allowable m2 in 3j symbol.

m2max : byref<float>

Largest allowable m2 in 3j symbol.

thrcof : float[]

Set of 3j coefficients generated by evaluating the 3j symbol for all allowed values of m2. thrcof(i) will contain g(m2min+i), i=0,2,...,m2max-m2min.

ndim : int

Declared length of thrcof in calling program.

errflag : byref<int>

Error flag.

errflag=0 No errors.

errflag=1 Either l1 < abs(m1) or l1+abs(m1) non-integer.

errflag=2 abs(l1-l2)<= l3 <= l1+l2 not satisfied.

errflag=3 l1+l2+l3 not an integer.

errflag=4 m2max-m2min not an integer.

errflag=5 m2max less than m2min.

errflag=6 ndim less than m2max-m2min+1.