From d39e1ec27b90614d7241fd1a5eb7de0bfa98d568 Mon Sep 17 00:00:00 2001 From: HRN Date: Sat, 4 Jan 2025 15:46:30 +0330 Subject: [PATCH] bug fix for memory error in PhasicFlowPlus-fluid interaction --- .../grainDEMSystem/grainFluidParticles.cpp | 64 ++++++++++--------- .../grainDEMSystem/grainFluidParticles.hpp | 3 + .../sphereDEMSystem/sphereFluidParticles.cpp | 58 +++++++++-------- .../sphereDEMSystem/sphereFluidParticles.hpp | 2 + 4 files changed, 71 insertions(+), 56 deletions(-) diff --git a/DEMSystems/grainDEMSystem/grainFluidParticles.cpp b/DEMSystems/grainDEMSystem/grainFluidParticles.cpp index f6710d71..e58ab65b 100644 --- a/DEMSystems/grainDEMSystem/grainFluidParticles.cpp +++ b/DEMSystems/grainDEMSystem/grainFluidParticles.cpp @@ -21,42 +21,46 @@ Licence: #include "grainFluidParticles.hpp" #include "grainFluidParticlesKernels.hpp" +void pFlow::grainFluidParticles::checkHostMemory() +{ + if(fluidForce_.size()!=fluidForceHost_.size()) + { + resizeNoInit(fluidForceHost_, fluidForce_.size()); + resizeNoInit(fluidTorqueHost_, fluidTorque_.size()); + } + + // copy the data (if required) from device to host + courseGrainFactorHost_ = coarseGrainFactor().hostView(); +} pFlow::grainFluidParticles::grainFluidParticles( - systemControl &control, - const property& prop -) -: - grainParticles(control, prop), - fluidForce_( - objectFile( - "fluidForce", - "", - objectFile::READ_IF_PRESENT, - objectFile::WRITE_ALWAYS - ), - dynPointStruct(), - zero3 - ), - fluidTorque_( - objectFile( - "fluidTorque", - "", - objectFile::READ_IF_PRESENT, - objectFile::WRITE_NEVER - ), - dynPointStruct(), - zero3 - ) -{} + systemControl &control, + const property &prop) + : grainParticles(control, prop), + fluidForce_( + objectFile( + "fluidForce", + "", + objectFile::READ_IF_PRESENT, + objectFile::WRITE_ALWAYS), + dynPointStruct(), + zero3), + fluidTorque_( + objectFile( + "fluidTorque", + "", + objectFile::READ_IF_PRESENT, + objectFile::WRITE_NEVER), + dynPointStruct(), + zero3) +{ + checkHostMemory(); +} bool pFlow::grainFluidParticles::beforeIteration() { grainParticles::beforeIteration(); - - // copy the data (if required) from device to host - courseGrainFactorHost_ = coarseGrainFactor().hostView(); - + checkHostMemory(); return true; } diff --git a/DEMSystems/grainDEMSystem/grainFluidParticles.hpp b/DEMSystems/grainDEMSystem/grainFluidParticles.hpp index f8adcee1..ba547556 100644 --- a/DEMSystems/grainDEMSystem/grainFluidParticles.hpp +++ b/DEMSystems/grainDEMSystem/grainFluidParticles.hpp @@ -53,6 +53,9 @@ protected: hostViewType1D courseGrainFactorHost_; + + void checkHostMemory(); + public: /// construct from systemControl and property diff --git a/DEMSystems/sphereDEMSystem/sphereFluidParticles.cpp b/DEMSystems/sphereDEMSystem/sphereFluidParticles.cpp index 4866bb5b..11c9df24 100644 --- a/DEMSystems/sphereDEMSystem/sphereFluidParticles.cpp +++ b/DEMSystems/sphereDEMSystem/sphereFluidParticles.cpp @@ -21,38 +21,44 @@ Licence: #include "sphereFluidParticles.hpp" #include "sphereFluidParticlesKernels.hpp" +void pFlow::sphereFluidParticles::checkHostMemory() +{ + if(fluidForce_.size()!=fluidForceHost_.size()) + { + resizeNoInit(fluidForceHost_, fluidForce_.size()); + resizeNoInit(fluidTorqueHost_, fluidTorque_.size()); + } +} pFlow::sphereFluidParticles::sphereFluidParticles( - systemControl &control, - const property& prop -) -: - sphereParticles(control, prop), - fluidForce_( - objectFile( - "fluidForce", - "", - objectFile::READ_IF_PRESENT, - objectFile::WRITE_ALWAYS - ), - dynPointStruct(), - zero3 - ), - fluidTorque_( - objectFile( - "fluidTorque", - "", - objectFile::READ_IF_PRESENT, - objectFile::WRITE_NEVER - ), - dynPointStruct(), - zero3 - ) -{} + systemControl &control, + const property &prop) + : sphereParticles(control, prop), + fluidForce_( + objectFile( + "fluidForce", + "", + objectFile::READ_IF_PRESENT, + objectFile::WRITE_ALWAYS), + dynPointStruct(), + zero3), + fluidTorque_( + objectFile( + "fluidTorque", + "", + objectFile::READ_IF_PRESENT, + objectFile::WRITE_NEVER), + dynPointStruct(), + zero3) +{ + checkHostMemory(); +} bool pFlow::sphereFluidParticles::beforeIteration() { sphereParticles::beforeIteration(); + checkHostMemory(); + return true; } diff --git a/DEMSystems/sphereDEMSystem/sphereFluidParticles.hpp b/DEMSystems/sphereDEMSystem/sphereFluidParticles.hpp index db92b6d2..d8ae9f58 100644 --- a/DEMSystems/sphereDEMSystem/sphereFluidParticles.hpp +++ b/DEMSystems/sphereDEMSystem/sphereFluidParticles.hpp @@ -51,6 +51,8 @@ protected: hostViewType1D fluidTorqueHost_; + void checkHostMemory(); + /*void zeroFluidForce_H() { fluidForce_.fillHost(zero3);