return result;
}
+ prestore::~prestore ()
+ {
+ delete[] cgcdata;
+ }
+
prestore::prestore(unsigned int _max2j)
{
max2j = _max2j;
- cgcdata = new double[ipow(max2j+1,6)];
+ cgcdata = new double[ipow(max2j+1,3)*ipow(2*max2j+1,3)];
for (int factor1_2j=0; factor1_2j<=max2j; factor1_2j++)
- for (int factor1_mp=0; factor1_mp<=max2j; factor1_mp++)
+ for (int factor1_mp=0; factor1_mp<=2*max2j; factor1_mp++)
for (int factor2_2j=0; factor2_2j<=max2j; factor2_2j++)
- for (int factor2_mp=0; factor2_mp<=max2j; factor2_mp++)
+ for (int factor2_mp=0; factor2_mp<=2*max2j; factor2_mp++)
for (int irrep_2j=0; irrep_2j<=max2j; irrep_2j++)
- for (int irrep_mp=0; irrep_mp<=max2j; irrep_mp++)
+ for (int irrep_mp=0; irrep_mp<=2*max2j; irrep_mp++)
{
- cgcdata[ factor1_2j*ipow(max2j+1,5) + factor1_mp*ipow(max2j+1,4) +
- factor2_2j*ipow(max2j+1,3) + factor2_mp*ipow(max2j+1,2) +
- irrep_2j*(max2j+1) + irrep_mp ]
+ cgcdata[ factor1_2j*ipow(max2j+1,2)*ipow(2*max2j+1,3) +
+ factor1_mp*ipow(max2j+1,2)*ipow(2*max2j+1,2) +
+ factor2_2j*(max2j+1)*ipow(2*max2j+1,2) +
+ factor2_mp*(max2j+1)*(2*max2j+1) +
+ irrep_2j*(2*max2j+1) +
+ irrep_mp ]
=
- cgc( factor1_2j, 2*factor1_mp-max2j, factor2_2j, 2*factor2_mp-max2j,
- irrep_2j, 2*irrep_mp-max2j );
+ cgc( factor1_2j, factor1_mp-max2j, factor2_2j, factor2_mp-max2j,
+ irrep_2j, irrep_mp-max2j );
}
}
if ( factor1_2j > Prestore.max2j || factor2_2j > Prestore.max2j || irrep_2j > Prestore.max2j )
return cgc(factor1_2j, factor1_2m, factor2_2j, factor2_2m, irrep_2j, irrep_2m);
- return Prestore.cgcdata[ factor1_2j*ipow(Prestore.max2j+1,5) +
- (factor1_2m+Prestore.max2j)/2 *ipow(Prestore.max2j+1,4) +
- factor2_2j*ipow(Prestore.max2j+1,3) +
- (factor2_2m+Prestore.max2j)/2 *ipow(Prestore.max2j+1,2) +
- irrep_2j*(Prestore.max2j+1) +
- (irrep_2m+Prestore.max2j)/2 ];
+ return Prestore.cgcdata[ factor1_2j*ipow(Prestore.max2j+1,2)*ipow(2*Prestore.max2j+1,3) +
+ (factor1_2m+Prestore.max2j) * ipow(Prestore.max2j+1,2)*ipow(2*Prestore.max2j+1,2) +
+ factor2_2j*(Prestore.max2j+1)*ipow(2*Prestore.max2j+1,2) +
+ (factor2_2m+Prestore.max2j) * (Prestore.max2j+1)*(2*Prestore.max2j+1) +
+ irrep_2j*(2*Prestore.max2j+1) +
+ (irrep_2m+Prestore.max2j) ];
}
double cgc (int factor1_2j, int factor1_2m, int factor2_2j, int factor2_2m,