starting rewriting the gaunt coefficients from py_gmm to c
Former-commit-id: e7cb74b982fe05ef9b0555e3524ac38398e2f13f
This commit is contained in:
parent
1f995be463
commit
fda639304a
|
@ -0,0 +1,62 @@
|
|||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
// logarithm of factorial (from basicsubs.f90)
|
||||
double lnf (double z) {
|
||||
// expansion parameters
|
||||
static const double v_c0[] = {
|
||||
0.16427423239836267e5, -0.48589401600331902e5, 0.55557391003815523e5, -0.30964901015912058e5,
|
||||
0.87287202992571788e4, -0.11714474574532352e4, 0.63103078123601037e2, -0.93060589791758878e0,
|
||||
0.13919002438227877e-2,-0.45006835613027859e-8, 0.13069587914063262e-9
|
||||
};
|
||||
static const double cp = 2.5066282746310005;
|
||||
double a = 1.;
|
||||
double b = z + 10.5;
|
||||
b = (z + 0.5) * log(b) - b;
|
||||
for (int i = 0; i < (sizeof(v_c0) / sizeof(double)); i++) {
|
||||
z += 1.;
|
||||
a += v_c0[i] / z;
|
||||
}
|
||||
|
||||
return b+log(cp*a);
|
||||
}
|
||||
|
||||
// logarithm of Pochhammer function (from basicsubs.f90)
|
||||
double lpoch(double x, double n) {
|
||||
if(fabs(n) < 1e-5) // ???
|
||||
return 1.;
|
||||
double sum = x+n;
|
||||
return lnf(sum-1.) - lnf(x-1.);
|
||||
}
|
||||
|
||||
double f_a0 (int m, int n, int mu, int nu) {
|
||||
double logw = lnf(n+nu-m-mu) - lnf(n-m) - lnf(nu-mu);
|
||||
double logp = lpoch(n+1, n) + lpoch(nu+1, nu) - lpoch(n+nu+1, n+nu);
|
||||
return exp(logw+logp);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
double gaunt_gevero_direct_convert(int m, int n, int mu, int nu, int qmax, double *v_aq, int *error) {
|
||||
int v_zero[qmax] = {0};
|
||||
*error = 0;
|
||||
|
||||
if(abs(m)>n || abs(mu)=nu) {
|
||||
*error = 1;
|
||||
fprintf(stderr, "invalid values for m, n, mu or nu\n")
|
||||
return NAN;
|
||||
}
|
||||
|
||||
switch(qmax) {
|
||||
case 0:
|
||||
v_aq[0] = f_a0(m,n,mu,nu);
|
||||
break;
|
||||
case 1:
|
||||
v_aq[0] = f_a0(m,n,mu,nu);
|
||||
!!!!!!!!!TODO CONTINUE HERE
|
||||
|
||||
|
||||
|
||||
*/
|
Loading…
Reference in New Issue