package org.openpixi.pixi.distributed.movement.boundary;
import org.openpixi.pixi.distributed.SharedData;
import org.openpixi.pixi.physics.particles.Particle;
import org.openpixi.pixi.physics.force.Force;
import org.openpixi.pixi.physics.movement.boundary.ParticleBoundary;
import org.openpixi.pixi.physics.solver.Solver;
/**
* Registers the border particles (particles which belong to this node
* but need to be send to neighbors as they influence their interpolation).
*/
public class BorderGate extends ParticleBoundary {
private SharedData sharedData;
public BorderGate(double xoffset, double yoffset, SharedData sharedData) {
super(xoffset, yoffset);
this.sharedData = sharedData;
}
@Override
public void apply(Solver solver, Force force, Particle particle, double timeStep) {
// We need to translate the position of the particle to the coordinates
// valid at the neighbor.
// However, we want the particle to keep its position at the local node.
// Thus, we need a copy of the particle.
Particle copy = particle.copy();
copy.addX(-xoffset);
copy.addPrevX(-xoffset);
copy.addY(-yoffset);
copy.addPrevY(-yoffset);
sharedData.registerBorderParticle(copy);
}
}