15 #include <cuda_runtime.h> 19 #include <hip/hip_runtime.h> 47 r1 = r0 + 0.5*r0*(1.0 - x*r0*r0);
52 r2 = r1 + 0.5*r1*(1.0 - x*r1*r1);
61 rx = rx + rx*(1.0 - x*rx);
62 rx = rx + rx*(1.0 - x*rx);
68 #define namd_rsqrt(x) (1.0 / sqrt (x)) 69 #define namd_reciprocal(x) (1.0 / x) 83 :
x(newx),
y(newy),
z(newz) { ; }
86 :
x(newv),
y(newv),
z(newv) { ; }
91 #if defined(NAMD_CUDA) || defined(NAMD_HIP) 94 :
x(vec.
x),
y(vec.
y),
z(vec.
z) { ; }
106 #if defined(NAMD_CUDA) || defined(NAMD_HIP) 119 :(
NAMD_die(
"Vector reference out of bounds."),
x);
161 return v1.
x == v2.
x && v1.
y == v2.
y && v1.
z == v2.
z;
165 return v1.
x != v2.
x || v1.
y != v2.
y || v1.
z != v2.
z;
184 return v1.
x * v2.
x + v1.
y * v2.
y + v1.
z * v2.
z;
225 v1.
x*v2.
y-v2.
x*v1.
y );
233 k*(v2.
x*v1.
z-v1.
x*v2.
z),
234 k*(v1.
x*v2.
y-v2.
x*v1.
y) );
240 k*(v2.
x*v1.
z-v1.
x*v2.
z),
241 k*(v1.
x*v2.
y-v2.
x*v1.
y) );
256 return x*v2.
x +
y*v2.
y +
z*v2.
z;
265 int i=sscanf(s,
"%lf%99[ \t,]%lf%99[ \t,]%lf%99s",
266 a, tmp, a+1, tmp, a+2, tmp);
267 if (i != 5)
return FALSE;
279 else if (*t !=
' ' && *t !=
'\t') {
283 if (i == 0 || i == 2) {
284 x = a[0];
y = a[1];
z = a[2];
305 :
Vector (newx, newy, newz) {
pad = 0.0; }
317 #if defined(NAMD_CUDA) || defined(NAMD_HIP) 320 return make_float3(a.x - b.x, a.y - b.y, a.z - b.z);
328 return make_float3(a.x + b.x, a.y + b.y, a.z + b.z);
340 return make_float3((
float) a.x, (
float) a.y, (
float) a.z);
344 return make_double3((
double) a.x, (
double) a.y, (
double) a.z);
348 return make_double3((
double) a.x, (
double) a.y, (
double) a.z);
355 #ifdef TEST_VECTOR_CLASS 362 std::cout << v1 <<
" " << v2 <<
" " << v3 <<
" " << v4 <<
'\n';
363 std::cout << v1*v2 <<
" " << v3-v1-2*v2 <<
" "<< v2 * v3 <<
" "<< v3*v2 <<
'\n';
365 std::cout << v4 <<
" " << v3*5.0 - v2/4.0 <<
'\n';
366 std::cout << v4[0] <<
" " << v4[1] <<
" " << v4[2] <<
'\n';
369 std::cout << cross(v1, v2) <<
'\n';
370 std::cout << v1 <<
'\n';
372 std::cout << v1 <<
'\n';
374 std::cout << v1 <<
'\n';
378 std::cout << v2 <<
'\n';
379 std::cout << v2.
dot(v1) <<
'\n';
380 std::cout << v1.length() <<
'\n';
383 std::cout << v1 <<
'\n';
NAMD_HOST_DEVICE friend int operator!=(const Vector &v1, const Vector &v2)
NAMD_HOST_DEVICE friend Vector cross(const Real &k, const Vector &v1, const Vector &v2)
NAMD_HOST_DEVICE friend Vector operator+(const Vector &v1, const Vector &v2)
NAMD_HOST_DEVICE float3 operator+(float3 a, float3 b)
NAMD_HOST_DEVICE friend int operator==(const Vector &v1, const Vector &v2)
NAMD_HOST_DEVICE Vector & operator=(const BigReal &v2)
NAMD_HOST_DEVICE friend Vector cross(const BigReal &k, const Vector &v1, const Vector &v2)
NAMD_HOST_DEVICE void operator*=(const BigReal &v2)
AlignVector(const FloatVector &v)
NAMD_HOST_DEVICE Vector(BigReal newv)
AlignVector(BigReal newx, BigReal newy, BigReal newz)
AlignVector(const Vector &v)
NAMD_HOST_DEVICE friend BigReal operator*(const Vector &v1, const Vector &v2)
NAMD_HOST_DEVICE friend Vector cross(const Vector &v1, const Vector &v2)
NAMD_HOST_DEVICE BigReal & operator[](int i)
NAMD_HOST_DEVICE float3 operator-(float3 a, float3 b)
NAMD_HOST_DEVICE double3 make_double3(float3 a)
NAMD_HOST_DEVICE friend Vector operator*(const BigReal &f, const Vector &v1)
NAMD_HOST_DEVICE float3 make_float3(float4 a)
NAMD_HOST_DEVICE BigReal length(void) const
NAMD_HOST_DEVICE Vector(const FloatVector &v)
NAMD_HOST_DEVICE BigReal length2(void) const
NAMD_HOST_DEVICE friend Vector operator*(const Vector &v1, const BigReal &f)
void NAMD_die(const char *err_msg)
NAMD_HOST_DEVICE Vector(void)
NAMD_HOST_DEVICE void operator/=(const BigReal &v2)
NAMD_HOST_DEVICE void operator-=(const Vector &v2)
int main(int argc, char *argv[])
NAMD_HOST_DEVICE friend Vector operator/(const Vector &v1, const BigReal &f)
NAMD_HOST_DEVICE friend Vector operator-(const Vector &v1)
NAMD_HOST_DEVICE void cross(const Vector &v2)
NAMD_HOST_DEVICE void operator+=(const Vector &v2)
NAMD_HOST_DEVICE BigReal rlength(void) const
#define namd_reciprocal(x)
NAMD_HOST_DEVICE friend Vector operator-(const Vector &v1, const Vector &v2)
NAMD_HOST_DEVICE Vector(BigReal newx, BigReal newy, BigReal newz)
NAMD_HOST_DEVICE BigReal dot(const Vector &v2) const
NAMD_HOST_DEVICE Vector unit(void) const
AlignVector(BigReal newv)
NAMD_HOST_DEVICE Vector(double3 vec)