package org.openpixi.pixi.distributed.ui;
import org.openpixi.pixi.distributed.Node;
import org.openpixi.pixi.distributed.profile.DistributedProfileInfo;
import org.openpixi.pixi.physics.Settings;
import org.openpixi.pixi.physics.Simulation;
import org.openpixi.pixi.physics.solver.Boris;
import org.openpixi.pixi.profile.ProfileInfo;
/**
* Based on the command line arguments runs either distributed or local simulation.
* Afterwards displays profiling information.
*/
public class MainProfile {
public static void main(String[] args) {
// 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 > 0: "Invalid number of nodes!";
Settings settings = new Settings();
settings.setNumOfThreads(1);
settings.setGridCellsX(16);
settings.setGridCellsY(16);
settings.setSimulationWidth(10 * settings.getGridCellsX());
settings.setSimulationHeight(10 * settings.getGridCellsY());
settings.setNumOfParticles(10000);
settings.setIterations(1000);
settings.setParticleSolver(new Boris());
settings.setNumOfNodes(numOfNodes);
settings.setIplServer(iplServer);
if (numOfNodes == 1) {
Simulation simulation = new Simulation(settings);
simulation.run();
ProfileInfo.printProfileInfo();
}
else if (numOfNodes > 1) {
assert iplServer != null;
Node node = new Node(settings);
node.run();
DistributedProfileInfo.printProfileInfo();
}
settings.terminateThreads();
}
}