diff --git a/phigrape.cpp b/phigrape.cpp index 09a8bd0..82547ad 100644 --- a/phigrape.cpp +++ b/phigrape.cpp @@ -222,10 +222,63 @@ extern void qwerty_(double *aaa, double *aaapars); struct double3 { double data[3]; + double3() {} + double3(const double x, const double y, const double z) + { + data[0] = x; + data[1] = y; + data[2] = z; + } double& operator[](int i) {return data[i];} + double3& operator=(const double3& a) + { + data[0] = a.data[0]; + data[1] = a.data[1]; + data[2] = a.data[2]; + return *this; + } + double3& operator+=(const double3& a) + { + data[0] += a.data[0]; + data[1] += a.data[1]; + data[2] += a.data[2]; + return *this; + } + double3& operator/=(const double& c) + { + data[0] /= c; + data[1] /= c; + data[2] /= c; + return *this; + } + double norm() + { + return sqrt(data[0]*data[0]+data[1]*data[1]+data[2]*data[2]); + } operator double*() {return data;} }; +double3 operator*(const double& c, const double3& a) +{ + return double3(a.data[0]*c, a.data[1]*c, a.data[2]*c); +} + +double3 operator*(const double3& a, const double& c) +{ + return double3(a.data[0]*c, a.data[1]*c, a.data[2]*c); +} + +double3 operator+(const double3& a, const double3& b) +{ + return double3(a.data[0]+b.data[0], a.data[1]+b.data[1], a.data[2]+b.data[2]); +} + +double3 operator-(const double3& a, const double3& b) +{ + return double3(a.data[0]-b.data[0], a.data[1]-b.data[1], a.data[2]-b.data[2]); +} + + int name_proc, n_proc=1, myRank=0, rootRank=0, cur_rank, i, j, k, ni, nj, diskstep=0, power, jjj, iii, skip_con=0, tmp_i; @@ -1245,10 +1298,8 @@ void calc_self_grav(double t) for (i=0; i