If you simply declare the pointer as private, each thread will have its own pointer, but that pointer will point to a random place in memory. If you declare it as firstprivate, the address pointed to will be the same for all thread, i.e., each thread will have its own pointer, put all those...
Equations will be different when using CGS compared to SI, so one cannot simply change the units of the values used. Could this be source of your problem?
https://en.wikipedia.org/wiki/Gaussian_units
##\ket{\psi(x)}## doesn't make sense. ##\ket{\psi}## is an (abstract) vector in Hilbert space, so it doesn't make sense to write it as having a position dependence. To convert to a wave function, you have
$$
\psi(x) = \braket{x | \psi}
$$
If you have, for example, a particle on a ring, "all...
##|ψ'\rangle=|h2\rangle\langle h2|ψ\rangle## is nothing but ##|ψ'\rangle= c |h2\rangle## with ##c## some complex number. Physical states are defined up to an arbitrary complex scalar constant, so it is the same state.
My guess is that you have to work in both ##\theta## and ##\phi##, and integrate with the proper integration element, ##\sin \theta \, d\theta \, d \phi##.