/* applet No. 951 * * bcc metal - AFS potential * * Created by Ikeuchi Mitsuru on May 27 2006. * Copyright (c) 2006 Ikeuchi Mitsuru. All rights reserved. * * ver 0.0.1 2006.05.27 created * ver 0.0.2 2006.06.17 bug fixed in velocity plot * */ import java.awt.*; import java.awt.event.*; import java.applet.*; public class bccMetalAFS extends Applet implements MouseListener, MouseMotionListener, ItemListener, AdjustmentListener, Runnable { /*-------------------------------------- define gloval -----*/ Choice ch_tempMode,ch_mat,ch_view; Scrollbar sc_temp,sc_scale; Thread th = null; Dimension dim; Image imgOff; Graphics gOff; int sleepTime = 50; double xMax = 6.0*1.0e-9; double yMax = 6.0*1.0e-9; double zMax = 6.0*1.0e-9; int resetSW = 0; int started = 1; int tempMode = 1; double contTemp = 300.0; int dispMode = 7; double dispWidth = 250.0; double dispScale = (dispWidth/xMax); double viewScale = 1.0; int Ncube = 16; int Nmt = Ncube*Ncube*Ncube*2; // number of atoms int NN = Nmt + 1; double t = 0.0; double dt = 1.0*1.0e-15; int Nsx = 16; int Nsy = 16; int Nsz = 16; double FSmass = 183.85*1.661e-27; double FSd = 4.400224; double FSA = 1.896373; double FSb = 0.0; double FSc = 3.25; double FSc0 = 47.1346499; double FSc1 = -33.7665655; double FSc2 = 6.2541999; double FSbb = 90.3; double FSalpha = 1.2; double FSb0 = 2.7411; int dgX, dgY, dgXb, dgYb; double cx = 0.5*xMax; double cy = 0.5*yMax; double cz = 0.5*zMax; double theta = -20.0*3.14/180.0; double fai = 10.0*3.14/180.0; double dtheta = 0.0*3.14/180.0; double pai = 3.1415926536; double AU = 1.661e-27; double FS[][] = { /* atom 0 mass 1 d 2 A(eV) 3 b 4 c 5 c0 6 c1 7 c2 8 a */ /* 0 W */ {183.85 *AU,4.400224,1.896373,0.0,3.25,47.1346499,-33.7665655, 6.2541999, 3.16, 1.00}, /* 1 Mo*/ { 95.94 *AU,4.114825,1.887117,0.0,3.25,43.4475218,-31.9332978, 6.0804249, 3.15, 1.00}, /* 2 Fe*/ { 55.847*AU,3.569745,1.828905,1.8,3.40, 1.2371147, -0.3592185,-0.0385607, 2.87, 1.00}, /* 3 Cr*/ { 51.996*AU,3.915720,1.453418,1.8,2.90,29.1429813,-23.3975027, 4.7578297, 2.88, 1.00}, /* 4 Ta*/ {180.948*AU,4.076980,2.591061,0.0,4.20, 1.2157373, 0.0271471,-0.1217350, 3.30, 1.00}, /* 5 Nb*/ { 92.906*AU,3.915354,3.013789,0.0,4.20,-1.5640104, 2.0055779,-0.4663764, 3.30, 0.99}, /* 6 V */ { 50.942*AU,3.692767,2.010637,0.0,3.80,-0.8816318, 1.4907756,-0.3976370, 3.03, 1.00} }; int MAT1 = 0; /* W */ double Ackland[][] = { /* atom 0 B(eV/A3) 1 alpha 2 b0(A) */ /* 0 W */ { 90.3, 1.2, 2.7411 }, /* 1 Mo*/ { 1223.0, 3.9, 2.7255 }, /* 2 Fe*/ { 0.0, 1.0, 0.0 }, /* 3 Cr*/ { 0.0, 1.0, 0.0 }, /* 4 Ta*/ { 91.0, 1.05, 2.8629 }, /* 5 Nb*/ { 48.0, 0.8, 2.8585 }, /* 6 V */ { 23.0, 0.5, 2.6320 } }; int kind[] = new int[NN]; double xx[] = new double[NN]; /* i-th position */ double yy[] = new double[NN]; double zz[] = new double[NN]; double vx[] = new double[NN]; /* i-th velocity */ double vy[] = new double[NN]; double vz[] = new double[NN]; double ffx[] = new double[NN]; /* i-th force */ double ffy[] = new double[NN]; double ffz[] = new double[NN]; double virx[] = new double[NN]; double viry[] = new double[NN]; double virz[] = new double[NN]; int reg[][] = new int[NN][50]; double rijReg[][] = new double[NN][50]; int regNr[][] = new int[NN][250]; int section[][][][] = new int[Nsx][Nsy][Nsz][100]; int srtz[][] = new int[2][NN]; int rdf[] = new int[260]; int vdf[] = new int[220]; double meanvdf[] = new double[220]; double ffvMaxwell[] = new double[220]; double virial[] = new double[256]; int virialp = 0; double px[] = new double[NN]; double py[] = new double[NN]; double pz[] = new double[NN]; double wkx[] = new double[8]; double wky[] = new double[8]; double wkz[] = new double[8]; double pwkx[] = new double[8]; double pwky[] = new double[8]; double pwkz[] = new double[8]; int boxp[][] = { {0,1},{0,2},{0,4},{1,3},{1,5},{2,3},{2,6},{4,5},{4,6},{3,7},{5,7},{6,7} }; /*----------------------------- applet control functions -----*/ public void init() { resize(630,420); setBackground(Color.white); dim = getSize(); imgOff = createImage(dim.width,dim.height); gOff = imgOff.getGraphics(); ch_mat = new Choice(); ch_mat.addItem("W"); ch_mat.addItem("Mo"); ch_mat.addItem("Fe"); ch_mat.addItem("Cr"); ch_mat.addItem("Ta"); ch_mat.addItem("Nb"); ch_mat.addItem("V"); ch_mat.addItemListener(this); ch_tempMode = new Choice(); ch_tempMode.addItem("adiabatic"); ch_tempMode.addItem("t scaling"); ch_tempMode.addItem("wall cont."); ch_tempMode.addItemListener(this); ch_tempMode.select("t scaling"); ch_view = new Choice(); ch_view.addItem("ball"); ch_view.addItem("line"); ch_view.addItem("both"); ch_view.addItem("temp"); ch_view.addItem("real"); ch_view.addItem("velocity"); ch_view.addItem("v-space"); ch_view.addItem("ball+Veff"); ch_view.addItem("rho@atom"); ch_view.addItem("dF/drho"); ch_view.addItemListener(this); ch_view.select("ball+Veff"); sc_temp = new Scrollbar(Scrollbar.HORIZONTAL,30,10,1,210); sc_temp.addAdjustmentListener(this); sc_scale = new Scrollbar(Scrollbar.HORIZONTAL,100,10,50,310); sc_scale.addAdjustmentListener(this); addMouseListener(this); addMouseMotionListener(this); setLayout(new BorderLayout()); Panel pnl = new Panel(); pnl.setLayout(new GridLayout(1,6,5,0)); /* pnl.add(new Label(" ")); */ pnl.add(ch_mat); pnl.add(new Label(" ")); pnl.add(ch_tempMode); pnl.add(sc_temp); pnl.add(sc_scale); pnl.add(ch_view); add(pnl,"North"); setInitialCondition(); } public void start() { if (th == null) { th = new Thread(this); th.start(); } } public void stop() { if (th != null) { th.stop(); th = null; } } public void itemStateChanged(ItemEvent ev){ if (ev.getSource() == ch_mat){ MAT1 = ch_mat.getSelectedIndex(); resetSW = 1; } else if (ev.getSource() == ch_tempMode){ tempMode = ch_tempMode.getSelectedIndex(); } else if (ev.getSource() == ch_view){ dispMode = ch_view.getSelectedIndex(); } } public void adjustmentValueChanged(AdjustmentEvent ev){ if (ev.getSource() == sc_temp) { contTemp = 10.0*(double)(sc_temp.getValue()); vAjustment(); } else if(ev.getSource() == sc_scale) { viewScale = 0.01*(double)(sc_scale.getValue()); } } public void mousePressed(MouseEvent ev){ } public void mouseReleased(MouseEvent ev){ dgXb = 0; dgYb = 0; dgX = 0; dgY = 0; } public void mouseClicked(MouseEvent ev){ } public void mouseEntered(MouseEvent ev){ } public void mouseExited (MouseEvent ev){ } public void mouseMoved (MouseEvent ev){ } public void mouseDragged(MouseEvent ev){ dgXb = dgX; dgYb = dgY; dgX=ev.getX(); dgY=ev.getY(); if (dgXb==0 && dgYb==0) { dgXb = dgX; dgYb = dgY; } theta += 0.5*3.14/180.0*(dgX-dgXb); fai += 0.5*3.14/180.0*(dgY-dgYb); } public void run() { while (th != null) { try { timeEvolution(); offPaint(); repaint(); Thread.sleep(sleepTime); } catch (InterruptedException e) { } } } public void update(Graphics g) { paint(g); } public void paint(Graphics g) { g.drawImage(imgOff,0,0,this); } /* ----------------------------- offPaint -------------------- */ void offPaint() { int gbx,gby; double tmp; gOff.setColor(Color.white); gOff.fillRect(0,0,dim.width,dim.height); tmp = temperature(); gbx = 60; gby = 100; if (dispMode==0) { ballPlot(gbx,gby,0.6,0); rdfPlot(400,100,1.0); } else if (dispMode==1) { ballPlot(gbx,gby,0.0,2); rdfPlot(400,100,1.0); } else if (dispMode==2) { ballPlot(gbx,gby,0.5,2); rdfPlot(400,100,1.0); } else if (dispMode==3) { ballPlot(gbx,gby,0.6,1); rdfPlot(400,100,1.0); } else if (dispMode==4) { ballPlot(gbx,gby,1.0,0); rdfPlot(400,100,1.0); } else if (dispMode==5) { velocityPlot(gbx,gby, 50.0); vdfPlot(400,100,1.0); } else if (dispMode==6) { vSpacePlot(gbx,gby); vdfPlot(400,100,1.0); } else if (dispMode==7) { ballPlot(gbx,gby,0.6,0); drawEffectivePotential(400, 100); } else if (dispMode==8) { rhoPlot(gbx,gby); drawEffectivePotential(400, 100); } else if (dispMode==9) { fpPlot(gbx,gby); drawEffectivePotential(400, 100); } else if (dispMode==10) { ; } gOff.setColor(Color.black); gOff.drawString("atom",630/6*0+10,40); gOff.drawString("temp control",630/6*2+10,40); gOff.drawString("T_cont="+(int)(contTemp+0.5)+" K",630/6*3+10,40); gOff.drawString("scale="+(int)(viewScale*100.0+0.499)+"%",630/6*4+10,40); gOff.drawString("view",630/6*5+10,40); gOff.setColor(Color.blue); gOff.drawString("a="+FS[MAT1][8]+"A",630/6*0+10,60); gOff.drawString("t="+Math.floor(t*1.0e15+0.5)+" fs",630/6*1+10,60); gOff.drawString("T="+(int)(tmp*10.0+0.5)/10.0+" K",630/6*3+10,60); gOff.drawString("

="+(int)(pressure()/1.0e6)+"MPa",630/6*4+10,60); gOff.setColor(Color.black); gOff.drawString("box="+(int)(xMax*1.0e10+0.5)/10.0+"x"+(int)(yMax*1.0e10+0.5)/10.0+"x"+(int)(zMax*1.0e10+0.5)/10.0+"nm",430,80); } /*------------------------------- plot methods ----------*/ void ballPlot(int gbx, int gby, double size,int mode) { int i,j,k,jj,gx,gy,gz,g2x,g2y; double sc,sz,bl; setWaku(); rotate(theta,fai); zSort(); drawWaku(gbx,gby,0); sc = dispScale*viewScale; sz = size*(1.732/2.0)*sc*FS[MAT1][8]*1.0e-10; bl = 0.935*FS[MAT1][8]*1.0e-10; for (i=0; ij) { if (distance(j,jj)0) gOff.fillOval(gx-gz/2,gy-gz/2, gz, gz); } drawWaku(gbx,gby,1); } double distance(int i,int j) { double x,y,z; x = xx[i]-xx[j]; y = yy[i]-yy[j]; z = zz[i]-zz[j]; return(Math.sqrt(x*x+y*y+z*z)); } void velocityPlot(int gbx, int gby, double mag) { int i,j,k,jj,gx,gy,gz,g2x,g2y; double sc,cosTh,sinTh,cosFi,sinFi; double p2x,p2y,p2z,rotp2x,rotp2y,rotp2z; setWaku(); rotate(theta,fai); zSort(); cosTh = Math.cos(theta); sinTh = Math.sin(theta); cosFi = Math.cos(fai); sinFi = Math.sin(fai); drawWaku(gbx,gby,0); sc = dispScale*viewScale; for (i=0; i0.0) gOff.setColor(Color.getHSBColor(0.60f,0.95f,(float)(0.3*pz[j]/zMax+0.5))); gOff.drawLine(gx,gy, g2x,g2y); } drawWaku(gbx,gby,1); } void drawWaku(int gbx, int gby, int imode) { int i,gx,gy,g2x,g2y,farPoint; double sc,tmp; sc = dispScale*viewScale; farPoint = findMin(); for (i=0; i<12; i++) { gx = (int)(sc*pwkx[boxp[i][0]])+gbx; gy = (int)(sc*pwky[boxp[i][0]])+gby; g2x = (int)(sc*pwkx[boxp[i][1]])+gbx; g2y = (int)(sc*pwky[boxp[i][1]])+gby; if (imode==0) { if (boxp[i][0]==farPoint || boxp[i][1]==farPoint) { gOff.setColor(Color.lightGray); gOff.drawLine(gx,gy, g2x, g2y); } } else if (imode==1) { if (boxp[i][0]!=farPoint && boxp[i][1]!=farPoint) { gOff.setColor(Color.gray); if (tempMode==2) { tmp = temperature(); if (tmp>contTemp) { gOff.setColor(Color.black); } else { gOff.setColor(Color.red); } } gOff.drawLine(gx,gy, g2x, g2y); } } } } int findMin() { int i,im; double m; im = 0; m = pwkz[im]; for (i=0; i<8; i++) { if (pwkz[i]0.999) sz = 0.999; gz = (int)(10.0*sz+0.5); gOff.setColor(Color.getHSBColor((float)(0.66-0.66*sz),0.7f,(float)(0.5*pz[j]/zMax+0.2))); if (gz>0) gOff.fillOval(gx-gz/2,gy-gz/2, gz, gz); } drawWaku(gbx,gby,1); } /*----------------------------- rho plot --------------*/ void rhoPlot(int gbx, int gby) { int i,j,gx,gy,gz; double sc,sz,rh0; setWaku(); rotate(theta,fai); zSort(); drawWaku(gbx,gby,0); rh0 = roh(Ncube*Ncube*Ncube/2+Ncube*Ncube/2+Ncube/2); sc = dispScale*viewScale; for (i=0; i0.999) sz = 0.999; gz = (int)(10.0*sz+0.5); gOff.setColor(Color.getHSBColor((float)(0.66-0.66*sz),0.7f,(float)(0.5*pz[j]/zMax+0.2))); if (gz>0) gOff.fillOval(gx-gz/2,gy-gz/2, gz, gz); } drawWaku(gbx,gby,1); } /*----------------------------- v-space plot --------------*/ void vSpacePlot(int gbx, int gby) { int i,j,gx,gy,gz; double sc; setWaku(); vRotate(theta,fai); zSort(); drawWaku(gbx,gby,0); sc = dispScale*viewScale; for (i=0; i0) { gOff.setColor(Color.getHSBColor(0.66f,0.95f,(float)(0.5*pz[j]/zMax+0.2))); } else { gOff.setColor(Color.getHSBColor(0.01f,0.95f,(float)(0.5*pz[j]/zMax+0.2))); } gOff.fillOval(gx-gz/2,gy-gz/2, gz, gz); } drawWaku(gbx,gby,1); } /*--------- v-rotate ----------*/ void vRotate(double th,double fi) { int i; double cosTh,sinTh,cosFi,sinFi,sc; sc = xMax/2000.0; cosTh = Math.cos(th); sinTh = Math.sin(th); cosFi = Math.cos(fi); sinFi = Math.sin(fi); for (i=0; i=srtz[1][p]) p = i; k = qSortPartition(i,j,srtz[1][p]); qSort(i,k-1); qSort(k,j); } } int qSortPartition(int i,int j, int x) { int l,r,w; l = i; r = j; while (l<=r) { while (l<=j && srtz[1][l]=i && srtz[1][r]>=x) r--; if (l>r) break; w = srtz[0][l]; srtz[0][l] = srtz[0][r]; srtz[0][r] = w; w = srtz[1][l]; srtz[1][l] = srtz[1][r]; srtz[1][r] = w; l++; r--; } return ( l ); } /* ----------------------- radial distribution function ----------------*/ void rdfPlot(int gbx,int gby,double mag) { int i,rd; double ascale; rdfSet(); ascale = mag*(5000000.0/Nmt); gOff.setColor(Color.lightGray); for (i=0; i<200; i+=25) { gOff.drawLine(gbx+i,gby, gbx+i, gby+250); } for (i=0; i<250; i+=25) { gOff.drawLine(gbx,gby+i, gbx+200, gby+i); } gOff.setColor(Color.gray); gOff.drawRect(gbx,gby,200,250); gOff.drawString("0",gbx-5,gby+250+20); gOff.drawString("2A",gbx+90,gby+250+20); gOff.drawString("4A",gbx+190,gby+250+20); gOff.drawString("radial distribution",gbx+30,gby+300); gOff.setColor(Color.cyan); for (i=0; i<200; i++) { rd = (int)(rdf[i]*(ascale/(i*i))+0.5); if (rdf[i]>0) { gOff.drawLine(gbx+i,gby+250-rd, gbx+i, gby+250); } } } void rdfSet() { int i,j,k,ir; double xi,xj,yi,yj,zi,zj; double r2,rij; for (i=0; i<260; i++) { rdf[i]=0; } for (i=0; i0) { gOff.drawLine(gx+i,gy+200-iy,gx+i,gy+200); } } gOff.setColor(Color.getHSBColor(0.15f,0.8f,0.6f)); for (i=0; i<200-1; i++) { iy = (int)(4000*meanvdf[i]); iy2 = (int)(4000*meanvdf[i+1]); if (iy>0) { gOff.drawLine(gx+i,gy+200-iy,gx+i,gy+200-iy2); } } gOff.setColor(Color.getHSBColor(0.01f,0.8f,0.6f)); for (i=0; i<200-1; i++) { iy = (int)(4000*ffvMaxwell[i]); iy2 = (int)(4000*ffvMaxwell[i+1]); if (iy>0) { gOff.drawLine(gx+i,gy+200-iy,gx+i,gy+200-iy2); } } gOff.setColor(Color.lightGray); for (i=0; i<200; i+=50) { gOff.drawLine(gx+i,gy, gx+i, gy+200); } for (i=0; i<200; i+=100) { gOff.drawLine(gx,gy+200-i, gx+200, gy+200-i); } gOff.setColor(Color.gray); gOff.drawRect(gx,gy,200,200); gOff.setColor(Color.black); gOff.drawString("0",gx-5,gy+hoganHight+20); gOff.drawString("2000 m/s",gx+hoganWidth-30,gy+hoganHight+20); gOff.drawString("velocity distribution",gx+30,gy+hoganHight+40); gOff.setColor(Color.getHSBColor(0.6f,0.8f,0.8f)); gOff.drawString("count",gx+120,gy+20); gOff.setColor(Color.getHSBColor(0.15f,0.8f,0.6f)); gOff.drawString("mean distr.",gx+120,gy+40); gOff.setColor(Color.getHSBColor(0.01f,0.8f,0.6f)); gOff.drawString("Maxwell(Tc)",gx+120,gy+60); } void setVelocityDistribution() { int i,iv; double v2,vv; for (i=0; i<220; i++) { vdf[i]=0; } for (i=0; ifpMax) { fpMax = fp; ipMax = ip; } if (fp220) continue; v2 = (int)(25.0*effectivePotential(ra+0.02,fpMax)); if (v1<220) { gOff.drawLine(gbx+i,gby+200-v1, gbx+i, gby+200-v2); } } gOff.setColor(Color.getHSBColor(0.66f,0.8f,0.9f)); gOff.drawString("V(r)",gbx+80,gby+40); for(i=0;i<200;i++) { ra = 0.02*i+1.0; v1 = (int)(25.0*potV(ra));if (v1>220) continue; v2 = (int)(25.0*potV(ra+0.02)); if (v1<220) { gOff.drawLine(gbx+i,gby+200-v1, gbx+i, gby+200-v2); } } gOff.setColor(Color.getHSBColor(0.33f,0.8f,0.9f)); gOff.drawString("-2AF'fai(r)",gbx+80,gby+60); for(i=0;i<200;i++) { ra = 0.02*i+1.0; v1 = (int)(25.0*embeddedPotential(ra,fpMin));if (v1<-50) continue; v2 = (int)(25.0*embeddedPotential(ra+0.02,fpMin)); if (v1<220) { gOff.drawLine(gbx+i,gby+200-v1, gbx+i, gby+200-v2); } } gOff.setColor(Color.getHSBColor(0.01f,0.8f,0.9f)); gOff.drawString("effective potential",gbx+80,gby+20); for(i=0;i<200;i++) { ra = 0.02*i+1.0; v1 = (int)(25.0*effectivePotential(ra,fpMin)); if (v1>220) continue; v2 = (int)(25.0*effectivePotential(ra+0.02,fpMin)); if (v1<220) { gOff.drawLine(gbx+i,gby+200-v1, gbx+i, gby+200-v2); } } } double effectivePotential(double ra, double fp) { return( potV(ra)-2.0*FSA*fp*fai(ra) ); } double embeddedPotential(double ra, double fp) { return( -2.0*FSA*fp*fai(ra) ); } /*------------------------------------- statictics ----------*/ double temperature() { int i; double s; s = 0.0; for (i=0; i1.2){ rr=1.2; }; } for (i=0; i xMax) { xx[i] = xMax; vx[i] = -rr*vx[i]; vy[i] = rr*vy[i]; vz[i] = rr*vz[i]; } if (yy[i] < 0.0) { yy[i] = 0.0; vx[i] = rr*vx[i]; vy[i] = -rr*vy[i]; vz[i] = rr*vz[i]; } if (yy[i] > yMax) { yy[i] = yMax; vx[i] = rr*vx[i]; vy[i] = -rr*vy[i]; vz[i] = rr*vz[i]; } if (zz[i] < 0.0) { zz[i] = 0.0; vx[i] = rr*vx[i]; vy[i] = rr*vy[i]; vz[i] = -rr*vz[i]; } if (zz[i] > zMax) { zz[i] = zMax; vx[i] = rr*vx[i]; vy[i] = rr*vy[i]; vz[i] = -rr*vz[i]; } } } void forceCalc() { int i,j,k; double fpi,rij,f,fxij,fyij,fzij; double xi,xj,yi,yj,zi,zj; for(i=0;ii) { xi = xx[i]; xj = xx[j]; yi = yy[i]; yj = yy[j]; zi = zz[i]; zj = zz[j]; rij = rijReg[i][k]; f = force(rij,fpi); fxij = f*(xi-xj)/rij; fyij = f*(yi-yj)/rij; fzij = f*(zi-zj)/rij; ffx[i] += fxij; ffy[i] += fyij; ffz[i] += fzij; ffx[j] += -fxij; ffy[j] += -fyij; ffz[j] += -fzij; virx[i] += fxij*(xi-xj); viry[i] += fyij*(yi-yj); virz[i] += fzij*(zi-zj); } } } } /*-------------------- registration of near atoms ---*/ void regNear() { int ip,jp,kp,iq; int i,j,k,ii,jj,kk,i0,i1,j0,j1,k0,k1; double rrg,rrg2,r2; double xi,xj,yi,yj,zi,zj; preRegistration(); rrg = FSc*1.0e-10; if (rrg=Nsx) i1 = Nsx-1; j0 = (int)(Nsy*(yy[ip]-rrg)/yMax); if (j0<0) j0 = 0; j1 = (int)(Nsy*(yy[ip]+rrg)/yMax); if (j1>=Nsy) j1 = Nsy-1; k0 = (int)(Nsz*(zz[ip]-rrg)/zMax); if (k0<0) k0 = 0; k1 = (int)(Nsz*(zz[ip]+rrg)/zMax); if (k1>=Nsz) k1 = Nsz-1; for(i=i0;i<=i1;i++) { for(j=j0;j<=j1;j++) { for(k=k0;k<=k1;k++) { for(iq=1;iq<=section[i][j][k][0];iq++) { jp = section[i][j][k][iq]; if (jp!=ip) { xi = xx[ip]; xj = xx[jp]; yi = yy[ip]; yj = yy[jp]; zi = zz[ip]; zj = zz[jp]; r2=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj); if (r2=Nsx) i = Nsx-1; j = (int)(Nsy*yy[ip]/yMax); if (j>=Nsy) j = Nsy-1; k = (int)(Nsz*zz[ip]/zMax); if (k>=Nsz) k = Nsz-1; iq = section[i][j][k][0]+1; section[i][j][k][0] = iq; section[i][j][k][iq] = ip; } } /*-------------------- Finnis-Sinclair Potential Calculation ---*/ double force(double r,double fpi) { double ra,rt; ra = r*1.0e10; rt = -dpotVdr(ra)+2.0*FSA*fpi*dfaidr(ra); return ( rt*1.6e-19/1.0e-10 ); } void regProximity() { int i,j,k,jj; double rrg,rrg2,r2; double xi,xj,yi,yj,zi,zj; rrg = FSc*1.0e-10; if (rrg0.0) { ret = 0.5*Math.sqrt(1.0/rh); } return ( ret ); } double roh(int i) { int j,k; double s; s = 0.0; for(k=1;k=FSb0) { return ( (r-FSc)*(r-FSc)*(FSc0+FSc1*r+FSc2*r*r) ); } else { return ( (r-FSc)*(r-FSc)*(FSc0+FSc1*r+FSc2*r*r) +FSbb*(FSb0-r)*(FSb0-r)*(FSb0-r)*Math.exp(-FSalpha*r) ); } } else { return ( 0.0 ); } } double dpotVdr(double r) { if (r=FSb0) { return ( 2.0*(r-FSc)*(FSc0+FSc1*r+FSc2*r*r)+(r-FSc)*(r-FSc)*(FSc1+2.0*FSc2*r) ); } else { return ( 2.0*(r-FSc)*(FSc0+FSc1*r+FSc2*r*r)+(r-FSc)*(r-FSc)*(FSc1+2.0*FSc2*r) + FSbb*(FSb0-r)*(FSb0-r)*Math.exp(-FSalpha*r)*(-3.0-FSalpha*(FSb0-r)) ); } } else { return ( 0.0 ); } } double fai(double r) { if (r