/* * Makes an N x N Euclidean grid graph. * The sortest path from (0, 0) to (N - 1, N - 1) thus is 2(N - 1). * * It produces files that have 1 line of the form: * N blockSize row col * where 0 <= row, col < N and blockSize = N / sqrt( numWorkers ) * * A worker that receives that file should create the vertices and out edges for * the subgrid whose lower left vertex has coordinates is (r, c) and whose * upper right vertex has coordinates ( r + blockSize - 1, c + blockSize - 1 ). */ package edu.ucsb.jpregel.system; import api.MasterGraphMaker; import java.io.BufferedReader; import java.io.BufferedWriter; import static java.lang.System.*; /** * * @author Pete Cappello */ public class MasterGraphMakerGrid implements MasterGraphMaker { @Override public void make(FileSystem fileSystem, int numWorkers) { try { BufferedReader bufferedReader = fileSystem.getFileInputStream(); String line; if ((line = bufferedReader.readLine()) == null) { err.println("GridMasterGraphMaker: Error: input file has no lines."); exit(1); } int N = Integer.parseInt(line); int sqrtNumWorkers = (int) Math.sqrt(numWorkers); int blockSize = N / sqrtNumWorkers; System.out.println("GridMasterGraphMaker.make: N: " + N + " sqrtNumWorkers: " + sqrtNumWorkers + " blockSize: " + blockSize); for (int row = 0; row < sqrtNumWorkers; row++) { for (int col = 0; col < sqrtNumWorkers; col++) { int fileNum = row * sqrtNumWorkers + col + 1; // fileNum = 0, 1, ... , numWorkers - 1 BufferedWriter bufferedWriter = fileSystem.getWorkerInputFileOutputStream(fileNum); // line = "N blockSize row col" as described in preamble StringBuilder string = new StringBuilder(); string.append(N).append(' '); string.append(blockSize).append(' '); string.append(row * blockSize).append(' '); string.append(col * blockSize); line = new String(string); out.println("GridMasterGraphMaker: line: " + line); bufferedWriter.write(line); // close output file bufferedWriter.close(); } } bufferedReader.close(); out.println("GridMasterGraphMaker: complete."); } catch (Exception exception) { err.println("GridMasterGraphMaker.read: Error: " + exception.getMessage()); exception.printStackTrace(); exit(1); } } }