Bohr's oscillating helium agrees with experiments

Sample JAVA program of computing real Bohr's helium whose nucleus is oscillating with reduced mass.

Home page
Reduced mass page

Copy & paste the program to execute it.

If you copy and paste the program source code below into a text editor, you can easily compile and run this.
(This class file name is perpen, so save this text editor as "perpen.java", and compile it.)

Input helium total energy

Input helium total energy |E| (eV), and the initial electron-1's y-coordinate (= r2, which increases per calculation up to r2 + 30,  = electron-1 starts from the y-axis to x-axis, moving its 1/4 orbit )

In this program, first we input the initial y-coordinate r2 (in MM) of electron 1 (= the electron-1 starts from y-axis, and electron-2 start from z-axis ), and the absolute value of the total energy E (in eV) of helium atom.

↑ This initial input r2 value increases per calculation of the electron's 1/4 orbit until r2 + 30.

Updating electrons' positions, velocity

From the input energy and initial electron's position, this program outputs de Broglie wavelength of 1/4 orbit, and last velocity of the electron-1 by rigorously calculating Coulomb force at short time intervals.

From the inputted values, this program computes electrons' 1/4 orbits (= electron-1 moves from y-axis to x-axis on x-y place, while electron-2 moves from z-axis to x-axis on the perpendicular x-z plane symmetrically ) by rigorously calculating Coulomb forces among two electrons and a nucleus, de Broglie wavelength, updating electrons' positions, velocities at short time intervals of 1SS (= 1 × 10-23 second ) like in this.

Then, this program outputs electron-1's x (= VX ) and y (= VY ) components of last velocity, last-x-coordinate after the electron has moved a quarter of its orbits from y-axis to x-axis (= electron-1 must cross the x-axis perpendicularly with the last VX velocity being zero to form the most stable symmetrical orbit around the nucleus = so we should choose the uniquely-determined r2 which gives the zero last VX in each different helium total energy E ).

de Broglie wavelength in 1/4 orbit is output.

This program rigorously calculates varying de Broglie wavelengths (= from the updated electron's velocity ) and sums up them at short time intervals to get the total de Broglie wavelength included in 1/4 orbit.

This program also outputs WN (= the number of de Broglie's waves included in one quarter of the orbital, which should be 0.250000 when one orbit is 1 × de Broglie wavelength, which case uniquely gives the predicted helium energy by this real helium model's program ).

Here we use new convenient units of time = 1 SS = 1 × 10-23 second,  distance = 1 MM = 1 × 10-14,   velocity = 1MM/SS = 1 × 109 m/s,  acceleration = 1MM/SS^2 = 1032 m/s^2.

The initial x-coordinate is automatically increased per calculation until +30 (= these different initial y-coordinates give different orbits, out of which we can uniquely determine only one initial y-coordinate that gives a symmetrical orbit around a nucleus with zero x-component of electron-1's last velocity (= VX = 0.000000 ) after electron-1 moves a quarter of its orbit ).

 



import java.util.Scanner;
class perpen {
 public static void main(String[] args) {   

// elecron-1 = e1  electron-2 = e2

// start from e1-nucleus-e2 = the right angle

// electron-1 moves from y to x axis

 
 Scanner stdIn=new Scanner(System.in);    
                                       
// 1MM = 10^-14 meter

// input e1's initial y-coordinate r2 (MM)

 System.out.println("r2 between nucleus and electron 1 (MM) ?");  
 double r=stdIn.nextDouble();

// input absolute value of helium energy

 System.out.println("absolute value of total energy |E| of the herium (eV) ? ");  
 double E=stdIn.nextDouble();

// me = electrons mass (kg)
 
 double me=9.1093826e-31; 

//nucle = helium nuclear mass (kg)

 double nucle=6.64465650e-27;

// rm = reduced mass

 double rm=(2.0*me*nucle)/(2.0*me+nucle); 
 rm= rm*0.5;

// pai = pi,  epsi = electric constant
// h = Planck constant  
// ele = electron's charge
 
 double pai=3.141592653589793;
 double epsi=8.85418781787346e-12;
 double h=6.62606896e-34; 
 double ele=1.60217653e-19;

 for (int i=1;i < 30;i++) {    

// repeat until r2=initial r2+30
                                
// poten = initial Coulomb potential energy

double poten=-(2.0*ele*ele*2.0)/(4.0*pai*epsi*r)+(ele*ele)/(4.0*pai*epsi*r*Math.sqrt(2));
                             
                             
// vya = total energy E - potential energy (J)

double vya=-(E*1.60217646e-19)-poten*1.0e14; 

 if (vya > 0) {
              
// vyb = electron's initial velocity

 double  vyb=Math.sqrt(vya/me);       

// VX,VY= electron-1's x,y-velocity
// VX (= unit MM/SS = 10^9 m/s )

 double VX=-vyb*1.0e-9;   double VY=0.0;      
 
// prexx,preyy = electron-1's x,y-coordinate

 double prexx=0.0;  double preyy=r;

// WN = number of de Broglie wave 

  double WN=0.0;

 double xx,yy,vk,leng,wav;
  
 do {

// time unit = 1SS = 10^-23 second
// xx,yy= electron-1's coordinate after 1SS

    xx=prexx+VX; yy=preyy+VY;        

    vk=VX*VX+VY*VY;    
              //calculation of WN from VX,VY 
                                   
// leng = electron moving length for 1SS (m)

   leng=Math.sqrt(vk)*1.0e-14;    

// wav = de Broglie wavelength = h/mv (m)
 
  wav=h/(rm*Math.sqrt(vk)*1.0e9); 

// WN = sum of de Broglie wavelength 

    WN=WN+leng/wav;
           // ra = distance between electron and nucleus
                                   
    double ra=Math.sqrt(prexx*prexx+preyy*preyy);       

// rb = distance between two electrons

    double rb=Math.sqrt(4.0*prexx*prexx+2.0*preyy*preyy);

// change length unit from MM to meter

    ra=ra*1.0e-14; rb=rb*1.0e-14; 
    prexx=prexx*1.0e-14; preyy=preyy*1.0e-14;

    double ac=(ele*ele)/(4*pai*epsi*rm);
                                      
// computing acceleration from Coulomb force 

// update x-velocity VX, acceleration (MM/SS^2)

    VX=VX+1.0e-32*ac*prexx*(-2.0/(ra*ra*ra)+2.0/(rb*rb*rb));   
             

// update y-velocity VY from acceleration 
                       
    VY=VY+1.0e-32*ac*preyy*(-2.0/(ra*ra*ra)+1.0/(rb*rb*rb));

    prexx=xx;preyy=yy;
  
   } while (yy > 0);            

// repeat until electron-1 has moved 1/4 orbit
// repeat until electron-1 reaches x-asis

// display initial e1's y-coordinate r1
        
  System.out.print("r2: "+r+"   ");

// display electron-1's x,y-velocity VX,VY

  System.out.printf("VY:%.6f ", VY);
  System.out.printf("VX:%.6f ", VX);

// display electron-1's last x-coordinate

 System.out.printf("last-x:%.2f ", xx);

// WN = total de Broglie wavelength of 1/4 orbit
  
  System.out.printf("WN: %.6f  \n", WN);
    
   }  r=r+1;
   }}}