void get_force_grape(int ni, double (*xi)[3], int nj, double (*xj)[3], double *mj, double eps, double (*a)[3], double *p) { int offs, offr, nii, c, c0, i, np, nc, k; if (JMEMSIZE < nj) { fprintf(stderr, "nj: %d exceeded GRAPE-5 JMEMSIZE (%d)\n", nj, JMEMSIZE); exit(1); } if (!grape_is_opened()) { grape_open(); } g5_set_mj(0, nj, mj); g5_set_xj(0, nj, xj); g5_set_n(nj); g5_set_eps_to_all(eps); g5_calculate_force_on_x(xi, a, p, ni); for (i = 0; i < ni; i++) { p[i] *= -1; } if (vtc_get_cputime()-grape_holdtime() > 150.0) { grape_close(); } i = 10; fprintf(stderr, "!!! nj: %d a: %f %f %f p: %f\n", nj, a[i][0], a[i][1], a[i][2], p[i]); }
void FNAME(g5_set_eps_to_all)(double *eps) { g5_set_eps_to_all(*eps); }
void get_force_grape(int ni, double (*xi)[3], int nj, double (*xj)[3], double *mj, double eps, double (*a)[3], double *p) { int offs, offr, nii, c, c0, i, np, nc, k; if (JMEMSIZE < nj) { fprintf(stderr, "nj: %d exceeded GRAPE-5 JMEMSIZE (%d)\n", nj, JMEMSIZE); exit(1); } if (!grape_is_opened()) { grape_open(); } np = g5_get_number_of_pipelines_per_board(); nc = g5_get_number_of_boards(); c0 = g5_get_firstcluster(); // g5_set_range(-100.0, 100.0, 1.0/4096); g5_set_mj(0, nj, mj); g5_set_xj(0, nj, xj); g5_set_n(nj); g5_set_eps_to_all(eps); offs = 0; for (c = c0; c < nc+c0 && offs < ni; c++) { nii = np; if (offs+nii > ni) { nii = ni - offs; } g5_set_xiMC(c, nii, (double (*)[3])xi[offs]); g5_runMC(c); offs += nii; } for (offr = 0; offr < ni;) { for (c = c0; c < nc+c0; c++) { if (offr < ni) { nii = np; if (offr+nii > ni) { nii = ni - offr; } g5_get_forceMC(c, nii, (double (*)[3])a[offr], &p[offr]); offr += nii; } if (offs < ni) { nii = np; if (offs+nii > ni) { nii = ni - offs; } g5_set_xiMC(c, nii, (double (*)[3])xi[offs]); g5_runMC(c); offs += nii; } } } for (i = 0; i < ni; i++) { p[i] *= -1; } if (vtc_get_cputime()-grape_holdtime() > 150.0) { grape_close(); } }