mirror of
https://asciireactor.com/otho/phy-520.git
synced 2024-11-24 15:05:08 +00:00
120 lines
2.6 KiB
C++
120 lines
2.6 KiB
C++
|
|
#include <math.h>
|
|
#include <vector>
|
|
#include <stdio>
|
|
#include <iomanip>
|
|
|
|
double c0 = 1;
|
|
double e = 1;
|
|
double pi = 3.14;
|
|
double ep_0 = 1;
|
|
double hbar = 1;
|
|
double m = 1;
|
|
|
|
double a = 4*pi*ep_0*hbar*hbar/m/e/e;
|
|
|
|
// hydrogen atom model
|
|
|
|
// kappa = sqrt(-2*m*E/hbar)
|
|
// kappa = m * e^2 / (4 * pi * ep_0 * hbar^2)
|
|
|
|
int factorial(int n)
|
|
{
|
|
return (n == 1 || n == 0) ? 1 : factorial(n - 1) * n;
|
|
}
|
|
|
|
double kappa(double n)
|
|
{
|
|
double result = m * e^2 / (4 * pi * ep_0 * hbar^2);
|
|
result /= n;
|
|
return result;
|
|
}
|
|
|
|
double c_j (double j, double n, double l)
|
|
{
|
|
double result = (2 *(j+l+1-n)/(j+1)/(j+2*l+2));
|
|
result *= c_j(j);
|
|
}
|
|
|
|
double v(double n, double l, double rho)
|
|
{
|
|
double jmax = n-l-1;
|
|
std::vector<double> c;
|
|
for (double power=0; power < jmax + 1; power++) {
|
|
c[power] = c0
|
|
}
|
|
}
|
|
|
|
double R(double n, double l,
|
|
double r)
|
|
{
|
|
double rho = r*a/n;
|
|
double result = 1/r
|
|
* pow(rho,l+1)
|
|
* exp(-rho)
|
|
* v(n,l,rho);
|
|
}
|
|
|
|
double Y(double l, double m,
|
|
double theta, double phi);
|
|
|
|
double psi(double n, double l, double m,
|
|
double r, double theta, double phi)
|
|
{
|
|
norm(n,l) * R(n,l,r) * Y(l,m,theta,phi);
|
|
}
|
|
double norm(double n, double l)
|
|
{
|
|
double result_squared = pow((2*a/n),3) * factorial(n-l-1) / (2*n) / pow(factorial(n+1),3);
|
|
return sqrt(result_squared);
|
|
}
|
|
|
|
|
|
int main(int argc, char const *argv[])
|
|
{
|
|
// nanometers
|
|
for (double r=0; r<100; r += 0.005)
|
|
std::cout
|
|
<< std::scientific << std::setprecision(6)
|
|
<< r << '\t'
|
|
<< R(1,0,r) << '\t'
|
|
<< R(2,0,r) << '\t'
|
|
<< R(3,0,r) << '\t'
|
|
<< R(4,0,r) << '\t'
|
|
<< R(5,0,r) << '\t'
|
|
<< R(6,0,r) << '\t'
|
|
<< R(7,0,r) << '\t'
|
|
<< R(8,0,r) << '\t'
|
|
<< R(9,0,r) << '\t'
|
|
<< R(10,0,r) << '\t'
|
|
<< R(11,0,r) << '\t'
|
|
<< R(12,0,r) << '\t'
|
|
<< R(13,0,r) << '\t'
|
|
<< R(14,0,r) << '\t'
|
|
<< R(15,0,r);
|
|
|
|
|
|
//for (double r=0; r<100; r += 0.005)
|
|
//std::cout
|
|
// << std::scientific << std::setprecision(6)
|
|
// << r << '\t'
|
|
// << psi(1,0,0,r,0,0) << '\t'
|
|
// << psi(2,0,0,r,0,0) << '\t'
|
|
// << psi(3,0,0,r,0,0) << '\t'
|
|
// << psi(4,0,0,r,0,0) << '\t'
|
|
// << psi(5,0,0,r,0,0) << '\t'
|
|
// << psi(6,0,0,r,0,0) << '\t'
|
|
// << psi(7,0,0,r,0,0) << '\t'
|
|
// << psi(8,0,0,r,0,0) << '\t'
|
|
// << psi(9,0,0,r,0,0) << '\t'
|
|
// << psi(10,0,0,r,0,0) << '\t'
|
|
// << psi(11,0,0,r,0,0) << '\t'
|
|
// << psi(12,0,0,r,0,0) << '\t'
|
|
// << psi(13,0,0,r,0,0) << '\t'
|
|
// << psi(14,0,0,r,0,0) << '\t'
|
|
// << psi(15,0,0,r,0,0);
|
|
return 0;
|
|
}
|
|
|
|
|