/** * Computes and plots correlation functions * * @param tauMax is the maximum time for correlation functions */ public void computeCorrelation(int tauMax) { plotFrame.clearData(); double energyAccumulator = 0, magnetizationAccumulator = 0; double energySquaredAccumulator = 0, magnetizationSquaredAccumulator = 0; for (int t = 0; t < numberOfPoints; t++) { energyAccumulator += energy[t]; magnetizationAccumulator += magnetization[t]; energySquaredAccumulator += energy[t] * energy[t]; magnetizationSquaredAccumulator += magnetization[t] * magnetization[t]; } double averageEnergySquared = Math.pow(energyAccumulator / numberOfPoints, 2); double averageMagnetizationSquared = Math.pow(magnetizationAccumulator / numberOfPoints, 2); // compute normalization factors double normE = (energySquaredAccumulator / numberOfPoints) - averageEnergySquared; double normM = (magnetizationSquaredAccumulator / numberOfPoints) - averageMagnetizationSquared; for (int tau = 1; tau <= tauMax; tau++) { double c_MAccumulator = 0; double c_EAccumulator = 0; int counter = 0; for (int t = 0; t < numberOfPoints - tau; t++) { c_MAccumulator += magnetization[t] * magnetization[t + tau]; c_EAccumulator += energy[t] * energy[t + tau]; counter++; } // correlation function defined so that c(0) = 1 and c(infinity) -> 0 plotFrame.append(0, tau, ((c_MAccumulator / counter) - averageMagnetizationSquared) / normM); plotFrame.append(1, tau, ((c_EAccumulator / counter) - averageEnergySquared) / normE); } plotFrame.setVisible(true); }
/** * Calculates the trajectory of a falling particle and plots the position as a function of time. */ public void calculate() { plotFrame.setAutoclear(false); // data not cleared at beginning of each calculation // gets initial conditions double y0 = control.getDouble("Initial y"); double v0 = control.getDouble("Initial v"); // sets initial conditions Particle ball = new FallingParticle(y0, v0); // gets parameters ball.dt = control.getDouble("dt"); while (ball.y > 0) { ball.step(); plotFrame.append(0, ball.t, ball.y); plotFrame.append(1, ball.t, ball.analyticPosition()); } }
public void readXMLData() { energy = new double[0]; magnetization = new double[0]; numberOfPoints = 0; String filename = "ising_data.xml"; JFileChooser chooser = OSPFrame.getChooser(); int result = chooser.showOpenDialog(null); if (result == JFileChooser.APPROVE_OPTION) { filename = chooser.getSelectedFile().getAbsolutePath(); } else { return; } XMLControlElement xmlControl = new XMLControlElement(filename); if (xmlControl.failedToRead()) { control.println("failed to read: " + filename); } else { // gets the datasets in the xml file Iterator it = xmlControl.getObjects(Dataset.class, false).iterator(); while (it.hasNext()) { Dataset dataset = (Dataset) it.next(); if (dataset.getName().equals("magnetization")) { magnetization = dataset.getYPoints(); } if (dataset.getName().equals("energy")) { energy = dataset.getYPoints(); } } numberOfPoints = magnetization.length; control.println("Reading: " + filename); control.println("Number of points = " + numberOfPoints); } calculate(); plotFrame.repaint(); }
/** Calculates the wave function. */ public void calculate() { schroedinger.xmin = control.getDouble("xmin"); schroedinger.xmax = control.getDouble("xmax"); schroedinger.stepHeight = control.getDouble("step height at x = 0"); schroedinger.numberOfPoints = control.getInt("number of points"); schroedinger.energy = control.getDouble("energy"); schroedinger.initialize(); schroedinger.solve(); frame.append(0, schroedinger.x, schroedinger.phi); }
/** Constructs SchroedingerApp and sets plotting frame parameters. */ public SchroedingerApp() { frame.setConnected(0, true); frame.setMarkerShape(0, Dataset.NO_MARKER); }