package org.openpixi.pixi.physics.grid; import java.io.Serializable; /** * Represents one cell of the grid. * * WHEN ADDING NEW FIELDS THE COPY() METHOD NEEDS TO BE UPDATED !!! */ public class Cell implements Serializable { /**electric current in x-Direction*/ private double jx; /**electric current in y-Direction*/ private double jy; /**sum of electric charges in a cell*/ private double rho; /**electrostatic potential*/ private double phi; /**electric field in x direction at time t+dt*/ private double Ex; /**electric field in y direction at time t+dt*/ private double Ey; /**magnetic field in z direction at time t+dt*/ private double Bz; /**electric field in x direction at time t*/ private double Exo; /**electric field in y direction at time t*/ private double Eyo; /**magnetic field in z direction at time t*/ private double Bzo; public double getJx() { return jx; } /** * Needs to be synchronized as we expect in the parallel version * two threads trying to update the field at the same time. */ public synchronized void addJx(double value) { this.jx += value; } public double getJy() { return jy; } /** * Needs to be synchronized as we expect in the parallel version * two threads trying to update the field at the same time. */ public synchronized void addJy(double value) { this.jy += value; } public double getRho() { return rho; } public void setRho(double rho) { this.rho = rho; } /** * Needs to be synchronized as we expect in the parallel version * two threads trying to update the field at the same time. */ public synchronized void addRho(double value) { this.rho += value; } public double getPhi() { return phi; } public void setPhi(double phi) { this.phi = phi; } public double getEx() { return Ex; } public void setEx(double ex) { Ex = ex; } public double getEy() { return Ey; } public void setEy(double ey) { Ey = ey; } public double getBz() { return Bz; } public void setBz(double bz) { Bz = bz; } public double getExo() { return Exo; } public void setExo(double exo) { Exo = exo; } public double getEyo() { return Eyo; } public void setEyo(double eyo) { Eyo = eyo; } public double getBzo() { return Bzo; } public void setBzo(double bzo) { Bzo = bzo; } public void resetCurrent() { jx = 0; jy = 0; } public void resetCharge() { rho = 0; } public void storeFields() { Exo = Ex; Eyo = Ey; Bzo = Bz; } /** * Copies the values from other cell. * A safer way would be to copy the fields through reflection * with use of ClassCopier (see package util). * However, since this code is used in distributed version in every step, it needs to be fast; * thus, a manual solution is more preferable than reflection. */ public void copyFrom(Cell other) { this.jx = other.jx; this.jy = other.jy; this.rho = other.rho; this.phi = other.phi; this.Ex = other.Ex; this.Ey = other.Ey; this.Bz = other.Bz; this.Exo = other.Exo; this.Eyo = other.Eyo; this.Bzo = other.Bzo; } @Override public String toString() { return String.format("E[%.3f,%.3f] Bz[%.3f] J[%.3f,%.3f]", Ex, Ey, Bz, jx, jy); } }