| /* { dg-do compile { target { powerpc*-*-* } } } */ |
| /* { dg-skip-if "" { powerpc*-*-darwin* } } */ |
| /* { dg-require-effective-target powerpc_vsx_ok } */ |
| /* { dg-options "-O2 -ffast-math -mdejagnu-cpu=power7" } */ |
| |
| #include <math.h> |
| |
| typedef struct |
| { |
| double x, y, z; |
| double q, a, b, mass; |
| double vx, vy, vz, vw, dx, dy, dz; |
| } |
| ATOM; |
| int |
| u_f_nonbon (lambda) |
| double lambda; |
| { |
| double r, r0, xt, yt, zt; |
| double lcutoff, cutoff, get_f_variable (); |
| double rdebye; |
| int inbond, inangle, i; |
| ATOM *a1, *a2, *bonded[10], *angled[10]; |
| ATOM *(*use)[]; |
| int uselist (), nuse, used; |
| ATOM *cp, *bp; |
| int a_number (), inbuffer; |
| double (*buffer)[], xx, yy, zz, k; |
| int invector, atomsused, ii, jj, imax; |
| double (*vector)[]; |
| ATOM *(*atms)[]; |
| double dielectric; |
| rdebye = cutoff / 2.; |
| dielectric = get_f_variable ("dielec"); |
| imax = a_number (); |
| for (jj = 1; jj < imax; jj++, a1 = bp) |
| { |
| if ((*use)[used] == a1) |
| { |
| used += 1; |
| } |
| while ((*use)[used] != a1) |
| { |
| for (i = 0; i < inbuffer; i++) |
| { |
| } |
| xx = a1->x + lambda * a1->dx; |
| yy = a1->y + lambda * a1->dy; |
| zz = a1->z + lambda * a1->dz; |
| for (i = 0; i < inbuffer; i++) |
| { |
| xt = xx - (*buffer)[3 * i]; |
| yt = yy - (*buffer)[3 * i + 1]; |
| zt = zz - (*buffer)[3 * i + 2]; |
| r = xt * xt + yt * yt + zt * zt; |
| r0 = sqrt (r); |
| xt = xt / r0; |
| zt = zt / r0; |
| k = |
| -a1->q * (*atms)[i]->q * dielectric * exp (-r0 / rdebye) * |
| (1. / (rdebye * r0) + 1. / r); |
| k += a1->a * (*atms)[i]->a / r / r0 * 6; |
| k -= a1->b * (*atms)[i]->b / r / r / r0 * 12; |
| (*vector)[3 * i] = xt * k; |
| (*vector)[3 * i + 1] = yt * k; |
| (*vector)[3 * i + 2] = zt * k; |
| } |
| } |
| } |
| } |