123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- //---------------------------------------------------------------------
- //---------------------------------------------------------------------
- //
- // header.h
- //
- //---------------------------------------------------------------------
- //---------------------------------------------------------------------
- #ifndef __HEADER_H
- #define __HEADER_H
- //---------------------------------------------------------------------
- // The following include file is generated automatically by the
- // "setparams" utility. It defines
- // maxcells: the square root of the maximum number of processors
- // problem_size: 12, 64, 102, 162 (for class T, A, B, C)
- // dt_default: default time step for this problem size if no
- // config file
- // niter_default: default number of iterations for this problem size
- //---------------------------------------------------------------------
- #include "npbparams.h"
- #include "RCCE.h"
- //we introduce the next definition to avoid confusing the compiler, which
- //sometimes thinks the variable class is a reserved word
- #define class _class_
- #include "../common/common.h"
- #define AA 0
- #define BB 1
- #define CC 2
- #define BLOCK_SIZE 5
- #define EAST 2000
- #define WEST 3000
- #define NORTH 4000
- #define SOUTH 5000
- #define BOTTOM 6000
- #define TOP 7000
- #define WESTDIR 0
- #define EASTDIR 1
- #define SOUTHDIR 2
- #define NORTHDIR 3
- #define BOTTOMDIR 4
- #define TOPDIR 5
- #define MAX_CELL_DIM ((PROBLEM_SIZE/MAXCELLS)+1)
- #define IMAX MAX_CELL_DIM
- #define JMAX MAX_CELL_DIM
- #define KMAX MAX_CELL_DIM
- #define BUF_SIZE (MAX_CELL_DIM*MAX_CELL_DIM*(MAXCELLS-1)*60+1)
- #define SQR(x) (x)*(x)
- #define grid_points(m) grid_points[m-1]
- #define ce(m,n) ce[(m-1)+5*(n-1)]
- #define cell_coord(m,n) cell_coord[(m-1)+3*(n-1)]
- #define cell_low(m,n) cell_low[(m-1)+3*(n-1)]
- #define cell_high(m,n) cell_high[(m-1)+3*(n-1)]
- #define cell_size(m,n) cell_size[(m-1)+3*(n-1)]
- #define predecessor(m) predecessor[m-1]
- #define slice(m,n) slice[(m-1)+3*(n-1)]
- #define grid_size(m) grid_size[m-1]
- #define successor(m) successor[m-1]
- #define start(m,n) start[(m-1)+3*(n-1)]
- #define end(m,n) end[(m-1)+3*(n-1)]
- #define us(i,j,k,c) us[(i+1)+(IMAX+2)*((j+1)+(JMAX+2)*((k+1)+(KMAX+2)*(c-1)))]
- #define vs(i,j,k,c) vs[(i+1)+(IMAX+2)*((j+1)+(JMAX+2)*((k+1)+(KMAX+2)*(c-1)))]
- #define ws(i,j,k,c) ws[(i+1)+(IMAX+2)*((j+1)+(JMAX+2)*((k+1)+(KMAX+2)*(c-1)))]
- #define qs(i,j,k,c) qs[(i+1)+(IMAX+2)*((j+1)+(JMAX+2)*((k+1)+(KMAX+2)*(c-1)))]
- #define rho_i(i,j,k,c) rho_i[(i+1)+(IMAX+2)*((j+1)+(JMAX+2)*((k+1)+(KMAX+2)*(c-1)))]
- #define square(i,j,k,c) square[(i+1)+(IMAX+2)*((j+1)+(JMAX+2)*((k+1)+(KMAX+2)*(c-1)))]
- #define forcing(m,i,j,k,c) forcing[(m-1)+5*(i+IMAX*(j+JMAX*(k+KMAX*(c-1))))]
- #define u(m,i,j,k,c) u[(m-1)+5*((i+2)+(IMAX+4)*((j+2)+(JMAX+4)*((k+2)+(KMAX+4)*(c-1))))]
- #define rhs(m,i,j,k,c) rhs[(m-1)+5*((i+1)+(IMAX+1)*((j+1)+(JMAX+1)*((k+1)+(KMAX+1)*(c-1))))]
- #define lhsc(m,n,i,j,k,c) lhsc[(m-1)+5*((n-1)+5*((i+1)+(IMAX+1)*((j+1)+(JMAX+1)*((k+1)+(KMAX+1)*(c-1)))))]
- #define backsub_info(m,i,j,c) backsub_info[(m-1)+5*((i)+(IMAX+1)*((j)+(JMAX+1)*(c-1)))]
- #define in_buffer(i) in_buffer[i-1]
- #define out_buffer(i) out_buffer[i-1]
- #define cv(m) cv[m+2]
- #define rhon(m) rhon[m+2]
- #define rhos(m) rhos[m+2]
- #define rhoq(m) rhoq[m+2]
- #define cuf(m) cuf[m+2]
- #define q(m) q[m+2]
- #define ue(m,n) ue[(m+2)+(MAX_CELL_DIM+4)*(n-1)]
- #define buf(m,n) buf[(m+2)+(MAX_CELL_DIM+4)*(n-1)]
- #define sum(m) sum[m-1]
- #define xce_sub(m) xce_sub[m-1]
- #ifdef G_MAIN
- int ncells, grid_points[3];
- double elapsed_time;
- double tx1, tx2, tx3, ty1, ty2, ty3, tz1, tz2, tz3,
- dx1, dx2, dx3, dx4, dx5, dy1, dy2, dy3, dy4,
- dy5, dz1, dz2, dz3, dz4, dz5, dssp, dt,
- ce[5*13], dxmax, dymax, dzmax, xxcon1, xxcon2,
- xxcon3, xxcon4, xxcon5, dx1tx1, dx2tx1, dx3tx1,
- dx4tx1, dx5tx1, yycon1, yycon2, yycon3, yycon4,
- yycon5, dy1ty1, dy2ty1, dy3ty1, dy4ty1, dy5ty1,
- zzcon1, zzcon2, zzcon3, zzcon4, zzcon5, dz1tz1,
- dz2tz1, dz3tz1, dz4tz1, dz5tz1, dnxm1, dnym1,
- dnzm1, c1c2, c1c5, c3c4, c1345, conz1, c1, c2,
- c3, c4, c5, c4dssp, c5dssp, dtdssp, dttx1, bt,
- dttx2, dtty1, dtty2, dttz1, dttz2, c2dttx1,
- c2dtty1, c2dttz1, comz1, comz4, comz5, comz6,
- c3c4tx3, c3c4ty3, c3c4tz3, c2iv, con43, con16;
- int cell_coord[MAXCELLS*3], cell_low[MAXCELLS*3],
- cell_high[MAXCELLS*3], cell_size[MAXCELLS*3],
- predecessor[3], slice[MAXCELLS*3],
- grid_size[3], successor[3],
- start[MAXCELLS*3], end[MAXCELLS*3];
- double
- us [(IMAX+2)*(JMAX+2)*(KMAX+2)*MAXCELLS],
- vs [(IMAX+2)*(JMAX+2)*(KMAX+2)*MAXCELLS],
- ws [(IMAX+2)*(JMAX+2)*(KMAX+2)*MAXCELLS],
- qs [(IMAX+2)*(JMAX+2)*(KMAX+2)*MAXCELLS],
- rho_i [(IMAX+2)*(JMAX+2)*(KMAX+2)*MAXCELLS],
- square [(IMAX+2)*(JMAX+2)*(KMAX+2)*MAXCELLS],
- forcing [5*IMAX*JMAX*KMAX*MAXCELLS],
- u [5*(IMAX+4)*(JMAX+4)*(KMAX+4)*MAXCELLS],
- rhs [5*(IMAX+1)*(JMAX+1)*(KMAX+1)*MAXCELLS],
- lhsc [5*5*(IMAX+1)*(JMAX+1)*(KMAX+1)*MAXCELLS],
- backsub_info [5*(MAX_CELL_DIM+1)*(MAX_CELL_DIM+1)*MAXCELLS],
- in_buffer[BUF_SIZE], out_buffer[BUF_SIZE];
- double cv[MAX_CELL_DIM+4], rhon[MAX_CELL_DIM+4],
- rhos[MAX_CELL_DIM+4], rhoq[MAX_CELL_DIM+4],
- cuf[MAX_CELL_DIM+4], q[MAX_CELL_DIM+4],
- ue[(MAX_CELL_DIM+4)*5], buf[(MAX_CELL_DIM+4)*5];
- int west_size, east_size, bottom_size, top_size,
- north_size, south_size, start_send_west,
- start_send_east, start_send_south, start_send_north,
- start_send_bottom, start_send_top, start_recv_west,
- start_recv_east, start_recv_south, start_recv_north,
- start_recv_bottom, start_recv_top;
- //
- // These are used by btio
- //
- int collbuf_nodes, collbuf_size, iosize,
- idump, record_length,
- idump_sub, rd_interval;
- double sum[NITER_DEFAULT], xce_sub[5];
- long int iseek;
- int send_color[6], recv_color[6];
- #else
- extern int ncells, grid_points[3];
- extern double elapsed_time;
- extern double tx1, tx2, tx3, ty1, ty2, ty3, tz1, tz2, tz3,
- dx1, dx2, dx3, dx4, dx5, dy1, dy2, dy3, dy4,
- dy5, dz1, dz2, dz3, dz4, dz5, dssp, dt,
- ce[5*13], dxmax, dymax, dzmax, xxcon1, xxcon2,
- xxcon3, xxcon4, xxcon5, dx1tx1, dx2tx1, dx3tx1,
- dx4tx1, dx5tx1, yycon1, yycon2, yycon3, yycon4,
- yycon5, dy1ty1, dy2ty1, dy3ty1, dy4ty1, dy5ty1,
- zzcon1, zzcon2, zzcon3, zzcon4, zzcon5, dz1tz1,
- dz2tz1, dz3tz1, dz4tz1, dz5tz1, dnxm1, dnym1,
- dnzm1, c1c2, c1c5, c3c4, c1345, conz1, c1, c2,
- c3, c4, c5, c4dssp, c5dssp, dtdssp, dttx1, bt,
- dttx2, dtty1, dtty2, dttz1, dttz2, c2dttx1,
- c2dtty1, c2dttz1, comz1, comz4, comz5, comz6,
- c3c4tx3, c3c4ty3, c3c4tz3, c2iv, con43, con16;
- extern int cell_coord[MAXCELLS*3], cell_low[MAXCELLS*3],
- cell_high[MAXCELLS*3], cell_size[MAXCELLS*3],
- predecessor[3], slice[MAXCELLS*3],
- grid_size[3], successor[3],
- start[MAXCELLS*3], end[MAXCELLS*3];
- extern double
- us [(IMAX+2)*(JMAX+2)*(KMAX+2)*MAXCELLS],
- vs [(IMAX+2)*(JMAX+2)*(KMAX+2)*MAXCELLS],
- ws [(IMAX+2)*(JMAX+2)*(KMAX+2)*MAXCELLS],
- qs [(IMAX+2)*(JMAX+2)*(KMAX+2)*MAXCELLS],
- rho_i [(IMAX+2)*(JMAX+2)*(KMAX+2)*MAXCELLS],
- square [(IMAX+2)*(JMAX+2)*(KMAX+2)*MAXCELLS],
- forcing [5*IMAX*JMAX*KMAX*MAXCELLS],
- u [5*(IMAX+4)*(JMAX+4)*(KMAX+4)*MAXCELLS],
- rhs [5*(IMAX+1)*(JMAX+1)*(KMAX+1)*MAXCELLS],
- lhsc [5*5*(IMAX+1)*(JMAX+1)*(KMAX+1)*MAXCELLS],
- backsub_info [5*(MAX_CELL_DIM+1)*(MAX_CELL_DIM+1)*MAXCELLS],
- in_buffer[BUF_SIZE], out_buffer[BUF_SIZE];
- extern double cv[MAX_CELL_DIM+4], rhon[MAX_CELL_DIM+4],
- rhos[MAX_CELL_DIM+4], rhoq[MAX_CELL_DIM+4],
- cuf[MAX_CELL_DIM+4], q[MAX_CELL_DIM+4],
- ue[(MAX_CELL_DIM+4)*5], buf[(MAX_CELL_DIM+4)*5];
- extern int west_size, east_size, bottom_size, top_size,
- north_size, south_size, start_send_west,
- start_send_east, start_send_south, start_send_north,
- start_send_bottom, start_send_top, start_recv_west,
- start_recv_east, start_recv_south, start_recv_north,
- start_recv_bottom, start_recv_top;
- //
- // These are used by btio
- //
- extern int collbuf_nodes, collbuf_size, iosize,
- idump, record_length,
- idump_sub, rd_interval;
- extern double sum[NITER_DEFAULT], xce_sub[5];
- extern long int iseek;
- extern int send_color[6], recv_color[6];
- #endif /*G_MAIN*/
- extern void matvec_sub(double ablock[], double avec[], double bvec[]);
- extern void matmul_sub(double ablock[], double bblock[], double cblock[]);
- extern void binvcrhs( double lhs[], double c[], double r[] );
- extern void binvrhs( double lhs[], double r[] );
- extern void exact_solution(double xi,double eta,double zeta,double dtemp[]);
- extern int setup_mpi(int *argc, char ***argv);
- extern void make_set(void);
- extern void set_constants(void);
- extern void lhsinit(void);
- extern void lhsabinit(double lhsa[], double lhsb[], int size);
- extern void initialize(void);
- extern void exact_rhs(void);
- extern void compute_buffer_size(int c);
- extern void adi(void);
- extern void compute_rhs(void);
- extern void copy_faces(void);
- extern void x_solve(void);
- extern void y_solve(void);
- extern void z_solve(void);
- extern void add(void);
- extern void verify(int niter, char *class, int *verified);
- extern void error_norm(double rms[]);
- extern void rhs_norm(double rms[]);
- extern void setup_btio(void);
- extern void output_timestep(void);
- extern void btio_cleanup(void);
- extern void btio_verify(int *verified);
- extern void accumulate_norms(double xce[]);
- extern void clear_timestep(void);
- #endif
- #ifdef _OPENMP
- #pragma omp threadprivate (cell_coord, cell_low, cell_high, cell_size)
- #pragma omp threadprivate (predecessor, slice, grid_size, successor)
- #pragma omp threadprivate (start, end)
- #pragma omp threadprivate (ncells, grid_points, elapsed_time)
- #pragma omp threadprivate (tx1, tx2, tx3, ty1, ty2, ty3, tz1, tz2, tz3, \
- dx1, dx2, dx3, dx4, dx5, dy1, dy2, dy3, dy4, \
- dy5, dz1, dz2, dz3, dz4, dz5, dssp, dt, \
- ce, dxmax, dymax, dzmax, xxcon1, xxcon2, \
- xxcon3, xxcon4, xxcon5, dx1tx1, dx2tx1, dx3tx1, \
- dx4tx1, dx5tx1, yycon1, yycon2, yycon3, yycon4, \
- yycon5, dy1ty1, dy2ty1, dy3ty1, dy4ty1, dy5ty1, \
- zzcon1, zzcon2, zzcon3, zzcon4, zzcon5, dz1tz1, \
- dz2tz1, dz3tz1, dz4tz1, dz5tz1, dnxm1, dnym1, \
- dnzm1, c1c2, c1c5, c3c4, c1345, conz1, c1, c2, \
- c3, c4, c5, c4dssp, c5dssp, dtdssp, dttx1, bt, \
- dttx2, dtty1, dtty2, dttz1, dttz2, c2dttx1, \
- c2dtty1, c2dttz1, comz1, comz4, comz5, comz6, \
- c3c4tx3, c3c4ty3, c3c4tz3, c2iv, con43, con16)
- #pragma omp threadprivate (us, vs, ws, qs, rho_i, square, forcing, \
- u, rhs, lhsc, backsub_info, in_buffer, out_buffer)
- #pragma omp threadprivate (cv, rhon, rhos, rhoq, cuf, q, ue, buf)
- #pragma omp threadprivate (west_size, east_size, bottom_size, top_size, \
- north_size, south_size, start_send_west, \
- start_send_east, start_send_south, start_send_north, \
- start_send_bottom, start_send_top, start_recv_west, \
- start_recv_east, start_recv_south, start_recv_north, \
- start_recv_bottom, start_recv_top, send_color, recv_color)
- //
- // These are used by btio
- //
- #pragma omp threadprivate (collbuf_nodes, collbuf_size, iosize, idump,\
- record_length, idump_sub, rd_interval, \
- sum, xce_sub, iseek)
- #endif
|