サンプルJAVAコンピュータープログラム( 炭素、酸素、ホウ素 )。

トップページ
原子半径のページに戻る。

下のソースプログラムをそのままテキストエディタ(メモ帳など)にコピー and ペースト すれば、簡単にコンパイルと実行できる。
(この class file name は wave なので、このテキストエディタを "wave.java" とセーブしてコンパイルしてほしい。)
ここでは 1 MM = 1 × 10-14 meter という新しい単位を使用している。

このサンプルプログラムでは、実行すると、最初に 原子の種類を選ぶ。
炭素様原子 (= C, Si ) を計算するときは 最初に "0" の数値を入力するように。
もし 酸素様原子 (= O, Si )、ホウ素様原子 (= B, Al ) を計算するときは それぞれ "1" もしくは "2" を入力するように。

次に 中心電荷 Z と すべての価電子の全イオン化エネルギーを入力する。
これらの値から このプログラムは 正四面体状の炭素のポテンシャルエネルギーと力を計算する。
ビリアル定理 ( E = -T = 1/2 V ) を用いて、このプログラムは 1軌道に含まれるドブロイ波を計算する。
画面上には このドブロイ波の数 (= 約 2.0 ) と、各価電子と中心の原子核間の距離 (MM) が表示される。


import java.util.Scanner;
class wave {
 public static void main(String[] args) {

          // choose carbon-like = 0, oxygen-like = 1, boron like = 2 
 Scanner stdIn=new Scanner(System.in);
 System.out.println(" First, input 0, 1, or 2 to choose atoms  ");   
 System.out.println("( Carbon, Si = 0, Oxygen, S = 1, Boron, Al = 2  )  ");  
 double fig=stdIn.nextDouble(); 

                  // input central positive charge Z   
 System.out.println("central charge Z ?  ");  
 double Z=stdIn.nextDouble(); 

                   // input total ionization energy |E| eV
 System.out.println("total ionization energies |E| eV ?  ");  
 double E=stdIn.nextDouble(); 

 
 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 ke=(ele*ele)/(4.0*pai*epsi);

                         // total  potential energy (J) by Virial theorem
 double poten = -2.0 * E * 1.602177e-19;   


 // Carbon-like atoms ( C, Si )
   
                 // length r from potenial V in tetrahedron
 double r =(ke/poten) * (-(8.0*Z)/Math.sqrt(6.0) + 3.0);
                
                   // kinetic = total kinetic energy by Virial theorem        
 double kinetic=-0.5*poten;       
 double velo=Math.sqrt((kinetic)/(2.0*me));  // velo = electron's velocity (m/s) 
                      // F = force acting on each electron (N)
 double F = (ke/(r*r))*(Z*2.0/3.0 - Math.sqrt(6.0)/4.0  );

                       // nuc = distance between electron and nucleus
 double nuc=r*Math.sqrt(6)/2.0;  

 double radius=(me*velo*velo)/F; // rotation radius from centrifugal force
 double debroglie = h/(me*velo);       // de Broglie wavelength of electron
 double wave=(2.0*pai*radius)/debroglie;  // wave's number in one orbit


  // oxygen-like atoms ( O, S )

   if ( fig == 1 ) {
                     // a = distance between electron and nucleus
     double a = (ke/poten)*(-6.0*Z + 12.0/Math.sqrt(2)+1.5);
                          // velo = veclocity of each  electron 0-5
     velo=Math.sqrt(kinetic/(3.0*me));

                         //  F = force acting on each electron (N)
     F = (ke/(a*a))*(Z-2.0/Math.sqrt(2)-0.25);

  radius=(me*velo*velo)/F; // rotation radius from centrifugal force
  debroglie = h/(me*velo);       // de Broglie wavelength of electron
  wave=(2.0*pai*radius)/debroglie;  // wave's number in one orbit
    nuc = a;
     }

    // Boron -like atoms ( B, Al ) 

   if ( fig == 2 ) {
                             // r = distance between electron and nucleus
    r =(ke/poten) * (-(3.0*Z) + Math.sqrt(3));  
                                
                      // velo = velocity of each electron 0-2 
    velo=Math.sqrt((2.0*kinetic)/(3.0*me)); 
                     // F = force acting on each electron
    F = (ke/(r*r))*(Z - 1.0/(Math.sqrt(3)) );


    radius=(me*velo*velo)/F;  // rotation radius from centrifugal force
    debroglie = h/(me*velo);      // de Broglie wavelength of electron
    wave=(2.0*pai*radius)/debroglie;  // wave's number in one orbit

    nuc = r;
    }
  
   nuc = nuc * 1.0e14;  // change meter to MM

   System.out.printf("de Broglie wave in one orbit : %.3f \n", wave);
   System.out.printf("distance between electron and nucleus: %.2f ", nuc);
   System.out.printf("                        \n");

 }}