import java.io.*; import sdisplay.*; import VisualNumerics.math.Sfun; import gov.noaa.pmel.sgt.cplab.*; import java.awt.*; class DD { static BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in)); public static void main (String argv []) throws IOException { Vector3 position = new Vector3(0,0,0) ; Vector3 velocity = new Vector3(0,0,0) ; Vector3 acceleration = new Vector3(0,0,0); Vector3 vtemp; Vector3 vx; Vector3 force; boolean catholicPope=true; double massive = 1; double q = 1; double dt =.003; int nprint = 200; Vector3 FD = new Vector3(2,0,0); Particle fermion = new Particle(position,velocity,acceleration,massive,q,0.0); PrintWriter out; out = new PrintWriter(new FileWriter("output.dat")); Display panel = new Display("Damped, Driven Spring motion"); panel.setBackground(Color.yellow); Input omegaInput= new Input(" Driving Frequency",2); Input gammaInput= new Input(" Damping coefficient",1.0); Input initInput = new Input("Initial displacement",1.0); Input velInput = new Input("Initial velocity",1.0); Input ampInput = new Input(" Driving Amplitude",2.0); Input kInput = new Input(" Spring Constant",1.0); Input timeInput = new Input(" Time for graph",10.0); panel.addInput(omegaInput); panel.addInput(gammaInput); panel.addInput(initInput); panel.addInput(velInput); panel.addInput(ampInput); panel.addInput(kInput); panel.addInput(timeInput); SimpleGraph graph = new SimpleGraph("Damped, driven oscillator","Time","seconds", "Displacement", "metres"); graph.showGraph(); Color colour = Color.red; int icol = 1; int newSize = 600; while (catholicPope) { panel.waitForButtonPress(); panel.setSize(panel.getSize().width,newSize); double omegaD= omegaInput.getDouble(); double bdamp = -gammaInput.getDouble() ; FD.x= ampInput.getDouble(); fermion.pos.x = initInput.getDouble(); fermion.vel.x = velInput.getDouble(); double kspring = kInput.getDouble(); double tottime = timeInput.getDouble(); DataSet data = new DataSet(); fermion.time = 0.0; for(int j = 1; j < nprint;j++) { for(double itime = 0; itime< tottime/nprint; itime=itime+dt) { fermion.pos = Vector3.add(Vector3.add(fermion.pos, Vector3.multiply(fermion.vel,dt)) , Vector3.multiply(fermion.acc,dt*dt/2.0)); vtemp = Vector3.add(fermion.vel, Vector3.multiply(fermion.acc,dt/2.0)); force = Vector3.add(Vector3.multiply(fermion.pos,-kspring), Vector3.multiply(FD,Math.cos(omegaD*fermion.time))); force = Vector3.add(force, Vector3.multiply(vtemp,bdamp)) ; fermion.acc = Vector3.multiply(force,1.0/fermion.mass) ; fermion.vel = Vector3.add(vtemp , Vector3.multiply(fermion.acc,dt/2.0)); fermion.time = fermion.time + dt; } data.addPoint(fermion.time,fermion.pos.x); out.println(fermion.time + " " +fermion.pos.x); } if(icol==1){ data.setColor(Color.red);} else {if(icol==2){ data.setColor(Color.blue);} else {if(icol==3){ data.setColor(Color.green);} else {if(icol==4){ data.setColor(Color.orange);} else {if(icol==5){ data.setColor(Color.yellow); icol=0;}}}}} icol = icol+1; graph.addData(data); out.flush(); } out.close(); }}