package org.openpixi.pixi.distributed; import org.openpixi.pixi.distributed.utils.Print; import org.openpixi.pixi.distributed.utils.VariousSettings; import org.openpixi.pixi.physics.Settings; import org.openpixi.pixi.physics.Simulation; import org.openpixi.pixi.physics.util.ComparisonFailedException; import org.openpixi.pixi.physics.util.ResultsComparator; import java.util.HashMap; import java.util.Map; /** * Runs a true distributed simulation test under various settings. * True means that the class needs to be started by multiple jvm's or multiple computers. * Requires the ipl server to be running. */ public class TrueDistSimTest { public static void main(String[] args) throws Exception { // TODO replace with more powerfull settings class (command line arguments support) int numOfNodes = 0; String iplServer = null; for (int i = 0; i < args.length; ++i) { if (args[i].equals("-numOfNodes")) { ++i; numOfNodes = Integer.parseInt(args[i]); } else if (args[i].equals("-iplServer")) { ++i; iplServer = args[i]; } } assert numOfNodes > 1: "Invalid number of nodes!"; assert iplServer != null: "Ipl server was not specified!"; Map<String, Settings> settingsMap = VariousSettings.getSettingsMap(); Map<String, Boolean> resultsMap = new HashMap<String, Boolean>(); for (String testName: settingsMap.keySet()) { Settings stt = settingsMap.get(testName); stt.setNumOfNodes(numOfNodes); stt.setIplServer(iplServer); Node n = new Node(stt); n.run(); try { compareResult(stt, n, testName); resultsMap.put(testName, true); } catch (ComparisonFailedException e) { System.out.println(e.getMessage()); resultsMap.put(testName, false); } } Print.testResults(resultsMap); } private static void compareResult(Settings stt, Node n, String testName) { if (n.isMaster()) { System.out.println("Comparing result of " + testName + " test"); Simulation localSimulation = new Simulation(stt); localSimulation.run(); Master master = n.getMaster(); ResultsComparator comparator = new ResultsComparator(); comparator.compare( localSimulation.particles, master.getFinalParticles(), localSimulation.grid, master.getFinalGrid()); } } }