Package org.openpixi.pixi.distributed.utils

Source Code of org.openpixi.pixi.distributed.utils.VariousSettings

package org.openpixi.pixi.distributed.utils;

import org.openpixi.pixi.physics.Settings;
import org.openpixi.pixi.physics.fields.SimpleSolver;
import org.openpixi.pixi.physics.force.ConstantForce;
import org.openpixi.pixi.physics.grid.ChargeConservingCIC;
import org.openpixi.pixi.physics.grid.CloudInCell;
import org.openpixi.pixi.physics.solver.Boris;
import org.openpixi.pixi.physics.solver.Euler;
import org.openpixi.pixi.physics.solver.LeapFrogDamped;
import org.openpixi.pixi.physics.solver.relativistic.BorisRelativistic;
import org.openpixi.pixi.physics.solver.relativistic.SemiImplicitEulerRelativistic;
import org.openpixi.pixi.physics.util.ClassCopier;

import java.util.HashMap;
import java.util.Map;

/**
* Defines various settings for distributed simulation testing.
* Modify this class if you want to extend the coverage of tested settings.
*/
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;
  }


  public static Settings getDefaultSettings() {
    Settings settings = new Settings();
    settings.setNumOfNodes(16);
    settings.setGridCellsX(64);
    settings.setGridCellsY(128);
    settings.setSimulationWidth(10 * settings.getGridCellsX());
    settings.setSimulationHeight(10 * settings.getGridCellsY());
    settings.setNumOfParticles(100);
    settings.setIterations(100);
    // Ensures that the particles do not get too fast.
    settings.setParticleSolver(new BorisRelativistic(
        settings.getSimulationWidth() / settings.getTimeStep()));
    return settings;
  }
}
TOP

Related Classes of org.openpixi.pixi.distributed.utils.VariousSettings

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.