...transformation of f-orbitals from cartesian to spherical still unclear...

Vladimir,

It is possible that the Cartesian LCAO-MO coefficients you import have already been scaled by some factor that makes your transformation incorrect. From your github:

- Code: Select all
`xxx, yyy, zzz, xyy, xxy, xxz, xzz, yzz, yyz, xyz = cartesian`

xr2 = xxx + xyy + xzz

yr2 = xxy + yyy + yzz

zr2 = xxz + yyz + zzz

zero = (5.0 * zzz - 3.0 * zr2) / 2.0

plus_1 = (15.0 * xzz - 3.0 * xr2)

minus_1 = (15.0 * yzz - 3.0 * yr2)

plus_2 = (xxz - yyz)

minus_2 = 2.0 * xyz

plus_3 = (xxx - 3.0 * xyy)

minus_3 = (3.0 * xxy - yyy)

This would be the correct transformation (to within an m,l-dependent factor) if you had imported the correctly-scaled Cartesian coefficients.

In GAMESS-US (and, I suspect, in many other programs), Cartesians within a shell will be scaled by different factors (e.g. the xy is scaled by sqrt(3) relative to x^2, xxy by sqrt(5) relative to x^3, xyz by sqrt(15) relative to x^3, etc). You will need to rescale these coefficients before performing your transformation.

You could also choose to perform the rescaling and the transformation simultaneously (as I've done in the gamess2qmc converter, shown below for f-functions), but this makes the code a bit harder to read. This lumped-together rescaling & transformation is produced by the procedure outlined here.

- Code: Select all
`# corresponding basis functions`

$f0=(2/sqrt(5)*$zzz-$xxz-$yyz)/sqrt(5); #z(5z2-3r2)

$f1c=(4*$zzx-3/sqrt(5)*$xxx-$yyx)/(6*sqrt(5)); #x(5z2-r2)

$f1s=(4*$zzy-3/sqrt(5)*$yyy-$xxy)/(6*sqrt(5)); #y(5z2-r2)

$f2c=($xxz-$yyz)/(6*sqrt(5)); #z(x2-y2)

$f2s=$xyz/sqrt(60); #xyz

$f3c=($xxx/sqrt(5)-$yyx)/(12*sqrt(5)); #x(x2-3y2)

$f3s=($xxy-$yyy/sqrt(5))/(12*sqrt(5)); #y(3x2-y2)