One of the hazards of using globals I suppose.
You could try a different naming convention, say prefix all globals with g_ it you insist on using them. I notice all your functions have no parameters.
Anyway
Code:
float Wigner6j[20][20], racah[20][20];
And in the function
Code:
float mincalc, wigner6j[20], Wigner6j, Racah, phase1, phase2;
That's right, the local variable with the same name isn't an array, so it barfs on the attempt to subscript it.
For your evening supper, try this
Code:
$ gcc -Wshadow -W -Wall -ansi -pedantic -O2 new.c
new.c:19: warning: return type defaults to `int'
new.c: In function `Racah':
new.c:118: warning: declaration of 'Wigner6j' shadows a global declaration
new.c:15: warning: shadowed declaration is here
new.c:118: warning: declaration of 'Racah' shadows a global declaration
new.c:111: warning: shadowed declaration is here
new.c:249: error: subscripted value is neither array nor pointer
new.c:262: error: subscripted value is neither array nor pointer
new.c:118: warning: unused variable `Racah'
That is, once you've turned all the // comments into proper C comments.
Having a local variable the same name as your function would cause an even more bizarre error message if you'd tried to call the function recursively.