|

// PVM Mandelbrot Set Slave Program
// Tom Dixon - Supercomp Period 3
#include </usr/pvm3/include/pvm3.h>
#include <stdlib.h>
#include <fstream.h>
void main()
{
int mytid;
int min, max, ysize, col, master, it, who;
double y1, y2, x, y, a, b, ta;
// Initial information
pvm_recv(-1, 69);
pvm_upkint(&who, 1, 1);
pvm_upkdouble(&y1, 1, 1);
pvm_upkdouble(&y2, 1, 1);
pvm_upkint(&ysize, 1, 1);
pvm_upkint(&max, 1, 1);
pvm_upkint(&min, 1, 1);
master=pvm_parent();
mytid=pvm_mytid();
double** screen = (double **)malloc(sizeof(double *)*ysize);
for (int i = 0; i < ysize; i++)
screen[i]=(double*)malloc(sizeof(double)*3);
while (1) {
pvm_recv(-1, 666);
pvm_upkint(&col, 1, 1);
pvm_upkdouble(&x, 1, 1);
for(int j=0; j<ysize; j++) {
it=0;
y=y2-(y2-y1)*j/ysize;
a=x; b=y;
while (it<max && a*a+b*b<4) {
ta=a*a-b*b+x;
b=2*a*b+y;
a=ta;
it++;
}
if (it<max) {
screen[j][0]=double(it-min)/(max-min);
screen[j][1]=1-double(it-min)/(max-min);
screen[j][2]=double(it-min)/(max-min);
}
else screen[j][0]=screen[j][1]=screen[j][2]=0;
}
pvm_initsend(PvmDataDefault);
pvm_pkint(&who, 1, 1);
pvm_pkint(&col, 1, 1);
for(int i=0; i<ysize; i++)
pvm_pkdouble(screen[i], 3, 1);
pvm_send(master, 254);
}
}
|