ベリリウムのページに戻る
トップページ(2電子原子も含む新ボーア模型)
このサンプルプログラムでは、実行すると、まず、電子1の最初のx座標 ra (MM) を入力するように画面に表示される。
ここでは、便宜のため、新しい単位を使っている。( 1 MM = 10-14 meter, 1 SS = 10-22 second, 1 MM/SS = 108 m/s )
電子が軌道を1周して、ド・ブロイ波の数がちょうど2になったとき (この地点を電子1の last point とする。)、
このプログラムは次の値を画面に表示する。
last point の座標、速度、原子核との距離、速度と座標の内積 (= VXA*xxa + VYA*yya ),
また、電子1の軌道上の点の中で、最も核との距離が長く(もしくは短く)なるときの、その距離。
import java.util.Scanner;
class MathMethod {
public static void main(String[] args) {
Scanner stdIn=new Scanner(System.in);
System.out.println("ra between nucleus and electron 1 (MM)? ");
double ra=stdIn.nextDouble();
// E=ionization energy (eV) of Be (1st+2nd)
double E=-27.533; double EE=E*1.60217646e-19;
double me=9.1093826e-31;
double pai=3.141592653589793; double epsi=8.85418781787346e-12;
double h=6.62606896e-34; double ele=1.60217653e-19;
double rra=ra*1.0e-14;
// keee=distance between 2S and 1S electron
double keee=Math.sqrt(1430*1430+ra*ra);keee=keee*1.0e-14;
double potenc=(4*ele*ele)/(4*pai*epsi*keee);
double poten=potenc-(2*4*ele*ele)/(4*pai*epsi*rra)+(ele*ele)/(4*pai*epsi*(2*rra));
// Ta=initial kinetic energy=total-potential energy
double Ta=EE-poten;
if (Ta >0) {
double vya=Math.sqrt(Ta/me);
double VYA=vya*1.0e-8; // change m/sec to MM/SS <
double prexa=ra; double preya=0.0; double VXA=0.0;
double WNA=0.0;
double xxa,vka,innerpro,lastdista,kko; double yya=0.0;
double bigdis=ra; double shortdis=ra;
do {
xxa=prexa+VXA; yya=preya+VYA; // position after 1SS
kko=Math.sqrt(xxa*xxa+yya*yya); //kko=distance between nucleus and electron
if (bigdis < kko) {bigdis=kko;}
if (shortdis > kko) {shortdis=kko;}
vka=VXA*VXA+VYA*VYA;
WNA=WNA+(me*vka*1.0e-6)/h; // number of de Broglie's wave
// distances between particles
double ka=Math.sqrt(prexa*prexa+preya*preya);
double kb=Math.sqrt(prexa*prexa+preya*preya+1430*1430);
double kc=Math.sqrt(4*prexa*prexa+4*preya*preya);
ka=ka*1.0e-14; kb=kb*1.0e-14; kc=kc*1.0e-14;
prexa=prexa*1.0e-14; preya=preya*1.0e-14;
double ac=(ele*ele)/(4*pai*epsi*me);
VXA=VXA+1.0e-30*ac*(-(4*prexa)/(ka*ka*ka)+(2*prexa)/(kb*kb*kb)+(2*prexa)/(kc*kc*kc));
VYA=VYA+1.0e-30*ac*(-(4*preya)/(ka*ka*ka)+(2*preya)/(kb*kb*kb)+(2*preya)/(kc*kc*kc));
prexa=xxa;preya=yya;
} while (WNA <2.0); //repeat above until WNA=2.0
lastdista=Math.sqrt(xxa*xxa+yya*yya);
innerpro=VXA*xxa+VYA*yya; // innerpro =innerproduct of last velocity and coordinate
System.out.printf("ra:%.2f ", ra);
System.out.printf("last distance:%.5f ", lastdista);
System.out.printf("xxa:%.2f ", xxa);
System.out.printf("yya:%.2f ", yya);
System.out.printf("VXA:%.5f ", VXA);
System.out.printf("VYA:%.5f\n", VYA);
System.out.printf("inner product:%.5f ", innerpro);
System.out.printf("longest distance:%.2f ", bigdis);
System.out.printf("shortest distance:%.2f ", shortdis);
System.out.printf("WNA:%.2f\n", WNA);
}}}