トップページ
分子結合のページに戻る。
分子結合 (付録) のページに戻る。
下のソースプログラムをそのままテキストエディタ(メモ帳など)にコピー and ペースト すれば、簡単にコンパイルと実行できる。
(この class file name は cchh なので、このテキストエディタを "cchh.java" とセーブしてコンパイルしてほしい。)
ここでは 1 MM = 1 × 10-14 meter という新しい単位を使用している。
この JAVA プログラムは ほぼすべてのブラウザで起動できると思います。
JAVA のあるバージョンによっては、コンパイル後に " -Xlint : unchecked --- " という注意書きが 画面上にでる可能性があります。
しかし それらのメッセージを無視して そのまま実行できます。
詳細な方法に関しては 分子結合 (付録) を参照のこと。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Scanner;
public class cchh extends JPanel
{
public static void main(String arg[])
{
JFrame frame = new JFrame("CH2=CH2 (ethylene-new)"); // 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=5292.0*5292.0*1000.0;
int labe=0; double CC=13390.0; double CH=10870.0;
// elp[][] = each electron textboxes
JTextField elp[][]=new JTextField[12][11];
// elpp[][] = electron (after moving) textboxes
JTextField elpp[][]=new JTextField[6][11];
// mmpho = each nucleus textboxes
JTextField mmpho[][]=new JTextField[4][3];
// impho = total V text
JTextField impho=new JTextField(7);
JTextField imphoo=new JTextField(7);
// average wave textboxes
JTextField averwa0=new JTextField(7); JTextField averwa2=new JTextField(7);
JTextField averwa8=new JTextField(7); JTextField averwael=new JTextField(7); JTextField reawav0=new JTextField(7); JTextField reawav8=new JTextField(7);
JButton b1=new JButton("C=C (MM)");
String ope[]={"10000","11500","12000","12500","13390","14000","14500","15000", "16000","17000"};
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=4.22; // den = central density
double hpr3[][]=new double[12][11];
double hprr[][]=new double[12][11];
double hprr2[][]=new double[12][11];
double hens = 6415.0; double henr =(hens*2.0)/rsi;
double heno=henr/rtw;
// te1 = initial (relative) coordinate of each electron
double te1[][]={{-heno, henr, 0.0}, {-heno, -henr, 0.0},
{heno, 0.0, -henr}, {heno, 0.0, henr},
{-heno, henr, 0.0}, {-heno, -henr, 0.0},
{heno, 0.0, -henr}, {heno, 0.0, henr},
{500.0, -4000.0, 0.0},
{500.0, 4000.0, 0.0}, {500.0, -4000.0, 0.0},
{500.0, -4000.0, 0.0}};
double hen3=10870.0; double henrr=hen3*Math.sin((pai*117.4*0.5)/180.0);
double hen1=hen3*Math.cos((pai*117.4*0.5)/180.0);
double henp1 = -13390-hen1;
// nux[0,1][0-2] = C0,C1 coordinate
// nux[2-5][0-2] = H0-H3 coordinate
// den, 1 = each nuclear charge
double nux[][]={{0, 0, 0, den},{-13390.0, 0, 0, den}, {hen1, 0, -henrr, 1}, {hen1, 0, henrr, 1},{henp1, 0, henrr,1},{henp1, 0, -henrr, 1}
};
public J2DPanel()
{
setBackground(Color.black);
JPanel p=new JPanel();
p.setLayout(new GridLayout(21,12));
int aaa=0;
double tx,ty,tz,tkk;
for (int el=0; el <=11; el++) {
for (int pos=0; pos <=2; pos++) { // hpr[][0-2]=each electron's coordinate
elp[el][pos]=new JTextField(7);
// textbox input setting
if (el==0 && pos==0 ) {elp[el][pos].addActionListener(this); }
if (el==0 && pos==1 ) {elp[el][pos].addActionListener(this); }
if (el==2 && pos==0 ) {elp[el][pos].addActionListener(this); }
if (el==2 && pos==2 ) {elp[el][pos].addActionListener(this); }
if (el==4 && pos==0 ) {elp[el][pos].addActionListener(this); }
if (el==4 && pos==1 ) {elp[el][pos].addActionListener(this); }
if (el==6 && pos==0 ) {elp[el][pos].addActionListener(this); }
if (el==6 && pos==2 ) {elp[el][pos].addActionListener(this); }
if (el==8) {elp[el][pos].addActionListener(this); }
hpr[el][pos]=0.0; hprr[el][pos]=0.0; hpr3[el][pos]=0.0;
}}
for (int el=0; el <=11; el++) {
for (int pos=3; pos <=10; pos++) { // hpr[][3-10]=electron's other parameters
elp[el][pos]=new JTextField(7);
hpr[el][pos]=0.0; hprr[el][pos]=0.0;
hpr3[el][pos]=0.0; hprr2[el][pos]=0.0;
}}
for (int el=0; el <=5; el++) {
for (int pos=0; pos <=10; pos++) {
elpp[el][pos]=new JTextField(7);
}}
for (int el=0; el <=3; el++) { // mmpho[0-3][]=nuclear textboxes
for (int pos=0; pos <=2; pos++) {
mmpho[el][pos]=new JTextField(7);
}}
// layout
String sihy[]={"eNo ", "+X(CH)", "+Y(MM)", "+Z(MM)", "nuc(MM)",
"V(eV)", "cforce ", "rforce", "Waves", " -- ", " -- ", " -- "};
for (int el=0; el <=11; el++) {
p.add(new Label(sihy[el]));
}
p.add(new Label("C0 ele0 "));
for (int pos=0; pos <=8; pos++) {
p.add(elp[0][pos]);
}
p.add(new Label("0-C-1 angle")); p.add(elp[0][10]);
p.add(new Label("-- 1 "));
for (int pos=0; pos <=10; pos++) {
p.add(elp[1][pos]);
}
p.add(new Label("C0 ele2 "));
for (int pos=0; pos <=8; pos++) {
p.add(elp[2][pos]);
}
p.add(new Label("2-C-3 angle")); p.add(elp[2][10]);
p.add(new Label("-- 3 "));
for (int pos=0; pos <=10; pos++) {
p.add(elp[3][pos]);
}
p.add(new Label("C1 ele4 "));
for (int pos=0; pos <=8; pos++) {
p.add(elp[4][pos]);
}
p.add(new Label("4-C-5 angle")); p.add(elp[4][10]);
p.add(new Label("-- 5 "));
for (int pos=0; pos <=10; pos++) {
p.add(elp[5][pos]);
}
p.add(new Label("C1 ele6 "));
for (int pos=0; pos <=8; pos++) {
p.add(elp[6][pos]);
}
p.add(new Label("6-C-7 angle")); p.add(elp[6][10]);
p.add(new Label("-- 7 "));
for (int pos=0; pos <=10; pos++) {
p.add(elp[7][pos]);
}
p.add(new Label("H0 ele8 "));
for (int pos=0; pos <=10; pos++) {
p.add(elp[8][pos]);
}
p.add(new Label("-- 9 "));
for (int pos=0; pos <=10; pos++) {
p.add(elp[9][pos]);
}
p.add(new Label("-- 10 "));
for (int pos=0; pos <=10; pos++) {
p.add(elp[10][pos]);
}
p.add(new Label("-- 11 "));
for (int pos=0; pos <=10; pos++) {
p.add(elp[11][pos]);
}
p.add(new Label("C0 nuc ")); p.add(mmpho[0][0]);
p.add(new Label("H0 nuc ")); p.add(mmpho[2][0]);
p.add(new Label("total V ")); p.add(impho);
p.add(new Label("avewave 0 ")); p.add(averwa0); p.add(reawav0);
p.add(new Label("avewave 2")); p.add(averwa2);
p.add(mmpho[0][1]);
p.add(new Label("C1 nuc ")); p.add(mmpho[1][0]);
p.add(new Label("H3 nuc ")); p.add(mmpho[3][0]);
p.add(new Label("af tV ")); p.add(imphoo);
p.add(new Label("avewave 8")); p.add(averwa8); p.add(reawav8);
p.add(new Label("avewave 11 ")); p.add(averwael);
p.add(mmpho[1][1]);
p.add(new Label("afel 0 "));
for (int pos=0; pos <=10; pos++) {
p.add(elpp[0][pos]);
}
p.add(new Label("afel 2 "));
for (int pos=0; pos <=10; pos++) {
p.add(elpp[1][pos]);
}
p.add(new Label("afel 4 "));
for (int pos=0; pos <=10; pos++) {
p.add(elpp[2][pos]);
}
p.add(new Label("afel 6 "));
for (int pos=0; pos <=10; pos++) {
p.add(elpp[3][pos]);
}
p.add(new Label("afel 8 "));
for (int pos=0; pos <=10; pos++) {
p.add(elpp[4][pos]);
}
p.add(new Label("afel 10"));
for (int pos=0; pos <=8; pos++) {
p.add(elpp[5][pos]);
}
p.add(b1); p.add(coom);
coom.setSelectedItem("13390"); b1.addActionListener(this);
add(p,"South");
double xx,yy,zz;
for (int el=0; el <=11; 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] = distance between electron and close nucleus
elp[el][3].setText("nuc "+Integer.toString(aaa));
// hpr[el][0-2] = absolute coordinate of each electron
// te1[][0-2] = relative coordinate wrt. each nucleus
for (int jou=0; jou <=2; jou++) {
hpr[el][jou]=te1[el][jou];
if (el > 3 && el < 8 ) { hpr[el][jou]=te1[el][jou] + nux[1][jou];}
if (el > 7) { hpr[el][jou]=te1[el][jou] + nux[el-6][jou];}
xx = te1[el][jou];
elp[el][jou].setText(Integer.toString((int)xx));
}}
} // public J2DPanel() end
public void actionPerformed(ActionEvent e) {
String ss;
labe=0;
if (e.getSource() == b1) {labe=3;} // C=C button click
if (labe == 3) {
ss=(String)coom.getSelectedItem();
if (ss=="10000") {CC=10000;} if (ss=="11500") {CC=11500;}
if (ss=="12000") {CC=12000;} if (ss=="12500") {CC=12500;}
if (ss=="13390") {CC=13390;} if (ss=="14000") {CC=14000;}
if (ss=="14500") {CC=14500;} if (ss=="15000") {CC=15000;}
if (ss=="16000") {CC=16000;} if (ss=="17000") {CC=17000;}
hen3=10870.0;
double henr=hen3*Math.sin((pai*117.4*0.5)/180.0);
hen1=hen3*Math.cos((pai*117.4*0.5)/180.0);
henp1 = -CC-hen1;
double noxxx[][]={{0, 0, 0},{-CC, 0, 0}, {hen1, 0, -henr}, {hen1, 0, henr},{henp1, 0, henr},{henp1, 0, -henr}
};
// set new nuclear coordinates
for (int ett=0; ett <=5; ett++) {
for (int sws=0; sws <=2; sws++) {
nux[ett][sws]=noxxx[ett][sws];
}}
} // if ( labe == 3 ) end
repaint();
}
public void update(Graphics g)
{
paint(g);
}
public void paintComponent(Graphics g)
{
double kro,krr,krk,kwr,kww,kro2,krr2,krk2,kwr2,kww2,aa,bb,cc,alpa,
pot,pota,potb,potc,potd,gx,gy,gz,ggx,ggy,ggz,ttav,toav;
int ex,ey,ez,xk,yk,zk; String ww,pxw,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,0,0,0,0,0},
{0,0,0,0,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 rhp5[][]= {{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0}, {0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},
{0,0,0,0,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 rpp5[][]= {{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},
{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0}, {0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},
{0,0,0,0,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},{0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,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 mpp[][]={{0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,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 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}};
gx = 0.0; gy = 0.0; gz = 0.0;
kro = 0.0; kro2=0.0 ; krr2=0.0; krk2=0.0; kwr2=0.0; kww2=0.0;
double ede1=0.5; // ede1 = half charge 0.5 times 8 = 4 valence electron
ww=elp[0][0].getText(); hpr[0][0]=Double.parseDouble(ww);
hpr[1][0]= hpr[0][0];
ww=elp[0][1].getText(); hpr[0][1]=Double.parseDouble(ww);
hpr[1][1]= -hpr[0][1];
hpr[0][2]=0.0; hpr[1][2]=0.0;
ww=elp[2][0].getText(); hpr[2][0]=Double.parseDouble(ww);
hpr[3][0]= hpr[2][0];
ww=elp[2][2].getText(); hpr[2][2]=Double.parseDouble(ww);
hpr[3][2]= -hpr[2][2];
hpr[2][1]=0.0; hpr[3][1]=0.0;
ww=elp[4][0].getText(); hpr[4][0]=Double.parseDouble(ww)-CC;
hpr[5][0]= hpr[4][0];
ww=elp[4][1].getText(); hpr[4][1]=Double.parseDouble(ww);
hpr[5][1]= -hpr[4][1];
hpr[4][2]=0.0; hpr[5][2]=0.0;
ww=elp[6][0].getText(); hpr[6][0]=Double.parseDouble(ww)-CC;
hpr[7][0]= hpr[6][0];
ww=elp[6][2].getText(); hpr[6][2]=Double.parseDouble(ww);
hpr[7][2]= -hpr[6][2];
hpr[6][1]=0.0; hpr[7][1]=0.0;
// show electron - C nuc - electron angle
aa=hpr[0][1]-hpr[1][1];
bb= Math.sqrt(hpr[1][0]*hpr[1][0]+hpr[1][1]*hpr[1][1]+hpr[1][2]*hpr[1][2]);
cc= Math.sqrt(hpr[0][0]*hpr[0][0]+hpr[0][1]*hpr[0][1]+hpr[0][2]*hpr[0][2]);
alpa=(bb*bb+cc*cc-aa*aa)/(2.0*bb*cc);
gx=(Math.acos(alpa)*180.0)/pai;
elp[0][10].setText(Integer.toString((int)gx) + " deg");
aa=hpr[3][2]-hpr[2][2];
bb= Math.sqrt(hpr[3][0]*hpr[3][0]+hpr[3][1]*hpr[3][1]+hpr[3][2]*hpr[3][2]);
cc= Math.sqrt(hpr[2][0]*hpr[2][0]+hpr[2][1]*hpr[2][1]+hpr[2][2]*hpr[2][2]);
alpa=(bb*bb+cc*cc-aa*aa)/(2.0*bb*cc);
gx=(Math.acos(alpa)*180.0)/pai;
elp[2][10].setText(Integer.toString((int)gx) + " deg");
aa=hpr[7][2]-hpr[6][2];
bb= Math.sqrt((hpr[7][0]+CC)*(hpr[7][0]+CC)+hpr[7][1]*hpr[7][1]+hpr[7][2]*hpr[7][2]);
cc= Math.sqrt((hpr[6][0]+CC)*(hpr[6][0]+CC)+hpr[6][1]*hpr[6][1]+hpr[6][2]*hpr[6][2]);
alpa=(bb*bb+cc*cc-aa*aa)/(2.0*bb*cc);
gx=(Math.acos(alpa)*180.0)/pai;
elp[6][10].setText(Integer.toString((int)gx) + " deg");
aa=hpr[4][1]-hpr[5][1];
bb= Math.sqrt((hpr[4][0]+CC)*(hpr[4][0]+CC)+hpr[4][1]*hpr[4][1]+hpr[4][2]*hpr[4][2]);
cc= Math.sqrt((hpr[5][0]+CC)*(hpr[5][0]+CC)+hpr[5][1]*hpr[5][1]+hpr[5][2]*hpr[5][2]);
alpa=(bb*bb+cc*cc-aa*aa)/(2.0*bb*cc);
gx=(Math.acos(alpa)*180.0)/pai;
elp[4][10].setText(Integer.toString((int)gx) + " deg");
// get electron 8 (hydrogen) coordinate from textbox
ww= elp[8][0].getText(); gx=Double.parseDouble(ww);
ww= elp[8][1].getText(); gy=Double.parseDouble(ww);
// set 8-11 electron coordinates based on ele 8
for (int yp=8; yp <=11; yp++) {
elp[yp][0].setText(Integer.toString((int)gx));
elp[yp][2].setText(Integer.toString(0));
if ( yp==8 || yp == 10) {
hpr[yp][1]=gy;
elp[yp][1].setText(Integer.toString((int)gy));
}
if ( yp==9 || yp == 11) {
hpr[yp][1]=-gy;
elp[yp][1].setText(Integer.toString((int)(-gy)));
}
// gx = each C-H direction (= nux) coordinate
for (int kj=0; kj <=1; kj++) {
hpr[yp][kj*2]=(nux[yp-6][kj*2]*(CH+gx))/CH;
if (yp > 9 && kj==0 ) {
hpr[yp][kj*2]=((nux[yp-6][kj*2]+CC)*(CH+gx))/CH -CC;
}
}}
// show electron 0-7 relative coordinate in textbox
for (int yp=0; yp <=3; yp++) {
for (int kj=0; kj <=2; kj++) {
elp[yp*2][kj].setText(Integer.toString((int)hpr[yp*2][kj]));
elp[1+yp*2][kj].setText(Integer.toString((int)hpr[1+yp*2][kj]));
if ( yp > 1 && kj == 0) {
elp[yp*2][kj].setText(Integer.toString((int)(hpr[yp*2][kj]+CC)));
elp[1+yp*2][kj].setText(Integer.toString((int)(hpr[1+yp*2][kj]+CC)));
}
}}
// hpr3[][] symmetric position of ele 0-7 wrt. C nucleus
for (int yp=0; yp <=3; yp++) {
for (int kj=0; kj <=2; kj++) {
hpr3[yp][kj] = -hpr[yp+4][kj];
if (kj==0) { hpr3[yp][kj] = -(hpr[yp+4][kj]+CC);
}
}}
for (int yp=4; yp <=7; yp++) {
for (int kj=0; kj <=2; kj++) {
hpr3[yp][kj] = -hpr[yp-4][kj];
if (kj==0) { hpr3[yp][kj] = -hpr[yp-4][kj]-CC;
}
}}
toav=0.0; ggy=0.0; // toav=total potential energy (eV)
double ppot;
// interaction among electron 8-11 (hydrogen)
for (int yp=8; yp <=11; yp++) {
for (int kj=8; kj <=11; kj++) {
if (yp < 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;}
// ppot = each potential energy (eV)
ppot=(elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
// rhp[el][3] = potential energy of each electron
// rhp5[8-13][] = interaction of electrons as they are
rhp[yp][3]=rhp[yp][3]+ppot/2.0; rhp[kj][3]=rhp[kj][3]+ppot/2.0;
rhp5[yp][3]=rhp5[yp][3]+ppot/2.0; rhp5[kj][3]=rhp5[kj][3]+ppot/2.0;
toav=toav+ppot;
for (int jou=0; jou <=2; jou++) {
ggx=(suh*(hpr[yp][jou]-hpr[kj][jou]))/(kro*kro*kro);
// rhp[el][0-2] = force component acting on each electron
rhp[yp][jou]=rhp[yp][jou]+ggx; rhp[kj][jou]=rhp[kj][jou]-ggx;
rhp5[yp][jou]=rhp5[yp][jou]+ggx; rhp5[kj][jou]=rhp5[kj][jou]-ggx;
}
}}}
krr=0.0; potb=0.0; ggy=0.0;
for (int yp=8; yp <=11; yp++) {
for (int kj=0; kj <=7; 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]));
// hpr3[0-7][0-2] = symmetric position of ele0-7 wrt. nucleus
krr=Math.sqrt((hpr[yp][0]-hpr3[kj][0])*(hpr[yp][0]-hpr3[kj][0])+
(hpr[yp][1]-hpr3[kj][1])*(hpr[yp][1]-hpr3[kj][1])+
(hpr[yp][2]-hpr3[kj][2])*(hpr[yp][2]-hpr3[kj][2]));
// ede1 = 0.5 half charge
ppot=(ede1*elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
potb=(ede1*elc*elc*6.241509e18)/(4.0*pai*epsi*krr*1.0e-14);
rhp[yp][3]=rhp[yp][3]+ppot/2.0+potb/2.0;
rhp5[yp][3]=rhp5[yp][3]+ppot; // rhp5 = interaction as they are
rhp[kj][3]=rhp[kj][3]+ppot/2.0+potb/2.0;
toav=toav+ppot+potb;
for (int jou=0; jou <=2; jou++) {
ggx=(ede1*suh*(hpr[yp][jou]-hpr[kj][jou]))/(kro*kro*kro);
ggy=(ede1*suh*(hpr[yp][jou]-hpr3[kj][jou]))/(krr*krr*krr);
ggz=(suh*(hpr[yp][jou]-hpr[kj][jou]))/(kro*kro*kro);
// force component of each electron
rhp[yp][jou]=rhp[yp][jou]+ggx+ggy;
rhp5[yp][jou]=rhp5[yp][jou]+ggz;
rhp5[kj][jou]=rhp5[kj][jou]-ggz;
}
}}
// interaction among electrons 0-7
for (int yp=0; yp <=7; yp++) {
for (int kj=0; kj <=7; kj++) {
if (yp < kj ) { // kro=distance between electrons
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;}
ppot=(elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
// rhp[][3]=each electron's potential energy
rhp[yp][3]=rhp[yp][3]+ppot/2.0; rhp[kj][3]=rhp[kj][3]+ppot/2.0;
toav=toav+ppot;
for (int jou=0; jou <=2; jou++) {
ggx=(suh*(hpr[yp][jou]-hpr[kj][jou]))/(kro*kro*kro);
rhp5[yp][jou]=rhp5[yp][jou]+ggx; rhp5[kj][jou]=rhp5[kj][jou]-ggx;
}
}}}
// between electron8-11 and each nucleus
for (int yp=8; yp <=11; yp++) {
for (int rv=0; rv <=5; rv++) {
kro=Math.sqrt((hpr[yp][0]-nux[rv][0])*(hpr[yp][0]-nux[rv][0])+
(hpr[yp][1]-nux[rv][1])*(hpr[yp][1]-nux[rv][1])+
(hpr[yp][2]-nux[rv][2])*(hpr[yp][2]-nux[rv][2]));
if (kro == 0) {kro=5000.0;}
ppot=-(nux[rv][3]*elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
toav = toav + ppot; rhp[yp][3] = rhp[yp][3] + ppot;
rhp5[yp][3] = rhp5[yp][3] + ppot;
// rhp[el][6] = interaction with other nuclei
zk = yp -6;
if ( rv != zk ) { rhp[yp][6] = rhp[yp][6] + ppot;
rhp5[yp][6] = rhp5[yp][6] + ppot;
}
for (int jou=0; jou <=2; jou++) { // force component
ggx=(suh*nux[rv][3]*(hpr[yp][jou]-nux[rv][jou]))/(kro*kro*kro);
rhp[yp][jou] = rhp[yp][jou] - ggx; // force against electron
rhp5[yp][jou] = rhp5[yp][jou] - ggx; // force against electron
mmp[rv][jou] = mmp[rv][jou] + ggx; // force against nuclei
}
}}
// interaction between H nuclei and electrons 0-7
ggz=0.0;
for (int rv=2; rv <=5; rv++) {
for (int yp=0; yp <=7; yp++) {
kro=Math.sqrt((hpr[yp][0]-nux[rv][0])*(hpr[yp][0]-nux[rv][0])+
(hpr[yp][1]-nux[rv][1])*(hpr[yp][1]-nux[rv][1])+
(hpr[yp][2]-nux[rv][2])*(hpr[yp][2]-nux[rv][2]));
krr=Math.sqrt((hpr3[yp][0]-nux[rv][0])*(hpr3[yp][0]-nux[rv][0])+
(hpr3[yp][1]-nux[rv][1])*(hpr3[yp][1]-nux[rv][1])+
(hpr3[yp][2]-nux[rv][2])*(hpr3[yp][2]-nux[rv][2]));
ppot=-(ede1*nux[rv][3]*elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
ggz=-(ede1*nux[rv][3]*elc*elc*6.241509e18)/(4.0*pai*epsi*krr*1.0e-14);
toav = toav + ppot+ggz;
rhp[yp][3] = rhp[yp][3] + ppot+ggz;
rhp[yp][6] = rhp[yp][6] + ppot+ggz;
for (int jou=0; jou <=2; jou++) {
ggx=(ede1*suh*nux[rv][3]*(hpr[yp][jou]-nux[rv][jou]))/(kro*kro*kro);
ggy=(ede1*suh*nux[rv][3]*(hpr3[yp][jou]-nux[rv][jou]))/(krr*krr*krr);
ggz=(suh*nux[rv][3]*(hpr[yp][jou]-nux[rv][jou]))/(kro*kro*kro);
rhp5[yp][jou] = rhp5[yp][jou] - ggz;
mmp[rv][jou] = mmp[rv][jou] + ggx+ggy;
}
}}
// between electron0-7 and C nuclei
for (int yp=0; yp <=7; yp++) {
for (int rv=0; rv <=1; rv++) {
kro=Math.sqrt((hpr[yp][0]-nux[rv][0])*(hpr[yp][0]-nux[rv][0])+
(hpr[yp][1]-nux[rv][1])*(hpr[yp][1]-nux[rv][1])+
(hpr[yp][2]-nux[rv][2])*(hpr[yp][2]-nux[rv][2]));
krr=Math.sqrt((hpr3[yp][0]-nux[rv][0])*(hpr3[yp][0]-nux[rv][0])+
(hpr3[yp][1]-nux[rv][1])*(hpr3[yp][1]-nux[rv][1])+
(hpr3[yp][2]-nux[rv][2])*(hpr3[yp][2]-nux[rv][2]));
ppot=-(ede1*nux[rv][3]*elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
ggz=-(ede1*nux[rv][3]*elc*elc*6.241509e18)/(4.0*pai*epsi*krr*1.0e-14);
toav = toav +ppot+ggz; rhp[yp][3] = rhp[yp][3] + ppot+ggz;
// rhp[][6] = potential V with another nucleus
if ( yp < 4 && rv==1 ) {
rhp[yp][6] = rhp[yp][6] + ppot+ggz; }
if ( yp > 3 && rv==0 ) {
rhp[yp][6] = rhp[yp][6] + ppot+ggz; }
for (int jou=0; jou <=2; jou++) {
ggx=(ede1*suh*nux[rv][3]*(hpr[yp][jou]-nux[rv][jou]))/(kro*kro*kro);
ggy=(ede1*suh*nux[rv][3]*(hpr3[yp][jou]-nux[rv][jou]))/(krr*krr*krr);
ggz=(suh*nux[rv][3]*(hpr[yp][jou]-nux[rv][jou]))/(kro*kro*kro);
// force component
rhp5[yp][jou] = rhp5[yp][jou] - ggz;
mmp[rv][jou] = mmp[rv][jou] + ggx+ggy;
}
}}
// interaction among nuclei
pota = 0.0; // pota = potential V among nuclei
for (int yp=0; yp <=5; yp++) {
for (int kj=0; kj <=5; kj++) {
if (yp < kj ) {
kro = Math.sqrt((nux[yp][0]-nux[kj][0])*(nux[yp][0]-nux[kj][0]) + (nux[yp][1]-nux[kj][1])*(nux[yp][1]-nux[kj][1]) + (nux[yp][2]-nux[kj][2])*(nux[yp][2]-nux[kj][2]) );
if (kro == 0) {kro=5000.0;}
ppot = (nux[yp][3]*nux[kj][3]*elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
toav=toav+ppot; pota=pota+ppot;
for (int jou=0; jou <=2; jou++) {
ggx=(suh*nux[yp][3]*nux[kj][3]*(nux[yp][jou]-nux[kj][jou]))/(kro*kro*kro);
// mmp[][0-2] = force acting on each nucleus
mmp[yp][jou] = mmp[yp][jou] + ggx; mmp[kj][jou] = mmp[kj][jou] - ggx;
// mmp[][3-5] = force component only among nuclei
mmp[yp][jou+3] = mmp[yp][jou+3] + ggx;
mmp[kj][jou+3] = mmp[kj][jou+3] - ggx;
}
}}}
ex=(int)(toav*100.0); ggx=ex/100.0;
impho.setText("tV "+Double.toString(ggx)); // show total V
gz = 0.0; // distribute nucler V to electron based on rhp[][6]
for (int yp=0; yp <=11; yp++) {
gz = gz + rhp[yp][6];
}
for (int yp=0; yp <=11; yp++) {
rhp[yp][3] = rhp[yp][3] + (pota * rhp[yp][6])/gz;
}
gz = 0.0; // distribute nuclear V to electron based on rhp5[][6]
for (int yp=0; yp <=7; yp++) {
gz = gz + rhp[yp][6];
}
for (int yp=8; yp <=11; yp++) {
gz = gz + rhp5[yp][6];
}
for (int yp=8; yp <=11; yp++) {
rhp5[yp][3] = rhp5[yp][3] + (pota * rhp5[yp][6])/gz;
}
gz=0.0;
for (int yp=0; yp <=7; yp++) {
gz = gz + rhp[yp][3];
}
for (int yp=0; yp <=7; yp++) {
rhp[yp][3] = gz/8.0;
}
// noxx[0,1][0-2] = center coordinate of C1 and C2
double noxx[][]={{0,0,0},{0,0,0}};
for (int yp=0; yp <=3; 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+4][jou];
}}
for (int jou=0; jou <=2; jou++) {
noxx[0][jou]=noxx[0][jou]/4.0;
noxx[1][jou]=noxx[1][jou]/4.0;
}
// interaction only in carbon 0
for (int yp=0; yp <=3; yp++) {
for (int kj=0; kj <=3; kj++) {
if (yp < 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;}
ppot=(elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
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++) {
ggx=(suh*(hpr[yp][jou]-hpr[kj][jou]))/(kro*kro*kro);
teqq[yp][jou]=teqq[yp][jou]+ggx; teqq[kj][jou]=teqq[kj][jou]-ggx;
}
}}}
// interaction only in carbon 1
for (int yp=4; yp <=7; yp++) {
for (int kj=4; kj <=7; kj++) {
if (yp < kj ) {
ez = 0;
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;}
ppot=(elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
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++) {
ggx=(suh*(hpr[yp][jou]-hpr[kj][jou]))/(kro*kro*kro);
teqq[yp][jou]=teqq[yp][jou]+ggx; teqq[kj][jou]=teqq[kj][jou]-ggx;
}
}}}
// interaction between noxx and C electron
for (int yp=0; yp <=1; yp++) {
for (int rv=0; rv <=3; rv++) {
ez = rv+yp*4;
kro=Math.sqrt((hpr[ez][0]-noxx[yp][0])*(hpr[ez][0]-noxx[yp][0])+
(hpr[ez][1]-noxx[yp][1])*(hpr[ez][1]-noxx[yp][1])+
(hpr[ez][2]-noxx[yp][2])*(hpr[ez][2]-noxx[yp][2]));
if (kro == 0) {kro=5000.0;}
ppot=(elc*elc*den*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
teqq[ez][3]=teqq[ez][3]-ppot;
for (int jou=0; jou <=2; jou++) {
ggx=(suh*den*(hpr[ez][jou]-noxx[yp][jou]))/(kro*kro*kro);
teqq[ez][jou]=teqq[ez][jou]-ggx;
}}}
// show electron 0-7 data
for (int yp=0; yp <=7; yp++) {
ex=(int)(rhp[yp][3]*100.0); ggx=ex/100.0;
elp[yp][4].setText("V "+Double.toString(ggx)); //show electron 0-7 's V
kro = Math.sqrt(hpr[yp][0]*hpr[yp][0]+hpr[yp][1]*hpr[yp][1]+hpr[yp][2]*hpr[yp][2]);
if ( yp > 3 ) {kro= Math.sqrt((hpr[yp][0]+CC)*(hpr[yp][0]+CC)+hpr[yp][1]*hpr[yp][1]+hpr[yp][2]*hpr[yp][2]);}
ex=(int)(kro);
// show distance between electron and close nucleus
elp[yp][3].setText("nuc "+Integer.toString(ex));
ex = 0; if (yp > 3) {ex=1;}
ez=yp-(ex*4);
gx=-hpr[yp][0]; gy=-hpr[yp][1];
gz=-hpr[yp][2];
if (yp > 3) {
gx=-(hpr[yp][0]+CC); gy=-hpr[yp][1];
gz=-hpr[yp][2];
}
ggx=Math.sqrt(gx*gx+gy*gy+gz*gz);
rhp[yp][4] = (gx*rhp5[yp][0] +gy*rhp5[yp][1] + gz*rhp5[yp][2])/ggx;
rhp[yp][5] = 0.0; // rhp[0-3][4,5] = 4 -- c force, 5-- r force
ex=(int)(rhp[yp][4]);
elp[yp][5].setText("cf "+Integer.toString(ex));
elp[yp][6].setText("rf "+Integer.toString(0));
}
// vvh[][0-2] = vector toward each CH line
double vvh[][]=new double[4][6]; // rhp[8-13][] force based
double vvh2[][]=new double[4][6]; // rhp5[8-13][] force based
for (int yp=8; yp <=11; yp++) {
kro=(hpr[yp][0]*nux[yp-6][0]+hpr[yp][1]*nux[yp-6][1]+hpr[yp][2]*nux[yp-6][2])/CH;
if ( yp > 9 ) {
kro=-((hpr[yp][0]+CC)*nux[yp-8][0]+hpr[yp][1]*nux[yp-8][1]+hpr[yp][2]*nux[yp-8][2])/CH;
}
for (int kj=0; kj <=2; kj++) {
vvh[yp-8][kj] = (nux[yp-6][kj]*kro)/CH;
ggz = hpr[yp][kj];
if ( yp > 9 ) {
vvh[yp-8][kj] =-(nux[yp-8][kj]*kro)/CH;
if (kj==0) {ggz = hpr[yp][kj]+ CC;}
}
vvh[yp-8][kj] = vvh[yp-8][kj] - ggz;
}
}
// show electron 8-11 data
for (int yp=8; yp <=11; yp++) {
ex=(int)(rhp[yp][3]*100.0); ggx=ex/100.0;
elp[yp][4].setText("V "+Double.toString(ggx));
kro=Math.sqrt((hpr[yp][0]-nux[yp-6][0])*(hpr[yp][0]-nux[yp-6][0])+
(hpr[yp][1]-nux[yp-6][1])*(hpr[yp][1]-nux[yp-6][1])+
(hpr[yp][2]-nux[yp-6][2])*(hpr[yp][2]-nux[yp-6][2]));
if (kro == 0) {kro=5000.0;}
ex=(int)(kro);
elp[yp][3].setText("nuc "+Integer.toString(ex));
// rhp[][4] = force component toward center
rhp[yp][4] = -(nux[yp-6][0]*rhp[yp][0] +nux[yp-6][1]*rhp[yp][1] + nux[yp-6][2]*rhp[yp][2])/CH;
rhp5[yp][4] = -(nux[yp-6][0]*rhp5[yp][0] +nux[yp-6][1]*rhp5[yp][1] + nux[yp-6][2]*rhp5[yp][2])/CH;
if (yp > 9 ) {
rhp[yp][4] = (nux[yp-8][0]*rhp[yp][0] +nux[yp-8][1]*rhp[yp][1] + nux[yp-8][2]*rhp[yp][2])/CH;
rhp5[yp][4] = (nux[yp-8][0]*rhp5[yp][0] +nux[yp-8][1]*rhp5[yp][1] + nux[yp-8][2]*rhp5[yp][2])/CH;
}
krr = Math.sqrt( vvh[yp-8][0]*vvh[yp-8][0]+vvh[yp-8][1]*vvh[yp-8][1]+ vvh[yp-8][2]*vvh[yp-8][2] );
// rhp[][5] = force component toward CH line
rhp[yp][5] = (vvh[yp-8][0]*rhp[yp][0] +vvh[yp-8][1]*rhp[yp][1] + vvh[yp-8][2]*rhp[yp][2])/krr;
rhp5[yp][5] = (vvh[yp-8][0]*rhp5[yp][0] +vvh[yp-8][1]*rhp5[yp][1] + vvh[yp-8][2]*rhp5[yp][2])/krr;
ex=(int)(rhp[yp][4]);
elp[yp][5].setText("cf "+Integer.toString(ex));
ex=(int)(rhp[yp][5]);
elp[yp][6].setText("rf "+Integer.toString(ex));
// vvh[][4-6] = moving direction toward center by force
gx = (rhp[yp][4] * krr) / rhp[yp][5];
gy = (rhp5[yp][4] * krr) / rhp5[yp][5];
for (int kj=0; kj <=2; kj++) {
vvh[yp-8][kj+3] = -(nux[yp-6][kj] * gx)/CH;
vvh2[yp-8][kj+3] = -(nux[yp-6][kj] * gy)/CH;
if (yp > 9) {
vvh[yp-8][kj+3] = (nux[yp-8][kj] * gx)/CH;
vvh2[yp-8][kj+3] = (nux[yp-8][kj] * gy)/CH;
}
}}
// show electron 8-11 de Broglie waves
for (int yp=8; yp <=11; yp++) {
gz = Math.sqrt(rhp[yp][0]*rhp[yp][0]+rhp[yp][1]*rhp[yp][1]+rhp[yp][2]*rhp[yp][2]);
gy=(gz*elc*elc)/(4.0*pai*epsi*suh*1.0e-28); // gy=force (N)
gx=Math.sqrt((-1.0*rhp[yp][3]*1.602177e-19)/me); // gx=velocity (m/s)
ggx=(me*gx*gx)/gy; // ggx="temporary" radius
ggy=(2*pai*ggx*me*gx)/h; // ggy=de Broglie's waves
hpr[yp][3]=ggy; // hpr[][3] = waves
ex=(int)(ggy*1000); ggy=ex/1000.0;
elp[yp][7].setText("wn "+Double.toString(ggy));
}
// show electron 0-7 de Broglie wave
for (int yp=0; yp <=7; yp++) {
gz = Math.sqrt(teqq[yp][0]*teqq[yp][0]+teqq[yp][1]*teqq[yp][1]+teqq[yp][2]*teqq[yp][2]);
gy=(gz*elc*elc)/(4.0*pai*epsi*suh*1.0e-28); // gy=force (N)
gx=Math.sqrt((-1.0*teqq[yp][3]*1.602177e-19)/me); // gx=velocity (m/s)
ggx=(me*gx*gx)/gy;
ggy=(2*pai*ggx*me*gx)/h;
hpr[yp][3]=ggy;
ex=(int)(ggy*1000); ggy=ex/1000.0;
elp[yp][7].setText("wn "+Double.toString(ggy));
}
// show force FX acting on C nuclei
for (int rv=0; rv <=1; rv++) {
ww=" FX ";
ex=(int)(mmp[rv][0]);
mmpho[rv][0].setText(ww+Integer.toString(ex));
}
// show force acting on H0,H3 nuclei toward center
for (int rv=0; rv <=1; rv++) {
gx = -(nux[2][0]*mmp[2][0] +nux[2][1]*mmp[2][1] + nux[2][2]*mmp[2][2])/CH;
if ( rv == 1) {
gx = (nux[3][0]*mmp[5][0] +nux[3][1]*mmp[5][1] + nux[3][2]*mmp[5][2])/CH;
}
ex=(int)(gx);
mmpho[rv+2][0].setText("CF "+Integer.toString(ex));
}
// upper table ends
for (int yp=0; yp <=7; yp++) {
for (int jou=0; jou <=2; jou++) {
hprr[yp][jou] = hpr[yp][jou];
}}
// hprr [8-11][0-2] = position after moving toward center by force
// hprr2[8-11][0-2] = position after moving by force (=rhp5[][])
for (int yp=8; yp <=11; yp++) {
for (int kj=0; kj <=2; kj++) {
hprr[yp][kj] = hpr[yp][kj] + vvh[yp-8][kj+3] * 2.0 ;
hprr2[yp][kj] = hpr[yp][kj] + vvh2[yp-8][kj+3] * 2.0 ;
}}
toav=0.0; // toav= total potential energy after moving
// interaction among ele8-11 (aftger moving)
for (int yp=8; yp <=11; yp++) {
for (int kj=8; kj <=11; kj++) {
if (yp < kj ) {
kro=Math.sqrt((hprr[yp][0]-hprr[kj][0])*(hprr[yp][0]-hprr[kj][0])+
(hprr[yp][1]-hprr[kj][1])*(hprr[yp][1]-hprr[kj][1])+
(hprr[yp][2]-hprr[kj][2])*(hprr[yp][2]-hprr[kj][2]));
kro2=Math.sqrt((hprr2[yp][0]-hprr2[kj][0])*(hprr2[yp][0]-hprr2[kj][0])+
(hprr2[yp][1]-hprr2[kj][1])*(hprr2[yp][1]-hprr2[kj][1])+
(hprr2[yp][2]-hprr2[kj][2])*(hprr2[yp][2]-hprr2[kj][2]));
ppot=(elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
potd=(elc*elc*6.241509e18)/(4.0*pai*epsi*kro2*1.0e-14);
rpp[yp][3]=rpp[yp][3]+ppot/2.0; rpp[kj][3]=rpp[kj][3]+ppot/2.0;
rpp5[yp][3]=rpp5[yp][3]+potd/2.0; rpp5[kj][3]=rpp5[kj][3]+potd/2.0;
toav=toav+ppot;
for (int jou=0; jou <=2; jou++) {
ggx=(suh*(hprr[yp][jou]-hprr[kj][jou]))/(kro*kro*kro);
ggy=(suh*(hprr2[yp][jou]-hprr2[kj][jou]))/(kro2*kro2*kro2);
rpp[yp][jou]=rpp[yp][jou]+ggx; rpp[kj][jou]=rpp[kj][jou]-ggx;
rpp5[yp][jou]=rpp5[yp][jou]+ggy; rpp5[kj][jou]=rpp5[kj][jou]-ggy;
}
}}}
krr=0.0; potb=0.0; ggy=0.0;
for (int yp=8; yp <=11; yp++) {
for (int kj=0; kj <=7; kj++) {
kro=Math.sqrt((hprr[yp][0]-hprr[kj][0])*(hprr[yp][0]-hprr[kj][0])+
(hprr[yp][1]-hprr[kj][1])*(hprr[yp][1]-hprr[kj][1])+
(hprr[yp][2]-hprr[kj][2])*(hprr[yp][2]-hprr[kj][2]));
krr=Math.sqrt((hprr[yp][0]-hpr3[kj][0])*(hprr[yp][0]-hpr3[kj][0])+
(hprr[yp][1]-hpr3[kj][1])*(hprr[yp][1]-hpr3[kj][1])+
(hprr[yp][2]-hpr3[kj][2])*(hprr[yp][2]-hpr3[kj][2]));
kro2=Math.sqrt((hprr2[yp][0]-hprr[kj][0])*(hprr2[yp][0]-hprr[kj][0])+
(hprr2[yp][1]-hprr[kj][1])*(hprr2[yp][1]-hprr[kj][1])+
(hprr2[yp][2]-hprr[kj][2])*(hprr2[yp][2]-hprr[kj][2]));
// ede1 = 0.5 half charge
ppot=(ede1*elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
potb=(ede1*elc*elc*6.241509e18)/(4.0*pai*epsi*krr*1.0e-14);
rpp[yp][3]=rpp[yp][3]+ppot/2.0+potb/2.0;
rpp[kj][3]=rpp[kj][3]+ppot/2.0+potb/2.0;
toav=toav+ppot+potb;
ppot=(elc*elc*6.241509e18)/(4.0*pai*epsi*kro2*1.0e-14);
rpp5[yp][3]=rpp5[yp][3]+ppot/2.0; // interaction as they are
for (int jou=0; jou <=2; jou++) {
ggx=(ede1*suh*(hprr[yp][jou]-hprr[kj][jou]))/(kro*kro*kro);
ggy=(ede1*suh*(hprr[yp][jou]-hpr3[kj][jou]))/(krr*krr*krr);
ggz=(suh*(hprr[yp][jou]-hprr[kj][jou]))/(kro*kro*kro);
gz=(suh*(hprr2[yp][jou]-hprr[kj][jou]))/(kro2*kro2*kro2);
rpp[yp][jou]=rpp[yp][jou]+ggx+ggy;
rpp5[yp][jou]=rpp5[yp][jou]+gz;
rpp5[kj][jou]=rpp5[kj][jou]-ggz;
}
}}
// interaction among electrons 0-7
for (int yp=0; yp <=7; yp++) {
for (int kj=0; kj <=7; kj++) {
if (yp < kj ) { // kro=distance between electrons
kro=Math.sqrt((hprr[yp][0]-hprr[kj][0])*(hprr[yp][0]-hprr[kj][0])+
(hprr[yp][1]-hprr[kj][1])*(hprr[yp][1]-hprr[kj][1])+
(hprr[yp][2]-hprr[kj][2])*(hprr[yp][2]-hprr[kj][2]));
if (kro==0) {kro=5000.0;}
// rpp[][3]=each electron's potential energy
ppot=(elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
rpp[yp][3]=rpp[yp][3]+ppot/2.0; rpp[kj][3]=rpp[kj][3]+ppot/2.0;
toav=toav+ppot;
for (int jou=0; jou <=2; jou++) {
ggx=(suh*(hprr[yp][jou]-hprr[kj][jou]))/(kro*kro*kro);
// rpp5[][0-2] = force component
rpp5[yp][jou]=rpp5[yp][jou]+ggx; rpp5[kj][jou]=rpp5[kj][jou]-ggx;
}
}}}
// between electron8-11 and each nucleus
for (int yp=8; yp <=11; yp++) {
for (int rv=0; rv <=5; rv++) {
kro=Math.sqrt((hprr[yp][0]-nux[rv][0])*(hprr[yp][0]-nux[rv][0])+
(hprr[yp][1]-nux[rv][1])*(hprr[yp][1]-nux[rv][1])+
(hprr[yp][2]-nux[rv][2])*(hprr[yp][2]-nux[rv][2]));
kro2=Math.sqrt((hprr2[yp][0]-nux[rv][0])*(hprr2[yp][0]-nux[rv][0])+
(hprr2[yp][1]-nux[rv][1])*(hprr2[yp][1]-nux[rv][1])+
(hprr2[yp][2]-nux[rv][2])*(hprr2[yp][2]-nux[rv][2]));
ppot=-(nux[rv][3]*elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
potd=-(nux[rv][3]*elc*elc*6.241509e18)/(4.0*pai*epsi*kro2*1.0e-14);
toav = toav + ppot; rpp[yp][3] = rpp[yp][3] + ppot;
rpp5[yp][3] = rpp5[yp][3] + potd;
// rpp[][6]= potential V with other nuclei
zk = yp -6;
if ( rv != zk ) { rpp[yp][6] = rpp[yp][6] + ppot;
rpp5[yp][6] = rpp5[yp][6] + potd;
}
for (int jou=0; jou <=2; jou++) { // force component
ggx=(suh*nux[rv][3]*(hprr[yp][jou]-nux[rv][jou]))/(kro*kro*kro);
ggy=(suh*nux[rv][3]*(hprr2[yp][jou]-nux[rv][jou]))/(kro2*kro2*kro2);
rpp[yp][jou] = rpp[yp][jou] - ggx;
rpp5[yp][jou] = rpp5[yp][jou] - ggy;
mpp[rv][jou] = mpp[rv][jou] + ggx;
}
}}
// interaction between H nuclei and electrons 0-7
ggz=0.0;
for (int rv=2; rv <=5; rv++) {
for (int yp=0; yp <=7; yp++) {
kro=Math.sqrt((hprr[yp][0]-nux[rv][0])*(hprr[yp][0]-nux[rv][0])+
(hprr[yp][1]-nux[rv][1])*(hprr[yp][1]-nux[rv][1])+
(hprr[yp][2]-nux[rv][2])*(hprr[yp][2]-nux[rv][2]));
// hpr3[0-7][0-2] = symmetric position of ele0-7
krr=Math.sqrt((hpr3[yp][0]-nux[rv][0])*(hpr3[yp][0]-nux[rv][0])+
(hpr3[yp][1]-nux[rv][1])*(hpr3[yp][1]-nux[rv][1])+
(hpr3[yp][2]-nux[rv][2])*(hpr3[yp][2]-nux[rv][2]));
ppot=-(ede1*nux[rv][3]*elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
ggz=-(ede1*nux[rv][3]*elc*elc*6.241509e18)/(4.0*pai*epsi*krr*1.0e-14);
toav = toav + ppot+ggz;
rpp[yp][3] = rpp[yp][3] + ppot+ggz;
rpp[yp][6] = rpp[yp][6] + ppot+ggz;
for (int jou=0; jou <=2; jou++) {
ggx=(ede1*suh*nux[rv][3]*(hprr[yp][jou]-nux[rv][jou]))/(kro*kro*kro);
ggy=(ede1*suh*nux[rv][3]*(hpr3[yp][jou]-nux[rv][jou]))/(krr*krr*krr);
ggz=(suh*nux[rv][3]*(hprr[yp][jou]-nux[rv][jou]))/(kro*kro*kro);
rpp5[yp][jou] = rpp5[yp][jou] - ggz;
mpp[rv][jou] = mpp[rv][jou] + ggx+ggy;
}
}}
// interaction between electron0-7 and C nuclei
for (int yp=0; yp <=7; yp++) {
for (int rv=0; rv <=1; rv++) {
kro=Math.sqrt((hprr[yp][0]-nux[rv][0])*(hprr[yp][0]-nux[rv][0])+
(hprr[yp][1]-nux[rv][1])*(hprr[yp][1]-nux[rv][1])+
(hprr[yp][2]-nux[rv][2])*(hprr[yp][2]-nux[rv][2]));
krr=Math.sqrt((hpr3[yp][0]-nux[rv][0])*(hpr3[yp][0]-nux[rv][0])+
(hpr3[yp][1]-nux[rv][1])*(hpr3[yp][1]-nux[rv][1])+
(hpr3[yp][2]-nux[rv][2])*(hpr3[yp][2]-nux[rv][2]));
ppot=-(ede1*nux[rv][3]*elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
ggz=-(ede1*nux[rv][3]*elc*elc*6.241509e18)/(4.0*pai*epsi*krr*1.0e-14);
toav = toav +ppot+ggz; rpp[yp][3] = rpp[yp][3] + ppot+ggz;
// rpp[][6] = potential V with other nuclei
if ( yp < 4 && rv==1 ) {
rpp[yp][6] = rpp[yp][6] + ppot+ggz; }
if ( yp > 3 && rv==0 ) {
rpp[yp][6] = rpp[yp][6] + ppot+ggz; }
for (int jou=0; jou <=2; jou++) {
ggx=(ede1*suh*nux[rv][3]*(hprr[yp][jou]-nux[rv][jou]))/(kro*kro*kro);
ggy=(ede1*suh*nux[rv][3]*(hpr3[yp][jou]-nux[rv][jou]))/(krr*krr*krr);
ggz=(suh*nux[rv][3]*(hprr[yp][jou]-nux[rv][jou]))/(kro*kro*kro);
// force component
rpp5[yp][jou] = rpp5[yp][jou] - ggz;
mpp[rv][jou] = mpp[rv][jou] + ggx+ggy;
}
}}
// add interaction among nuclei
toav = toav + pota;
for (int rv=0; rv <=5; rv++) {
for (int jou=0; jou <=2; jou++) {
mpp[rv][jou]=mpp[rv][jou]+mmp[rv][jou+3];
}}
// distribute nucler V to electrons based on rpp[][6]
gz = 0.0;
for (int yp=0; yp <=11; yp++) {
gz = gz + rpp[yp][6];
}
for (int yp=0; yp <=11; yp++) {
rpp[yp][3] = rpp[yp][3] + (pota * rpp[yp][6])/gz;
}
gz = 0.0;
for (int yp=0; yp <=7; yp++) {
gz = gz + rpp[yp][6];
}
for (int yp=8; yp <=11; yp++) {
gz = gz + rpp5[yp][6];
}
for (int yp=8; yp <=11; yp++) {
rpp5[yp][3] = rpp5[yp][3] + (pota * rpp5[yp][6])/gz;
}
gz=0.0;
for (int yp=0; yp <=7; yp++) {
gz = gz + rpp[yp][3];
}
for (int yp=0; yp <=7; yp++) {
rpp[yp][3] = gz/8.0;
}
ex=(int)(toav*100.0); ggx=ex/100.0;
imphoo.setText("tV "+Double.toString(ggx)); // show total V after moving
for (int yp=0; yp <=5; yp++) {
xk=0; // xk = nuclear number electron belongs to
if ( yp < 4 && yp > 1 ) {
xk=1;
}
if ( yp == 4 ) {
xk=2;
}
if ( yp == 5 ) {
xk=4;
}
for (int jou=0; jou <=2; jou++) {
ex=(int)(hprr[yp*2][jou]-nux[xk][jou]);
// show relative coordinate of electron after moving
elpp[yp][jou].setText(Integer.toString(ex));
}
kro = Math.sqrt((hprr[yp*2][0] - nux[xk][0])*(hprr[yp*2][0]-nux[xk][0])+(hprr[yp*2][1]-nux[xk][1])*(hprr[yp*2][1]-nux[xk][1])+(hprr[yp*2][2]-nux[xk][2])*(hprr[yp*2][2]-nux[xk][2]));
if (kro == 0) {kro=5000.0;}
ex=(int)(kro);
elpp[yp][3].setText("nuc "+Integer.toString(ex));
ex=(int)(rpp[yp*2][3]*100.0); ggx=ex/100.0;
elpp[yp][4].setText("V "+Double.toString(ggx));
gx=-hprr[yp*2][0]; gy=-hprr[yp*2][1];
gz=-hprr[yp*2][2];
if (yp > 1 && yp < 4) {
gx=-(hprr[yp*2][0]+CC); gy=-hprr[yp*2][1];
gz=-hprr[yp*2][2];
}
ggx=Math.sqrt(gx*gx+gy*gy+gz*gz);
ggz = (gx*rpp5[yp*2][0] +gy*rpp5[yp*2][1] + gz*rpp5[yp*2][2])/ggx;
if (yp==4) {
ggz=-(nux[2][0]*rpp[8][0] +nux[2][1]*rpp[8][1] + nux[2][2]*rpp[8][2])/CH;
}
if (yp==5) {
ggz=(nux[2][0]*rpp[10][0] +nux[2][1]*rpp[10][1] + nux[2][2]*rpp[10][2])/CH;
}
// cf = force component toward center
elpp[yp][5].setText("cf "+Integer.toString((int)ggz));
elpp[yp][6].setText("rf "+Integer.toString(0));
gz = Math.sqrt(rpp[yp*2][0]*rpp[yp*2][0]+rpp[yp*2][1]*rpp[yp*2][1]+rpp[yp*2][2]*rpp[yp*2][2]);
if ( yp < 4 ) {
gz = Math.sqrt(teqq[yp*2][0]*teqq[yp*2][0]+teqq[yp*2][1]*teqq[yp*2][1]+teqq[yp*2][2]*teqq[yp*2][2]);
}
gy=(gz*elc*elc)/(4.0*pai*epsi*suh*1.0e-28); // gy=force (N)
gx=Math.sqrt((-1.0*rpp[yp*2][3]*1.602177e-19)/me); // gx=velocity (m/s)
if ( yp < 4 ) {
gx=Math.sqrt((-1.0*teqq[yp*2][3]*1.602177e-19)/me);
}
ggx=(me*gx*gx)/gy;
ggy=(2*pai*ggx*me*gx)/h;
hprr[yp*2][3]=ggy;
ex=(int)(ggy*1000); ggy=ex/1000.0;
elpp[yp][7].setText("wn "+Double.toString(ggy));
}
for (int yp=0; yp <=7; yp++) {
gz = Math.sqrt(teqq[yp][0]*teqq[yp][0]+teqq[yp][1]*teqq[yp][1]+teqq[yp][2]*teqq[yp][2]);
gy=(gz*elc*elc)/(4.0*pai*epsi*suh*1.0e-28); // gy=force (N)
gx=Math.sqrt((-1.0*teqq[yp][3]*1.602177e-19)/me); // gx=velocity (m/s)
ggx=(me*gx*gx)/gy;
ggy=(2*pai*ggx*me*gx)/h;
hprr[yp][3]=ggy;
}
for ( int yp=8; yp <=11; yp++ ) {
gz = Math.sqrt(rpp[yp][0]*rpp[yp][0]+rpp[yp][1]*rpp[yp][1]+rpp[yp][2]*rpp[yp][2]);
gy=(gz*elc*elc)/(4.0*pai*epsi*suh*1.0e-28); // gy=force (N)
gx=Math.sqrt((-1.0*rpp[yp][3]*1.602177e-19)/me); // gx=velocity (m/s)
ggx=(me*gx*gx)/gy;
ggy=(2*pai*ggx*me*gx)/h;
hprr[yp][3]=ggy;
}
gx = (hpr[0][3]+hprr[0][3])/2.0;
ex=(int)(gx*1000); ggz=ex/1000.0;
averwa0.setText("wn "+Double.toString(ggz));
gy = (hpr[2][3]+hprr[2][3])/2.0;
ex=(int)(gy*1000); ggz=ex/1000.0;
averwa2.setText("wn "+Double.toString(ggz));
gx = (hpr[8][3]+hprr[8][3])/2.0;
ex=(int)(gx*1000); gx=ex/1000.0;
averwa8.setText("wn "+Double.toString(gx));
gx = (hpr[11][3]+hprr[11][3])/2.0;
ex=(int)(gx*1000); gx=ex/1000.0;
averwael.setText("wn "+Double.toString(gx));
gx = (hpr[0][3]+hpr[2][3]+hpr[4][3]+hpr[6][3])/4.0;
ex=(int)(gx*1000); gx=ex/1000.0;
reawav0.setText("e0-7 ave "+Double.toString(gx));
// de Broglie wave of electron 8 as it is
gz = Math.sqrt(rhp5[8][0]*rhp5[8][0]+rhp5[8][1]*rhp5[8][1]+rhp5[8][2]*rhp5[8][2]);
gy=(gz*elc*elc)/(4.0*pai*epsi*suh*1.0e-28); // gy=force (N)
gx=Math.sqrt((-1.0*rhp5[8][3]*1.602177e-19)/me); // gx=velocity (m/s)
ggx=(me*gx*gx)/gy;
ggy=(2*pai*ggx*me*gx)/h;
gz = Math.sqrt(rpp5[8][0]*rpp5[8][0]+rpp5[8][1]*rpp5[8][1]+rpp5[8][2]*rpp5[8][2]);
gy=(gz*elc*elc)/(4.0*pai*epsi*suh*1.0e-28); // gy=force (N)
gx=Math.sqrt((-1.0*rpp5[8][3]*1.602177e-19)/me); // gx=velocity (m/s)
ggx=(me*gx*gx)/gy;
ggz=(2*pai*ggx*me*gx)/h; ggy=(ggy+ggz)/2.0;
ex=(int)(ggy*1000); gx=ex/1000.0;
reawav8.setText("nosplit "+Double.toString(gx));
}
}