ACEsuit / ACE.jl

Parameterisation of Equivariant Properties of Particle Systems
65 stars 15 forks source link

A minor issue on `ACE.SphericalHarmonics:cart2spher` #137

Open zhanglw0521 opened 2 years ago

zhanglw0521 commented 2 years ago

If the input of cart2spher is $(0,0,0)$ under Cartesian, it returns NaN for the field $\cos\theta$, which leads to a state that cannot be recognised by function evaluate. Can we map Cartesian $(0,0,0)$ to something like $(0,1,0,1,0)$ under the spherical coordinate system (though we can choose both angles freely...).

e.g., change it to

function cart2spher(R::AbstractVector)
    @assert length(R) == 3
    r = norm(R)
    if r == 0
        return SphericalCoords(0.0, 1.0, 0.0, 1.0, 0.0)
    end
    φ = atan(R[2], R[1])
    sinφ, cosφ = sincos(φ)
    cosθ = R[3] / r
    sinθ = sqrt(R[1]^2+R[2]^2) / r
    return SphericalCoords(r, cosφ, sinφ, cosθ, sinθ)
end