/** * n dimensional box with no scalar fields of a fixed (at construction time) * size * @author Michael Schuresko * @version %I%, %G% * @since 1.0 */ public class NdTrivialEnv implements IEnvironment { BoxBoundary m_boundary; double[] m_arrLfMin; double[] m_arrLfMax; public NdTrivialEnv() { initializeVars(100.0,100.0); } public NdTrivialEnv(double lfWidth, double lfHeight) { initializeVars(lfWidth, lfHeight); } public NdTrivialEnv(NdTrivialEnv src) { m_arrLfMin = MathUtils.arrDblCpy(src.m_arrLfMin, src.m_arrLfMin.length); m_arrLfMax = MathUtils.arrDblCpy(src.m_arrLfMax, src.m_arrLfMax.length); m_boundary = new BoxBoundary(m_arrLfMin, m_arrLfMax); } public NdTrivialEnv(double [] arrLfMin, double [] arrLfMax) { if(arrLfMin.length != arrLfMax.length) { // raise an exception here later } m_arrLfMin = new double[arrLfMin.length]; m_arrLfMax = new double[arrLfMax.length]; for(int i = 0; i < arrLfMin.length; ++i) { m_arrLfMin[i] = arrLfMin[i]; m_arrLfMax[i] = arrLfMax[i]; if(arrLfMax[i] < arrLfMin[i]) { // raise an exception here later } } m_boundary = new BoxBoundary(m_arrLfMin, m_arrLfMax); } public void initializeVars(double lfWidth, double lfHeight) { m_arrLfMin = new double[2]; m_arrLfMax = new double[2]; m_arrLfMin[0] = 0.0; m_arrLfMin[1] = 0.0; m_arrLfMax[0] = lfWidth; m_arrLfMax[1] = lfHeight; m_boundary = new BoxBoundary(m_arrLfMin, m_arrLfMax); } /** * dimensionality of space in which environment is embedded */ public int getDimensionality() { return m_arrLfMin.length; } /** * number of scalar fields over environment */ public int getNumScalars() { return 0; } /** * Gets a particular field value at a particular location * Invalid for this class * Figure out how to declare exceptions in interface definitions */ public double getFieldVal(int nWhichField, double arrLoc[]) { return 0.0; } /** * Gets all field values for a particular location as a vector * Invalid for this class * Figure out how to declare exceptions in interface definitions * @param arrLoc invalid for this class * @return null -- invalid for this class */ public double [] getFieldVals(double arrLoc[]) { return null; } public IEnvironment makeCopy() { return new NdTrivialEnv(this); } public double [] accessMin() { return m_arrLfMin; } public double [] accessMax() { return m_arrLfMax; } /** * Gradient at a particular location for a given field * @param nWhichField field to take gradient of * @param arrLoc place at which to take gradient * @return gradient (of proper dimensionality) as a double [] */ public double [] getGradient(int nWhichField, double arrLoc[]) { return new double [m_arrLfMin.length]; } /** * Gradient at a particular location for a given field * @param nWhichField field to take gradient of * @param arrLoc place at which to take gradient * @return gradient (of proper dimensionality) as a double [] */ public void getGradient(int nWhichField, double arrLoc[], double arrRslt[]) { for(int i = 0; i < m_arrLfMin.length; ++i) { arrRslt[i] = 0.0; } } /** * Gets boundary interface */ public IBoundary getBoundary() { return m_boundary; } }