#include #include #include #include #include #include #include /// /// http://wili.cc/blog/mandelbrot-mpi.html /// #define MCW MPI_COMM_WORLD using namespace std; const int Master = 0; struct Color { int red; int green; int blue; }; struct MandelbrotConfig { int width; int height; double xComplexMin; double xComplexMax; double yComplexMin; double yComplexMax; double maxIterations; Color colorOne; Color colorTwo; string outputFileName; }; MandelbrotConfig readConfig(string configFile){ ifstream fin; MandelbrotConfig config; fin.open(configFile); if (fin){ fin >> config.width >> config.height; fin >> config.xComplexMin >> config.xComplexMax; fin >> config.yComplexMin >> config.yComplexMax; fin >> config.maxIterations; fin >> config.colorOne.red >> config.colorOne.green >> config.colorOne.blue; fin >> config.colorTwo.red >> config.colorTwo.green >> config.colorTwo.blue; fin >> config.outputFileName; fin.close(); } if(!fin){ cout << "Could not open File"; } return config; } Color getPixelColor(Color color1, Color color2, double iterations, double maxIterations) { Color colorReturn; double myColorR = static_cast((color2.red - color1.red) / maxIterations); double myColorG = static_cast((color2.green - color1.green) / maxIterations); double myColorB = static_cast((color2.blue - color1.blue) / maxIterations); colorReturn.red = (color1.red + (iterations * myColorR)); colorReturn.green = (color1.green + (iterations * myColorG)); colorReturn.blue = (color1.blue + (iterations * myColorB)); return colorReturn; } void writeFile(MandelbrotConfig config, std::vector > array){ ofstream fout; fout.open(config.outputFileName); fout << "P3" << endl; fout << config.width << " " << config.height << endl; fout << "255" << endl; for(int i = 0; i < config.height; i++){ for(int j = 0; j < config.width; j++){ Color Pixel = array[i][j]; fout << Pixel.red << " " << Pixel.green << " " << Pixel.blue << " "; } fout << endl; } fout.close(); } void drawMandelbrot(MandelbrotConfig config, int rank, int &worldsize){ double pixelWidth = ((config.xComplexMax-config.xComplexMin)/config.width); double pixelHeight = ((config.yComplexMax-config.yComplexMin)/config.height); std::vector > pixels(config.height, std::vector (config.width)); std::vector sub_pixels; int *displace; displace = (int *)calloc(worldsize,sizeof(int)); int *dim_list; dim_list = (int *)calloc(worldsize,sizeof(int)); int j = 0; for (int i=0; i> configFile; // Read config file contents into MandelbrotConfig struct instance config = readConfig(configFile); // Compute and write specified mandelbrot image to PPM file // drawMandelbrot(config); } drawMandelbrot(config, rank, size); MPI_Finalize(); return 0; }