public Geometric3DNodeCollection() {
		// Immediately stop execution if rMax is not defined in the xml config file.  
		try {
			rMax = Configuration.getDoubleParameter("GeometricNodeCollection/rMax");
		} catch(CorruptConfigurationEntryException e) {
			Main.fatalError(e.getMessage());
		}
		if(rMax <= 0) {
			Main.fatalError("Geometric3DNodeCollection: The value of rMax from the config file entry " +
			                "<GeometricNodeCollection rMax=\"" + rMax + "\"/>" +
			                "is not valid. The value of rMax must be positive."
			                );
		}
		// determine cardinality of matrix in each dimension
		numX = (int) Math.ceil(dimX / rMax);
		numY = (int) Math.ceil(dimY / rMax);
		numZ = (int) Math.ceil(dimZ / rMax);
		// create and initialize the matrix
		list = new DLLNodeList[numX][numY][numZ];
		for(int i=0; i<numX; i++) {
			for(int j=0; j<numY; j++) {
				for(int k=0; k<numZ; k++) {
					list[i][j][k] = new DLLNodeList(true);
				}
			}
		}
	}