*/
public class VariousSettings {
public static Map<String, Settings> getSettingsMap() {
Map<String, Settings> variousTestSettings = new HashMap<String, Settings>();
Settings defaultSettings = getDefaultSettings();
Settings settings = ClassCopier.copy(defaultSettings);
settings.setNumOfNodes(2);
variousTestSettings.put("2 nodes - self communication", settings);
settings = ClassCopier.copy(defaultSettings);
settings.setParticleSolver(new Euler());
variousTestSettings.put("Euler", settings);
settings = ClassCopier.copy(defaultSettings);
settings.setNumOfThreads(5);
settings.setParticleSolver(new Euler());
variousTestSettings.put("Threaded version", settings);
// Fails probably because Boris remembers a lot of information about the force
// in the particle. This information remembering probably causes problem when particles
// are transferred from one node to the other.
// TODO find solution
settings = ClassCopier.copy(defaultSettings);
settings.setParticleSolver(new Boris());
variousTestSettings.put("Boris", settings);
settings = ClassCopier.copy(defaultSettings);
settings.setParticleSolver(new SemiImplicitEulerRelativistic(
settings.getCellWidth() / settings.getTimeStep()));
variousTestSettings.put("SemiImplicitEulerRelativistic", settings);
settings = ClassCopier.copy(defaultSettings);
settings.setParticleSolver(new LeapFrogDamped());
variousTestSettings.put("LeapFrogDamped", settings);
// Fails because in the distributed version we do additions upon particle's position
// when it is transferred from one node to another. These additions are cause of the small
// deviation from the non distributed simulation solution.
// TODO find solution?
settings = ClassCopier.copy(defaultSettings);
settings.setIterations(5000);
settings.setNumOfParticles(10);
settings.setParticleSolver(new SemiImplicitEulerRelativistic(
settings.getCellWidth() / settings.getTimeStep()));
variousTestSettings.put("5000 iterations", settings);
// TODO find solution
settings = ClassCopier.copy(defaultSettings);
settings.setInterpolator(new ChargeConservingCIC());
variousTestSettings.put("ChargeConservingCIC", settings);
settings = ClassCopier.copy(defaultSettings);
settings.setInterpolator(new CloudInCell());
variousTestSettings.put("CloudInCell", settings);
settings = ClassCopier.copy(defaultSettings);
settings.setGridSolver(new SimpleSolver());
variousTestSettings.put("SimpleSolver", settings);
// Fails because SpringForce uses particle's absolute y position to calculate the force.
// Since the y position in local and distributed simulation differs,
// it also has a different effect.
// TODO find solution
// settings = ClassCopier.copy(defaultSettings);
// settings.addForce(new SpringForce());
// variousTestSettings.put("SpringForce", settings);
settings = ClassCopier.copy(defaultSettings);
ConstantForce constantForce = new ConstantForce();
constantForce.bz = -1;
settings.addForce(constantForce);
variousTestSettings.put("MagneticForce", settings);
return variousTestSettings;
}