9
void OI_OSrecurs_float(FLOAT** OIX, FLOAT** OIY, FLOAT** OIZ, FLOAT PA[3], FLOAT PB[3],
10
FLOAT gamma, int lmaxi, int lmaxj)
13
FLOAT pp = 1/(2*gamma);
15
OIX[0][0] = OIY[0][0] = OIZ[0][0] = 1.0;
20
/* Upward recursion in j for i=0 */
27
for(j=1;j<lmaxj;j++) {
28
OIX[0][j+1] = PB[0]*OIX[0][j];
29
OIY[0][j+1] = PB[1]*OIY[0][j];
30
OIZ[0][j+1] = PB[2]*OIZ[0][j];
31
OIX[0][j+1] += j*pp*OIX[0][j-1];
32
OIY[0][j+1] += j*pp*OIY[0][j-1];
33
OIZ[0][j+1] += j*pp*OIZ[0][j-1];
36
/* Upward recursion in i for all j's */
43
for(j=1;j<=lmaxj;j++) {
44
OIX[1][j] = PA[0]*OIX[0][j];
45
OIY[1][j] = PA[1]*OIY[0][j];
46
OIZ[1][j] = PA[2]*OIZ[0][j];
47
OIX[1][j] += j*pp*OIX[0][j-1];
48
OIY[1][j] += j*pp*OIY[0][j-1];
49
OIZ[1][j] += j*pp*OIZ[0][j-1];
51
for(i=1;i<lmaxi;i++) {
52
OIX[i+1][0] = PA[0]*OIX[i][0];
53
OIY[i+1][0] = PA[1]*OIY[i][0];
54
OIZ[i+1][0] = PA[2]*OIZ[i][0];
55
OIX[i+1][0] += i*pp*OIX[i-1][0];
56
OIY[i+1][0] += i*pp*OIY[i-1][0];
57
OIZ[i+1][0] += i*pp*OIZ[i-1][0];
58
for(j=1;j<=lmaxj;j++) {
59
OIX[i+1][j] = PA[0]*OIX[i][j];
60
OIY[i+1][j] = PA[1]*OIY[i][j];
61
OIZ[i+1][j] = PA[2]*OIZ[i][j];
62
OIX[i+1][j] += i*pp*OIX[i-1][j];
63
OIY[i+1][j] += i*pp*OIY[i-1][j];
64
OIZ[i+1][j] += i*pp*OIZ[i-1][j];
65
OIX[i+1][j] += j*pp*OIX[i][j-1];
66
OIY[i+1][j] += j*pp*OIY[i][j-1];
67
OIZ[i+1][j] += j*pp*OIZ[i][j-1];