/*************************************************************************/ /* */ /* 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 MASTER 0 #define RED_ITER 0 #define BLACK_ITER 1 #define UP 0 #define DOWN 1 #define LEFT 2 #define RIGHT 3 #define UPLEFT 4 #define UPRIGHT 5 #define DOWNLEFT 6 #define DOWNRIGHT 7 #define PAGE_SIZE 4096 struct multi_struct { double err_multi; }; extern struct multi_struct *multi; struct global_struct { //long id; unsigned long long starttime; unsigned long long trackstart; double psiai; double psibi; }; extern struct global_struct *global; extern double eig2; extern double ysca; extern long jmm1; extern const double pi; extern const double t0; extern double ****psi; extern double ****psim; extern double ***psium; extern double ***psilm; extern double ***psib; extern double ***ga; extern double ***gb; extern double ****work1; extern double ***work2; extern double ***work3; extern double ****work4; extern double ****work5; extern double ***work6; extern double ****work7; extern double ****temparray; extern double ***tauz; extern double ***oldga; extern double ***oldgb; extern double *f; extern double ****q_multi; extern double ****rhs_multi; struct locks_struct { LOCKDEC(idlock) LOCKDEC(psiailock) LOCKDEC(psibilock) LOCKDEC(donelock) LOCKDEC(error_lock) LOCKDEC(bar_lock) }; extern struct locks_struct *locks; struct bars_struct { #if defined(MULTIPLE_BARRIERS) 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) #else BARDEC(barrier) #endif }; extern struct bars_struct *bars; extern double factjacob; extern double factlap; struct Global_Private { char *pad; //[PAGE_SIZE]; long *rel_num_x; long *rel_num_y; long *eist; long *ejst; long *oist; long *ojst; long *rlist; long *rljst; long *rlien; long *rljen; long *rownum; long *colnum; long *neighbors; //[8]; long *lpid; double *multi_time; double *total_time; double *sync_time; double *process_time; double *steps_time; //[10] double *step_start; }; extern struct Global_Private *gp; extern double *i_int_coeff; extern double *j_int_coeff; extern long xprocs; extern long yprocs; extern long numlev; extern long *imx; extern long *jmx; extern double tolerance; extern double *lev_res; extern double *lev_tol; extern const double maxwork; extern long *xpts_per_proc; extern long *ypts_per_proc; extern long minlevel; extern const double outday0; extern const double outday1; extern const double outday2; extern const double outday3; extern long nprocs; extern const double h1; extern const double h3; extern const double h; extern const double lf; extern double res; extern double dtau; extern const double f0; extern const double beta; extern const double gpr; extern long oim; extern long im; extern long jm; extern long do_stats; extern long do_output; extern long *multi_times; extern long *total_times; /* * jacobcalc.C */ void jacobcalc (double ***x, double ***y, double ***z, long pid, long firstrow, long lastrow, long firstcol, long lastcol); /* * jacobcalc2.C */ void jacobcalc2 (double ****x, double ****y, double ****z, long psiindex, long pid, long firstrow, long lastrow, long firstcol, long lastcol); /* * laplacalc.C */ void laplacalc (long procid, double ****x, double ****z, long psiindex, long firstrow, long lastrow, long firstcol, long lastcol); /* * linkup.C */ void link_all (void); void linkup (double **row_ptr); void link_multi (void); /* * main.C */ long log_2 (long number); void printerr (char *s); /* * multi.C */ void multig (long my_id); void relax (long k, double *err, long color, long my_num); void rescal (long kf, long my_num); void intadd (long kc, long my_num); void putz (long k, long my_num); void copy_borders (long k, long pid); void copy_rhs_borders (long k, long procid); void copy_red (long k, long procid); void copy_black (long k, long procid); /* * slave1.C */ void slave (long *ptr_procid); /* * slave2.C */ void slave2 (long procid, long firstrow, long lastrow, long numrows, long firstcol, long lastcol, long numcols); /* * subblock.C */ void subblock (void);