Sample JAVA program to visualize the electrons of Bohr model oxygen molecule.

Back to the C-C bond page
Top page ( correct Bohr model including the two electron atom )

This program is a little long. So if you copy and paste the below program source code into a text editor, you can easily compile and run this.
This program's class file name is oxymol, so save this text editor as "oxymol.java", and compile it.

In this program, nuclei are gray circles.
Each particle is shown on x-y and the x-z planes.
Here we use the new units, ( 1 MM = 10-14 meter).
Each coordinate of electrons (+X (MM), +Y (MM), +Z (MM)) in the text box means "relative" position from these nuclei.
(ele 0-5 are from oxygen nucleus 0 (O0), ele 6-11 are from O1.)
You can change the coordinates (+X, +Y, +Z) of electrons (0,2,4).
Other electrons are arranged automatically based on these electrons.
(Enter the values into the textboxes of ele 0,2,4 and press the Enter key.)
"nuc (MM)" means the distance between these nuclei and electrons.
V (eV) and T (eV) means the potential, and kinetic energies of each electron.
tV (eV) is the total potential energy.
CF means the force toward the center.
(fx, fy, fz) means force components other than CF.
(FX, FY, FZ) means the force component acting on each nucleus.
Waves (wn) is number of de Broglie's waves contained in one orbit.
When you choose the value of the scrollbar, and click the O=O (MM) button, O=O length of O2 changes.


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Scanner;
public class oxymol extends JPanel     // virial theorem of O2
 {
  public static void main(String arg[])
 {
   JFrame frame = new JFrame("O=O (oxygen molecule)");
   J2DPanel j2dpanel = new J2DPanel();
   frame.getContentPane().add(j2dpanel); frame.setSize(1180,720);
   frame.setVisible(true); frame.setBackground(Color.black);
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  }
  }
 class J2DPanel extends JPanel implements ActionListener
  {
    
    double pai=3.141592653589793; double epsi=8.85418781787346e-12;
   double h=6.62606896e-34; double elc=1.60217653e-19;
   double me=9.1093826e-31;  double suh=5200.0*5200.0; // suh=(Bohr radius)^2
 
    JTextField elp[][]=new JTextField[9][11];  JTextField impho=new JTextField(7); 
    JTextField mmpho[][]=new JTextField[2][3];  JButton b1=new JButton("O=O (MM)");
     String ope[]={"11000","12074","13000"};   // scrollbar of O=O distances
    JComboBox coom=new JComboBox(ope); 
    
    double rtw=Math.sqrt(2); double rth=Math.sqrt(3); 
    double rsi=Math.sqrt(6); double rfi=Math.sqrt(5);
    double hpr[][]=new double[12][11]; 
  
    double den=6.271;                         // den = central charge
    double oolen=12074.0;                     // oolen= O=O length (MM)

                                    // nux[0-1][0-2] nuclear coordinate of oxygen
    double nux[][]={{18571.28-oolen*0.5, 13214.18, 13214.18, den},
     {18571.28+oolen*0.5, 13214.18, 13214.18, den}};                          

                                       // te1[][]=control O=O: 12074 MM
    double te1[][]={{3295, 0, -3165}, {3295, 0, 3165}, 
    {-3200, 0, 3260}, {10, -4580, 0}, 
    {-3295, -3165, 0}, {+3200, 3260, 0}, {3200, -3260, 0},
    {-10, 0, -4580}, {-10, 0, 4580}};

                                      // te2[][]  O=O: 13000 MM
    double te2[][]={{3295, 0, -3178}, {3295, 0, 3178}, 
    {-3200, 0, 3263}, {5, -4584, 0}, 
    {-3295, -3178, 0}, {+3200, 3263, 0}, {3200, -3263, 0},
    {-5, 0, -4584}, {-5, 0, 4584}};

                                      // te3[][]  O=O: 11000 MM
    double te3[][]={{3295, 0, -3154}, {3295, 0, 3154}, 
    {-3195, 0, 3269}, {15, -4582, 0}, 
    {-3295, -3154, 0}, {+3195, 3269, 0}, {3195, -3269, 0},
    {-15, 0, -4582}, {-15, 0, 4582}};

  public J2DPanel()
 {
  setBackground(Color.black);
  JPanel p=new JPanel();
  p.setLayout(new GridLayout(11,12));
  int aaa=0; 
                     //  elp[el=0-8][] : textboxes of electrons 0,1,2,4,6,8,9,10,11              
  for (int el=0; el <=8; el++) {         
  for (int pos=0; pos <=2; pos++) {
  elp[el][pos]=new JTextField(7); 
  if (el == 0) {elp[el][pos].addActionListener(this);}
  if (el== 2 || el==3) {elp[el][pos].addActionListener(this);}
  }}
                                   
   for (int el=0; el <=8; el++) {        
  for (int pos=3; pos <=10; pos++) {
  elp[el][pos]=new JTextField(7);     
  }}
                           // mmpho[0-1][] = textboxes of nuclei O-0 and O-1
   for (int el=0; el <=1; el++) {
   for (int pos=0; pos <=2; pos++) {
    mmpho[el][pos]=new JTextField(7);
   }}

                                        // layout
   String sihy[]={"eNo ", "+X(MM)", "+Y(MM)", "+Z(MM)", "nuc(MM)", 
   "V(eV)", "T(eV)", "Force", "fx ", "fy", "fz", "Waves"};
  for (int el=0; el <= 11; el++) {
   p.add(new Label(sihy[el]));
  }

   String yy;
  for (int el=0; el <=8; el++) {   
  yy=" ";    
  if (el==0) {yy="ele "; aaa=0;}
  if (el==1) {yy=" "; aaa=1;}
  if (el == 2) {yy="ele "; aaa=2;}
  if (el == 3) {yy="ele "; aaa=4;}
  if (el==4) {yy=" "; aaa=6;}
  if (el == 5) {yy=" "; aaa=8;}
  if (el == 6) {yy=" "; aaa=9;}
  if (el==7) {yy=" "; aaa=10;}
  if (el == 8) {yy=" "; aaa=11;}
  p.add(new Label(yy+aaa+" "));
  for (int pos=0; pos <=10; pos++) {
  p.add(elp[el][pos]);
  }}

   p.add(new Label("O-0nuc "));
  for (int pos=0; pos <=2; pos++) {
  p.add(mmpho[0][pos]);  
  }
    p.add(new Label(" -- ")); p.add(impho);
    p.add(new Label("O1 nuc "));
  for (int pos=0; pos <=2; pos++) {
  p.add(mmpho[1][pos]);  
  }
   
   p.add(b1); p.add(coom); coom.setSelectedItem("12074"); b1.addActionListener(this);
   
  
  add(p,"South");
  
   for (int el=0; el <=8; el++) {
   double nnuc=Math.sqrt(te1[el][0]*te1[el][0]+te1[el][1]*te1[el][1]+te1[el][2]*te1[el][2]);
   aaa=(int)(nnuc); 
   elp[el][3].setText(Integer.toString(aaa));
 
    for (int jou=0; jou <=2; jou++) {          
    if (el < 3) {hpr[el][jou]=te1[el][jou]+nux[0][jou];}
    if (el== 3) {hpr[4][jou]=te1[3][jou]+nux[0][jou];}
    if (el== 4) {hpr[6][jou]=te1[4][jou]+nux[0][jou];}
     if (el > 4) {hpr[el+3][jou]=te1[el][jou]+nux[1][jou];}
      
     elp[el][jou].setText(Integer.toString((int)(te1[el][jou])));
     }}
   
  }     // public J2DPanel() end
 
  public void actionPerformed(ActionEvent e) {  
    String ss; double Rf=0.0;
   
    if (e.getSource() == b1) {          // when O=O distance change (b1 click)
   ss=(String)coom.getSelectedItem();
   if (ss=="11000") {oolen=11000;}  if (ss=="12074") {oolen=12074; } 
   if (ss=="13000") {oolen=13000;} 
   double nuxx[][]={{18571.28-oolen*0.5, 13214.18, 13214.18},
     {18571.28+oolen*0.5, 13214.18, 13214.18}};
    
    for (int ett=0; ett <= 1; ett++) {
     for (int sws=0; sws <=2; sws++) { 
     nux[ett][sws]=nuxx[ett][sws];
    }}
      for (int ett=0; ett <= 8; ett++) {
      for (int sws=0; sws <= 2; sws++) {  
     if (oolen==11000) {Rf=te3[ett][sws];}  if (oolen==12074) {Rf=te1[ett][sws];}  
     if (oolen==13000) {Rf=te2[ett][sws];}    
    elp[ett][sws].setText(Integer.toString((int)Rf));
     }}
    }

   repaint();
  }

  public void update(Graphics g)
 {
  paint(g);
 }
 public void paintComponent(Graphics g)
 {
   
  double kro,krr,krk,kro2,krr2,krk2,kkk,kkk2, pot,pota,potb,
  pot2,pota2,potb2,potc,potc2,gx,gy,gz,ggx,ggy,ggz,ttav,toav;
  kro=0.0; krr=0.0; krk=0.0; kro2=0.0; krr2=0.0; krk2=0.0; kkk=0.0; kkk2=0.0;
  int ex,ey,ez,xk,yk,zk; String ww,pyw;
  double rhp[][]= {{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},
  {0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,0,0,0,0,0},
  {0,0,0,0,0,0},{0,0,0,0,0,0}};
  double rpp[][]= {{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}};
  double mmp[][]={{0,0,0,0},{0,0,0,0}};  
  double teqq[][]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
   double noxx[][]={{0,0,0,0},{0,0,0,0}}; 
 
                         // set electrons 0(=elp[0][0-2]), 2(=elp[2][0-2]), 4(=elp[3][0-2]) 
   elp[0][1].setText("0");  elp[2][1].setText("0");  elp[3][2].setText("0"); 
   for (int jou=0; jou <=2; jou++) {
   ww=elp[0][jou].getText(); gx=Double.parseDouble(ww);
   hpr[0][jou]=gx;                               
    }       
   for (int jou=0; jou <=2; jou++) {
   ww=elp[2][jou].getText(); gx=Double.parseDouble(ww);
   hpr[2][jou]=gx;                                
    }   
   for (int jou=0; jou <=2; jou++) {
   ww=elp[3][jou].getText(); gx=Double.parseDouble(ww);
   hpr[4][jou]=gx;                                
    }     
                 // set electrons 1, 3, and 5-11 based on the upper ele 0, 2, 4                         
   hpr[1][0]=hpr[0][0]; hpr[1][1]=0.0; hpr[1][2]=-hpr[0][2];
   hpr[6][0]=-hpr[0][0]; hpr[6][1]=hpr[0][2]; hpr[6][2]=0.0;
   hpr[7][0]=-hpr[0][0]; hpr[7][1]=-hpr[0][2]; hpr[7][2]=0.0;

   hpr[3][0]=hpr[2][0]; hpr[3][1]=0.0; hpr[3][2]=-hpr[2][2];
   hpr[8][0]=-hpr[2][0]; hpr[8][1]=hpr[2][2]; hpr[8][2]=0.0;
   hpr[9][0]=-hpr[2][0]; hpr[9][1]=-hpr[2][2]; hpr[9][2]=0.0;

   hpr[5][0]=hpr[4][0]; hpr[5][1]=-hpr[4][1]; hpr[5][2]=0.0;
   hpr[10][0]=-hpr[4][0]; hpr[10][1]=0.0; hpr[10][2]=hpr[4][1];
   hpr[11][0]=-hpr[4][0]; hpr[11][1]=0.0; hpr[11][2]=-hpr[4][1];

   
     for (int yp=0; yp <=5; yp++) { 
   for (int jou=0; jou <=2; jou++) {
   if (yp==1) {elp[1][jou].setText(Integer.toString((int)hpr[yp][jou]));}
   hpr[yp][jou]=hpr[yp][jou]+nux[0][jou];   // hpr[0-11][0-2] = absolute coordinate
   }}

   for (int yp=6; yp <=11; yp++) { 
   for (int jou=0; jou <=2; jou++) {
   if (yp==6) {elp[4][jou].setText(Integer.toString((int)hpr[yp][jou]));}
   if (yp > 7) {elp[yp-3][jou].setText(Integer.toString((int)hpr[yp][jou]));}
   hpr[yp][jou]=hpr[yp][jou]+nux[1][jou];
   }}

                                   // noxx[0][0-2]=center of electrons 0-5
                                   // noxx[1][0-2]=center of electrons 6-11

   for (int yp=0; yp <=5; yp++) { 
   for (int jou=0; jou <=2; jou++) {
   noxx[0][jou]=noxx[0][jou]+hpr[yp][jou];
   noxx[1][jou]=noxx[1][jou]+hpr[yp+6][jou];
    }}
    for (int jou=0; jou <=2; jou++) {
    noxx[0][jou]=noxx[0][jou]/6.0;  noxx[1][jou]=noxx[1][jou]/6.0;
    }
             
    toav=0.0;              // toav=total potential energy (eV)

     double ppot;
             //------------------------- interaction among electrons 0-5, (and among 6-11)

   for (int yp=0; yp <=5; yp++) {             
    for (int kj=0; kj <=5; kj++) { 
    if (yp < kj ) {                    // kro =distance between electrons 0-5
    kro=Math.sqrt((hpr[yp][0]-hpr[kj][0])*(hpr[yp][0]-hpr[kj][0])+
   (hpr[yp][1]-hpr[kj][1])*(hpr[yp][1]-hpr[kj][1])+
   (hpr[yp][2]-hpr[kj][2])*(hpr[yp][2]-hpr[kj][2]));
   if (kro==0) {kro=5000.0;}
                                    // kro2 =distance between electrons 6-11
    kro2=Math.sqrt((hpr[yp+6][0]-hpr[kj+6][0])*(hpr[yp+6][0]-hpr[kj+6][0])+
   (hpr[yp+6][1]-hpr[kj+6][1])*(hpr[yp+6][1]-hpr[kj+6][1])+
   (hpr[yp+6][2]-hpr[kj+6][2])*(hpr[yp+6][2]-hpr[kj+6][2]));
    if (kro2==0) {kro2=5000.0;}
     ppot=(elc*elc*6.241509e18)/(4*pai*epsi*kro*1.0e-14);   // potential energy (eV)
     potb=(elc*elc*6.241509e18)/(4*pai*epsi*kro2*1.0e-14); 
    toav=toav+ppot+potb;   

                                      // rhp[el][3] = each electron's V (eV)
                             // teqq[el][3] = each electron's V (eV) only in oxygen atom
   rhp[yp][3]=rhp[yp][3]+ppot/2.0; rhp[kj][3]=rhp[kj][3]+ppot/2.0;
   teqq[yp][3]=teqq[yp][3]+ppot/2.0;  teqq[kj][3]=teqq[kj][3]+ppot/2.0;
   rhp[yp+6][3]=rhp[yp+6][3]+potb/2.0; rhp[kj+6][3]=rhp[kj+6][3]+potb/2.0;
   teqq[yp+6][3]=teqq[yp+6][3]+potb/2.0;  teqq[kj+6][3]=teqq[kj+6][3]+potb/2.0;
    for (int jou=0; jou <=2; jou++) {
                               // ggx=force components between electrons
                                // rhp[el][0-2]=force components acting on each electron
                       // teqq[el][0-2]=force components acting on electron only in oxygen atom
   ggx=(suh*(hpr[yp][jou]-hpr[kj][jou]))/(kro*kro*kro);
   rhp[yp][jou]=rhp[yp][jou]+ggx; rhp[kj][jou]=rhp[kj][jou]-ggx;   
   teqq[yp][jou]=teqq[yp][jou]+ggx; teqq[kj][jou]=teqq[kj][jou]-ggx;
   ggy=(suh*(hpr[yp+6][jou]-hpr[kj+6][jou]))/(kro2*kro2*kro2);
   rhp[yp+6][jou]=rhp[yp+6][jou]+ggy; rhp[kj+6][jou]=rhp[kj+6][jou]-ggy;   
   teqq[yp+6][jou]=teqq[yp+6][jou]+ggy; teqq[kj+6][jou]=teqq[kj+6][jou]-ggy;
    } 
   }}}  

         //---------------------------------- interaction between ele (0-5) x ele (6-11)

    for (int yp=0; yp <=5; yp++) {    
    for (int kj=6; kj <=11; kj++) { 
    kro=Math.sqrt((hpr[yp][0]-hpr[kj][0])*(hpr[yp][0]-hpr[kj][0])+
   (hpr[yp][1]-hpr[kj][1])*(hpr[yp][1]-hpr[kj][1])+
   (hpr[yp][2]-hpr[kj][2])*(hpr[yp][2]-hpr[kj][2]));
   if (kro==0) {kro=5000.0;}
    pot=(elc*elc*6.241509e18)/(4*pai*epsi*kro*1.0e-14);   // potential energy (eV)
    rhp[yp][3]=rhp[yp][3]+pot/2.0; rhp[kj][3]=rhp[kj][3]+pot/2.0;
    toav=toav+pot;
      for (int jou=0; jou <=2; jou++) {
   ggx=(suh*(hpr[yp][jou]-hpr[kj][jou]))/(kro*kro*kro);
   rhp[yp][jou]=rhp[yp][jou]+ggx; rhp[kj][jou]=rhp[kj][jou]-ggx;
                     // rpp[0-11][0-2] = the total force from other nuclei's electrons and 2 nuclei
   rpp[yp][jou]=rpp[yp][jou]+ggx;  rpp[kj][jou]=rpp[kj][jou]-ggx;  
    }
     }}    

      //------------------------ interaction between noxx and ele0-5 (and ele 6-11) 

    for (int rv=0; rv <=5; rv++) {     
                             // kro=distance between electrons 0-5 and noxx[0][] 
    kro=Math.sqrt((hpr[rv][0]-noxx[0][0])*(hpr[rv][0]-noxx[0][0])+
   (hpr[rv][1]-noxx[0][1])*(hpr[rv][1]-noxx[0][1])+
   (hpr[rv][2]-noxx[0][2])*(hpr[rv][2]-noxx[0][2]));
    if (kro == 0) {kro=5000.0;} 
                            // kro2=distance between electrons 6-11 and noxx[1][]
    kro2=Math.sqrt((hpr[rv+6][0]-noxx[1][0])*(hpr[rv+6][0]-noxx[1][0])+
   (hpr[rv+6][1]-noxx[1][1])*(hpr[rv+6][1]-noxx[1][1])+
   (hpr[rv+6][2]-noxx[1][2])*(hpr[rv+6][2]-noxx[1][2]));
    if (kro2 == 0) {kro2=5000.0;}   
       ppot=(elc*elc*den*6.241509e18)/(4*pai*epsi*kro*1.0e-14);
      teqq[rv][3]=teqq[rv][3]-ppot;     // teqq[0-5][3]=potential energy only in oxygen 0 atom
        potb=(elc*elc*den*6.241509e18)/(4*pai*epsi*kro2*1.0e-14);
      teqq[rv+6][3]=teqq[rv+6][3]-potb;  // teqq[6-11][3]=potential energy only in oxygen 1 atom 
    for (int jou=0; jou <=2; jou++) {
     ggx=(suh*den*(hpr[rv][jou]-noxx[0][jou]))/(kro*kro*kro);
     ggy=(suh*den*(hpr[rv+6][jou]-noxx[1][jou]))/(kro2*kro2*kro2);
     teqq[rv][jou]=teqq[rv][jou]-ggx; teqq[rv+6][jou]=teqq[rv+6][jou]-ggy;
     }}

                                    // interaction between electrons and nuclei
   for (int rv=0; rv <=11; rv++) {    
                                              // ---------------- O 0,1nucleus

   for (int yp=0; yp <=1; yp++) {
   kro=Math.sqrt((hpr[rv][0]-nux[yp][0])*(hpr[rv][0]-nux[yp][0])+
   (hpr[rv][1]-nux[yp][1])*(hpr[rv][1]-nux[yp][1])+
   (hpr[rv][2]-nux[yp][2])*(hpr[rv][2]-nux[yp][2])); kro2=1000.0;
    if (kro == 0) {kro=5000.0;}

    pot =-den/kro;         
   ttav= (elc*elc*6.241509e18*pot)/(4*pai*epsi*1.0e-14);     // ttav=potential energy (eV)
   rhp[rv][3]=rhp[rv][3]+ttav;  toav=toav+ttav;   gx=0;
      
        
   if (rv < 6 && yp==0) {ex=(int)(kro); gx=1; 
                          // show distance between electrons 0-2,4 and O-0 nucleus
   if (rv < 3) {elp[rv][3].setText("nuc "+Integer.toString(ex)); }
   if (rv ==4) {elp[3][3].setText("nuc "+Integer.toString(ex)); }
    }

   if (rv > 5 && yp==1) { ex=(int)(kro);  gx=2;
                          // show distance between electrons 6,8,9-11 and O-1 nucleus
     if (rv==6)  {elp[4][3].setText("nuc "+Integer.toString(ex));}
     if (rv > 7)  {elp[rv-3][3].setText("nuc "+Integer.toString(ex));} 
    }   

                        // rhp[rv][5]=interaction between each electron and another nucleus
   if (gx==0) {rhp[rv][5]=rhp[rv][5]+ttav;}

   for (int kj=0; kj <=2; kj++) {  
                    // ggx (ggy) = force component between O nucleus and each electron                                      
   ggx=(suh*den*(hpr[rv][kj]-nux[yp][kj]))/(kro*kro*kro); 
                   // mmp[0-1][0-2]=force component acting on O-0,1nuclei
                 // rpp[0-11][0-2] = the total force from another nuclear electrons and 2 nuclei
    mmp[yp][kj]=mmp[yp][kj]+ggx;  rhp[rv][kj]=rhp[rv][kj]-ggx; rpp[rv][kj]=rpp[rv][kj]-ggx;
   }
   }                              
   }       
                   
    potc=0.0; double potf=0.0;       // interaction between 2 oxygen nuclei
    
     kro=Math.sqrt((nux[0][0]-nux[1][0])*(nux[0][0]-nux[1][0])+
  (nux[0][1]-nux[1][1])*(nux[0][1]-nux[1][1])+
   (nux[0][2]-nux[1][2])*(nux[0][2]-nux[1][2]));

    ttav=(elc*elc*6.241509e18*den*den)/(4*pai*epsi*kro*1.0e-14);
    toav=toav+ttav; potc=ttav;       // potc = repulsive potential energy between 2 nuclei   
      for (int jou=0; jou <=2; jou++) {
                                  // ggx=force between 2 nuclei
     ggx=(suh*den*den*(nux[0][jou]-nux[1][jou]))/(kro*kro*kro);
     mmp[0][jou]=mmp[0][jou]+ggx; 
     mmp[1][jou]=mmp[1][jou]-ggx;
    }

                                        
   ex=(int)(100*toav); ggx=ex/100.0;
   impho.setText("tV "+Double.toString(ggx));     // show total V to two decimal places
 
                      // distribute repulsive V among nuclei to each electron based on rhp[][5]
     double hiwa=0.0;
  for (int rv=0; rv <=11; rv++) { hiwa=hiwa+rhp[rv][5]; }
  for (int rv=0; rv <=11; rv++) {
  rhp[rv][3]=rhp[rv][3]+(potc*rhp[rv][5])/hiwa;
  
   ex=(int)(100*rhp[rv][3]); ggx=ex/100.0;
   if (rv < 3) {elp[rv][4].setText("V "+Double.toString(ggx));}
   if (rv==4) {elp[3][4].setText("V "+Double.toString(ggx));}
    if (rv==6) {elp[4][4].setText("V "+Double.toString(ggx));}
    if (rv > 7) {elp[rv-3][4].setText("V "+Double.toString(ggx));}
   }

   gx=0.0;                       // gx=sum of each potential energy
   for (int rv=0; rv <=11; rv++) { gx=gx+rhp[rv][3]; }    
                               
   gy=-toav*0.5;             // gy=total kinetic energy (eV)       
                            // distribute kinetic energy to each electron based on rhp[][3]
   for (int rv=0; rv <=11; rv++) {       
    gz=(gy*rhp[rv][3])/gx; rhp[rv][4]=gz;    
   ex=(int)(100*gz); gz=ex/100.0; 
    if (rv < 3) {elp[rv][5].setText("T "+Double.toString(gz));}
     if (rv==4) {elp[3][5].setText("T "+Double.toString(gz));}
     if (rv==6) {elp[4][5].setText("T "+Double.toString(gz));}
    if (rv > 7) {elp[rv-3][5].setText("T "+Double.toString(gz));} 
    }               
   
    int rvv=0;
    for (int el=0; el <=1; el++) {
    for (int rv=0; rv <=5; rv++) {        // show force component acting on elctrons 0-11 
    rvv=rv+el*6;
    gx=Math.sqrt(rpp[rvv][0]*rpp[rvv][0]+rpp[rvv][1]*rpp[rvv][1]+rpp[rvv][2]*rpp[rvv][2]);
    gy=(rhp[rvv][0]*rpp[rvv][0]+rhp[rvv][1]*rpp[rvv][1]+rhp[rvv][2]*rpp[rvv][2])/gx;

    ex=(int)(1000*gy); ww="CF ";             // CF = force in the direction of rpp
    if (rvv < 3) {elp[rvv][6].setText(ww+Integer.toString(ex));}
    if (rvv==4) {elp[3][6].setText(ww+Integer.toString(ex));}
    if (rvv==6) {elp[4][6].setText(ww+Integer.toString(ex));}
    if (rvv > 7) {elp[rvv-3][6].setText(ww+Integer.toString(ex));}
    for (int jou=0; jou <=2; jou++) {                                 
    gz=rhp[rvv][jou]-(gy*rpp[rvv][jou])/gx;
    ex=(int)(1000*gz);       // show force component other than CF
    if (rvv < 3) {elp[rvv][jou+7].setText(Integer.toString(ex));}
    if (rvv==4) {elp[3][jou+7].setText(Integer.toString(ex));}
    if (rvv==6) {elp[4][jou+7].setText(Integer.toString(ex));}
    if (rvv > 7) {elp[rvv-3][jou+7].setText(Integer.toString(ex));}
     }
    }}
                                      

    for (int rv=0; rv <=1; rv++) {
    for (int jou=0; jou <=2; jou++) {       // show mmpho[0-1][0-2]= force acting on each electron
    ex=(int)(1000*mmp[rv][jou]); ww=" ";
   if (jou==0) {ww="FX=";}
   if (jou==1) {ww="FY=";}
   if (jou==2) {ww="FZ=";}
    mmpho[rv][jou].setText(ww+Integer.toString(ex));
    }}
                                                                             
                                 
   for (int rv=0; rv <=11; rv++) {         // show de Broglie wave of each electron
                                         
                            // gz=force only in each oxygen atom
   gz=Math.sqrt(teqq[rv][0]*teqq[rv][0]+teqq[rv][1]*teqq[rv][1]+teqq[rv][2]*teqq[rv][2]);
    
   gy=(gz*elc*elc)/(4*pai*epsi*suh*1.0e-28);    // gy=force (N)
   
                       // electrons 0-5 use potential V (and T) only in each oxygen atom
    gx=Math.sqrt((-teqq[rv][3]*1.602177e-19)/me);   // gx=velocity (m/s)

   ggx=(me*gx*gx)/gy;             // ggx= "temporary" radius (m)
   ggy=(2*pai*ggx*me*gx)/h;       // ggy (wn) = number of de Broglie's waves contained in one orbit 
   
  ex=(int)(ggy*1000);  ggy=ex/1000.0;   // show wn to three decimal places
  if (rv <3) {elp[rv][10].setText("wn "+Double.toString(ggy));}
  if (rv==4) {elp[3][10].setText("wn "+Double.toString(ggy));}
  if (rv==6) {elp[4][10].setText("wn "+Double.toString(ggy));}
  if (rv >7) {elp[rv-3][10].setText("wn "+Double.toString(ggy));}
   }

                          // --------------------- show picture
   int nmx[][]=new int[2][3]; int hpk[][]=new int[12][4]; 

  for (int yp=0; yp <=1; yp++) {
  for (int kj=0; kj <=2; kj++) {     // change MM to pixel in nuclei
  nmx[yp][kj]=(int)(nux[yp][kj]/71.428);
  }}
  for (int yp=0; yp <=11; yp++) {
  for (int kj=0; kj <=2; kj++) {     // change MM to pixel in electrons
  hpk[yp][kj]=(int)(hpr[yp][kj]/71.428);
   if (hpk[yp][kj] > 529 && kj==0) {hpk[yp][kj]=529;}    // upper and lower limit
   if (hpk[yp][kj] > 369 && kj > 0) {hpk[yp][kj]=369;} 
   if (hpk[yp][kj] < 1) {hpk[yp][kj]=1;}
  }}

  g.clearRect(9,299,1170,699);
  g.setColor(Color.cyan); g.drawLine(555,310,555,660); 

  g.setColor(Color.lightGray);         // show 2 oxygen nuclei
  for (int rv=0; rv <=1; rv++) {
  g.fillOval(nmx[rv][0]+10,670-nmx[rv][1],20,20);g.fillOval(550+nmx[rv][0],670-nmx[0][2],20,20);
   }


    for (int rv=0; rv <=11; rv++) {
  
  g.setColor(Color.white);     // set color based on each electron
  if (rv > 1 && rv < 4) {g.setColor(Color.red);}
  if (rv > 3 && rv < 6) {g.setColor(Color.green);}
   if (rv > 5 && rv < 8) {g.setColor(Color.pink);}
    if (rv > 7 && rv < 10) {g.setColor(Color.green);}
    if (rv > 9 && rv < 12) {g.setColor(Color.yellow);}
       
  g.fillOval(hpk[rv][0]+13,673-hpk[rv][1],14,14); 
  g.fillOval(hpk[rv][0]+553,673-hpk[rv][2],14,14);
  }
     
    g.setColor(Color.white);                // show each oxygen nuclear number
   ww="O-"+Integer.toString(0);
  g.drawString(ww,nmx[0][0]+11,685-nmx[0][1]);
   ww="O-"+Integer.toString(1);
  g.drawString(ww,nmx[1][0]+551,685-nmx[1][2] );
  
                                  
  for (int rw=0; rw <=11; rw++) {         // show each electron's number
  g.setColor(Color.blue);
  if (rw < 10) {
  g.drawString(Integer.toString(rw),hpk[rw][0]+17,685-hpk[rw][1]);
  g.drawString(Integer.toString(rw),hpk[rw][0]+557,685-hpk[rw][2] );}
  if (rw > 9) {
   g.drawString(Integer.toString(rw),hpk[rw][0]+14,685-hpk[rw][1]);
  g.drawString(Integer.toString(rw),hpk[rw][0]+554,685-hpk[rw][2] );}
    
  }
   }
   }