package org.openpixi.pixi.physics.force.relativistic; import org.openpixi.pixi.physics.RelativisticVelocity; import org.openpixi.pixi.physics.force.ConstantForce; import org.openpixi.pixi.physics.particles.Particle; public class ConstantForceRelativistic extends ConstantForce { RelativisticVelocity relvelocity; /** New empty force */ public ConstantForceRelativistic(double c) { super(); reset(); relvelocity = new RelativisticVelocity(c); } public void reset() { gx = 0; gy = 0; drag = 0; ex = 0; ey = 0; bz = 0; } //getting the force in the x - direction @Override public double getForceX(Particle p) { double gamma = relvelocity.calculateGamma(p); //v = u / gamma double vx = p.getVx() / gamma; double vy = p.getVy() / gamma; return -drag * vx + p.getMass() * gx + p.getCharge() * ex + p.getCharge() * vy * bz; } //getting the force in the y - direction @Override public double getForceY(Particle p) { double gamma = relvelocity.calculateGamma(p); //v = u / gamma double vx = p.getVx() / gamma; double vy = p.getVy() / gamma; return - drag * vy + p.getMass() * gy + p.getCharge() * ey - p.getCharge() * vx * bz; } @Override public double getPositionComponentofForceX(Particle p) { return p.getMass() * gx + p.getCharge() * ex; } @Override public double getPositionComponentofForceY(Particle p) { return p.getMass() * gy + p.getCharge() * ey; } @Override public double getTangentVelocityComponentOfForceX(Particle p) { double gamma = relvelocity.calculateGamma(p); //v = u / gamma double vx = p.getVx() / gamma; return - drag * vx; } @Override public double getTangentVelocityComponentOfForceY(Particle p) { double gamma = relvelocity.calculateGamma(p); double vy = p.getVy() / gamma; return - drag * vy; } @Override public double getNormalVelocityComponentofForceX(Particle p) { double gamma = relvelocity.calculateGamma(p); //v = u / gamma double vy = p.getVy() / gamma; return p.getCharge() * vy * bz; } @Override public double getNormalVelocityComponentofForceY(Particle p) { double gamma = relvelocity.calculateGamma(p); //v = u / gamma double vx = p.getVx() / gamma; return - p.getCharge() * vx * bz; } @Override public double getBz(Particle p) { return bz; } @Override public double getLinearDragCoefficient(Particle p) { return drag; } }