I know what you're thinking, 'cause right now I'm thinking the same thing. Actually, I've been thinking it ever since I got here: Why oh why didn't I take the BLUE pill?
Uni10 /
RoadmapPending changes to the QuantumNumber library
class SU2 { public: SU2(); typedef half_int value_type; static double degree(half_int x); static double coupling_3j_phase(half_int a, half_int b, half_int c); // ... }; In the case of {$SU(2)$} the functions can be static because the symmetry group has no parameters. In the case of the Dihedral group {$D_n$} they cannot be static functions because the symmetry group depends on the parameter {$n$}. The representations of the dihedral group consist of two one-dimensional reps {$+$} and {$-$}; for {$n$} even there are also two one-dimensional reps {$+n$} and {$-n$}. The other reps {$j$} for {$0 < j < n$} are two dimensional. So a convenient representation is a 'signed' integer, where +0 and -0 are permissible values. (eg, this can be implemented using a sign bit or a 1's compliment representation.) We also allow half-integer (projective) representations. Note: the half-integer reps for odd {$n$} require complex coupling coefficients I think?!?! class Dihedral { public: Dihedral(int N_) : N(N_) {} typedef signed_half_int value_type; double degree(signed_half_int x) const; double coupling_3j_phase(signed_half_int a, signed_half_int b, signed_half_int c) const; // ... private: int N; };
|