MachineBGQTest(const Teuchos::Comm<int> &comm ):
      Machine<pcoord_t,part_t>(comm),
      networkDim(6),
      procCoords(NULL),machine_extent(NULL),
      delete_transformed_coords(false), transformed_network_dim(0),transformed_coordinates (NULL), pl(NULL){
    transformed_network_dim = networkDim - 1;
    transformed_coordinates = procCoords;

    machine_extent = new int[networkDim];
    this->getMachineExtent(this->machine_extent);
    machine_extent[5] = 1;
    //allocate memory for processor coordinates.
    procCoords = new pcoord_t *[networkDim];
    for (int i = 0; i < networkDim; ++i){
      procCoords[i] = new pcoord_t[this->numRanks];
      memset(procCoords[i], 0, sizeof(pcoord_t) * this->numRanks);
    }

    //obtain the coordinate of the processor.
    pcoord_t *xyz = new pcoord_t[networkDim];
    getMyActualMachineCoordinate(xyz);
    for (int i = 0; i < networkDim; i++)
      procCoords[i][this->myRank] = xyz[i];
    delete [] xyz;

    //reduceAll the coordinates of each processor.
    gatherMachineCoordinates(comm);

  }
  MachineBGQTest(const Teuchos::Comm<int> &comm, const Teuchos::ParameterList &pl_):
    Machine<pcoord_t,part_t>(comm),
    networkDim(6),
    procCoords(NULL),machine_extent(NULL),
    delete_transformed_coords(false), transformed_network_dim(0),transformed_coordinates (NULL),
    pl(&pl_)
  {
    transformed_network_dim = networkDim - 1;
    transformed_coordinates = procCoords;
    machine_extent = new int[networkDim];

    this->getMachineExtent(this->machine_extent);
    machine_extent[5] = 1;
    //allocate memory for processor coordinates.
    procCoords = new pcoord_t *[networkDim];
    for (int i = 0; i < networkDim; ++i){
      procCoords[i] = new pcoord_t[this->numRanks];
      memset(procCoords[i], 0, sizeof(pcoord_t) * this->numRanks);
    }

    //obtain the coordinate of the processor.
    pcoord_t *xyz = new pcoord_t[networkDim];
    getMyActualMachineCoordinate(xyz);
    for (int i = 0; i < networkDim; i++)
      procCoords[i][this->myRank] = xyz[i];
    delete [] xyz;

    //reduceAll the coordinates of each processor.
    gatherMachineCoordinates(comm);

    const Teuchos::ParameterEntry *pe = this->pl->getEntryPtr("machine_coord_transformation");

    if (pe){

      std::string approach;
      approach = pe->getValue<std::string>(&approach);

      if (approach == "Node"){
        transformed_network_dim = networkDim - 1;
        transformed_coordinates = procCoords;
      }

      else if (approach == "EIGNORE"){
        //if (this->myRank == 0) std::cout << "Ignoring E Dimension" << std::endl;
        transformed_network_dim = networkDim - 2;
        transformed_coordinates = procCoords;
      }
    }
  }
  MachineForTesting(const Teuchos::Comm<int> &comm): 
    Machine<pcoord_t,part_t>(comm),
    networkDim(3),
    procCoords(NULL)
  {
    //allocate memory for processor coordinates.
    procCoords = new pcoord_t *[networkDim];
    for (int i = 0; i < networkDim; ++i){
      procCoords[i] = new pcoord_t[this->numRanks];
      memset(procCoords[i], 0, sizeof(pcoord_t) * this->numRanks);
    }

    //obtain the coordinate of the processor.
    pcoord_t *xyz = new pcoord_t[networkDim];
    getMyMachineCoordinate(xyz);
    for (int i = 0; i < networkDim; i++)
      procCoords[i][this->myRank] = xyz[i];
    delete [] xyz;

    //reduceAll the coordinates of each processor.
    gatherMachineCoordinates(comm);
  }