blob: 00392c1172a4cbade357dbddf86a6628525088df [file] [log] [blame]
/*************************************************************************/
/* */
/* Copyright (c) 1994 Stanford University */
/* */
/* All rights reserved. */
/* */
/* Permission is given to use, copy, and modify this software for any */
/* non-commercial purpose as long as this copyright notice is not */
/* removed. All other uses, including redistribution in whole or in */
/* part, are forbidden without prior written permission. */
/* */
/* This software is provided with absolutely no warranty and no */
/* support. */
/* */
/*************************************************************************/
#define INPROCS 16
#define IMAX 258
#define JMAX 258
#define MAX_LEVELS 9
#define MASTER 0
#define RED_ITER 0
#define BLACK_ITER 1
#define PAGE_SIZE 4096
EXTERN_ENV
extern struct global_struct {
int id;
long starttime;
long trackstart;
double psiai;
double psibi;
} *global;
extern struct fields_struct {
double psi[2][IMAX][JMAX];
double psim[2][IMAX][JMAX];
} *fields;
extern struct fields2_struct {
double psium[IMAX][JMAX];
double psilm[IMAX][JMAX];
} *fields2;
extern struct wrk1_struct {
double psib[IMAX][JMAX];
double ga[IMAX][JMAX];
double gb[IMAX][JMAX];
} *wrk1;
extern struct wrk3_struct {
double work1[2][IMAX][JMAX];
double work2[IMAX][JMAX];
} *wrk3;
extern struct wrk2_struct {
double work3[IMAX][JMAX];
double f[IMAX];
} *wrk2;
extern struct wrk4_struct {
double work4[2][IMAX][JMAX];
double work5[2][IMAX][JMAX];
} *wrk4;
extern struct wrk6_struct {
double work6[IMAX][JMAX];
} *wrk6;
extern struct wrk5_struct {
double work7[2][IMAX][JMAX];
double temparray[2][IMAX][JMAX];
} *wrk5;
extern struct frcng_struct {
double tauz[IMAX][JMAX];
} *frcng;
extern struct iter_struct {
int notdone;
double work8[IMAX][JMAX];
double work9[IMAX][JMAX];
} *iter;
extern struct guess_struct {
double oldga[IMAX][JMAX];
double oldgb[IMAX][JMAX];
} *guess;
extern struct multi_struct {
double q_multi[MAX_LEVELS][IMAX][JMAX];
double rhs_multi[MAX_LEVELS][IMAX][JMAX];
double err_multi;
int numspin;
int spinflag[INPROCS];
} *multi;
extern struct locks_struct {
LOCKDEC(idlock)
LOCKDEC(psiailock)
LOCKDEC(psibilock)
LOCKDEC(donelock)
LOCKDEC(error_lock)
LOCKDEC(bar_lock)
} *locks;
extern struct bars_struct {
BARDEC(iteration)
BARDEC(gsudn)
BARDEC(p_setup)
BARDEC(p_redph)
BARDEC(p_soln)
BARDEC(p_subph)
BARDEC(sl_prini)
BARDEC(sl_psini)
BARDEC(sl_onetime)
BARDEC(sl_phase_1)
BARDEC(sl_phase_2)
BARDEC(sl_phase_3)
BARDEC(sl_phase_4)
BARDEC(sl_phase_5)
BARDEC(sl_phase_6)
BARDEC(sl_phase_7)
BARDEC(sl_phase_8)
BARDEC(sl_phase_9)
BARDEC(sl_phase_10)
BARDEC(error_barrier)
} *bars;
extern double eig2;
extern double ysca;
extern int jmm1;
extern double pi;
extern double t0;
extern int *procmap;
extern int xprocs;
extern int yprocs;
extern int numlev;
extern int imx[MAX_LEVELS];
extern int jmx[MAX_LEVELS];
extern double lev_res[MAX_LEVELS];
extern double lev_tol[MAX_LEVELS];
extern double maxwork;
extern int minlevel;
extern double outday0;
extern double outday1;
extern double outday2;
extern double outday3;
extern int nprocs;
extern double h1;
extern double h3;
extern double h;
extern double lf;
extern double res;
extern double dtau;
extern double f0;
extern double beta;
extern double gpr;
extern int im;
extern int jm;
extern int do_stats;
extern int do_output;
extern int *multi_times;
extern int *total_times;
extern double factjacob;
extern double factlap;
extern struct Global_Private {
char pad[PAGE_SIZE];
double multi_time;
double total_time;
int rel_start_x[MAX_LEVELS];
int rel_start_y[MAX_LEVELS];
int rel_num_x[MAX_LEVELS];
int rel_num_y[MAX_LEVELS];
int eist[MAX_LEVELS];
int ejst[MAX_LEVELS];
int oist[MAX_LEVELS];
int ojst[MAX_LEVELS];
int eiest[MAX_LEVELS];
int ejest[MAX_LEVELS];
int oiest[MAX_LEVELS];
int ojest[MAX_LEVELS];
int rlist[MAX_LEVELS];
int rljst[MAX_LEVELS];
int rlien[MAX_LEVELS];
int rljen[MAX_LEVELS];
int iist[MAX_LEVELS];
int ijst[MAX_LEVELS];
int iien[MAX_LEVELS];
int ijen[MAX_LEVELS];
int pist[MAX_LEVELS];
int pjst[MAX_LEVELS];
int pien[MAX_LEVELS];
int pjen[MAX_LEVELS];
} *gp;
extern double i_int_coeff[MAX_LEVELS];
extern double j_int_coeff[MAX_LEVELS];
extern int minlev;