From d2abdc21ef02a9f715aa7c03533671b3f968d24c Mon Sep 17 00:00:00 2001 From: Grigorii Drozdov <drozd013@umn.edu> Date: Thu, 22 Apr 2021 22:35:16 -0500 Subject: [PATCH] fix: save exact particles state --- apps/benchmarks/CNT/Config.cpp | 20 +++++++++++++----- apps/benchmarks/CNT/InitializeCNTs.cpp | 29 ++++++++++++++++++++------ 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/apps/benchmarks/CNT/Config.cpp b/apps/benchmarks/CNT/Config.cpp index 17e3b0896..aac837966 100644 --- a/apps/benchmarks/CNT/Config.cpp +++ b/apps/benchmarks/CNT/Config.cpp @@ -50,10 +50,11 @@ void saveConfig(const shared_ptr<data::ParticleStorage>& ps, sb << static_cast<double> (p.getPosition()[1]); sb << static_cast<double> (p.getPosition()[2]); - Vec3 orient = p.getRotation().getMatrix() * Vec3(1,0,0); - // Now orient has the shape (sin(th)cos(ph), sin(th)sin(ph), cos(th)) - sb << static_cast<double> (std::acos(orient[2])); - sb << static_cast<double> (std::atan2(orient[1], orient[0])); + Quaternion q = p.getRotation().getQuaternion(); + sb << static_cast<double> (q[0]); + sb << static_cast<double> (q[1]); + sb << static_cast<double> (q[2]); + sb << static_cast<double> (q[3]); sb << static_cast<double> (p.getLinearVelocity()[0]); sb << static_cast<double> (p.getLinearVelocity()[1]); @@ -62,6 +63,15 @@ void saveConfig(const shared_ptr<data::ParticleStorage>& ps, sb << static_cast<double> (p.getAngularVelocity()[0]); sb << static_cast<double> (p.getAngularVelocity()[1]); sb << static_cast<double> (p.getAngularVelocity()[2]); + + sb << static_cast<double> (p.getOldForce()[0]); + sb << static_cast<double> (p.getOldForce()[1]); + sb << static_cast<double> (p.getOldForce()[2]); + + sb << static_cast<double> (p.getOldTorque()[0]); + sb << static_cast<double> (p.getOldTorque()[1]); + sb << static_cast<double> (p.getOldTorque()[2]); + } switch (io_mode) @@ -74,7 +84,7 @@ void saveConfig(const shared_ptr<data::ParticleStorage>& ps, WALBERLA_ROOT_SECTION() { uint_t dataSize = sizeof(mpi::RecvBuffer::ElementType) * rb.size(); - size_t size = rb.size() / 104; + size_t size = rb.size() / 168; std::ofstream binfile; binfile.open(filename + ".sav", std::ios::out | std::ios::binary); binfile.write((char*) &size, sizeof(size_t)); diff --git a/apps/benchmarks/CNT/InitializeCNTs.cpp b/apps/benchmarks/CNT/InitializeCNTs.cpp index ff9d29996..d37b3d460 100644 --- a/apps/benchmarks/CNT/InitializeCNTs.cpp +++ b/apps/benchmarks/CNT/InitializeCNTs.cpp @@ -164,27 +164,43 @@ int64_t loadCNTs(const std::string& filename, double x; double y; double z; - double theta; - double phi; + double q0; + double q1; + double q2; + double q3; double vx; double vy; double vz; double wx; double wy; double wz; + double fx; + double fy; + double fz; + double tx; + double ty; + double tz; binfile.read((char *) &sID, sizeof(int64_t)); binfile.read((char *) &cID, sizeof(int64_t)); binfile.read((char *) &x, sizeof(double)); binfile.read((char *) &y, sizeof(double)); binfile.read((char *) &z, sizeof(double)); - binfile.read((char *) &theta, sizeof(double)); - binfile.read((char *) &phi, sizeof(double)); + binfile.read((char *) &q0, sizeof(double)); + binfile.read((char *) &q1, sizeof(double)); + binfile.read((char *) &q2, sizeof(double)); + binfile.read((char *) &q3, sizeof(double)); binfile.read((char *) &vx, sizeof(double)); binfile.read((char *) &vy, sizeof(double)); binfile.read((char *) &vz, sizeof(double)); binfile.read((char *) &wx, sizeof(double)); binfile.read((char *) &wy, sizeof(double)); binfile.read((char *) &wz, sizeof(double)); + binfile.read((char *) &fx, sizeof(double)); + binfile.read((char *) &fy, sizeof(double)); + binfile.read((char *) &fz, sizeof(double)); + binfile.read((char *) &tx, sizeof(double)); + binfile.read((char *) &ty, sizeof(double)); + binfile.read((char *) &tz, sizeof(double)); Vec3 pos; pos[0] = real_c(x); pos[1] = real_c(y); @@ -198,10 +214,11 @@ int64_t loadCNTs(const std::string& filename, sp.setInteractionRadius(kernel::cnt::outer_radius); sp.setSegmentID(sID); sp.setClusterID(cID); - sp.getRotationRef().rotate(Vec3(0_r, 1_r, 0_r), -0.5_r * math::pi + real_c(theta)); - sp.getRotationRef().rotate(Vec3(0_r, 0_r, 1_r), real_c(phi)); + sp.setRotation(Rot3(Quaternion(q0, q1, q2, q3))); sp.setLinearVelocity(Vec3(real_c(vx), real_c(vy), real_c(vz))); sp.setAngularVelocity(Vec3(real_c(wx), real_c(wy), real_c(wz))); + sp.setOldForce(Vec3(real_c(fx), real_c(fy), real_c(fz))); + sp.setOldTorque(Vec3(real_c(tx), real_c(ty), real_c(tz))); numParticles++; } } -- GitLab