// user function inline void drhouupdx_kernel(const double *rhou_new, const double *rho_new, const double *rhoE_new, double *rhou_res) { double fni = rhou_new[OPS_ACC0(0)] * rhou_new[OPS_ACC0(0)] / rho_new[OPS_ACC1(0)]; double p = gam1 * (rhoE_new[OPS_ACC2(0)] - 0.5 * fni); fni = fni + p; double fnim1 = rhou_new[OPS_ACC0(-1)] * rhou_new[OPS_ACC0(-1)] / rho_new[OPS_ACC1(-1)]; p = gam1 * (rhoE_new[OPS_ACC2(-1)] - 0.5 * fnim1); fnim1 = fnim1 + p; double fnim2 = rhou_new[OPS_ACC0(-2)] * rhou_new[OPS_ACC0(-2)] / rho_new[OPS_ACC1(-2)]; p = gam1 * (rhoE_new[OPS_ACC2(-2)] - 0.5 * fnim2); fnim2 = fnim2 + p; double fnip1 = rhou_new[OPS_ACC0(1)] * rhou_new[OPS_ACC0(1)] / rho_new[OPS_ACC1(1)]; p = gam1 * (rhoE_new[OPS_ACC2(1)] - 0.5 * fnip1); fnip1 = fnip1 + p; double fnip2 = rhou_new[OPS_ACC0(2)] * rhou_new[OPS_ACC0(2)] / rho_new[OPS_ACC1(2)]; p = gam1 * (rhoE_new[OPS_ACC2(2)] - 0.5 * fnip2); fnip2 = fnip2 + p; double deriv = (fnim2 - fnip2 + 8.0 * (fnip1 - fnim1)) / (12.00 * dx); rhou_res[OPS_ACC3(0)] = deriv; }
inline void advec_cell_kernel2_zdir( double *pre_vol, double *post_vol, const double *volume, const double *vol_flux_z) { pre_vol[OPS_ACC0(0,0,0)] = volume[OPS_ACC2(0,0,0)] + vol_flux_z[OPS_ACC3(0,0,1)] - vol_flux_z[OPS_ACC3(0,0,0)]; post_vol[OPS_ACC1(0,0,0)] = volume[OPS_ACC2(0,0,0)]; }
// user function inline void flux_calc_kernelx(double *vol_flux_x, const double *xarea, const double *xvel0, const double *xvel1) { vol_flux_x[OPS_ACC0(0, 0)] = 0.25 * dt * (xarea[OPS_ACC1(0, 0)]) * ((xvel0[OPS_ACC2(0, 0)]) + (xvel0[OPS_ACC2(0, 1)]) + (xvel1[OPS_ACC3(0, 0)]) + (xvel1[OPS_ACC3(0, 1)])); }
//user function inline void flux_calc_kernelz( double *vol_flux_z, const double *zarea, const double *zvel0, const double *zvel1) { vol_flux_z[OPS_ACC0(0,0,0)] = 0.125 * dt * (zarea[OPS_ACC1(0,0,0)]) * ( zvel0[OPS_ACC2(0,0,0)] + zvel0[OPS_ACC2(1,0,0)] + zvel0[OPS_ACC2(1,0,0)] + zvel0[OPS_ACC2(1,1,0)] + zvel1[OPS_ACC3(0,0,0)] + zvel1[OPS_ACC3(1,0,0)] + zvel1[OPS_ACC3(0,1,0)] + zvel1[OPS_ACC3(1,1,0)]); }
// user function inline void tea_leaf_common_init_diag_init_kernel(double *Mi, const double *Kx, const double *Ky, const double *rx, const double *ry) { Mi[OPS_ACC0(0, 0)] = 1.0 / (1.0 + (*ry) * (Ky[OPS_ACC2(0, 1)] + Ky[OPS_ACC2(0, 0)]) + (*rx) * (Kx[OPS_ACC1(1, 0)] + Kx[OPS_ACC1(0, 0)])); }
// user function inline void calc_dt_kernel(const double *celldx, const double *celldy, const double *soundspeed, const double *viscosity, const double *density0, const double *xvel0, const double *xarea, const double *volume, const double *yvel0, const double *yarea, double *dt_min, const double *celldz, const double *zvel0, const double *zarea) { double div, ds, dtut, dtvt, dtct, dtwt, dtdivt, cc, dv1, dv2, du1, du2, dw1, dw2; ds = MIN(MIN(celldx[OPS_ACC0(0, 0, 0)], celldy[OPS_ACC1(0, 0, 0)]), celldz[OPS_ACC11(0, 0, 0)]); ds = 1.0 / (ds * ds); cc = soundspeed[OPS_ACC2(0, 0, 0)] * soundspeed[OPS_ACC2(0, 0, 0)]; cc = cc + 2.0 * viscosity[OPS_ACC3(0, 0, 0)] / density0[OPS_ACC4(0, 0, 0)]; dtct = ds * cc; dtct = dtc_safe * 1.0 / MAX(sqrt(dtct), g_small); du1 = (xvel0[OPS_ACC5(0, 0, 0)] + xvel0[OPS_ACC5(0, 1, 0)] + xvel0[OPS_ACC5(0, 0, 1)] + xvel0[OPS_ACC5(0, 1, 1)]) * xarea[OPS_ACC6(0, 0, 0)]; du2 = (xvel0[OPS_ACC5(1, 0, 0)] + xvel0[OPS_ACC5(1, 1, 0)] + xvel0[OPS_ACC5(1, 0, 1)] + xvel0[OPS_ACC5(1, 1, 1)]) * xarea[OPS_ACC6(0, 0, 0)]; dtut = dtu_safe * 4.0 * volume[OPS_ACC7(0, 0, 0)] / MAX(MAX(fabs(du1), fabs(du2)), 1.0e-5 * volume[OPS_ACC7(0, 0, 0)]); dv1 = (yvel0[OPS_ACC8(0, 0, 0)] + yvel0[OPS_ACC8(1, 0, 0)] + yvel0[OPS_ACC8(0, 0, 1)] + yvel0[OPS_ACC8(1, 0, 1)]) * yarea[OPS_ACC9(0, 0, 0)]; dv2 = (yvel0[OPS_ACC8(0, 1, 0)] + yvel0[OPS_ACC8(1, 1, 0)] + yvel0[OPS_ACC8(0, 1, 1)] + yvel0[OPS_ACC8(1, 1, 1)]) * yarea[OPS_ACC9(0, 0, 0)]; dtvt = dtv_safe * 4.0 * volume[OPS_ACC7(0, 0, 0)] / MAX(MAX(fabs(dv1), fabs(dv2)), 1.0e-5 * volume[OPS_ACC7(0, 0, 0)]); dw1 = (zvel0[OPS_ACC12(0, 0, 0)] + zvel0[OPS_ACC12(0, 1, 0)] + zvel0[OPS_ACC12(1, 0, 0)] + zvel0[OPS_ACC12(1, 1, 0)]) * zarea[OPS_ACC13(0, 0, 0)]; dw2 = (zvel0[OPS_ACC12(0, 0, 1)] + zvel0[OPS_ACC12(0, 1, 1)] + zvel0[OPS_ACC12(1, 0, 1)] + zvel0[OPS_ACC12(1, 1, 1)]) * zarea[OPS_ACC13(0, 0, 0)]; dtwt = dtw_safe * 4.0 * volume[OPS_ACC7(0, 0, 0)] / MAX(MAX(fabs(dw1), fabs(dw2)), 1.0e-5 * volume[OPS_ACC7(0, 0, 0)]); div = du2 - du1 + dv2 - dv1 + dw2 - dw1; dtdivt = dtdiv_safe * 4.0 * (volume[OPS_ACC7(0, 0, 0)]) / MAX(volume[OPS_ACC7(0, 0, 0)] * 1.0e-05, fabs(div)); dt_min[OPS_ACC10(0, 0, 0)] = MIN(MIN(MIN(dtct, dtut), MIN(dtvt, dtdivt)), dtwt); }
// user function inline void flux_calc_kernely(double *vol_flux_y, const double *yarea, const double *yvel0, const double *yvel1) { vol_flux_y[OPS_ACC0(0, 0, 0)] = 0.125 * dt * (yarea[OPS_ACC1(0, 0, 0)]) * (yvel0[OPS_ACC2(0, 0, 0)] + yvel0[OPS_ACC2(1, 0, 0)] + yvel0[OPS_ACC2(0, 0, 1)] + yvel0[OPS_ACC2(1, 0, 1)] + yvel1[OPS_ACC3(0, 0, 0)] + yvel1[OPS_ACC3(1, 0, 0)] + yvel1[OPS_ACC3(0, 0, 1)] + yvel1[OPS_ACC3(1, 0, 1)]); }
// user function inline void calvar_kernel(const double *rho_new, const double *rhou_new, const double *rhoE_new, double *workarray2, double *workarray3) { double p, rhoi, u; rhoi = 1 / rho_new[OPS_ACC0(0)]; u = rhou_new[OPS_ACC1(0)] * rhoi; p = gam1 * (rhoE_new[OPS_ACC2(0)] - 0.5 * rho_new[OPS_ACC0(0)] * u * u); workarray2[OPS_ACC3(0)] = p + rhou_new[OPS_ACC1(0)] * u; workarray3[OPS_ACC4(0)] = (p + rhoE_new[OPS_ACC2(0)]) * u; }
inline void advec_mom_kernel_post_pre_advec_y( double *node_mass_post, const double *post_vol, const double *density1, double *node_mass_pre, const double *node_flux) { node_mass_post[OPS_ACC0(0,0)] = 0.25 * ( density1[OPS_ACC2(0,-1)] * post_vol[OPS_ACC1(0,-1)] + density1[OPS_ACC2(0,0)] * post_vol[OPS_ACC1(0,0)] + density1[OPS_ACC2(-1,-1)] * post_vol[OPS_ACC1(-1,-1)] + density1[OPS_ACC2(-1,0)] * post_vol[OPS_ACC1(-1,0)] ); node_mass_pre[OPS_ACC3(0,0)] = node_mass_post[OPS_ACC0(0,0)] - node_flux[OPS_ACC4(0,-1)] + node_flux[OPS_ACC4(0,0)]; }
inline void update_halo_kernel1_fr2(double *density0, double *density1, double *energy0, double *energy1, double *pressure, double *viscosity, double *soundspeed , const int* fields) { if(fields[FIELD_DENSITY0] == 1) density0[OPS_ACC0(0,0,0)] = density0[OPS_ACC0(0,0,-3)]; if(fields[FIELD_DENSITY1] == 1) density1[OPS_ACC1(0,0,0)] = density1[OPS_ACC1(0,0,-3)]; if(fields[FIELD_ENERGY0] == 1) energy0[OPS_ACC2(0,0,0)] = energy0[OPS_ACC2(0,0,-3)]; if(fields[FIELD_ENERGY1] == 1) energy1[OPS_ACC3(0,0,0)] = energy1[OPS_ACC3(0,0,-3)]; if(fields[FIELD_PRESSURE] == 1) pressure[OPS_ACC4(0,0,0)] = pressure[OPS_ACC4(0,0,-3)]; if(fields[FIELD_VISCOSITY] == 1) viscosity[OPS_ACC5(0,0,0)] = viscosity[OPS_ACC5(0,0,-3)]; if(fields[FIELD_SOUNDSPEED] == 1) soundspeed[OPS_ACC6(0,0,0)] = soundspeed[OPS_ACC6(0,0,-3)]; }
// user function inline void tea_leaf_cg_calc_w_reduce_kernel(double *w, const double *Kx, const double *Ky, const double *p, const double *rx, const double *ry, double *pw) { w[OPS_ACC0(0, 0)] = (1.0 + (*ry) * (Ky[OPS_ACC2(0, 1)] + Ky[OPS_ACC2(0, 0)]) + (*rx) * (Kx[OPS_ACC1(1, 0)] + Kx[OPS_ACC1(0, 0)])) * p[OPS_ACC3(0, 0)] - (*ry) * (Ky[OPS_ACC2(0, 1)] * p[OPS_ACC3(0, 1)] + Ky[OPS_ACC2(0, 0)] * p[OPS_ACC3(0, -1)]) - (*rx) * (Kx[OPS_ACC1(1, 0)] * p[OPS_ACC3(1, 0)] + Kx[OPS_ACC1(0, 0)] * p[OPS_ACC3(-1, 0)]); *pw = *pw + w[OPS_ACC0(0, 0)] * p[OPS_ACC3(0, 0)]; }
// user function inline void tea_leaf_common_init_Kx_Ky_kernel(double *Kx, double *Ky, const double *w) { Kx[OPS_ACC0(0, 0)] = (w[OPS_ACC2(-1, 0)] + w[OPS_ACC2(0, 0)]) / (2.0 * w[OPS_ACC2(-1, 0)] * w[OPS_ACC2(0, 0)]); Ky[OPS_ACC1(0, 0)] = (w[OPS_ACC2(0, -1)] + w[OPS_ACC2(0, 0)]) / (2.0 * w[OPS_ACC2(0, -1)] * w[OPS_ACC2(0, 0)]); }
// user function inline void calc_dt_kernel_print(const double *xvel0, const double *yvel0, const double *zvel0, const double *density0, const double *energy0, const double *pressure, const double *soundspeed, double *output) { output[0] = xvel0[OPS_ACC0(0, 0, 0)]; output[1] = yvel0[OPS_ACC1(0, 0, 0)]; output[2] = zvel0[OPS_ACC2(0, 0, 0)]; output[3] = xvel0[OPS_ACC0(1, 0, 0)]; output[4] = yvel0[OPS_ACC1(1, 0, 0)]; output[5] = zvel0[OPS_ACC2(0, 0, 0)]; output[6] = xvel0[OPS_ACC0(1, 1, 0)]; output[7] = yvel0[OPS_ACC1(1, 1, 0)]; output[8] = zvel0[OPS_ACC2(0, 0, 0)]; output[9] = xvel0[OPS_ACC0(0, 1, 0)]; output[10] = yvel0[OPS_ACC1(0, 1, 0)]; output[11] = zvel0[OPS_ACC2(0, 0, 0)]; output[12] = xvel0[OPS_ACC0(0, 0, 1)]; output[13] = yvel0[OPS_ACC1(0, 0, 1)]; output[14] = zvel0[OPS_ACC2(0, 0, 1)]; output[15] = xvel0[OPS_ACC0(1, 0, 1)]; output[16] = yvel0[OPS_ACC1(1, 0, 1)]; output[17] = zvel0[OPS_ACC2(0, 0, 1)]; output[18] = xvel0[OPS_ACC0(1, 1, 1)]; output[19] = yvel0[OPS_ACC1(1, 1, 1)]; output[20] = zvel0[OPS_ACC2(0, 0, 1)]; output[21] = xvel0[OPS_ACC0(0, 1, 1)]; output[22] = yvel0[OPS_ACC1(0, 1, 1)]; output[23] = zvel0[OPS_ACC2(0, 0, 1)]; output[24] = density0[OPS_ACC3(0, 0, 0)]; output[25] = energy0[OPS_ACC4(0, 0, 0)]; output[26] = pressure[OPS_ACC5(0, 0, 0)]; output[27] = soundspeed[OPS_ACC6(0, 0, 0)]; }
inline void update_halo_kernel1_r2(double *density0, double *energy0, double *energy1, double *u, double *p, double *sd, const int *fields) { if (fields[FIELD_DENSITY] == 1) density0[OPS_ACC0(0, 0)] = density0[OPS_ACC0(-3, 0)]; if (fields[FIELD_ENERGY0] == 1) energy0[OPS_ACC1(0, 0)] = energy0[OPS_ACC1(-3, 0)]; if (fields[FIELD_ENERGY1] == 1) energy1[OPS_ACC2(0, 0)] = energy1[OPS_ACC2(-3, 0)]; if (fields[FIELD_U] == 1) u[OPS_ACC3(0, 0)] = u[OPS_ACC3(-3, 0)]; if (fields[FIELD_P] == 1) p[OPS_ACC4(0, 0)] = p[OPS_ACC4(-3, 0)]; if (fields[FIELD_SD] == 1) sd[OPS_ACC5(0, 0)] = sd[OPS_ACC5(-3, 0)]; }
//user function inline void preproc_kernel(const double *u, double *du, double *ax, double *bx, double *cx, double *ay, double *by, double *cy, double *az, double *bz, double *cz, int *idx){ double a, b, c, d; if(idx[0]==0 || idx[0]==nx-1 || idx[1]==0 || idx[1]==ny-1 || idx[2]==0 || idx[2]==nz-1) { d = 0.0f; a = 0.0f; b = 1.0f; c = 0.0f; } else { d = lambda*( u[OPS_ACC0(-1,0,0)] + u[OPS_ACC0(1,0,0)] + u[OPS_ACC0(0,-1,0)] + u[OPS_ACC0(0,1,0)] + u[OPS_ACC0(0,0,-1)] + u[OPS_ACC0(0,0,1)] - 6.0f*u[OPS_ACC0(0,0,0)]); a = -0.5f * lambda; b = 1.0f + lambda; c = -0.5f * lambda; } du[OPS_ACC1(0,0,0)] = d; ax[OPS_ACC2(0,0,0)] = a; bx[OPS_ACC3(0,0,0)] = b; cx[OPS_ACC4(0,0,0)] = c; ay[OPS_ACC5(0,0,0)] = a; by[OPS_ACC6(0,0,0)] = b; cy[OPS_ACC7(0,0,0)] = c; az[OPS_ACC8(0,0,0)] = a; bz[OPS_ACC9(0,0,0)] = b; cz[OPS_ACC10(0,0,0)] = c; }
// user function inline void save_kernel(double *rho_old, double *rhou_old, double *rhoE_old, const double *rho_new, const double *rhou_new, const double *rhoE_new) { rho_old[OPS_ACC0(0)] = rho_new[OPS_ACC3(0)]; rhou_old[OPS_ACC1(0)] = rhou_new[OPS_ACC4(0)]; rhoE_old[OPS_ACC2(0)] = rhoE_new[OPS_ACC5(0)]; }
// user function inline void field_summary_kernel(const double *volume, const double *density0, const double *energy0, const double *pressure, const double *xvel0, const double *yvel0, double *vol, double *mass, double *ie, double *ke, double *press) { double vsqrd, cell_vol, cell_mass; vsqrd = 0.0; vsqrd = vsqrd + 0.25 * (xvel0[OPS_ACC4(0, 0)] * xvel0[OPS_ACC4(0, 0)] + yvel0[OPS_ACC5(0, 0)] * yvel0[OPS_ACC5(0, 0)]); vsqrd = vsqrd + 0.25 * (xvel0[OPS_ACC4(1, 0)] * xvel0[OPS_ACC4(1, 0)] + yvel0[OPS_ACC5(1, 0)] * yvel0[OPS_ACC5(1, 0)]); vsqrd = vsqrd + 0.25 * (xvel0[OPS_ACC4(0, 1)] * xvel0[OPS_ACC4(0, 1)] + yvel0[OPS_ACC5(0, 1)] * yvel0[OPS_ACC5(0, 1)]); vsqrd = vsqrd + 0.25 * (xvel0[OPS_ACC4(1, 1)] * xvel0[OPS_ACC4(1, 1)] + yvel0[OPS_ACC5(1, 1)] * yvel0[OPS_ACC5(1, 1)]); cell_vol = volume[OPS_ACC0(0, 0)]; cell_mass = cell_vol * density0[OPS_ACC1(0, 0)]; *vol = *vol + cell_vol; *mass = *mass + cell_mass; *ie = *ie + cell_mass * energy0[OPS_ACC2(0, 0)]; *ke = *ke + cell_mass * 0.5 * vsqrd; *press = *press + cell_vol * pressure[OPS_ACC3(0, 0)]; }
// user function inline void ideal_gas_kernel(const double *density, const double *energy, double *pressure, double *soundspeed) { double sound_speed_squared, v, pressurebyenergy, pressurebyvolume; v = 1.0 / density[OPS_ACC0(0, 0, 0)]; pressure[OPS_ACC2(0, 0, 0)] = (1.4 - 1.0) * density[OPS_ACC0(0, 0, 0)] * energy[OPS_ACC1(0, 0, 0)]; pressurebyenergy = (1.4 - 1.0) * density[OPS_ACC0(0, 0, 0)]; pressurebyvolume = -1.0 * density[OPS_ACC0(0, 0, 0)] * pressure[OPS_ACC2(0, 0, 0)]; sound_speed_squared = v * v * (pressure[OPS_ACC2(0, 0, 0)] * pressurebyenergy - pressurebyvolume); soundspeed[OPS_ACC3(0, 0, 0)] = sqrt(sound_speed_squared); }
// user function inline void calc_dt_kernel(const double *celldx, const double *celldy, const double *soundspeed, const double *viscosity, const double *density0, const double *xvel0, const double *xarea, const double *volume, const double *yvel0, const double *yarea, double *dt_min) { double div, dsx, dsy, dtut, dtvt, dtct, dtdivt, cc, dv1, dv2; dsx = celldx[OPS_ACC0(0, 0)]; dsy = celldy[OPS_ACC1(0, 0)]; cc = soundspeed[OPS_ACC2(0, 0)] * soundspeed[OPS_ACC2(0, 0)]; cc = cc + 2.0 * viscosity[OPS_ACC3(0, 0)] / density0[OPS_ACC4(0, 0)]; cc = MAX(sqrt(cc), g_small); dtct = dtc_safe * MIN(dsx, dsy) / cc; div = 0.0; dv1 = (xvel0[OPS_ACC5(0, 0)] + xvel0[OPS_ACC5(0, 1)]) * xarea[OPS_ACC6(0, 0)]; dv2 = (xvel0[OPS_ACC5(1, 0)] + xvel0[OPS_ACC5(1, 1)]) * xarea[OPS_ACC6(1, 0)]; div = div + dv2 - dv1; dtut = dtu_safe * 2.0 * volume[OPS_ACC7(0, 0)] / MAX(MAX(fabs(dv1), fabs(dv2)), g_small * volume[OPS_ACC7(0, 0)]); dv1 = (yvel0[OPS_ACC8(0, 0)] + yvel0[OPS_ACC8(1, 0)]) * yarea[OPS_ACC9(0, 0)]; dv2 = (yvel0[OPS_ACC8(0, 1)] + yvel0[OPS_ACC8(1, 1)]) * yarea[OPS_ACC9(0, 1)]; div = div + dv2 - dv1; dtvt = dtv_safe * 2.0 * volume[OPS_ACC7(0, 0)] / MAX(MAX(fabs(dv1), fabs(dv2)), g_small * volume[OPS_ACC7(0, 0)]); div = div / (2.0 * volume[OPS_ACC7(0, 0)]); if (div < -g_small) dtdivt = dtdiv_safe * (-1.0 / div); else dtdivt = g_big; dt_min[OPS_ACC10(0, 0)] = MIN(MIN(dtct, dtut), MIN(dtvt, dtdivt)); }
inline void advec_mom_kernel_x1( double *pre_vol, double *post_vol, const double *volume, const double *vol_flux_x, const double *vol_flux_y, const double *vol_flux_z) { post_vol[OPS_ACC1(0,0,0)] = volume[OPS_ACC2(0,0,0)] + vol_flux_y[OPS_ACC4(0,1,0)] - vol_flux_y[OPS_ACC4(0,0,0)] + vol_flux_z[OPS_ACC5(0,0,1)] - vol_flux_z[OPS_ACC5(0,0,0)]; pre_vol[OPS_ACC0(0,0,0)] = post_vol[OPS_ACC1(0,0,0)] + vol_flux_x[OPS_ACC3(1,0,0)] - vol_flux_x[OPS_ACC3(0,0,0)]; }
// user function inline void advec_mom_kernel2_x(double *vel1, const double *node_mass_post, const double *node_mass_pre, const double *mom_flux) { vel1[OPS_ACC0(0, 0, 0)] = (vel1[OPS_ACC0(0, 0, 0)] * node_mass_pre[OPS_ACC2(0, 0, 0)] + mom_flux[OPS_ACC3(-1, 0, 0)] - mom_flux[OPS_ACC3(0, 0, 0)]) / node_mass_post[OPS_ACC1(0, 0, 0)]; }
inline void advec_mom_kernel_y2(double *pre_vol, double *post_vol, const double *volume, const double *vol_flux_x) { post_vol[OPS_ACC1(0, 0)] = volume[OPS_ACC2(0, 0)]; pre_vol[OPS_ACC0(0, 0)] = post_vol[OPS_ACC1(0, 0)] + vol_flux_x[OPS_ACC3(1, 0)] - vol_flux_x[OPS_ACC3(0, 0)]; }
// user function inline void initialise_chunk_kernel_celly(const double *vertexy, double *celly, double *celldy) { double d_y; d_y = (grid.ymax - grid.ymin) / (double)grid.y_cells; celly[OPS_ACC1(0, 0)] = 0.5 * (vertexy[OPS_ACC0(0, 0)] + vertexy[OPS_ACC0(0, 1)]); celldy[OPS_ACC2(0, 0)] = d_y; }
// user function inline void initialise_chunk_kernel_y(double *vertexy, const int *yy, double *vertexdy) { int y_min = field.y_min - 2; double min_y, d_y; d_y = (grid.ymax - grid.ymin) / (double)grid.y_cells; min_y = grid.ymin + d_y * field.bottom; vertexy[OPS_ACC0(0, 0, 0)] = min_y + d_y * (yy[OPS_ACC1(0, 0, 0)] - y_min); vertexdy[OPS_ACC2(0, 0, 0)] = (double)d_y; }
// user function inline void checkop_kernel(const double *rho_new, const double *x, const double *rhoin, double *pre, double *post, int *num) { double diff; diff = (rho_new[OPS_ACC0(0)] - rhoin[OPS_ACC2(0)]); if (fabs(diff) < 0.01 && x[OPS_ACC1(0)] > -4.1) { *post = *post + diff * diff; *num = *num + 1; } else *pre = *pre + (rho_new[OPS_ACC0(0)] - rhol) * (rho_new[OPS_ACC0(0)] - rhol); }
// user function inline void advec_cell_kernel1_ydir(double *pre_vol, double *post_vol, const double *volume, const double *vol_flux_x, const double *vol_flux_y) { pre_vol[OPS_ACC0(0, 0)] = volume[OPS_ACC2(0, 0)] + (vol_flux_y[OPS_ACC4(0, 1)] - vol_flux_y[OPS_ACC4(0, 0)] + vol_flux_x[OPS_ACC3(1, 0)] - vol_flux_x[OPS_ACC3(0, 0)]); post_vol[OPS_ACC1(0, 0)] = pre_vol[OPS_ACC0(0, 0)] - (vol_flux_y[OPS_ACC4(0, 1)] - vol_flux_y[OPS_ACC4(0, 0)]); }
// user function inline void initialise_chunk_kernel_volume(double *volume, const double *celldy, double *xarea, const double *celldx, double *yarea) { double d_x, d_y; d_x = (grid.xmax - grid.xmin) / (double)grid.x_cells; d_y = (grid.ymax - grid.ymin) / (double)grid.y_cells; volume[OPS_ACC0(0, 0)] = d_x * d_y; xarea[OPS_ACC2(0, 0)] = celldy[OPS_ACC1(0, 0)]; yarea[OPS_ACC4(0, 0)] = celldx[OPS_ACC3(0, 0)]; }
// user function inline void advec_cell_kernel4_zdir(double *density1, double *energy1, const double *mass_flux_z, const double *vol_flux_z, const double *pre_vol, const double *post_vol, double *pre_mass, double *post_mass, double *advec_vol, double *post_ener, const double *ener_flux) { pre_mass[OPS_ACC6(0, 0, 0)] = density1[OPS_ACC0(0, 0, 0)] * pre_vol[OPS_ACC4(0, 0, 0)]; post_mass[OPS_ACC7(0, 0, 0)] = pre_mass[OPS_ACC6(0, 0, 0)] + mass_flux_z[OPS_ACC2(0, 0, 0)] - mass_flux_z[OPS_ACC2(0, 0, 1)]; post_ener[OPS_ACC9(0, 0, 0)] = (energy1[OPS_ACC1(0, 0, 0)] * pre_mass[OPS_ACC6(0, 0, 0)] + ener_flux[OPS_ACC10(0, 0, 0)] - ener_flux[OPS_ACC10(0, 0, 1)]) / post_mass[OPS_ACC7(0, 0, 0)]; advec_vol[OPS_ACC8(0, 0, 0)] = pre_vol[OPS_ACC4(0, 0, 0)] + vol_flux_z[OPS_ACC3(0, 0, 0)] - vol_flux_z[OPS_ACC3(0, 0, 1)]; density1[OPS_ACC0(0, 0, 0)] = post_mass[OPS_ACC7(0, 0, 0)] / advec_vol[OPS_ACC8(0, 0, 0)]; energy1[OPS_ACC1(0, 0, 0)] = post_ener[OPS_ACC9(0, 0, 0)]; }
// user function inline void Riemann_kernel(const double *rho_new, const double *rhou_new, const double *rhoE_new, double *alam, double *r, double *al) { double rl, rr, rho, u, hl, hr, h, Vsq, csq, c; double dw1, dw2, dw3, delpc2, rdeluc; rl = sqrt(rho_new[OPS_ACC0(0)]); rr = sqrt(rho_new[OPS_ACC0(1)]); rho = rl + rr; u = ((rhou_new[OPS_ACC1(0)] / rl) + (rhou_new[OPS_ACC1(1)] / rr)) / rho; double fni = rhou_new[OPS_ACC1(0)] * rhou_new[OPS_ACC1(0)] / rho_new[OPS_ACC0(0)]; double p = gam1 * (rhoE_new[OPS_ACC2(0)] - 0.5 * fni); hl = (rhoE_new[OPS_ACC2(0)] + p) / rl; fni = rhou_new[OPS_ACC1(1)] * rhou_new[OPS_ACC1(1)] / rho_new[OPS_ACC0(1)]; p = gam1 * (rhoE_new[OPS_ACC2(1)] - 0.5 * fni); hr = (rhoE_new[OPS_ACC2(1)] + p) / rr; h = (hl + hr) / rho; Vsq = u * u; csq = gam1 * (h - 0.5 * Vsq); c = sqrt(csq); alam[OPS_ACC_MD3(0, 0)] = u - c; alam[OPS_ACC_MD3(1, 0)] = u; alam[OPS_ACC_MD3(2, 0)] = u + c; r[OPS_ACC_MD4(0, 0)] = 1.0; r[OPS_ACC_MD4(1, 0)] = 1.0; r[OPS_ACC_MD4(2, 0)] = 1.0; r[OPS_ACC_MD4(3, 0)] = u - c; r[OPS_ACC_MD4(4, 0)] = u; r[OPS_ACC_MD4(5, 0)] = u + c; r[OPS_ACC_MD4(6, 0)] = h - u * c; r[OPS_ACC_MD4(7, 0)] = 0.5 * Vsq; r[OPS_ACC_MD4(8, 0)] = h + u * c; for (int m = 0; m < 9; m++) r[OPS_ACC_MD4(m, 0)] = r[OPS_ACC_MD4(m, 0)] / csq; dw1 = rho_new[OPS_ACC0(1)] - rho_new[OPS_ACC0(0)]; dw2 = rhou_new[OPS_ACC1(1)] - rhou_new[OPS_ACC1(0)]; dw3 = rhoE_new[OPS_ACC2(1)] - rhoE_new[OPS_ACC2(0)]; delpc2 = gam1 * (dw3 + 0.50 * Vsq * dw1 - u * dw2) / csq; rdeluc = (dw2 - u * dw1) / c; al[OPS_ACC_MD5(0, 0)] = 0.5 * (delpc2 - rdeluc); al[OPS_ACC_MD5(1, 0)] = dw1 - delpc2; al[OPS_ACC_MD5(2, 0)] = 0.5 * (delpc2 + rdeluc); for (int m = 0; m < 3; m++) al[OPS_ACC_MD5(m, 0)] = al[OPS_ACC_MD5(m, 0)] * csq; }
// user function inline void calc_dt_kernel_print(const double *xvel0, const double *yvel0, const double *density0, const double *energy0, const double *pressure, const double *soundspeed, double *output) { output[0] = xvel0[OPS_ACC0(1, 0)]; output[1] = yvel0[OPS_ACC1(1, 0)]; output[2] = xvel0[OPS_ACC0(-1, 0)]; output[3] = yvel0[OPS_ACC1(-1, 0)]; output[4] = xvel0[OPS_ACC0(0, 1)]; output[5] = yvel0[OPS_ACC1(0, 1)]; output[6] = xvel0[OPS_ACC0(0, -1)]; output[7] = yvel0[OPS_ACC1(0, -1)]; output[8] = density0[OPS_ACC2(0, 0)]; output[9] = energy0[OPS_ACC3(0, 0)]; output[10] = pressure[OPS_ACC4(0, 0)]; output[11] = soundspeed[OPS_ACC5(0, 0)]; }