blob: c8f18a5691fce1a849405b737ceace05050b87a9 [file] [log] [blame]
/* { 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;
}
}
}
}