📄 pm_genproc_cleanedup.c
字号:
typedef char *__gnuc_va_list;
extern struct _iobuf {
int _cnt;
unsigned char *_ptr;
unsigned char *_base;
int _bufsiz;
short _flag;
char _file;
} _iob[];
extern struct _iobuf *fopen(const char *, const char *);
extern struct _iobuf *fdopen(int, const char *);
extern struct _iobuf *freopen(const char *, const char *, struct _iobuf *);
extern struct _iobuf *popen(const char *, const char *);
extern struct _iobuf *tmpfile();
extern long ftell(struct _iobuf *);
extern char *fgets(char *, int, struct _iobuf *);
extern char *gets(char *);
extern char *sprintf(char *, const char *,...);
extern char *ctermid(char *);
extern char *cuserid(char *);
extern char *tempnam(const char *, const char *);
extern char *tmpnam(char *);
typedef enum _Fractal_type {
MBROT, JULIA, NEWTON
} Fractal_type;
void Mbrot_Settings(double boundary, int maxiter);
int MbrotCalcIter(double re, double im);
void Julia_Settings(double boundary, int maxiter, double real, double
imag);
int JuliaCalcIter(double re, double im);
void Mbrotrep_Settings(double boundary, int maxiter, int miniter,
int longestCycle, double fudgeFactor);
int MbrotrepCalcIter(double re, double im);
void CalcField(Fractal_type, int *iterField,
int xstart, int xend, int ystart, int yend);
void Copysub2DArray(int *mainArray, int *subArray, int mainWidth,
int mainHeight, int subWidth, int subHeight,
int xpos, int ypos);
typedef struct Mbrot_settings_ {
double boundary_sq;
int maxiter;
} Mbrot_settings;
typedef struct Julia_settings_ {
double boundary_sq;
int maxiter;
double r, i;
} Julia_settings;
typedef struct Newton_settings_ {
double epsilon;
int *coeff;
int nterms;
int maxiter;
} Newton_settings;
extern MPI_Datatype winspecs_type, flags_type, NUM_type, rect_type;
extern struct _iobuf *debug_file;
typedef enum _Algorithms {
alg_block,
alg_separate_rect,
alg_solid_rect
} Alogrithms;
typedef struct _Winspecs {
int height, width;
int bw;
int xpos, ypos;
int numColors;
MPE_Color *colorArray;
} Winspecs;
typedef struct _Flags {
char *logfile;
char *inf;
char *outf;
Winspecs *winspecs;
int breakout;
int randomize;
int colReduceFactor;
int loop;
int zoom;
int askNeighbor;
int sendMasterComplexity;
int drawBlockRegion;
int fractal;
int maxiter;
double boundary_sq;
double epsilon;
double rmin, rmax, imin, imax;
double julia_r, julia_i;
} Flags;
typedef struct {
int l, r, t, b, length;
} rect;
typedef struct {
int head, tail, size, randomPt, randomize;
rect *r;
} rect_queue;
DefineMPITypes()
{
Winspecs winspecs;
Flags flags;
rect rectangle;
int len[3], disp[3];
MPI_Datatype types[3];
NUM_type = MPI_DOUBLE;
MPI_Type_contiguous(6, MPI_INT, &winspecs_type);
MPI_Type_commit(&winspecs_type);
len[0] = 10;
len[1] = 2;
len[2] = 6;
disp[0] = (int) ((char *) (&(flags.breakout)) - (char *) (&(flags)));
disp[1] = (int) ((char *) (&(flags.boundary_sq)) - (char *) (&(flags)));
disp[2] = (int) ((char *) (&(flags.rmin)) - (char *) (&(flags)));
types[0] = MPI_INT;
types[1] = MPI_DOUBLE;
types[2] = NUM_type;
MPI_Type_struct(3, len, disp, types, &flags_type);
MPI_Type_commit(&flags_type);
len[0] = 5;
disp[0] = (int) ((char *) (&(rectangle.l)) - (char *) (&(rectangle)));
types[0] = MPI_INT;
MPI_Type_struct(1, len, disp, types, &rect_type);
MPI_Type_commit(&rect_type);
return 0;
}
GetDefaultWinspecs(winspecs)
Winspecs *winspecs;
{
winspecs->height = 500;
winspecs->width = 500;
winspecs->bw = 0;
winspecs->xpos = -1;
winspecs->ypos = -1;
winspecs->numColors = 16;
return 0;
}
GetDefaultFlags(winspecs, flags)
Winspecs *winspecs;
Flags *flags;
{
flags->logfile = 0;
flags->inf = 0;
flags->outf = 0;
flags->winspecs = winspecs;
flags->breakout = 12;
flags->randomize = 1;
flags->colReduceFactor = 4;
flags->loop = 0;
flags->zoom = 1;
flags->askNeighbor = 1;
flags->sendMasterComplexity = 0;
flags->drawBlockRegion = 1;
flags->fractal = MBROT;
flags->maxiter = 1000;
flags->boundary_sq = 2.0 * 2.0;
flags->epsilon = .01;
{
(flags->rmin) = (-2.0);
};
{
(flags->rmax) = (2.0);
};
{
(flags->imin) = (-2.0);
};
{
(flags->imax) = (2.0);
};
{
(flags->julia_r) = (.331);
};
{
(flags->julia_i) = (-.4);
};
return 0;
}
GetWinspecs(argc, argv, winspecs)
int *argc;
char **argv;
Winspecs *winspecs;
{
int myid;
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
if (!myid) {
GetIntArg(argc, argv, "-height", &(winspecs->height));
GetIntArg(argc, argv, "-width", &(winspecs->width));
winspecs->bw = IsArgPresent(argc, argv, "-bw");
GetIntArg(argc, argv, "-xpos", &(winspecs->xpos));
GetIntArg(argc, argv, "-ypos", &(winspecs->ypos));
GetIntArg(argc, argv, "-colors", &(winspecs->numColors));
}
MPI_Bcast(winspecs, 1, winspecs_type, 0, MPI_COMM_WORLD);
return 0;
}
GetFlags(argc, argv, winspecs, flags)
int *argc;
char **argv;
Winspecs *winspecs;
Flags *flags;
{
double x, y;
int myid, strLens[3];
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
if (!myid) {
GetStringArg(argc, argv, "-l", &(flags->logfile));
GetStringArg(argc, argv, "-i", &(flags->inf));
GetStringArg(argc, argv, "-o", &(flags->outf));
GetIntArg(argc, argv, "-breakout", &(flags->breakout));
if (IsArgPresent(argc, argv, "-randomize")) {
flags->randomize = 0;
}
if (IsArgPresent(argc, argv, "+randomize")) {
flags->randomize = 1;
}
GetIntArg(argc, argv, "-colreduce", &(flags->colReduceFactor));
flags->loop = IsArgPresent(argc, argv, "-loop");
if (IsArgPresent(argc, argv, "-zoom")) {
flags->zoom = 0;
}
if (IsArgPresent(argc, argv, "+zoom")) {
flags->zoom = 1;
}
flags->askNeighbor = IsArgPresent(argc, argv, "-neighbor");
flags->sendMasterComplexity = IsArgPresent(argc, argv, "-complexity");
flags->drawBlockRegion = IsArgPresent(argc, argv, "-delaydraw");
if (IsArgPresent(argc, argv, "-mandel")) {
flags->fractal = MBROT;
} else if (IsArgPresent(argc, argv, "-julia")) {
flags->fractal = JULIA;
} else if (IsArgPresent(argc, argv, "-newton")) {
flags->fractal = NEWTON;
}
GetIntArg(argc, argv, "-maxiter", &(flags->maxiter));
if (GetDoubleArg(argc, argv, "-boundary", &x)) {
flags->boundary_sq = x * x;
}
GetDoubleArg(argc, argv, "-epsilon", &(flags->epsilon));
if (GetDoubleArg(argc, argv, "-rmin", &x)) {
{
(flags->rmin) = ((x));
};
}
if (GetDoubleArg(argc, argv, "-rmax", &x)) {
{
(flags->rmax) = ((x));
};
}
if (GetDoubleArg(argc, argv, "-imin", &x)) {
{
(flags->imin) = ((x));
};
}
if (GetDoubleArg(argc, argv, "-imax", &x)) {
{
(flags->imax) = ((x));
};
}
if (GetDoubleArg(argc, argv, "-radius", &x)) {
if (GetDoubleArg(argc, argv, "-rcenter", &y)) {
{
(flags->rmin) = ((y - x));
};
{
(flags->rmax) = ((y + x));
};
}
if (GetDoubleArg(argc, argv, "-icenter", &y)) {
{
(flags->imin) = ((y - x));
};
{
(flags->imax) = ((y + x));
};
}
}
strLens[0] = (flags->logfile) ? strlen(flags->logfile) + 1 : 0;
strLens[1] = (flags->inf) ? strlen(flags->inf) + 1 : 0;
strLens[2] = (flags->outf) ? strlen(flags->outf) + 1 : 0;
}
MPI_Bcast(flags, 1, flags_type, 0, MPI_COMM_WORLD);
MPI_Bcast(strLens, 3, MPI_INT, 0, MPI_COMM_WORLD);
if (myid != 0) {
flags->logfile = (strLens[0]) ?
(char *) malloc(strLens[0] * sizeof(char)) : 0;
flags->inf = (strLens[1]) ?
(char *) malloc(strLens[1] * sizeof(char)) : 0;
flags->outf = (strLens[2]) ?
(char *) malloc(strLens[2] * sizeof(char)) : 0;
}
if (strLens[0])
MPI_Bcast(flags->logfile, strLens[0], MPI_CHAR, 0, MPI_COMM_WORLD);
if (strLens[1])
MPI_Bcast(flags->inf, strLens[1], MPI_CHAR, 0, MPI_COMM_WORLD);
if (strLens[2])
MPI_Bcast(flags->outf, strLens[2], MPI_CHAR, 0, MPI_COMM_WORLD);
return 0;
}
Pixel2Complex(flags, x, y, nx, ny)
Flags *flags;
int x, y;
double *nx, *ny;
{
{
*(
nx) = (
((
((
((double) x / flags->winspecs->width)) * (
((flags->rmax) - (flags->rmin))))) + (
flags->rmin))
);
};
{
*(
ny) = (
((
((
((double) y / flags->winspecs->height)) * (
((flags->imin) - (flags->imax))))) + (
flags->imax))
);
};
return 0;
}
StrContainsNonWhiteSpace(str)
char *str;
{
while (*str) {
if (!isspace(*str))
return 1;
str++;
}
return 0;
}
void Q_Create(q, randomize)
rect_queue *q;
int randomize;
{
q->head = q->tail = 0;
q->size = 100;
q->r = (rect *) malloc(q->size * sizeof(rect));
q->randomPt = 1;
q->randomize = randomize;
}
void Q_Checksize(q)
rect_queue *q;
{
if (q->head == q->tail + 1 ||
!q->head && q->tail == q->size - 1) {
q->r = (rect *) realloc(q->r, sizeof(rect) * q->size * 2);
if (q->tail < q->head) {
memcpy(q->r + q->size, q->r, q->tail * sizeof(rect));
q->tail += q->size;
}
if (q->randomize && q->randomPt < q->head) {
q->randomPt += q->size;
}
q->size *= 2;
}
}
Q_Print(q)
rect_queue *q;
{
int i;
i = q->head;
while (i != q->tail) {
fprintf(debug_file, "queue[%d] = (%d %d %d %d)\n", i, q->r[i].l, q->r[i].r,
q->r[i].t, q->r[i].b);
i++;
if (i == q->size)
i = 0;
}
}
Q_CheckValidity(q)
rect_queue *q;
{
int i;
i = q->head;
while (i != q->tail) {
if (q->r[i].l > 10000 ||
q->r[i].r > 10000 ||
q->r[i].t > 10000 ||
q->r[i].b > 10000 ||
q->r[i].length > 10000) {
fprintf(debug_file, "Error in queue[%d]: (%d %d %d %d %d)\n",
i, q->r[i].l, q->r[i].r, q->r[i].t, q->r[i].b, q->r[i].length);
}
if (++i == q->size)
i = 0;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -