2原子分子のページに戻る
トップページ(2電子原子も含む新ボーア模型)
このプログラムは少し長いので、下に示すソースプログラムをコピーして、テキストエディタ(メモ帳など)にそのまま貼り付けて、コンパイルすれば簡単に実行できる。
このプログラムの class file name は twoato なので、このデキストエディタを "twoato.java" のファイル名で保存してコンパイルしてほしい。
JAVA の あるバージョンでは コンパイル後 "-Xlint : unchecked ---" などの警告がでることがあるが それを無視して そのまま実行できる。
このプログラムでは、A と B の原子核(灰色の円)は、 左と右に位置している。
ここでは、新しい単位として ( 1 MM = 10-14 meter) を使っている。
テキストボックス内の電子の各座標 (+X (MM), +Y (MM), +Z (MM)) は、この原子核からの”相対的な”位置座標を示している。
(このテキストボックス内に値を入力して、エンターキーを押せば自由に座標の値を変更できる。)
"nuc (MM)" は各電子と核の距離を意味している。
" charge Z " は 原子の中心の正電荷である。
"internuc" は 2つの原子核間の距離である。
(この "internuc"、 "nuc"、 "charge Z "の値は、所定のボックスに値を入力して 各ボタンを押せば自由に変更できる。)
H、C、O、N、F、Si、S、P、Cl の原子をスクロールバーの中から選んで A ( もしくは B ) atom ボタンをクリックすると、各原子の種類が変わる。
"AB change" ボタンをクリックすれば 画面に表示される原子 A と B を変更できる。
指定のテキストボックス内に 角度 (°) を入力して "x-y ang"、"x-z ang"、"y-z ang" ボタンをクリックすれば、画面に表示されている原子を それぞれ x-y、x-z、y-z 平面上で 反時計周り (= 正の角度 ) にその角度だけ回転できる。
V (eV) と は各電子の位置エネルギーを意味している。
CF は各電子に作用する力の核方向の成分の量を表している。
(fx, fy, fz) は各電子に作用する力から、上の CF を除いた残りの力の各成分を表している。
最後の行の (FX, FY, FZ) は核に作用する力の各成分を表している。
(力の単位は、+e の原子核と -e の電子がボーア半径離れているときに、その間に働く力の大きさを 1000 としている。)
tV は全位置エネルギー (eV) を意味する。
Waves (wn) は 各電子の 1 軌道に含まれるド・ブロイ波の数を表している。
( 炭素などの多電子原子では、この waves は 各原子内でのみで得られた値である。)
"direw" は 他の原子の効果も含めたすべての力を考慮したときの ドブロイ波である。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Scanner;
public class twoato extends JPanel // various combination of two atoms
{
public static void main(String arg[])
{
JFrame frame = new JFrame("Two-atomic molecule"); // set frame
J2DPanel j2dpanel = new J2DPanel();
frame.getContentPane().add(j2dpanel); frame.setSize(1180,700);
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=5291.0*5291.0; // suh=(Bohr radius)^2
JTextField elp[][]=new JTextField[7][11];
JTextField impho=new JTextField(7); // total V text
JTextField mmpho[][]=new JTextField[2][3]; // nucleus text
// imppo = distance (= nuc ) between electron and nucleus text
JTextField imppo=new JTextField(7);
JTextField charge=new JTextField(7); // charge Z text
JTextField sou=new JTextField(7); // binding energy
JTextField avew=new JTextField(7); // average de Broglie wave
JTextField direc=new JTextField(7); // direct de Broglie wave
JTextField atom=new JTextField(7); // A or B on the screen
JTextField abdis=new JTextField(7); // internuclear distance
JTextField kait[]=new JTextField[3];
JTextField bangle[]=new JTextField[11]; // bond angle text
JButton b1=new JButton("x-y ang"); JButton b2=new JButton("x-z ang");
JButton b3=new JButton("y-z ang");
JButton b5=new JButton("AB change");
JButton b7=new JButton("A atom"); JButton b8=new JButton("B atom");
JButton b9=new JButton("internuc"); JButton bb1=new JButton("nuc");
JButton bb2=new JButton("charge Z");
String aato[]={"H","C","O","N","F","Si","S","P","Cl"};
String bato[]={"H","C","O","N","F","Si","S","P","Cl"};
JComboBox coom=new JComboBox(aato);
JComboBox coomm=new JComboBox(bato);
int marki[]=new int[3]; int mar=0; int abd=0; // marking
double saia=4.22; int saik=4; double diam=6415.0;
// kade[0, 1] = number of valence electrons in A and B
int kade[]={4,4};
double rtw=Math.sqrt(2); double rth=Math.sqrt(3);
double rsi=Math.sqrt(6); double rfi=Math.sqrt(5);
double apr[][]=new double[7][11]; // parameters of A atom
double bpr[][]=new double[7][11]; // parameters of B atom
double intnuc=15351.0; // internuclear distance (MM)
// nux[0,1][0-2] = coordinate of A, B nuclei
// nux[0,1][3] = charge of A, B nuclei
double nux[][]={{0, 0, 0, 4.22}, {intnuc, 0, 0,4.22}};
// te0=initial coodinate of hydrogen
double te0[][]={{0, 0, 4500}, {0, 0, 0},
{0, 0, 0}, {0, 0, 0},
{0, 0, 0}, {0, 0, 0},{0, 0, 0}};
double hens = 6415.0; double henr =(hens*2.0)/rsi;
double heno=(henr*rsi)/6.0; double hent=henr/rth; double henf=2.0*hent;
// te1=initial coordinate of carbon
double te1[][]={{hens, 0.0, 0.0}, {-heno, 0.0, henf},
{-heno, -henr, -hent}, {-heno, henr, -hent},{0,0,0},{0,0,0},{0,0,0}};
double henss=4596; double henrr=4596/rtw;
// te2=initial coordinate of oxygen
double te2[][]={{henrr, -henrr, 0.0}, {henrr, henrr, 0},
{-henrr, henrr, 0}, {-henrr, -henrr, 0}, {0, 0, -henss}, {0, 0, henss}, {0,0,0}};
// te3= initial coodinate of nitrogen
double te3[][]={{-2666,4617.6, 0}, {-2666, -4617.6, 0},
{0, 0, 5332}, {5332, 0, 0},
{0, 0, -5332}, {0, 0, 0},{0, 0, 0}};
// te4= initial coordinate of fluorine
double te4[][]={{2537,-3045, 563}, {2537, 3047, 563},
{-2537, 3047, 563}, {-2537, -3047, 563},
{0, 0, 4003}, {-2500, 0, -3127},
{2500, 0, -3127}};
public J2DPanel()
{
setBackground(Color.black);
JPanel p=new JPanel();
p.setLayout(new GridLayout(12,12));
String vv,zww; int aaa=0;
for (int el=0; el <=6; el++) {
for (int pos=0; pos <=2; pos++) {
elp[el][pos]=new JTextField(7); elp[el][pos].addActionListener(this);
apr[el][pos]=0.0; bpr[el][pos]=0.0;
}}
for (int el=0; el <=6; el++) { // other parameters of each electron
for (int pos=3; pos <=10; pos++) {
elp[el][pos]=new JTextField(7);
apr[el][pos]=0.0; bpr[el][pos]=0.0;
}}
// mmpho[0-2] = force components acting on nucleus
for (int el=0; el <=1; el++) {
for (int pos=0; pos <=2; pos++) {
mmpho[el][pos]=new JTextField(7);
}}
for (int pos=0; pos <=2; pos++) {
kait[pos]=new JTextField(7);
}
for (int pos=0; pos <=10; pos++) {
bangle[pos]=new JTextField(7);
}
// layout
String sihy[]={"eNo. ", "+X (MM)", "+Y (MM)", "+Z (MM)", "nuc (MM)",
"V (eV)", "Force", "fx ", "fy", "fz", "direw", "Waves "};
// 1st line
for (int el=0; el <=11; el++) {
p.add(new Label(sihy[el]));
}
// 2nd - 8th line
for (int el=0; el <=6; el++) {
p.add(new Label("ele "+el+" "));
for (int pos=0; pos <=10; pos++) {
p.add(elp[el][pos]);
}}
// 9th line
p.add(new Label("A nuc "));
for (int pos=0; pos <=2; pos++) {
p.add(mmpho[0][pos]);
}
p.add(new Label("B nuc "));
for (int pos=0; pos <=2; pos++) {
p.add(mmpho[1][pos]);
}
p.add(new Label(" -- ")); p.add(new Label("average"));
p.add(direc); p.add(avew);
// 10th line
p.add(b9); p.add(abdis); p.add(b1); p.add(kait[0]);
p.add(b2); p.add(kait[1]); p.add(b3); p.add(kait[2]);
p.add(bb1); p.add(imppo); p.add(bb2); p.add(charge);
// 11th line
p.add(b7); p.add(coom); p.add(b8); p.add(coomm);
p.add(new Label("total V ")); p.add(impho);
p.add(new Label("binding ")); p.add(sou);
p.add(b5); p.add(atom);
p.add(new Label(" -- ")); p.add(new Label(" -- "));
// 12th line
p.add(new Label(" angle "));
for (int pos=0; pos <=10; pos++) {
p.add(bangle[pos]);
}
coom.setSelectedItem("C"); coomm.setSelectedItem("C");
b1.addActionListener(this); b2.addActionListener(this);
b3.addActionListener(this); b5.addActionListener(this);
b7.addActionListener(this); b8.addActionListener(this);
b9.addActionListener(this); bb1.addActionListener(this);
bb2.addActionListener(this);
add(p,"South");
imppo.setText(Double.toString(6415));
charge.setText(Double.toString(nux[0][3]));
abdis.setText(Double.toString(intnuc));
kait[0].setText(Double.toString(0));
kait[1].setText(Double.toString(0));
kait[2].setText(Double.toString(0));
atom.setText("A");
for (int el=0; el <=6; 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)(10*nnuc); nnuc=aaa/10.0;
// show distance between nuclei and electrons
elp[el][3].setText("nuc "+Double.toString(nnuc));
for (int jou=0; jou <=2; jou++) {
apr[el][jou]=te1[el][jou]+nux[0][jou];
bpr[el][jou]=te1[el][jou]+nux[1][jou];
// show initial coordinate
aaa=(int)(100*te1[el][jou]); double coordi=aaa/100.0;
elp[el][jou].setText(Double.toString(coordi));
}}
} // public J2DPanel() end
public void actionPerformed(ActionEvent e) { // when textboxes change
String ss; ss=" ";
double Rf1=0.0; mar=0;
if (e.getSource() == bb2) { // charge Z change
ss=charge.getText(); nux[abd][3]=Double.parseDouble(ss);
}
// abd = atom A (= 0) or B (= 1) on screen
if (e.getSource() == b9) { // internuclear distance change
ss=abdis.getText(); double intn=Double.parseDouble(ss);
for (int ba=0; ba <=kade[1]-1; ba++) {
bpr[ba][0] = bpr[ba][0] - intnuc + intn ;
}
// kade[1] = number of valence electrons in B
intnuc=intn;
nux[1][0]=intnuc;
}
if (e.getSource() == b5) { // A B atoms change on screen
if ( abd==0 ) { abd=1; atom.setText("B"); }
else { abd=0; atom.setText("A"); }
mar=1; double cha=nux[abd][3];
charge.setText(Double.toString(cha));
diam=4500;
if ( kade[abd]==4) { diam=6415; if ( cha > 5 ) { diam=11500; } }
if ( kade[abd]==6) { diam=4596; if ( cha > 7 ) { diam=8622; } }
if ( kade[abd]==5) { diam=5332; if ( cha > 6 ) { diam=9825; } }
if ( kade[abd]==7) { diam=4003; if ( cha > 8 ) { diam=7640; } }
imppo.setText(Double.toString(diam));
}
if (e.getSource() == b1) { mar=2; } // rotation on each plane
if (e.getSource() == b2) { mar=3; }
if (e.getSource() == b3) { mar=4; }
if (e.getSource() == bb1) { mar=9; } // nuc-ele distance change
if (e.getSource() == b7) { mar=7; // A atom change
ss=(String)coom.getSelectedItem();
if (ss=="H") {saia=1.0; saik=1; diam=4500; }
if (ss=="C") {saia=4.22; saik=4; diam=6415; }
if (ss=="O") {saia=6.273; saik=6; diam=4596; }
if (ss=="N") {saia=5.25; saik=5; diam=5332; }
if (ss=="F") {saia=7.3; saik=7; diam=4003; }
if (ss=="Si") {saia=5.05; saik=4; diam=11500;}
if (ss=="S") {saia=7.18; saik=6; diam=8622;}
if (ss=="P") {saia=6.12; saik=5; diam=9825;}
if (ss=="Cl") {saia=8.26; saik=7; diam=7640;}
imppo.setText(Double.toString(diam));
charge.setText(Double.toString(saia));
}
if (e.getSource() == b8) { mar=8; // B atom change
ss=(String)coomm.getSelectedItem();
if (ss=="H") {saia=1.0; saik=1; diam=4500; }
if (ss=="C") {saia=4.22; saik=4; diam=6415; }
if (ss=="O") {saia=6.273; saik=6; diam=4596; }
if (ss=="N") {saia=5.25; saik=5; diam=5332; }
if (ss=="F") {saia=7.3; saik=7; diam=4003; }
if (ss=="Si") {saia=5.05; saik=4; diam=11500;}
if (ss=="S") {saia=7.18; saik=6; diam=8622;}
if (ss=="P") {saia=6.12; saik=5; diam=9825;}
if (ss=="Cl") {saia=8.26; saik=7; diam=7640;}
imppo.setText(Double.toString(diam));
charge.setText(Double.toString(saia));
}
repaint();
}
public void update(Graphics g)
{
paint(g);
}
public void paintComponent(Graphics g)
{
double kro,krr, pot,gx,gy,gz,ggx,ggy,ggz,ttav,toav, aid; double toavv=0;
kro=0.0; gx=0.0;gy=0.0;gz=0.0;ggx=0.0; ggy=0.0; ggz=0.0;
int ex,ey,ez; String ww, wa, wb;
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,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,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 mmp[][]={{0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0}};
double mpp[][]={{0,0,0,0,0,0,0,0,0,0,0},{0,0,0,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,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}};
double teqqq[][]={{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 noxx[][]={{0,0,0,0,0},{0,0,0,0,0}};
if ( mar !=1 ) { // get electron coordinates from text
for (int yp=0; yp <=6; yp++) {
for (int kj=0; kj <=2; kj++) {
ww=elp[yp][kj].getText();
if (abd == 0) { // apr[0-6][0-2] = A atom electron coorinate
apr[yp][kj]=Double.parseDouble(ww); }
if (abd == 1) {
// bpr[0-6][0-2] = B atom electron coodinate
bpr[yp][kj]=Double.parseDouble(ww);
if (kj==0) { bpr[yp][kj] = bpr[yp][kj]+intnuc;}
}
}}
}
// "nuc" = distance between nucleus and electron change
ww=imppo.getText();
gz=Double.parseDouble(ww); gy=0;
if (mar==9) {
for (int yp=0; yp <=6; yp++) {
gx=Math.sqrt((apr[yp][0]-nux[0][0])*(apr[yp][0]-nux[0][0])+
(apr[yp][1]-nux[0][1])*(apr[yp][1]-nux[0][1])+(apr[yp][2]-nux[0][2])*(apr[yp][2]-nux[0][2]));
if (abd==1) {
gx=Math.sqrt((bpr[yp][0]-nux[1][0])*(bpr[yp][0]-nux[1][0])+
(bpr[yp][1]-nux[1][1])*(bpr[yp][1]-nux[1][1])+(bpr[yp][2]-nux[1][2])*(bpr[yp][2]-nux[1][2]));
}
if (gx==0) {gx=50;}
for (int kj=0; kj <=2; kj++) {
if (abd==0) {
gy=apr[yp][kj]; gy=(gy*gz)/gx; apr[yp][kj]=gy; }
if (abd==1) {
gy=bpr[yp][kj]-nux[1][kj]; gy=(gy*gz)/gx; bpr[yp][kj]=gy+nux[1][kj]; }
}} mar=0;
}
if (mar==7) { // A atom's kind change
kade[0]=saik; // kate[0] = number of A atom valence electrons
nux[0][3]=saia; // nux[0][3] = charge of A nucleus
for (int yp=0; yp <=6; yp++) {
for (int kj=0; kj <=2; kj++) {
if (kade[0]==1) { gx=te0[yp][kj];} // hydrogen coordinate
if (kade[0]==4) { gx=te1[yp][kj];} // carbon
if (kade[0]==6) { gx=te2[yp][kj];} // oxygen
if (kade[0]==5) { gx=te3[yp][kj];} // nitrogen
if (kade[0]==7) { gx=te4[yp][kj];} // fluorine
apr[yp][kj]=gx; // apr[][0-2] = A atom coodinate
}
ggx=Math.sqrt(apr[yp][0]*apr[yp][0]+apr[yp][1]*apr[yp][1]+apr[yp][2]*apr[yp][2]);
for (int kj=0; kj <=2; kj++) {
apr[yp][kj]=(apr[yp][kj]*diam)/ggx;
}
}
}
if (mar==8) { // B atom change
kade[1]=saik; nux[1][3]=saia;
for (int yp=0; yp <=6; yp++) {
for (int kj=0; kj <=2; kj++) {
if (kade[1]==1) { gx=te0[yp][kj];}
if (kade[1]==4) { gx=te1[yp][kj];}
if (kade[1]==6) { gx=te2[yp][kj];}
if (kade[1]==5) { gx=te3[yp][kj];}
if (kade[1]==7) { gx=te4[yp][kj];}
bpr[yp][kj]=gx;
}
ggx=Math.sqrt(bpr[yp][0]*bpr[yp][0]+bpr[yp][1]*bpr[yp][1]+bpr[yp][2]*bpr[yp][2]);
for (int kj=0; kj <=2; kj++) {
bpr[yp][kj]=(bpr[yp][kj]*diam)/ggx;
if (kj==0) { bpr[yp][kj]=bpr[yp][kj]+nux[1][kj];}
}
}
}
double ccos=0.0; double ssin=0.0;
if (mar==2) { // rotation of atom in x-y plane
ww=kait[0].getText(); // rotation angle
gz=Double.parseDouble(ww);
ccos=Math.cos((gz*pai)/180.0); ssin=Math.sin((gz*pai)/180.0);
for (int yp=0; yp <=6; yp++) {
gx=apr[yp][0]; gy=apr[yp][1];
if (abd==1) { gx=bpr[yp][0]-nux[1][0]; gy=bpr[yp][1]; }
ggx=gx*ccos-gy*ssin;
ggy=gx*ssin+gy*ccos;
if (abd==0) { apr[yp][0]=ggx; apr[yp][1]=ggy;}
if (abd==1) { bpr[yp][0]=ggx+nux[1][0]; bpr[yp][1]=ggy;}
} }
if (mar==3) { // rotation of atom in x-z plane
ww=kait[1].getText();
gz=Double.parseDouble(ww);
ccos=Math.cos((gz*pai)/180.0); ssin=Math.sin((gz*pai)/180.0);
for (int yp=0; yp <=6; yp++) {
gx=apr[yp][0]; gy=apr[yp][2];
if (abd==1) { gx=bpr[yp][0]-nux[1][0]; gy=bpr[yp][2]; }
ggx=gx*ccos-gy*ssin;
ggy=gx*ssin+gy*ccos;
if (abd==0) { apr[yp][0]=ggx; apr[yp][2]=ggy;}
if (abd==1) { bpr[yp][0]=ggx+nux[1][0]; bpr[yp][2]=ggy;}
}}
if (mar==4) { // rotation of atom in y-z plane
ww=kait[2].getText();
gz=Double.parseDouble(ww);
ccos=Math.cos((gz*pai)/180.0); ssin=Math.sin((gz*pai)/180.0);
for (int yp=0; yp <=6; yp++) {
gx=apr[yp][1]; gy=apr[yp][2];
if (abd==1) { gx=bpr[yp][1]; gy=bpr[yp][2]; }
ggx=gx*ccos-gy*ssin;
ggy=gx*ssin+gy*ccos;
if (abd==0) { apr[yp][1]=ggx; apr[yp][2]=ggy;}
if (abd==1) { bpr[yp][1]=ggx; bpr[yp][2]=ggy;}
}}
// noxx[0][0-2] = center of A valence electrons
if (kade[0] != 1 ) {
for (int kj=0; kj <=2; kj++) {
for (int yp=0; yp <=kade[0]-1; yp++) {
noxx[0][kj]=noxx[0][kj] + apr[yp][kj];
} noxx[0][kj]=noxx[0][kj]/kade[0];
}
}
// noxx[0][0-2] = center of B valence electrons
if (kade[1] != 1 ) {
for (int kj=0; kj <=2; kj++) {
for (int yp=0; yp <=kade[1]-1; yp++) {
noxx[1][kj]=noxx[1][kj] + bpr[yp][kj];
} noxx[1][kj]=noxx[1][kj]/kade[1];
}
}
for (int yp=0; yp <=6; yp++) { // show relative coordinates
for (int kj=0; kj <=2; kj++) {
gx=apr[yp][kj];
if (abd==1) { gx = bpr[yp][kj]-nux[1][kj]; }
if ( yp > kade[abd]-1 ) { gx = 0; }
ex=(int)(100*gx); gx=ex/100.0;
elp[yp][kj].setText(Double.toString(gx));
}}
int ank=0;
if (kade[abd] != 1 ) { // show bond angle
for (int yp=0; yp <=3; yp++) {
for (int kj=0; kj <=3; kj++) {
if ( yp < kj ) {
gx=Math.sqrt(apr[yp][0]*apr[yp][0]+apr[yp][1]*apr[yp][1]+apr[yp][2]*apr[yp][2]);
gy=Math.sqrt(apr[kj][0]*apr[kj][0]+apr[kj][1]*apr[kj][1]+apr[kj][2]*apr[kj][2]);
gz=Math.sqrt((apr[yp][0]-apr[kj][0])*(apr[yp][0]-apr[kj][0])+(apr[yp][1]-apr[kj][1] )*(apr[yp][1]-apr[kj][1])+(apr[yp][2]-apr[kj][2])*(apr[yp][2]-apr[kj][2]));
if (abd==1) {
gx=Math.sqrt((bpr[yp][0]-intnuc)*(bpr[yp][0]-intnuc)+bpr[yp][1]*bpr[yp][1]+bpr[yp][2]*bpr[yp][2]);
gy=Math.sqrt((bpr[kj][0]-intnuc)*(bpr[kj][0]-intnuc)+bpr[kj][1]*bpr[kj][1]+bpr[kj][2]*bpr[kj][2]);
gz=Math.sqrt((bpr[yp][0]-bpr[kj][0])*(bpr[yp][0]-bpr[kj][0])+(bpr[yp][1]-bpr[kj][1] )*(bpr[yp][1]-bpr[kj][1])+(bpr[yp][2]-bpr[kj][2])*(bpr[yp][2]-bpr[kj][2]));
}
aid=(gx*gx+gy*gy-gz*gz)/(2.0*gx*gy);
aid=(Math.acos(aid)*180.0)/pai;
wa=Integer.toString(yp); wb=Integer.toString(kj);
ex=(int)(10*aid); aid=ex/10.0;
bangle[ank].setText(wa+"-n-"+wb+" "+Double.toString(aid));
ank=ank+1;
}}}
if ( kade[abd] !=4 ) {
gx=Math.sqrt(apr[4][0]*apr[4][0]+apr[4][1]*apr[4][1]+apr[4][2]*apr[4][2]);
if (abd==1) {
gx=Math.sqrt((bpr[4][0]-intnuc)*(bpr[4][0]-intnuc)+bpr[4][1]*bpr[4][1]+bpr[4][2]*bpr[4][2]);
}
for (int yp=0; yp <=2; yp++) {
gy=Math.sqrt(apr[yp][0]*apr[yp][0]+apr[yp][1]*apr[yp][1]+apr[yp][2]*apr[yp][2]);
gz=Math.sqrt((apr[yp][0]-apr[4][0])*(apr[yp][0]-apr[4][0])+(apr[yp][1]-apr[4][1] )*(apr[yp][1]-apr[4][1])+(apr[yp][2]-apr[4][2])*(apr[yp][2]-apr[4][2]));
if (abd==1) {
gy=Math.sqrt((bpr[yp][0]-intnuc)*(bpr[yp][0]-intnuc)+bpr[yp][1]*bpr[yp][1]+bpr[yp][2]*bpr[yp][2]);
gz=Math.sqrt((bpr[yp][0]-bpr[4][0])*(bpr[yp][0]-bpr[4][0])+(bpr[yp][1]-bpr[4][1] )*(bpr[yp][1]-bpr[4][1])+(bpr[yp][2]-bpr[4][2])*(bpr[yp][2]-bpr[4][2])); }
aid=(gx*gx+gy*gy-gz*gz)/(2.0*gx*gy);
aid=(Math.acos(aid)*180.0)/pai;
wa=Integer.toString(yp); wb=Integer.toString(4);
ex=(int)(10*aid); aid=ex/10.0;
bangle[yp+6].setText(wa+"-n-"+wb+" "+Double.toString(aid));
}
if (kade[abd] !=5) {
for (int yp=4; yp <=5; yp++) {
if ( yp==4 || kade[abd]==7 ) {
gx=Math.sqrt(apr[yp][0]*apr[yp][0]+apr[yp][1]*apr[yp][1]+apr[yp][2]*apr[yp][2]);
gy=Math.sqrt(apr[yp+1][0]*apr[yp+1][0]+apr[yp+1][1]*apr[yp+1][1]+apr[yp+1][2]*apr[yp+1][2]);
gz=Math.sqrt((apr[yp][0]-apr[yp+1][0])*(apr[yp][0]-apr[yp+1][0])+(apr[yp][1]-apr[yp+1][1] )*(apr[yp][1]-apr[yp+1][1])+(apr[yp][2]-apr[yp+1][2])*(apr[yp][2]-apr[yp+1][2]));
if (abd==1) {
gx=Math.sqrt((bpr[yp][0]-intnuc)*(bpr[yp][0]-intnuc)+bpr[yp][1]*bpr[yp][1]+bpr[yp][2]*bpr[yp][2]);
gy=Math.sqrt((bpr[yp+1][0]-intnuc)*(bpr[yp+1][0]-intnuc)+bpr[yp+1][1]*bpr[yp+1][1]+bpr[yp+1][2]*bpr[yp+1][2]);
gz=Math.sqrt((bpr[yp][0]-bpr[yp+1][0])*(bpr[yp][0]-bpr[yp+1][0])+(bpr[yp][1]-bpr[yp+1][1] )*(bpr[yp][1]-bpr[yp+1][1])+(bpr[yp][2]-bpr[yp+1][2])*(bpr[yp][2]-bpr[yp+1][2]));
}
aid=(gx*gx+gy*gy-gz*gz)/(2.0*gx*gy);
aid=(Math.acos(aid)*180.0)/pai;
wa=Integer.toString(yp); wb=Integer.toString(yp+1);
ex=(int)(10*aid); aid=ex/10.0;
bangle[yp+5].setText(wa+"-n-"+wb+" "+Double.toString(aid));
}}}
}
}
for (int yp=0; yp <=10; yp++) {
if (kade[abd] ==1 ) {bangle[yp].setText(" 0 ");}
if (kade[abd] <=4 && yp > 5 ) {bangle[yp].setText(" 0 ");}
if (kade[abd] <=5 && yp > 8 ) {bangle[yp].setText(" 0 ");}
if (kade[abd] <=6 && yp > 9 ) {bangle[yp].setText(" 0 ");}
}
toav=0.0; // toav=total potential energy
double ppot;
// interaction between electrons 0-6 in atom A
for (int yp=0; yp <=kade[0]-1; yp++) {
for (int kj=0; kj <=kade[0]-1; kj++) {
if (yp < kj ) {
// kro=distance between electrons
kro=Math.sqrt((apr[yp][0]-apr[kj][0])*(apr[yp][0]-apr[kj][0])+
(apr[yp][1]-apr[kj][1])*(apr[yp][1]-apr[kj][1])+
(apr[yp][2]-apr[kj][2])*(apr[yp][2]-apr[kj][2]));
if (kro==0) {kro=5000.0;}
// ppot=repulsive potential energy (eV)
ppot=(elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
toav=toav+ppot;
// rhp[][3]= potential energy of each electron
rhp[yp][3]=rhp[yp][3]+ppot/2.0; rhp[kj][3]=rhp[kj][3]+ppot/2.0;
// teqq[][3] = potential energy only in A atom
teqq[yp][3]=teqq[yp][3]+ppot/2.0; teqq[kj][3]=teqq[kj][3]+ppot/2.0;
for (int jou=0; jou <=2; jou++) {
// rhp[][0-2]=force component acting on each electron
ggx=(suh*(apr[yp][jou]-apr[kj][jou]))/(kro*kro*kro);
rhp[yp][jou]=rhp[yp][jou]+ggx; rhp[kj][jou]=rhp[kj][jou]-ggx;
// teqq[][0-2] = force component only in A atom
teqq[yp][jou]=teqq[yp][jou]+ggx; teqq[kj][jou]=teqq[kj][jou]-ggx;
}
}}}
// interaction between electrons in B atom
for (int yp=0; yp <=kade[1]-1; yp++) {
for (int kj=0; kj <=kade[1]-1; kj++) {
if (yp < kj ) {
// kro=distance between electrons
kro=Math.sqrt((bpr[yp][0]-bpr[kj][0])*(bpr[yp][0]-bpr[kj][0])+
(bpr[yp][1]-bpr[kj][1])*(bpr[yp][1]-bpr[kj][1])+
(bpr[yp][2]-bpr[kj][2])*(bpr[yp][2]-bpr[kj][2]));
if (kro==0) {kro=5000.0;}
// ppot=repulsive potential energy (eV)
ppot=(elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
toav=toav+ppot;
// rhp[7-13][3]= potential energy of each electron (B)
rhp[yp+7][3]=rhp[yp+7][3]+ppot/2.0; rhp[kj+7][3]=rhp[kj+7][3]+ppot/2.0;
// teqq[7-13][3] = potential energy only in B atom
teqq[yp+7][3]=teqq[yp+7][3]+ppot/2.0; teqq[kj+7][3]=teqq[kj+7][3]+ppot/2.0;
for (int jou=0; jou <=2; jou++) {
// rhp[][0-2]=force component acting on each electron
ggx=(suh*(bpr[yp][jou]-bpr[kj][jou]))/(kro*kro*kro);
rhp[yp+7][jou]=rhp[yp+7][jou]+ggx; rhp[kj+7][jou]=rhp[kj+7][jou]-ggx;
// teqq[7-13][0-2] = force component only in B atom
teqq[yp+7][jou]=teqq[yp+7][jou]+ggx; teqq[kj+7][jou]=teqq[kj+7][jou]-ggx;
}
}}}
double zenf=0.0;
// interaction between A and B electrons
for (int yp=0; yp <=kade[0]-1; yp++) {
for (int kj=0; kj <=kade[1]-1; kj++) {
kro=Math.sqrt((apr[yp][0]-bpr[kj][0])*(apr[yp][0]-bpr[kj][0])+
(apr[yp][1]-bpr[kj][1])*(apr[yp][1]-bpr[kj][1])+
(apr[yp][2]-bpr[kj][2])*(apr[yp][2]-bpr[kj][2]));
if (kro==0) {kro=5000.0;}
// ppot=repulsive potential energy (eV)
ppot=(elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
toav=toav+ppot;
// rhp[][3]= potential energy of each electron
rhp[yp][3]=rhp[yp][3]+ppot/2.0; rhp[kj+7][3]=rhp[kj+7][3]+ppot/2.0;
for (int jou=0; jou <=2; jou++) {
// force component
ggx=(suh*(apr[yp][jou]-bpr[kj][jou]))/(kro*kro*kro);
rhp[yp][jou]=rhp[yp][jou]+ggx; rhp[kj+7][jou]=rhp[kj+7][jou]-ggx;
// zenf = x component force acting on overall A atom
if (jou==0) {zenf=zenf+ggx;}
}
}}
// ----- interaction between nucleus and A electron
for (int yp=0; yp <=kade[0]-1; yp++) {
for (int rv=0; rv <=1; rv++) {
// kro=distance between nucleus and electron
kro=Math.sqrt((apr[yp][0]-nux[rv][0])*(apr[yp][0]-nux[rv][0])+
(apr[yp][1]-nux[rv][1])*(apr[yp][1]-nux[rv][1])+
(apr[yp][2]-nux[rv][2])*(apr[yp][2]-nux[rv][2]));
if (kro == 0) {kro=5000.0;}
ex=(int)(kro*10); double dinu=ex/10.0;
if ( abd==0 && rv==0 ) { // show distance between nucleus and ele
elp[yp][3].setText("nuc "+Double.toString(dinu)); }
// ppot = each attractive potential energy
ppot=-(elc*elc*nux[rv][3]*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
toav=toav+ppot;
rhp[yp][3]=rhp[yp][3]+ppot;
// rhp[][6] = potential energy between another nucleus
if (rv==1) { rhp[yp][6]=rhp[yp][6]+ppot;}
// ggx=force component between nucleus and electron
for (int jou=0; jou <=2; jou++) {
ggx=(suh*nux[rv][3]*(apr[yp][jou]-nux[rv][jou]))/(kro*kro*kro);
rhp[yp][jou]=rhp[yp][jou]-ggx;
// mmp[][0-2] = force component acting on each nucleus
mmp[rv][jou]=mmp[rv][jou]+ggx;
if (jou==0 && rv==1 ) { zenf=zenf -ggx; }
}}}
// interaction between B electrons and nuclei
for (int yp=0; yp <=kade[1]-1; yp++) {
for (int rv=0; rv <=1; rv++) {
// kro=distance between nucleus and electron
kro=Math.sqrt((bpr[yp][0]-nux[rv][0])*(bpr[yp][0]-nux[rv][0])+
(bpr[yp][1]-nux[rv][1])*(bpr[yp][1]-nux[rv][1])+
(bpr[yp][2]-nux[rv][2])*(bpr[yp][2]-nux[rv][2]));
if (kro == 0) {kro=5000.0;}
ex=(int)(kro);
if ( abd==1 && rv==1 ) {
elp[yp][3].setText("nuc "+Integer.toString(ex)); }
// ppot = each attractive potential energy
ppot=-(elc*elc*nux[rv][3]*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
toav=toav+ppot;
rhp[yp+7][3]=rhp[yp+7][3]+ppot;
if (rv==0) { rhp[yp+7][6]=rhp[yp+7][6]+ppot;}
// ggx=force component between nucleus and electron
for (int jou=0; jou <=2; jou++) {
ggx=(suh*nux[rv][3]*(bpr[yp][jou]-nux[rv][jou]))/(kro*kro*kro);
rhp[yp+7][jou]=rhp[yp+7][jou]-ggx;
mmp[rv][jou]=mmp[rv][jou]+ggx;
if (jou==0 && rv==0 ) { zenf=zenf + ggx;}
}}}
// internuclear interaction
ppot=(elc*elc*nux[0][3]*nux[1][3] *6.241509e18)/(4.0*pai*epsi*intnuc*1.0e-14);
toav=toav+ppot;
ggx=(suh*nux[0][3]*nux[1][3])/(intnuc*intnuc);
mmp[0][0]=mmp[0][0]-ggx; mmp[1][0]=mmp[1][0]+ggx;
zenf = zenf - ggx ;
// distribute internuclear V to electron based on rhp[][6]
gx=0.0;
for (int yp=0; yp <= kade[0]-1; yp++) {
gx=gx+rhp[yp][6];
}
for (int yp=0; yp <= kade[1]-1; yp++) {
gx=gx+rhp[yp+7][6];
}
for (int rv=0; rv <= 1; rv++) {
for (int yp=0; yp <= kade[rv]-1; yp++) {
rhp[yp+rv*7][3]=rhp[yp+rv*7][3]+(ppot*rhp[yp+rv*7][6])/gx ;
}}
// interaction between A electrons and their center nuc
if ( kade[0] != 1 ) {
for (int yp=0; yp <= kade[0]-1; yp++) {
kro=Math.sqrt((apr[yp][0]-noxx[0][0])*(apr[yp][0]-noxx[0][0])+
(apr[yp][1]-noxx[0][1])*(apr[yp][1]-noxx[0][1])+
(apr[yp][2]-noxx[0][2])*(apr[yp][2]-noxx[0][2]));
if (kro == 0) {kro=5000.0;}
ppot=-(elc*elc*nux[0][3]*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
teqq[yp][3]=teqq[yp][3] + ppot;
for (int jou=0; jou <=2; jou++) {
ggx=(suh*nux[0][3]*(apr[yp][jou]-noxx[0][jou]))/(kro*kro*kro);
teqq[yp][jou]=teqq[yp][jou]-ggx;
}
}
}
// interaction between B electrons and their center nuc
if ( kade[1] != 1 ) {
for (int yp=0; yp <= kade[1]-1; yp++) {
kro=Math.sqrt((bpr[yp][0]-noxx[1][0])*(bpr[yp][0]-noxx[1][0])+
(bpr[yp][1]-noxx[1][1])*(bpr[yp][1]-noxx[1][1])+
(bpr[yp][2]-noxx[1][2])*(bpr[yp][2]-noxx[1][2]));
if (kro == 0) {kro=5000.0;}
ppot=-(elc*elc*nux[1][3]*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
teqq[yp+7][3]=teqq[yp+7][3] + ppot;
for (int jou=0; jou <=2; jou++) {
ggx=(suh*nux[1][3]*(bpr[yp][jou]-noxx[1][jou]))/(kro*kro*kro);
teqq[yp+7][jou]=teqq[yp+7][jou]-ggx;
}
}
}
toavv=toav;
ex=(int)(1000*toav); ggx=ex/1000.0;
impho.setText("tV "+Double.toString(ggx)); // show total V (eV)
double free[]={148.025,148.025}; // show binding energy
for (int frr=0; frr <=1; frr++) {
if (nux[frr][3] == 1.0) { free[frr]= 13.606; }
if (nux[frr][3] == 5.05) { free[frr]= 103.132; }
if (nux[frr][3] == 6.273) { free[frr]= 433.107; }
if (nux[frr][3] == 7.18) { free[frr]= 276.358; }
if (nux[frr][3] == 5.25) { free[frr]= 266.948; }
if (nux[frr][3] == 6.12) { free[frr]= 176.929; }
if (nux[frr][3] == 7.3) { free[frr]= 658.836; }
if (nux[frr][3] == 8.26) { free[frr]= 408.88; }
}
double bindd= (-toav-free[0]*2.0-free[1]*2.0)*0.5;
ex=(int)(1000*bindd); ggx=ex/1000.0;
sou.setText(Double.toString(ggx) + " eV" );
if ( kade[0]==1 && kade[1]==1 ) { sou.setText(" "); }
// show forces acting on electrons
for (int rv=0; rv <=kade[abd]-1; rv++) {
gx=Math.sqrt((apr[rv][0]-nux[0][0])*(apr[rv][0]-nux[0][0])+
(apr[rv][1]-nux[0][1])*(apr[rv][1]-nux[0][1])+(apr[rv][2]-nux[0][2])*(apr[rv][2]-nux[0][2]));
// gy=forces toward nucleus (CF)
gy=-(rhp[rv][0]*apr[rv][0]+rhp[rv][1]*apr[rv][1]+rhp[rv][2]*apr[rv][2])/gx;
if (abd==1) {
gx=Math.sqrt((bpr[rv][0]-nux[1][0])*(bpr[rv][0]-nux[1][0])+
(bpr[rv][1]-nux[1][1])*(bpr[rv][1]-nux[1][1])+(bpr[rv][2]-nux[1][2])*(bpr[rv][2]-nux[1][2]));
gy=-(rhp[rv+7][0]*(bpr[rv][0]-nux[1][0])+rhp[rv+7][1]*bpr[rv][1]+rhp[rv+7][2]*bpr[rv][2])/gx;
}
ex=(int)(1000*gy); ww="CF ";
elp[rv][5].setText(ww+Integer.toString(ex));
// show forces other than CF
for (int jou=0; jou <=2; jou++) {
gz=rhp[rv][jou]-(gy*(nux[0][jou]-apr[rv][jou]))/gx;
if (abd==1) {
gz=rhp[rv+7][jou]-(gy*(nux[1][jou]-bpr[rv][jou]))/gx;
}
if (kade[abd]==1 && jou==0) {
gz=rhp[rv+abd*7][0];
}
ex=(int)(1000*gz);
elp[rv][jou+6].setText(Integer.toString(ex));
}
}
for (int rv=0; rv <=1; rv++) {
for (int jou=0; jou <=2; jou++) { // show forces acting on nucleus
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));
}}
// show potential energy of each electron
for (int rv=0; rv <=kade[abd]-1; rv++) {
ex=(int)(100*rhp[rv][3]); ggx=ex/100.0;
if (abd==1) {
ex=(int)(100*rhp[rv+7][3]); ggx=ex/100.0;
}
elp[rv][4].setText("V "+Double.toString(ggx));
}
// show de Broglie wave
double gouk=0.0; double goukk=0.0; double gggx,gggy,gggz;
for (int rv=0; rv <=kade[abd]-1; rv++) {
gz=Math.sqrt(rhp[rv+abd*7][0]*rhp[rv+abd*7][0]+rhp[rv+abd*7][1]*rhp[rv+abd*7][1]+rhp[rv+abd*7][2]*rhp[rv+abd*7][2]);
gggz=gz;
if ( kade[abd] != 1 ) {
gz=Math.sqrt(teqq[rv+abd*7][0]*teqq[rv+abd*7][0]+teqq[rv+abd*7][1]*teqq[rv+abd*7][1]+teqq[rv+abd*7][2]*teqq[rv+abd*7][2]);
}
// gy=forces (N)
gy=(gz*elc*elc)/(4.0*pai*epsi*suh*1.0e-28);
gggy=(gggz*elc*elc)/(4.0*pai*epsi*suh*1.0e-28);
// gx=velocity (m/s) of each electron
gx=Math.sqrt((-1.0*rhp[rv+abd*7][3]*1.602177e-19)/me);
gggx=gx;
if ( kade[abd] != 1 ) {
gx=Math.sqrt((-1.0*teqq[rv+abd*7][3]*1.602177e-19)/me);
}
ggx=(me*gx*gx)/gy;
// ggy=number of de Broglie's wave in one orbit
double debroglie = h/(me*gx);
ggy=(2.0*pai*ggx)/debroglie;
gouk=gouk+ggy;
ex=(int)(ggy*10000); ggz=ex/10000.0; rhp[rv+abd*7][5]=ggz;
elp[rv][10].setText("wn "+Double.toString(ggz));
ggx=(me*gggx*gggx)/gggy;
debroglie = h/(me*gggx);
ggy=(2*pai*ggx)/debroglie; // number of de Broglie's wave (all direct)
goukk=goukk+ggy;
ex=(int)(ggy*10000); ggz=ex/10000.0;
elp[rv][9].setText("di "+Double.toString(ggz));
}
gouk=gouk/kade[abd];
ex=(int)(gouk*10000); gouk=ex/10000.0;
avew.setText("ave "+Double.toString(gouk));
goukk=goukk/kade[abd];
ex=(int)(goukk*10000); goukk=ex/10000.0;
direc.setText("ave "+Double.toString(goukk));
for (int yp=2; yp <=6; yp++) {
for (int kj=3; kj <=10; kj++) {
if (kade[abd] ==1) {elp[yp][kj].setText(" 0 ");}
if (kade[abd] <=4 && yp > 3 ) {elp[yp][kj].setText(" 0 ");}
if (kade[abd] <=5 && yp > 4 ) {elp[yp][kj].setText(" 0 ");}
if (kade[abd] <=6 && yp > 5 ) {elp[yp][kj].setText(" 0 ");}
}}
double app[][]=new double[7][11];
double bpp[][]=new double[7][11];
if ( kade[abd] == 1 ) { // hydrogen parameter after moving
if (kade[0]==1) {
gx=Math.sqrt(rhp[0][1]*rhp[0][1]+rhp[0][2]*rhp[0][2]);
gy=Math.sqrt(apr[0][1]*apr[0][1]+apr[0][2]*apr[0][2]);
// hyrogen electron moves in x direction by force
app[0][0]=apr[0][0]+(rhp[0][0] * gy*2)/gx;
}
else { app[0][0]=apr[0][0]; }
app[0][1]=apr[0][1]; app[0][2]=apr[0][2];
if (kade[1]==1) {
gx=Math.sqrt(rhp[7][1]*rhp[7][1]+rhp[7][2]*rhp[7][2]);
gy=Math.sqrt(bpr[0][1]*bpr[0][1]+bpr[0][2]*bpr[0][2]);
bpp[0][0]=bpr[0][0]+(rhp[7][0] * gy*2)/gx;
}
else { bpp[0][0]=bpr[0][0]; }
bpp[0][1]=bpr[0][1]; bpp[0][2]=bpr[0][2];
for (int rv=1; rv <=6; rv++) {
for (int jou=0; jou <=2; jou++) {
app[rv][jou]=apr[rv][jou]; bpp[rv][jou]=bpr[rv][jou];
}}
toav=0.0; // toav= total potential energy after moving
for (int yp=0; yp <=kade[0]-1; yp++) { // interaction between A ale
for (int kj=0; kj <=kade[0]-1; kj++) {
if (yp < kj ) {
// kro=distance between electrons
kro=Math.sqrt((app[yp][0]-app[kj][0])*(app[yp][0]-app[kj][0])+
(app[yp][1]-app[kj][1])*(app[yp][1]-app[kj][1])+
(app[yp][2]-app[kj][2])*(app[yp][2]-app[kj][2]));
if (kro==0) {kro=5000.0;}
// ppot=repulsive potential energy (eV)
ppot=(elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
toav=toav+ppot;
rpp[yp][3]=rpp[yp][3]+ppot/2.0; rpp[kj][3]=rpp[kj][3]+ppot/2.0;
for (int jou=0; jou <=2; jou++) {
ggx=(suh*(app[yp][jou]-app[kj][jou]))/(kro*kro*kro);
rpp[yp][jou]=rpp[yp][jou]+ggx; rpp[kj][jou]=rpp[kj][jou]-ggx;
}
}}}
for (int yp=0; yp <=kade[1]-1; yp++) { // interaction between B ale
for (int kj=0; kj <=kade[1]-1; kj++) {
if (yp < kj ) {
// kro=distance between electrons
kro=Math.sqrt((bpp[yp][0]-bpp[kj][0])*(bpp[yp][0]-bpp[kj][0])+
(bpp[yp][1]-bpp[kj][1])*(bpp[yp][1]-bpp[kj][1])+
(bpp[yp][2]-bpp[kj][2])*(bpp[yp][2]-bpp[kj][2]));
if (kro==0) {kro=5000.0;}
// ppot=repulsive potential energy (eV)
ppot=(elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
toav=toav+ppot;
// rpp[][3]= potential energy of each electron
rpp[yp+7][3]=rpp[yp+7][3]+ppot/2.0; rpp[kj+7][3]=rpp[kj+7][3]+ppot/2.0;
for (int jou=0; jou <=2; jou++) {
ggx=(suh*(bpp[yp][jou]-bpp[kj][jou]))/(kro*kro*kro);
rpp[yp+7][jou]=rpp[yp+7][jou]+ggx; rpp[kj+7][jou]=rpp[kj+7][jou]-ggx;
}
}}}
for (int yp=0; yp <=kade[0]-1; yp++) {
for (int kj=0; kj <=kade[1]-1; kj++) {
kro=Math.sqrt((app[yp][0]-bpp[kj][0])*(app[yp][0]-bpp[kj][0])+
(app[yp][1]-bpp[kj][1])*(app[yp][1]-bpp[kj][1])+
(app[yp][2]-bpp[kj][2])*(app[yp][2]-bpp[kj][2]));
if (kro==0) {kro=5000.0;}
// ppot=repulsive potential energy (eV)
ppot=(elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
toav=toav+ppot;
// rpp[][3]= potential energy of each electron
rpp[yp][3]=rpp[yp][3]+ppot/2.0; rpp[kj+7][3]=rpp[kj+7][3]+ppot/2.0;
for (int jou=0; jou <=2; jou++) {
ggx=(suh*(app[yp][jou]-bpp[kj][jou]))/(kro*kro*kro);
rpp[yp][jou]=rpp[yp][jou]+ggx; rpp[kj+7][jou]=rpp[kj+7][jou]-ggx;
}
}}
// interaction between nucleus and each electron
for (int yp=0; yp <=kade[0]-1; yp++) {
for (int rv=0; rv <=1; rv++) {
// kro=distance between nucleus and electron
kro=Math.sqrt((app[yp][0]-nux[rv][0])*(app[yp][0]-nux[rv][0])+
(app[yp][1]-nux[rv][1])*(app[yp][1]-nux[rv][1])+
(app[yp][2]-nux[rv][2])*(app[yp][2]-nux[rv][2]));
if (kro == 0) {kro=5000.0;}
ex=(int)(kro);
// ppot = each attractive potential energy
ppot=-(elc*elc*nux[rv][3]*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
toav=toav+ppot;
rpp[yp][3]=rpp[yp][3]+ppot;
if (rv==1) { rpp[yp][6]=rpp[yp][6]+ppot;}
// ggx=force component between nucleus and electron
for (int jou=0; jou <=2; jou++) {
ggx=(suh*nux[rv][3]*(app[yp][jou]-nux[rv][jou]))/(kro*kro*kro);
rpp[yp][jou]=rpp[yp][jou]-ggx;
}}}
for (int yp=0; yp <=kade[1]-1; yp++) {
for (int rv=0; rv <=1; rv++) {
// kro=distance between nucleus and electron
kro=Math.sqrt((bpp[yp][0]-nux[rv][0])*(bpp[yp][0]-nux[rv][0])+
(bpp[yp][1]-nux[rv][1])*(bpp[yp][1]-nux[rv][1])+
(bpp[yp][2]-nux[rv][2])*(bpp[yp][2]-nux[rv][2]));
if (kro == 0) {kro=5000.0;}
ppot=-(elc*elc*nux[rv][3]*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
toav=toav+ppot;
rpp[yp+7][3]=rpp[yp+7][3]+ppot;
if (rv==0) { rpp[yp+7][6]=rpp[yp+7][6]+ppot;}
// ggx=force component between nucleus and electron
for (int jou=0; jou <=2; jou++) {
ggx=(suh*nux[rv][3]*(bpp[yp][jou]-nux[rv][jou]))/(kro*kro*kro);
rpp[yp+7][jou]=rpp[yp+7][jou]-ggx;
}}}
// internuclear interaction
ppot=(elc*elc*nux[0][3]*nux[1][3] *6.241509e18)/(4.0*pai*epsi*intnuc*1.0e-14);
toav=toav+ppot;
ggx=(suh*nux[0][3]*nux[1][3])/(intnuc*intnuc);
gx=0.0; // distribute internuclear potential to electrons
for (int yp=0; yp <= kade[0]-1; yp++) {
gx=gx+rpp[yp][6];
}
for (int yp=0; yp <= kade[1]-1; yp++) {
gx=gx+rpp[yp+7][6];
}
for (int rv=0; rv <= 1; rv++) {
for (int yp=0; yp <= kade[rv]-1; yp++) {
rpp[yp+rv*7][3]=rpp[yp+rv*7][3]+(ppot*rpp[yp+rv*7][6])/gx ;
}}
if (kade[0]==1 && kade[1]==1) { // show H2 binding energy (eV)
ex=(int)(1000*toav); ggx=ex/1000.0;
bangle[4].setText("aV "+Double.toString(ggx));
ggy=-(toav+toavv)/2.0 * 0.5 - 13.606*2;
ex=(int)(1000*ggy); ggy=ex/1000.0;
sou.setText(Double.toString(ggy)+ " eV");
}
// ------ show de Broglie wave after
gz=Math.sqrt(rpp[0+abd*7][0]*rpp[0+abd*7][0]+rpp[0+abd*7][1]*rpp[0+abd*7][1]+rpp[0+abd*7][2]*rpp[0+abd*7][2]);
// gy=forces (N)
gy=(gz*elc*elc)/(4.0*pai*epsi*suh*1.0e-28);
// gx=velocity (m/s) of each electron
gx=Math.sqrt((-1.0*rpp[0+abd*7][3]*1.602177e-19)/me);
ggx=(me*gx*gx)/gy;
double debroglie = h/(me*gx);
ggy=(2*pai*ggx)/debroglie; // ggy=number of de Broglie's wave in one orbit
ex=(int)(ggy*10000); ggz=ex/10000.0;
elp[1][9].setText("afw "+Double.toString(ggz));
elp[1][10].setText("afw "+Double.toString(ggz));
gouk=(rhp[0+abd*7][5] + ggz)/2.0;
ex=(int)(gouk*10000); gouk=ex/10000.0;
avew.setText("ave "+Double.toString(gouk));
direc.setText(" 0 ");
for (int kj=0; kj <=2; kj++) {
gx=app[0][kj];
if (abd==1) { gx=bpp[0][kj] - nux[1][kj];}
elp[1][kj].setText(Integer.toString((int)gx));
}
for (int kj=3; kj <=8; kj++) {
elp[1][kj].setText(" 0 ");
}
gz=rpp[0+abd*7][0];
ex=(int)(1000*gz);
elp[1][6].setText(Integer.toString(ex));
} // hydrogen electron after moving end
// ---------- show picture
int nmx[][]=new int[2][3]; int hpk[][]=new int[14][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]/142.856);
}}
// change MM to pixel in electrons
for (int yp=0; yp <=kade[0]-1; yp++) {
for (int kj=0; kj <=2; kj++) {
hpk[yp][kj]=(int)(apr[yp][kj]/142.856);
}}
for (int yp=0; yp <=kade[1]-1; yp++) {
for (int kj=0; kj <=2; kj++) {
hpk[yp+7][kj]=(int)(bpr[yp][kj]/142.856);
}}
int med=(int)(277.5-(intnuc*0.5)/142.856); int medd=(int)(832.5-(intnuc*0.5)/142.856);
g.clearRect(9,299,1170,699);
g.setColor(Color.cyan); g.drawLine(555,310,555,660);
g.drawString("X - Z plane", 257,345);
g.drawString("X - Y plane", 810,345);
g.setColor(Color.lightGray); // show nucleus
for ( int rv=0; rv <= 1; rv++) {
g.fillOval(nmx[rv][0]+med-3,472,20,20);
g.fillOval(nmx[rv][0]+medd-3,472,20,20);
}
for ( int rv=0; rv <= 1; rv++) {
g.setColor(Color.white); // show electron 0 (particle)
g.fillOval(hpk[0+rv*7][0]+med, 475-hpk[0+rv*7][2],14,14);
g.fillOval(hpk[0+rv*7][0]+medd,475-hpk[0+rv*7][1],14,14);
if ( kade[rv] > 1 ) {
g.setColor(Color.pink); // show electron 1
g.fillOval(hpk[1+rv*7][0]+med, 475-hpk[1+rv*7][2],14,14);
g.fillOval(hpk[1+rv*7][0]+medd,475-hpk[1+rv*7][1],14,14);
g.setColor(Color.red); // show electron 2
g.fillOval(hpk[2+rv*7][0]+med, 475-hpk[2+rv*7][2],14,14);
g.fillOval(hpk[2+rv*7][0]+medd,475-hpk[2+rv*7][1],14,14);
g.setColor(Color.green); // show electron 3
g.fillOval(hpk[3+rv*7][0]+med, 475-hpk[3+rv*7][2],14,14);
g.fillOval(hpk[3+rv*7][0]+medd,475-hpk[3+rv*7][1],14,14);
}
if ( kade[rv] > 4 ) { // N last electron
g.setColor(Color.white);
g.fillOval(hpk[4+rv*7][0]+med, 475-hpk[4+rv*7][2],14,14);
g.fillOval(hpk[4+rv*7][0]+medd,475-hpk[4+rv*7][1],14,14); }
if ( kade[rv] > 5 ) { // O last electron
g.setColor(Color.pink);
g.fillOval(hpk[5+rv*7][0]+med, 475-hpk[5+rv*7][2],14,14);
g.fillOval(hpk[5+rv*7][0]+medd,475-hpk[5+rv*7][1],14,14); }
if ( kade[rv] > 6 ) { // F last electron
g.setColor(Color.red);
g.fillOval(hpk[6+rv*7][0]+med, 475-hpk[6+rv*7][2],14,14);
g.fillOval(hpk[6+rv*7][0]+medd,475-hpk[6+rv*7][1],14,14); }
for (int rw=0; rw <=kade[rv]-1; rw++) {
g.setColor(Color.blue);
g.drawString(Integer.toString(rw),hpk[rw+rv*7][0]+med+4, 487-hpk[rw+rv*7][2]);
g.drawString(Integer.toString(rw),hpk[rw+rv*7][0]+medd+4, 487-hpk[rw+rv*7][1] );
}
}
}
}