public void interact(Particle p) {
		if (contains(p.rx, p.ry)) {
			if (viscosity > Particle.ZERO) {
				double dmp = MDModel.GF_CONVERSION_CONSTANT * viscosity / p.getMass();
				p.fx -= dmp * p.vx;
				p.fy -= dmp * p.vy;
			}
			if (reflection) {
				if (p instanceof Atom)
					internalReflection((Atom) p);
			}
		}
		else {
			if (reflection) {
				if (p instanceof Atom)
					externalReflection((Atom) p);
			}
		}
		if (phi0 != 0) {
			double dx = 2 * (p.rx - getRx()) / getWidth();
			double dy = 2 * (p.ry - getRy()) / getHeight();
			double v = phi0 * Math.exp(-gamma * (dx * dx + dy * dy));
			double c = MDModel.GF_CONVERSION_CONSTANT * v * gamma * 2;
			p.fx += c * dx * 2 / getWidth();
			p.fy += c * dy * 2 / getHeight();
		}
	}