Sample JAVA program to calculate the Helium orbits (manipulating reduced mass).

top page
Back to no helium compound page

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 remass, so save this text editor as "remass.java", and compile it.)
In this program, we first input the number ( 1-3 ) of reduced mass conditions.
In "Normal" condition (= 1 ), we use the redeuced mass except when the center of mass is at the origin.
In "Not reduced mass" (= 2 ) condition, we always use the usual mass.
In "All reduced mass" (= 3 ) condition, we always use the reduced mass even when the center of mass is at the origin.

Next we input the initial x-coordinate r1 (in MM) of electron 1, and the absolute value of the total energy E (in eV) of Helium. From the inputted values, this program outputs the y component of electron 1 velocity in Fig. 13, and WN (the number of de Broglie's waves contained in one quarter of the orbital). Here 1 SS = 1 × 10-23 second.
The initial x-coodinate is automatically increased per calculation until +30.


import java.util.Scanner;
class remass {
 public static void main(String[] args) {   //  1SS = 10^-23 sec, reduced mass manipulation
 
 Scanner stdIn=new Scanner(System.in);    
                                       // input reduced mass condition
 System.out.println("Input 1 (=Normal), 2 (=NOT reduced mass)  or 3 (=All reduced mass)");  
 double ree=stdIn.nextDouble();
 if (ree==1 || ree==2 || ree==3) {
                                       // input r1 and |E|
 System.out.println("r1 between nucleus and electron 1 (MM) ?");  
 double r=stdIn.nextDouble();
 System.out.println("total energy |E| in the herium (eV) ? ");  
 double E=stdIn.nextDouble();
 
 double me=9.1093826e-31; 
 double nucle=6.64465650e-27;
 double rm=(2*me*nucle)/(2*me+nucle); rm=rm*0.5;   // rm =reduced mass
 
 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 r1=initial r1+30
                                
                             // calculation of initial VY from E and r1    
double poten=-(2*ele*ele*2)/(4*pai*epsi*r)+(ele*ele)/(4*pai*epsi*2*r);
                             
                             //vya= total E-potential energy= kinetic energy  
double vya=-(E*1.60217646e-19)-poten*1.0e14; 
 if (vya > 0) {
              double vyb=0.0;  // vyb=initial velocity of one of two electrons (m/s)
 if (ree==3) {vyb=Math.sqrt(vya/rm);}    // All reducled mass -- ree=3
   else {vyb=Math.sqrt(vya/me);}         // initial states = usual electron mass 
 double VY=vyb*1.0e-9;         // change m/sec to MM/SS
 
 double prexx=r; double VX=0.0; double WN=0.0; double preyy=0.0; 
 double xx,yy,vk,preVY,preWN,midWN;
  
 do {
    xx=prexx+VX; yy=preyy+VY;        //electron 1 position after 1SS
    preVY=VY;preWN=WN ;
    vk=VX*VX+VY*VY;                  //calculation of WN from VX,VY 
                                    // adding number of de Broglie waves

    if (ree==2) {WN=WN+(me*vk*1.0e-5)/h;}  // Not using reduced mass -- ree=2
    else {WN=WN+(rm*vk*1.0e-5)/h;}                        
                                   //calculation of VX,VY from Coulomb force
    double ra=Math.sqrt(prexx*prexx+preyy*preyy);       
    double rb=Math.sqrt(4.0*prexx*prexx+2.0*preyy*preyy);
    ra=ra*1.0e-14; rb=rb*1.0e-14; 
    prexx=prexx*1.0e-14; preyy=preyy*1.0e-14;
    double ac=(2*ele*ele)/(4*pai*epsi*rm);
    if (ree==2) {ac=(2*ele*ele)/(4*pai*epsi*me);}  // Not using reduced mass
                                        // change velocity VX from Coulomb force
    VX=VX+1.0e-32*ac*prexx*(-1.0/(ra*ra*ra)+1.0/(rb*rb*rb));   
                                        // change velocity VY from Coulomb force
    VY=VY+1.0e-32*ac*preyy*(-1.0/(ra*ra*ra)+0.5/(rb*rb*rb));
    prexx=xx;preyy=yy;
  
   } while (xx > 0);              //repeat above until electron 1 arive at y axis 
   if (VY > -0.00001 && VY < 0.00001) {    // last VY condition           
  System.out.print("r1: "+r+"   ");
  System.out.printf("VX:%.6f   ", VX);
  System.out.printf("VY:%.6f   ", VY);
  System.out.printf("preVY:%.6f  ", preVY);
  midWN=(preWN+WN)/2; System.out.printf("midWN:%.6f  \n", midWN);
    }
   }  r=r+1;
   }}}}