トップページ
分子結合のページに戻る。
分子結合 (付録) のページに戻る。
下のソースプログラムをそのままテキストエディタ(メモ帳など)にコピー and ペースト すれば、簡単にコンパイルと実行できる。
(この class file name は met なので、このテキストエディタを "met.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 met extends JPanel // methane average waves
{
public static void main(String arg[])
{
JFrame frame = new JFrame("CH4 (methane-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; // pi=3.14
double epsi=8.85418781787346e-12; // permittivity
double h=6.62606896e-34; // Planck constant
double elc=1.60217653e-19; // electron charge
double me=9.1093826e-31; // electron mass
double suh=5292.0*5292.0*1000.0; // Bohr radius^2 x 1000
int labe=0; // distinguish label
double nudis=10900.0; // C-H nuclear distance
JTextField elp[][]=new JTextField[8][11]; // text of electron 0-7
JTextField elpp[][]=new JTextField[8][11]; // text after electron
JTextField mmpho[][]=new JTextField[2][2]; // text nucleus H0 H2
JTextField impho=new JTextField(7); // text total V (eV)
JTextField imphoo=new JTextField(7); // text after total V
// text average de Broglie waves
JTextField averwa0=new JTextField(7); // electron 0 average wave
JTextField averwa4=new JTextField(7); // electron 4 average wave
JButton b1=new JButton("C-H (MM)");
String ope[]={"8500","9000","9500","10000","10900","11400","12000","13000"};
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 den=4.22; // den = central charge of carbon
double hpr[][]=new double[8][11]; // each electron's parameter
double hpr3[][]=new double[8][11]; // ele0-3's symmetric position
double hprr[][]=new double[8][11]; // after electron parameter
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 = each electron initial coordinate wrt. each close nucleus
double te1[][]={{hens, 0.0, 0.0}, {-heno, 0.0, henf},
{-heno, -henr, -hent}, {-heno, henr, -hent},
{0.0, 0.0, 4000.0}, {-1885.0, -3464.0, -666.0},
{-1885.0, 2309.0, -2666.0}, {3771.0, 1154.0, -666.0}};
// te2= vector perpendicular to each C-H line
// te2 length = 10000
double te2[][]={{0.0, 0.0, -10000.0}, {4714.0, 8660.3, 1666.7}, {4714.0,-5773.5,6666.7}, {-9428.1,-2886.8,1666.7}};
double hen3=10900.0; double henrr=(hen3*2.0)/rsi;
double hen1=(henrr*rsi)/6.0; double hen2=henrr/rth; double hen4=2.0*hen2;
// nux[][x,y,z,charge] = each nucleus information
// nux[1-4][x,y,z] = eahc hydrogen nuclei and C-H vector
double nux[][]={{0, 0, 0, den}, {hen3, 0, 0, 1}, {-hen1, 0, hen4, 1}, {-hen1, -henrr, -hen2, 1},{-hen1, henrr, -hen2,1}};
double te3[][]=new double[8][4]; // te3 = perpendicular to C-H line and te2
public J2DPanel()
{
setBackground(Color.black);
JPanel p=new JPanel();
p.setLayout(new GridLayout(19,12));
int aaa=0;
double tx,ty,tz,tkk;
for (int el=0; el <=3; el++) {
tx = te2[el][1]*nux[el+1][2]-te2[el][2]*nux[el+1][1];
ty = te2[el][2]*nux[el+1][0]-te2[el][0]*nux[el+1][2];
tz = te2[el][0]*nux[el+1][1]-te2[el][1]*nux[el+1][0];
tkk = Math.sqrt(tx*tx+ty*ty+tz*tz);
te3[el][0] = (tx*10000.0)/tkk;
te3[el][1] = (ty*10000.0)/tkk;
te3[el][2] = (tz*10000.0)/tkk;
}
for (int el=0; el <=7; el++) {
for (int pos=0; pos <=2; pos++) { // hpr[][0-2]=each electron's coordinate
elp[el][pos]=new JTextField(7);
elpp[el][pos]=new JTextField(7);
if (el==0 && pos==0) {elp[el][pos].addActionListener(this); }
if (el==4 && pos==0) {elp[el][pos].addActionListener(this);}
if (el==4 && pos==2) {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 <=7; el++) {
for (int pos=3; pos <=10; pos++) { // hpr[][3-10]=electron's other parameters
elp[el][pos]=new JTextField(7); elpp[el][pos]=new JTextField(7);
hpr[el][pos]=0.0; hprr[el][pos]=0.0; hpr3[el][pos]=0.0;
}}
for (int el=0; el <=1; el++) { // mmpho[0-1][]=H0 and H1 nuc's parameters
for (int pos=0; pos <=1; pos++) {
mmpho[el][pos]=new JTextField(7);
}}
// layout
String sihy[]={"eNo ", "+X(MM)", "+Y(MM)", "+Z(MM)", "nuc(MM)",
"V(eV)", "tForce", "cforce ", "rforce", "Waves", " -- ", " -- "};
for (int el=0; el <=11; el++) {
p.add(new Label(sihy[el]));
}
for (int el=0; el <=7; el++) {
if (el != 0 && el !=4 ) {
p.add(new Label(" "+el+" "));}
if (el==0) {p.add(new Label("ele 0"));}
if (el==4) {p.add(new Label("ele 4"));}
for (int pos=0; pos <=10; pos++) {
p.add(elp[el][pos]);
}}
p.add(new Label("H0 nuc ")); p.add(mmpho[0][0]);
p.add(new Label("H0 after ")); p.add(mmpho[0][1]);
p.add(new Label("total V ")); p.add(impho);
p.add(new Label(" -- ")); p.add(new Label(" -- "));
p.add(new Label("0-avewave ")); p.add(averwa0);
p.add(new Label(" -- ")); p.add(new Label(" -- "));
p.add(new Label("H1 nuc ")); p.add(mmpho[1][0]);
p.add(new Label("H1 after ")); p.add(mmpho[1][1]);
p.add(new Label("tV after")); p.add(imphoo);
p.add(new Label(" -- ")); p.add(new Label(" -- "));
p.add(new Label("4-avewave ")); p.add(averwa4);
p.add(new Label(" -- ")); p.add(new Label(" -- "));
for (int el=0; el <=6; el++) {
if (el != 0 && el !=4 ) {
p.add(new Label("af "+el+" "));}
if (el==0) {p.add(new Label("afel 0"));}
if (el==4) {p.add(new Label("afel 4"));}
for (int pos=0; pos <=10; pos++) {
p.add(elpp[el][pos]);
}}
p.add(new Label("af 7 "));
for (int pos=0; pos <=8; pos++) {
p.add(elpp[7][pos]);
}
p.add(b1); p.add(coom);
coom.setSelectedItem("10900"); b1.addActionListener(this);
add(p,"South");
double xx,yy,zz;
for (int el=0; el <=7; el++) {
// elp[el][3] = distance between each electron and close nucleus
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("nuc "+Integer.toString(aaa));
for (int jou=0; jou <=2; jou++) {
hpr[el][jou]=te1[el][jou];
if (el > 3) { hpr[el][jou]=te1[el][jou] + nux[el-3][jou];}
// hpr[el][0-2] = absolute coordinate of each electron
xx = te1[el][jou];
// elp[el][0-2] = relative coordinate of each electron
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=4;} // C-H button click
if (labe == 4) {
ss=(String)coom.getSelectedItem();
if (ss=="8500") {hen3=8500; } if (ss=="9000") {hen3=9000; }
if (ss=="10000") {hen3=10000;} if (ss=="9500") {hen3=9500; }
if (ss=="10900") {hen3=10900; } if (ss=="11400") {hen3=11400;}
if (ss=="12000") {hen3=12000; } if (ss=="13000") {hen3=13000;}
henr=(hen3*2.0)/rsi; nudis=hen3; // hen3 = new CH distance
hen1=(henr*rsi)/6.0; hen2=henr/rth; hen4=2*hen2;
// noxx[][0-2]= new nuclear coordinate
double noxx[][]={{0.0,0.0,0.0}, {hen3, 0.0, 0.0}, {-hen1,0.0, hen4},
{-hen1, -henr, -hen2},{-hen1, henr, -hen2}};
for (int ett=0; ett <=4; ett++) {
for (int sws=0; sws <=2; sws++) {
nux[ett][sws]=noxx[ett][sws];
}}
} // if ( labe == 4 ) 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,
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}};
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}}; // after tra
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}};
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}};
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}};
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}};
kro2=0.0 ; krr2=0.0; krk2=0.0; kwr2=0.0; kww2=0.0;
elp[0][1].setText(Integer.toString(0));
elp[0][2].setText(Integer.toString(0));
elp[4][1].setText(Integer.toString(0));
// get electron 0, 4 coordinates from textbox
ww=elp[0][0].getText(); hpr[0][0]=Double.parseDouble(ww);
ww=elp[0][1].getText(); hpr[0][1]=Double.parseDouble(ww);
ww=elp[0][2].getText(); hpr[0][2]=Double.parseDouble(ww);
ww= elp[4][0].getText(); gx=Double.parseDouble(ww); hpr[4][0]=gx+nux[1][0];
ww= elp[4][2].getText(); gz=Double.parseDouble(ww);
hpr[4][2] =gz + nux[1][2];
// set electron 1-3 coordinate based on electron 0
for (int yp=1; yp <=3; yp++) {
for (int kj=0; kj <=2; kj++) {
hpr[yp][kj] = (nux[yp+1][kj] * hpr[0][0])/nudis - (te2[yp][kj]*hpr[0][2])/10000.0 - (te3[yp][kj]*hpr[0][1])/10000.0;
elp[yp][kj].setText(Integer.toString((int)hpr[yp][kj]));
}}
// set electron 5-7 coordinates based on electron 4
for (int yp=5; yp <=7; yp++) {
for (int kj=0; kj <=2; kj++) {
hpr[yp][kj] = (nux[yp-3][kj] * gx)/nudis - (te2[yp-4][kj]*gz)/10000.0;
elp[yp][kj].setText(Integer.toString((int)hpr[yp][kj]));
hpr[yp][kj] = hpr[yp][kj] + nux[yp-3][kj];
}}
// hpr3[][0-2] = symmetric position of electron 0-3 wrt. C nucleus
for (int yp=0; yp <=3; yp++) {
for (int kj=0; kj <=2; kj++) {
hpr3[yp][kj] = -hpr[yp][kj];
}}
toav=0.0; ggy=0.0; // toav=total potential energy (eV)
double ppot;
for (int yp=0; yp <=7; yp++) { // interaction between electrons 0-7
for (int kj=0; kj <=7; kj++) {
if (yp < kj ) { // kro=distance (MM) 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 = each potential energy (eV)
ppot=(elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
if (yp < 4 && kj < 4 ) { // teqq[el 0-3][3] = only carbon atom V
teqq[yp][3]=teqq[yp][3]+ppot/2.0;
teqq[kj][3]=teqq[kj][3]+ppot/2.0;
}
// kro2 = distance between symmetric ele0-3 and ele4-7
if ( yp < 4 && kj > 3 ) {
kro2 = Math.sqrt((hpr3[yp][0]-hpr[kj][0])*(hpr3[yp][0]-hpr[kj][0])+
(hpr3[yp][1]-hpr[kj][1])*(hpr3[yp][1]-hpr[kj][1])+
(hpr3[yp][2]-hpr[kj][2])*(hpr3[yp][2]-hpr[kj][2]));
ppot=ppot*0.5;
potd =(elc*elc*6.241509e18*0.5)/(4*pai*epsi*kro2*1.0e-14);
ppot = ppot + potd;
}
// rhp[el][3] = each electron 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 = force between each electron
ggx=(suh*(hpr[yp][jou]-hpr[kj][jou]))/(kro*kro*kro); ggz=ggx;
if ( yp < 4 && kj > 3 ) {
ggy=(suh*(hpr3[yp][jou]-hpr[kj][jou]))/(kro2*kro2*kro2);
ggx=ggx*0.5;
ggx = ggx + (0.5 * ggy);
}
// rhp[][0-2]=force component acting on each electron
rhp[yp][jou]=rhp[yp][jou]+ggz; rhp[kj][jou]=rhp[kj][jou]-ggx;
}
}}}
// interaction between electron and each nucleus
for (int yp=0; yp <=7; yp++) {
for (int rv=0; rv <=4; 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 = potential energy between nuc and ele
ppot=-(nux[rv][3]*elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
// teqq[][3] = V only in carbon atom
if (rv==0 && yp < 4 ) { teqq[yp][3]=teqq[yp][3]+ppot; }
if ( yp < 4 ) {
kro2 = 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]));
potd=-(0.5*nux[rv][3]*elc*elc*6.241509e18)/(4*pai*epsi*kro2*1.0e-14);
ppot=(ppot*0.5)+potd;
}
toav = toav + ppot; rhp[yp][3] = rhp[yp][3] + ppot;
if ( yp < 4 ) {
if ( rv > 0 ) {
rhp[yp][6] = rhp[yp][6] + ppot;
}}
// rhp[el][6] = V (eV) between each electron and other nuclei
if ( yp > 3 ) {
zk = yp -3;
if ( rv != zk ) { rhp[yp][6] = rhp[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);
ggz=ggx;
if ( yp < 4 ) {
ggy=(0.5*suh*nux[rv][3]*(hpr3[yp][jou]-nux[rv][jou]))/(kro2*kro2*kro2);
ggx=(0.5*ggx) + ggy;
}
rhp[yp][jou] = rhp[yp][jou] - ggz;
mmp[rv][jou] = mmp[rv][jou] + ggx;
} // mmp[nuc][0-2] = force component acting on each nucleus
}} // interaction ele-nuc end
// interactions among nuclei
pota = 0.0; // pota = potential V among nuclei
for (int yp=0; yp <=4; yp++) {
for (int kj=0; kj <=4; 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[yp][jou] = mmp[yp][jou] + ggx; mmp[kj][jou] = mmp[kj][jou] - ggx;
mmp[yp][jou+3] = mmp[yp][jou+3] + ggx; mmp[kj][jou+3] = mmp[kj][jou+3] - ggx;
// mmp[nuc][3-5] = force component only among nuclei
}
}}}
// show total V to two decimal places
ex=(int)(toav*100.0); ggx=ex/100.0;
impho.setText("tV "+Double.toString(ggx));
gz = 0.0;
for (int yp=0; yp <=7; yp++) {
gz = gz + rhp[yp][6];
}
// distribute V only among nuclei to each electron based on rhp[el][6]
for (int yp=0; yp <=7; yp++) {
rhp[yp][3] = rhp[yp][3] + (pota * rhp[yp][6])/gz;
}
// show electron 0-3 data
for (int yp=0; yp <=3; yp++) {
ex=(int)(rhp[yp][3]*100.0); ggx=ex/100.0;
elp[yp][4].setText("V "+Double.toString(ggx)); //show electron 0-3 's V
kro = Math.sqrt(hpr[yp][0]*hpr[yp][0]+hpr[yp][1]*hpr[yp][1]+hpr[yp][2]*hpr[yp][2]);
if (kro == 0) {kro=5000.0;}
ex=(int)(kro);
// show distance betwee C nucleus and ele 0-3
elp[yp][3].setText("nuc "+Integer.toString(ex));
// inner product of rhp(= force) and nux (= CH line )
rhp[yp][4] = -(nux[yp+1][0]*rhp[yp][0] +nux[yp+1][1]*rhp[yp][1] + nux[yp+1][2]*rhp[yp][2])/nudis;
rhp[yp][5] = 0.0;
// cf = force acting on ele 0-3 toward C nucleus
ex=(int)(rhp[yp][4]);
elp[yp][5].setText("tF "+Integer.toString(ex));
elp[yp][6].setText("cf "+Integer.toString(ex));
elp[yp][7].setText("rf "+Integer.toString(0));
}
// show electron 4-7 data
for (int yp=4; yp <=7; yp++) {
ex=(int)(rhp[yp][3]*100.0); ggx=ex/100.0;
elp[yp][4].setText("V "+Double.toString(ggx)); //show electron 4-7 's V
kro=Math.sqrt((hpr[yp][0]-nux[yp-3][0])*(hpr[yp][0]-nux[yp-3][0])+
(hpr[yp][1]-nux[yp-3][1])*(hpr[yp][1]-nux[yp-3][1])+
(hpr[yp][2]-nux[yp-3][2])*(hpr[yp][2]-nux[yp-3][2]));
if (kro == 0) {kro=5000.0;}
ex=(int)(kro);
elp[yp][3].setText("nuc "+Integer.toString(ex));
// rhp[ele 4-7][4] = force acting on ele 4-7 toward C nuc
rhp[yp][4] = -(nux[yp-3][0]*rhp[yp][0] +nux[yp-3][1]*rhp[yp][1] + nux[yp-3][2]*rhp[yp][2])/nudis;
// rhp[ele 4-7][5] = force acting on ele 4-7 toward C-H line
rhp[yp][5] = (te2[yp-4][0]*rhp[yp][0] +te2[yp-4][1]*rhp[yp][1] + te2[yp-4][2]*rhp[yp][2])/10000.0;
if ( hpr[4][2] < 0 ) {
rhp[yp][5] = -(te2[yp-4][0]*rhp[yp][0] +te2[yp-4][1]*rhp[yp][1] + te2[yp-4][2]*rhp[yp][2])/10000.0;
}
// gx = total force acting on each electron
gx=Math.sqrt(rhp[yp][0]*rhp[yp][0]+rhp[yp][1]*rhp[yp][1]+rhp[yp][2]*rhp[yp][2]);
ex=(int)(gx);
elp[yp][5].setText("tF "+Integer.toString(ex)); // total force on ele4-7
ex=(int)(rhp[yp][4]);
if (yp ==4 ) { // show cf force
elp[yp][6].setText("cf "+Integer.toString(ex)+" *");}
else { elp[yp][6].setText("cf "+Integer.toString(ex)); }
ex=(int)(rhp[yp][5]);
elp[yp][7].setText("rf "+Integer.toString(ex)); // r-force ele 4-7
}
// show electron 4-7 de Broglie waves
for (int yp=4; yp <=7; yp++) {
// gz = total force acting on each electron
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*pai*epsi*suh*1.0e-28); // change gz to force (N)
gx=Math.sqrt((-1.0*rhp[yp][3]*1.602177e-19)/me); // gx=velocity (m/s)
// Virial 2T = - V
ggx=(me*gx*gx)/gy; // ggx="temporary" rotation radius
// ggy=de Broglie's waves included in one orbit
ggy=(2*pai*ggx*me*gx)/h;
hpr[yp][3]=ggy; // hpr[][3] = waves
ex=(int)(ggy*1000); ggy=ex/1000.0;
// show de Broglie wave number
elp[yp][8].setText("wn "+Double.toString(ggy));
}
// electron 0-3 de Broglie wave
kro=Math.sqrt(hpr[0][0]*hpr[0][0]+hpr[0][1]*hpr[0][1]+hpr[0][2]*hpr[0][2]); double ra=(kro*2)/rsi;
gy=(elc*elc)/(4.0*pai*epsi*ra*ra*1.0e-28) *(-rsi/4.0+(2.0*den)/3.0);
// gy = force (N) acting on each electron (tetradedron)
for (int yp=0; yp <=3; yp++) {
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; // de Broglie waves in one orbit
hpr[yp][3]=ggy;
ex=(int)(ggy*1000); ggy=ex/1000.0;
elp[yp][8].setText("wn "+Double.toString(ggy));
}
// show force acting on H0 H1 nuclei toward C
for (int rv=1; rv <=2; rv++) {
gx = -(nux[rv][0]*mmp[rv][0] +nux[rv][1]*mmp[rv][1] + nux[rv][2]*mmp[rv][2])/nudis;
ex=(int)(gx);
mmpho[rv-1][0].setText("CF "+Integer.toString(ex));
}
// upper table ends
// vvh[0-4][0-2] = vector toward ( perpendicular to ) each CH line
double vvh[][]=new double[4][6];
for (int yp=4; yp <=7; yp++) {
// inner product hpr and nux (CH line)
kro=(hpr[yp][0]*nux[yp-3][0]+hpr[yp][1]*nux[yp-3][1]+hpr[yp][2]*nux[yp-3][2])/nudis;
for (int kj=0; kj <=2; kj++) {
vvh[yp-4][kj] = (nux[yp-3][kj]*kro)/nudis;
vvh[yp-4][kj] = vvh[yp-4][kj] - hpr[yp][kj];
}
krr = Math.sqrt( vvh[yp-4][0]*vvh[yp-4][0]+vvh[yp-4][1]*vvh[yp-4][1]+ vvh[yp-4][2]*vvh[yp-4][2] );
// gx = vector toward C nuclues wrt force component
gx = rhp[yp][4] * krr / rhp[yp][5];
for (int kj=0; kj <=2; kj++) {
vvh[yp-4][kj+3] = -(nux[yp-3][kj] * gx)/nudis;
}}
// another electron coordinate after transformation
for (int yp=0; yp <=3; yp++) {
for (int jou=0; jou <=2; jou++) {
hprr[yp][jou] = hpr[yp][jou];
} }
// hprr[4-7][0-2] = electron 4-7 coordinate after moving following force
for (int yp=4; yp <=7; yp++) {
for (int kj=0; kj <=2; kj++) {
hprr[yp][kj] = hpr[yp][kj] + vvh[yp-4][kj+3] * 2.0 ;
}}
hprr[4][1] = 0.0;
for (int yp=0; yp <=3; yp++) { // set elpp[0-3][0-2] = after ele0-3
for (int kj=0; kj <=2; kj++) {
elpp[yp][kj].setText(Integer.toString((int)hprr[yp][kj]));
}}
for (int yp=4; yp <=7; yp++) { // set elpp[4-7][0-2] = after ele 4-7
for (int kj=0; kj <=2; kj++) {
gx = hprr[yp][kj] - nux[yp-3][kj];
elpp[yp][kj].setText(Integer.toString((int)gx));
}}
toav=0.0; // toav= total V after moving
for (int yp=0; yp <=7; yp++) { // interaction between after ele 0-7
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;} // ppot = each potential energy (eV)
ppot=(elc*elc*6.241509e18)/(4*pai*epsi*kro*1.0e-14);
if ( yp < 4 && kj < 4) {
teqqq[yp][3]=teqqq[yp][3]+ppot/2.0;
teqqq[kj][3]=teqqq[kj][3]+ppot/2.0;
} // teqqq[0-3][3] = V only in carbon atom
// between (symmetric) electron0-3 and 4-7
if ( yp < 4 && kj > 3 ) {
kro2=Math.sqrt((hpr3[yp][0]-hprr[kj][0])*(hpr3[yp][0]-hprr[kj][0])+
(hpr3[yp][1]-hprr[kj][1])*(hpr3[yp][1]-hprr[kj][1])+
(hpr3[yp][2]-hprr[kj][2])*(hpr3[yp][2]-hprr[kj][2]));
potd = (0.5*elc*elc*6.241509e18)/(4*pai*epsi*kro2*1.0e-14);
ppot = (ppot*0.5) + potd;
}
// rpp[0-7][3] = each V of electron after moving
rpp[yp][3]=rpp[yp][3]+ppot/2.0; rpp[kj][3]=rpp[kj][3]+ppot/2.0;
toav=toav+ppot;
// force component between electrons
for (int jou=0; jou <=2; jou++) {
ggx=(suh*(hprr[yp][jou]-hprr[kj][jou]))/(kro*kro*kro); ggz=ggx;
if ( yp < 4 && kj > 3 ) {
ggy = (0.5*suh*(hpr3[yp][jou]-hprr[kj][jou]))/(kro2*kro2*kro2);
ggx = (ggx*0.5)+ggy ;
}
rpp[yp][jou]=rpp[yp][jou]+ggz; rpp[kj][jou]=rpp[kj][jou]-ggx;
}
}}}
// interaction between after ele and each nucleus
for (int yp=0; yp <=7; yp++) {
for (int rv=0; rv <=4; 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]));
if (kro == 0) {kro=5000.0;}
ppot=-(nux[rv][3]*elc*elc*6.241509e18)/(4.0*pai*epsi*kro*1.0e-14);
// teqqq[0-3][3] = V only in carbon
if (rv==0 && yp < 4 ) { teqqq[yp][3]=teqqq[yp][3]+ppot; }
if ( yp < 4 ) {
kro2=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]));
potd = -(0.5*nux[rv][3]*elc*elc*6.241509e18)/(4*pai*epsi*kro2*1.0e-14);
ppot = (0.5*ppot) + potd;
}
toav = toav + ppot; rpp[yp][3] = rpp[yp][3] + ppot;
// rpp[el][6]= V between each electron and other nuclei
if ( yp < 4 ) {
if ( rv > 0 ) {
rpp[yp][6] = rpp[yp][6] + ppot;
}}
if ( yp > 3 ) {
zk = yp -3;
if ( rv != zk ) { rpp[yp][6] = rpp[yp][6] + ppot;}
}
// force component between electron and nuclei
for (int jou=0; jou <=2; jou++) {
ggx=(suh*nux[rv][3]*(hprr[yp][jou]-nux[rv][jou]))/(kro*kro*kro);
ggz=ggx;
if ( yp < 4 ) {
ggy = (0.5* suh*nux[rv][3]*(hpr3[yp][jou]-nux[rv][jou]))/(kro2*kro2*kro2);
ggx = (0.5*ggx) + ggy;
}
rpp[yp][jou] = rpp[yp][jou] - ggz; mpp[rv][jou] = mpp[rv][jou] + ggx;
}
}}
toav = toav + pota;
for (int rv=0; rv <=4; rv++) {
for (int jou=0; jou <=2; jou++) {
mpp[rv][jou]=mpp[rv][jou]+mmp[rv][jou+3];
}}
// distribute nucler V to electron based on rhp[][6]
gz = 0.0;
for (int yp=0; yp <=7; yp++) {
gz = gz + rpp[yp][6];
}
for (int yp=0; yp <=7; yp++) {
rpp[yp][3] = rpp[yp][3] + (pota * rpp[yp][6])/gz;
}
ex=(int)(toav*100.0); ggx=ex/100.0;
imphoo.setText("tV "+Double.toString(ggx)); // show after tV
// show after elec 0-3 data
for (int yp=0; yp <=3; yp++) {
ex=(int)(rpp[yp][3]*100.0); ggx=ex/100.0;
elpp[yp][4].setText("V "+Double.toString(ggx)); //show after ele 0-3 's V
kro = Math.sqrt(hprr[yp][0]*hprr[yp][0]+hprr[yp][1]*hprr[yp][1]+hprr[yp][2]*hprr[yp][2]);
if (kro == 0) {kro=5000.0;}
ex=(int)(kro);
elpp[yp][3].setText("nuc "+Integer.toString(ex));
rpp[yp][4] = -(nux[yp+1][0]*rpp[yp][0] +nux[yp+1][1]*rpp[yp][1] + nux[yp+1][2]*rpp[yp][2])/nudis;
rpp[yp][5] = 0.0; // cf = force acting on ele toward C nucleus
ex=(int)(rpp[yp][4]);
elpp[yp][5].setText("tF "+Integer.toString(ex));
elpp[yp][6].setText("cf "+Integer.toString(ex));
elpp[yp][7].setText("rf "+Integer.toString(0));
}
// show after ele 4-7 data
for (int yp=4; yp <=7; yp++) {
ex=(int)(rpp[yp][3]*100.0); ggx=ex/100.0;
elpp[yp][4].setText("V "+Double.toString(ggx)); //show after ele 4-7 's V
kro=Math.sqrt((hprr[yp][0]-nux[yp-3][0])*(hprr[yp][0]-nux[yp-3][0])+
(hprr[yp][1]-nux[yp-3][1])*(hprr[yp][1]-nux[yp-3][1])+
(hprr[yp][2]-nux[yp-3][2])*(hprr[yp][2]-nux[yp-3][2]));
if (kro == 0) {kro=5000.0;}
ex=(int)(kro);
elpp[yp][3].setText("nuc "+Integer.toString(ex));
rpp[yp][4] = -(nux[yp-3][0]*rpp[yp][0] +nux[yp-3][1]*rpp[yp][1] + nux[yp-3][2]*rpp[yp][2])/nudis;
rpp[yp][5] = (te2[yp-4][0]*rpp[yp][0] +te2[yp-4][1]*rpp[yp][1] + te2[yp-4][2]*rpp[yp][2])/10000.0;
if ( hprr[4][2] < 0 ) {
rpp[yp][5] = -(te2[yp-4][0]*rpp[yp][0] +te2[yp-4][1]*rpp[yp][1] + te2[yp-4][2]*rpp[yp][2])/10000.0;
}
gx=Math.sqrt(rpp[yp][4]*rpp[yp][4]+rpp[yp][5]*rpp[yp][5]);
ex=(int)(gx);
elpp[yp][5].setText("tF "+Integer.toString(ex)); // total force
ex=(int)(rpp[yp][4]);
if (yp ==4 ) { // show cf force
elpp[yp][6].setText("cf "+Integer.toString(ex)+" *");}
else { elpp[yp][6].setText("cf "+Integer.toString(ex)); }
ex=(int)(rpp[yp][5]);
elpp[yp][7].setText("rf "+Integer.toString(ex));
}
// show after ele 4-7 de Broglie waves
for (int yp=4; yp <=7; 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*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; // ggx="temporary" radius
ggy=(2*pai*ggx*me*gx)/h; // ggy=de Broglie's waves in one orbit
hprr[yp][3]=ggy; // hpr[][3] = waves
ex=(int)(ggy*1000); ggy=ex/1000.0;
elpp[yp][8].setText("wn "+Double.toString(ggy));
}
// ele 0-3 de Broglie wave
kro=Math.sqrt(hpr[0][0]*hpr[0][0]+hpr[0][1]*hpr[0][1]+hpr[0][2]*hpr[0][2]); ra=(kro*2.0)/rsi;
gy=(elc*elc)/(4.0*pai*epsi*ra*ra*1.0e-28) *(-rsi/4.0+(2.0*den)/3.0);
// gy= force toward C acting on each ele0-4 (= tetrahedron)
for (int yp=0; yp <=3; yp++) {
gx=Math.sqrt((-1.0*teqqq[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;
ex=(int)(ggy*1000); ggy=ex/1000.0;
elpp[yp][8].setText("wn "+Double.toString(ggy));
}
// show force acting on H0 H1 nuclei toward C
for (int rv=1; rv <=2; rv++) {
gx = -(nux[rv][0]*mpp[rv][0] +nux[rv][1]*mpp[rv][1] + nux[rv][2]*mpp[rv][2])/nudis;
ex=(int)(gx);
mmpho[rv-1][1].setText("aCF "+Integer.toString(ex));
}
// show average de Broglie waves before and after moving
gx = (hpr[0][3]+hprr[0][3])/2.0;
ex=(int)(gx*1000); gx=ex/1000.0;
averwa0.setText("wn "+Double.toString(gx));
gx = (hpr[4][3]+hprr[4][3])/2.0;
ex=(int)(gx*1000); gx=ex/1000.0;
averwa4.setText("wn "+Double.toString(gx));
}
}