package org.openpixi.pixi.physics.force.relativistic; import org.openpixi.pixi.physics.RelativisticVelocity; import org.openpixi.pixi.physics.Simulation; import org.openpixi.pixi.physics.force.Force; import org.openpixi.pixi.physics.particles.Particle; public class SimpleGridForceRelativistic implements Force { Simulation s; RelativisticVelocity relvelocity; /** New empty force */ public SimpleGridForceRelativistic(Simulation s) { this.s = s; relvelocity = new RelativisticVelocity(s.getSpeedOfLight()); } public double getForceX(Particle p) { double gamma = relvelocity.calculateGamma(p); //v = u / gamma double vy = p.getVy() / gamma; return p.getCharge() * ( p.getEx() + vy * p.getBz()); } public double getForceY(Particle p) { double gamma = relvelocity.calculateGamma(p); //v = u / gamma double vx = p.getVx() / gamma; return p.getCharge() * (p.getEy() - vx * p.getBz()); } public double getPositionComponentofForceX(Particle p) { return p.getCharge() * p.getEx(); } public double getPositionComponentofForceY(Particle p) { return p.getCharge() * p.getEy(); } public double getNormalVelocityComponentofForceX(Particle p) { double gamma = relvelocity.calculateGamma(p); //v = u / gamma double vy = p.getVy() / gamma; return p.getCharge() * vy * p.getBz(); } public double getNormalVelocityComponentofForceY(Particle p) { double gamma = relvelocity.calculateGamma(p); double vx = p.getVx() / gamma; return - p.getCharge() * vx * p.getBz(); } public double getBz(Particle p) { return p.getBz(); } public double getTangentVelocityComponentOfForceX(Particle p) { double gamma = relvelocity.calculateGamma(p); //v = u / gamma double vx = p.getVx() / gamma; return -getLinearDragCoefficient(p) * vx; } public double getTangentVelocityComponentOfForceY(Particle p) { double gamma = relvelocity.calculateGamma(p); //v = u / gamma double vy = p.getVy() / gamma; return -getLinearDragCoefficient(p) * vy; } public double getLinearDragCoefficient(Particle p) { return 0; } }