diff --git a/src/gpu/GridGenerator/grid/Grid.h b/src/gpu/GridGenerator/grid/Grid.h index 3f28120a5d969fcc5d7b2a3402a2169ff97c0cc3..ef21f1e22da743ae18700ab5eddf52d2cb5c6920 100644 --- a/src/gpu/GridGenerator/grid/Grid.h +++ b/src/gpu/GridGenerator/grid/Grid.h @@ -178,6 +178,10 @@ public: virtual void findFluidNodeIndicesBorder() = 0; virtual uint getNumberOfFluidNodesBorder() const = 0; virtual void getFluidNodeIndicesBorder(uint *fluidNodeIndicesBorder) const = 0; + + virtual void addFluidNodeIndicesMacroVars(std::vector<uint> _fluidNodeIndicesMacroVars) = 0; + virtual void addFluidNodeIndicesApplyBodyForce(std::vector<uint> _fluidNodeIndicesApplyBodyForce) = 0; + virtual void addFluidNodeIndicesAllFeatures(std::vector<uint> _fluidNodeIndicesAllFeatures) = 0; }; #endif diff --git a/src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h b/src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h index 739aef59f76a33fa67d472a77ef258469f5e411c..448737e90aa204ba5cf8a9eae11697476364b25c 100644 --- a/src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h +++ b/src/gpu/GridGenerator/grid/GridBuilder/GridBuilder.h @@ -136,6 +136,11 @@ public: virtual void getReceiveIndices(int *sendIndices, int direction, int level) = 0; virtual void findFluidNodes(bool splitDomain) = 0; + + virtual void addFluidNodeIndicesMacroVars(std::vector<uint> fluidNodeIndicesMacroVars, uint level) = 0; + virtual void addFluidNodeIndicesApplyBodyForce(std::vector<uint> fluidNodeIndicesApplyBodyForce, uint level) = 0; + virtual void addFluidNodeIndicesAllFeatures(std::vector<uint> fluidNodeIndicesAllFeatures, uint level) = 0; + }; #endif \ No newline at end of file diff --git a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp index 083b9a51e0b151f49922df456e968c4b204e4af7..e29ef28c2b78f85acc0910dddbc445ad40fb0d3b 100644 --- a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp +++ b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp @@ -674,4 +674,20 @@ void LevelGridBuilder::findFluidNodes(bool splitDomain) for (uint i = 0; i < grids.size(); i++) grids[i]->findFluidNodeIndices(splitDomain); *logging::out << logging::Logger::INFO_HIGH << "Done with findFluidNodes()\n"; +} + + +void LevelGridBuilder::addFluidNodeIndicesMacroVars(std::vector<uint> fluidNodeIndicesMacroVars, uint level) +{ + grids[level]->addFluidNodeIndicesMacroVars(fluidNodeIndicesMacroVars); +} + +void LevelGridBuilder::addFluidNodeIndicesApplyBodyForce(std::vector<uint> fluidNodeIndicesApplyBodyForce, uint level) +{ + grids[level]->addFluidNodeIndicesApplyBodyForce(fluidNodeIndicesApplyBodyForce); +} + +void LevelGridBuilder::addFluidNodeIndicesAllFeatures(std::vector<uint> fluidNodeIndicesAllFeatures, uint level) +{ + grids[level]->addFluidNodeIndicesAllFeatures(fluidNodeIndicesAllFeatures); } \ No newline at end of file diff --git a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h index 4d73b8b0464b9823f7fad0ac011450a23b4054f1..8efb3de4c2f056d3aee516ee7d3acfe494e8a104 100644 --- a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h +++ b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h @@ -194,6 +194,10 @@ public: // needed for CUDA Streams MultiGPU (Communication Hiding) void findFluidNodes(bool splitDomain) override; + + void addFluidNodeIndicesMacroVars(std::vector<uint> fluidNodeIndicesMacroVars, uint level) override; + void addFluidNodeIndicesApplyBodyForce(std::vector<uint> fluidNodeIndicesApplyBodyForce, uint level) override; + void addFluidNodeIndicesAllFeatures(std::vector<uint> fluidNodeIndicesAllFeatures, uint level) override; }; #endif diff --git a/src/gpu/GridGenerator/grid/GridImp.cpp b/src/gpu/GridGenerator/grid/GridImp.cpp index 18f7a3bdd15dc92e1d860413aa616551a3f0abba..b79ace78c5d7f9eed09ff3b40fdab5a4bc015003 100644 --- a/src/gpu/GridGenerator/grid/GridImp.cpp +++ b/src/gpu/GridGenerator/grid/GridImp.cpp @@ -2099,6 +2099,21 @@ void GridImp::getFluidNodeIndicesBorder(uint *fluidNodeIndicesBorder) const fluidNodeIndicesBorder[nodeNumber] = this->fluidNodeIndicesBorder[nodeNumber]; } +void GridImp::addFluidNodeIndicesMacroVars(std::vector<uint> _fluidNodeIndicesMacroVars) +{ + this->fluidNodeIndicesMacroVars.insert(fluidNodeIndicesMacroVars.end(), fluidNodeIndicesMacroVars.begin(), _fluidNodeIndicesMacroVars.end()); +} + +void GridImp::addFluidNodeIndicesApplyBodyForce(std::vector<uint> _fluidNodeIndicesApplyBodyForce) +{ + this->fluidNodeIndicesApplyBodyForce.insert(_fluidNodeIndicesApplyBodyForce.end(), _fluidNodeIndicesApplyBodyForce.begin(), fluidNodeIndicesApplyBodyForce.end()); +} + +void GridImp::addFluidNodeIndicesAllFeatures(std::vector<uint> _fluidNodeIndicesAllFeatures) +{ + this->fluidNodeIndicesAllFeatures.insert(fluidNodeIndicesAllFeatures.end(), fluidNodeIndicesAllFeatures.begin(), _fluidNodeIndicesAllFeatures.end()); +} + void GridImp::print() const { printf("min: (%2.4f, %2.4f, %2.4f), max: (%2.4f, %2.4f, %2.4f), size: %d, delta: %2.4f\n", startX, startY, startZ, diff --git a/src/gpu/GridGenerator/grid/GridImp.h b/src/gpu/GridGenerator/grid/GridImp.h index 158cba9e67650d65c20e63aa6a35d45f129e2baa..51510a90ee34a8bc6ba78d2230d8c70e52605bee 100644 --- a/src/gpu/GridGenerator/grid/GridImp.h +++ b/src/gpu/GridGenerator/grid/GridImp.h @@ -114,8 +114,11 @@ private: int *sparseIndices; - std::vector<uint> fluidNodeIndices; - std::vector<uint> fluidNodeIndicesBorder; + std::vector<uint> fluidNodeIndices; // run on CollisionTemplate::Default + std::vector<uint> fluidNodeIndicesBorder; // run on border nodes + std::vector<uint> fluidNodeIndicesMacroVars; // run on CollisionTemplate::MacroVars + std::vector<uint> fluidNodeIndicesApplyBodyForce; // run on CollisionTemplate::ApplyBodyForce + std::vector<uint> fluidNodeIndicesAllFeatures; // run on CollisionTemplate::AllFeatures uint *qIndices; //maps from matrix index to qIndex real *qValues; @@ -363,6 +366,9 @@ public: uint getNumberOfFluidNodesBorder() const override; void getFluidNodeIndicesBorder(uint *fluidNodeIndicesBorder) const override; + void addFluidNodeIndicesMacroVars(std::vector<uint> _fluidNodeIndicesMacroVars) override; + void addFluidNodeIndicesApplyBodyForce(std::vector<uint> _fluidNodeIndicesApplyBodyForce) override; + void addFluidNodeIndicesAllFeatures(std::vector<uint> _fluidNodeIndicesAllFeatures) override; public: struct CommunicationIndices { diff --git a/src/gpu/VirtualFluids_GPU/Calculation/CollisisionStrategy.cpp b/src/gpu/VirtualFluids_GPU/Calculation/CollisisionStrategy.cpp index 773d6d2aadde88d4c7c822c2db4d3fdc1906cd68..776ff31c1d1dade978d73aaa02837dbc9394d899 100644 --- a/src/gpu/VirtualFluids_GPU/Calculation/CollisisionStrategy.cpp +++ b/src/gpu/VirtualFluids_GPU/Calculation/CollisisionStrategy.cpp @@ -68,12 +68,12 @@ void CollisionAndExchange_streams::operator()(UpdateGrid27 *updateGrid, Paramete //! \details steps: //! - //! 1. run collision for nodes which are at the border of the gpus/processes - //! + //! 1. run collision for nodes which are at the border of the gpus/processes, running with WriteMacroVars in case probes sample on these nodes + //! updateGrid->collisionUsingIndices( level, t, para->getParD(level)->fluidNodeIndicesBorder, para->getParD(level)->numberOfFluidNodesBorder, - CollisionTemplate::Default, + CollisionTemplate::WriteMacroVars, borderStreamIndex); //! 2. prepare the exchange between gpus (collect the send nodes for communication in a buffer on the gpu) and trigger bulk kernel execution when finished diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h index d2fa6e64edd408fdec3c5ad63a48fba016c3ead6..c6c703cd3ff6e257e47debfc4bffa3e28ccdd5cd 100644 --- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h +++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h @@ -5,7 +5,7 @@ #include <vector> #include <memory> - +#include "LBM/LB.h" #include "PointerDefinitions.h" #include "VirtualFluids_GPU_export.h" #include "gpu/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h" @@ -31,6 +31,8 @@ public: virtual void allocArrays_fluidNodeIndices() = 0; virtual void allocArrays_fluidNodeIndicesBorder() = 0; + virtual void tagFluidNodeIndices(std::vector<uint> taggedFluidNodeIndices, CollisionTemplate tag, uint level) = 0; + virtual void setDimensions() = 0; virtual void setBoundingBox() = 0; virtual void initPeriodicNeigh(std::vector<std::vector<std::vector<unsigned int> > > periodV, std::vector<std::vector<unsigned int> > periodIndex, std::string way) = 0; diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp index fa432a1d9c3922b88e93588548db74083275ef1e..92c9688d997a54598e3688b36393e259516e9fda 100644 --- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp +++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp @@ -228,6 +228,10 @@ void GridReader::allocArrays_fluidNodeIndicesBorder() { // TODO } +void GridReader::tagFluidNodeIndices(std::vector<uint> taggedFluidNodeIndices, CollisionTemplate tag, uint level){ + std::cout << "GridReader::tagFluidNodeIndices not implemented" << std::endl; + // TODO +} void GridReader::setPressureValues(int channelSide) const { diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h index 18efb6a7885191312ea4e2fbb22eb45162ab1de1..128e90222796f92397f0659e0923452c0ee6b149 100644 --- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h +++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h @@ -42,6 +42,8 @@ public: void allocArrays_fluidNodeIndices() override; void allocArrays_fluidNodeIndicesBorder() override; + void tagFluidNodeIndices(std::vector<uint> taggedFluidNodeIndices, CollisionTemplate tag, uint level) override; + void initalValuesDomainDecompostion(int level); void setChannelBoundaryCondition(); diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp index 31e831837b096df279656c483242776a16cc9db3..1975f9a6cfad96462e888d9f91b14dd1f8a9a88f 100644 --- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp +++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp @@ -1,5 +1,6 @@ #include "GridGenerator.h" +#include "LBM/LB.h" #include "Parameter/Parameter.h" #include "GridGenerator/grid/GridBuilder/GridBuilder.h" #include "GPU/CudaMemoryManager.h" @@ -112,6 +113,28 @@ void GridGenerator::allocArrays_fluidNodeIndicesBorder() { } } +void GridGenerator::tagFluidNodeIndices(std::vector<uint> taggedFluidNodeIndices, CollisionTemplate tag, uint level) { + switch(tag) + { + case CollisionTemplate::WriteMacroVars: + builder->addFluidNodeIndicesMacroVars( taggedFluidNodeIndices, level ); + break; + case CollisionTemplate::ApplyBodyForce: + builder->addFluidNodeIndicesApplyBodyForce( taggedFluidNodeIndices, level ); + break; + case CollisionTemplate::AllFeatures: + builder->addFluidNodeIndicesAllFeatures( taggedFluidNodeIndices, level ); + break; + case CollisionTemplate::Default: + throw std::runtime_error("Cannot tag fluid nodes as CollisionTemplate::Default!"); + default: + throw std::runtime_error("Tagging fluid nodes with invald tag!"); + break; + + } + +} + void GridGenerator::allocArrays_BoundaryValues() { std::cout << "------read BoundaryValues------" << std::endl; diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h index 3d277be806b4dc440b9fe66ed978aca631790525..7b72564f371d00df08d4bd45ec7e2820f7b92102 100644 --- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h +++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h @@ -74,6 +74,8 @@ public: void allocArrays_fluidNodeIndices() override; void allocArrays_fluidNodeIndicesBorder() override; + void tagFluidNodeIndices(std::vector<uint> taggedFluidNodeIndices, CollisionTemplate tag, uint level) override; + virtual void setDimensions() override; virtual void setBoundingBox() override; diff --git a/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp b/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp index f3638e96768b3ec52e122809facf3242f4a9149a..3a0f251d256bbeb2687312c1dd3a66a5aabe94be 100644 --- a/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp +++ b/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp @@ -97,11 +97,7 @@ void Simulation::init(GridProvider &gridProvider, BoundaryConditionFactory *bcFa gridProvider.allocAndCopyForcing(); gridProvider.allocAndCopyQuadricLimiters(); - if (para->getKernelNeedsFluidNodeIndicesToRun()) { - gridProvider.allocArrays_fluidNodeIndices(); - gridProvider.allocArrays_fluidNodeIndicesBorder(); - } - + gridProvider.setDimensions(); gridProvider.setBoundingBox(); @@ -136,10 +132,18 @@ void Simulation::init(GridProvider &gridProvider, BoundaryConditionFactory *bcFa for (SPtr<PreCollisionInteractor> actuator : para->getActuators()) { actuator->init(para.get(), &gridProvider, cudaMemoryManager.get()); + actuator->getInteractorFluidNodes( para.get(), &gridProvider ); } for (SPtr<PreCollisionInteractor> probe : para->getProbes()) { probe->init(para.get(), &gridProvider, cudaMemoryManager.get()); + probe->getInteractorFluidNodes( para.get(), &gridProvider ); + } + + ////////////////////////////////////////////////////////////////////////// + if (para->getKernelNeedsFluidNodeIndicesToRun()) { + gridProvider.allocArrays_fluidNodeIndices(); + gridProvider.allocArrays_fluidNodeIndicesBorder(); } ////////////////////////////////////////////////////////////////////////// diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.cu index 71897bd21ea4fb299d3cc0ffa385506d4503f360..b489269d064eb5b646dd56c00a77b7a6ad9a04f7 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.cu +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.cu @@ -258,6 +258,11 @@ void ActuatorLine::free(Parameter* para, CudaMemoryManager* cudaMemoryManager) cudaMemoryManager->cudaFreeSphereIndices(this); } +void ActuatorLine::getInteractorFluidNodes(Parameter *para, GridProvider* gridProvider) +{ + std::vector<uint> indicesInSphere(this->boundingSphereIndicesH, this->boundingSphereIndicesH+this->nIndices); + gridProvider->tagFluidNodeIndices(indicesInSphere, CollisionTemplate::AllFeatures, this->level); +} void ActuatorLine::calcForcesEllipticWing() { diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.h b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.h index b44c89c5020eb206baa3bba1994b1e45f760c3bb..c107f45765d5845f9ebe83e2ccb0801dfaaeb6b0 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.h +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.h @@ -49,6 +49,8 @@ public: void interact(Parameter* para, CudaMemoryManager* cudaMemoryManager, int level, uint t) override; void free(Parameter* para, CudaMemoryManager* cudaMemoryManager) override; void write(uint t); + void getInteractorFluidNodes(Parameter *para, GridProvider* gridProvider) override; + uint getNBladeNodes(){ return this->nBladeNodes; }; uint getNBlades(){ return this->nBlades;}; diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h index a9b233f3035890c2617d3a00b639f995be6c218f..368b85c2fba7e8fc0404cae8889132a8cb1cb59c 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h @@ -33,6 +33,7 @@ public: virtual void init(Parameter *para, GridProvider *gridProvider, CudaMemoryManager *cudaMemoryManager) = 0; virtual void interact(Parameter *para, CudaMemoryManager *cudaMemoryManager, int level, uint t) = 0; virtual void free(Parameter *para, CudaMemoryManager *cudaMemoryManager) = 0; + virtual void getInteractorFluidNodes(Parameter *para, GridProvider* gridProvider) = 0; protected: uint updateInterval; diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.cu index 7d1c0205219737e4b28acbb1a893a0a6071ae9de..e0c574bba76d12ab306e9ea46e8251d4f1a49fb1 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.cu +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.cu @@ -106,4 +106,14 @@ void PlaneProbe::calculateQuantities(SPtr<ProbeStruct> probeStruct, Parameter* p para->getParD(level)->velocityX, para->getParD(level)->velocityY, para->getParD(level)->velocityZ, para->getParD(level)->rho, para->getParD(level)->neighborX, para->getParD(level)->neighborY, para->getParD(level)->neighborZ, probeStruct->quantitiesD, probeStruct->arrayOffsetsD, probeStruct->quantitiesArrayD); +} + +void PlaneProbe::getInteractorFluidNodes(Parameter *para, GridProvider* gridProvider) +{ + for(int level=0; level<=para->getMaxLevel(); level++) + { + SPtr<ProbeStruct> probeStruct = this->getProbeStruct(level); + std::vector<uint> probeIndices( probeStruct->pointIndicesH, probeStruct->pointIndicesH+probeStruct->nIndices); + gridProvider->tagFluidNodeIndices( probeIndices, CollisionTemplate::WriteMacroVars, level); + } } \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h index 3440c01020f9b3505be7148024e47373b76648ff..559ed7497e1d67acdd5a2fb38fc57afbc14a58d6 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h @@ -72,6 +72,8 @@ public: this->deltaZ = _deltaZ; } + void getInteractorFluidNodes(Parameter *para, GridProvider* gridProvider) override; + private: bool isAvailableStatistic(Statistic _variable) override; diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.cu index e78a98f02ac2093fc46b4daa4a2485ed1395275b..25956f3dbe71a04c0ac7e8e8724b7359eb802f24 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.cu +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.cu @@ -140,4 +140,14 @@ void PointProbe::addProbePointsFromXNormalPlane(real pos_x, real pos0_y, real po } printf("Added %u points \n", n_y*n_z); +} + +void PointProbe::getInteractorFluidNodes(Parameter *para, GridProvider* gridProvider) +{ + for(int level=0; level<=para->getMaxLevel(); level++) + { + SPtr<ProbeStruct> probeStruct = this->getProbeStruct(level); + std::vector<uint> probeIndices( probeStruct->pointIndicesH, probeStruct->pointIndicesH+probeStruct->nIndices); + gridProvider->tagFluidNodeIndices( probeIndices, CollisionTemplate::WriteMacroVars, level); + } } \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h index 6a6fbe76f089acfafc22672dd3e9d71bd193a3b3..8cdf225ebf2e0eeb50817809a15923bc397b8260 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h @@ -64,6 +64,7 @@ public: void addProbePointsFromList(std::vector<real>& _pointCoordsX, std::vector<real>& _pointCoordsY, std::vector<real>& _pointCoordsZ); void addProbePointsFromXNormalPlane(real pos_x, real pos0_y, real pos0_z, real pos1_y, real pos1_z, uint n_y, uint n_z); + void getInteractorFluidNodes(Parameter *para, GridProvider* gridProvider) override; private: bool isAvailableStatistic(Statistic _variable) override; diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu index cc027b07bded01455437e65e08ccdcd51bcf7dc0..a4fd7c0ec1f68e2ac22ba545fa29e28ca3ed11bc 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu @@ -315,6 +315,12 @@ void Probe::free(Parameter* para, CudaMemoryManager* cudaMemoryManager) } } +void Probe::getInteractorFluidNodes(Parameter *para, GridProvider* gridProvider) +{ + // Do nothing +}; + + void Probe::addStatistic(Statistic variable) { if (!this->isAvailableStatistic(variable)) throw std::runtime_error("Probe::addStatistic(): Statistic not available for this probe type!"); diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h index 9cb0bd43e27fb7a28cae9c363ce245fbd9cc5677..3012fdbc5467d9d055737dda9b22c815237fc22d 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h @@ -159,6 +159,7 @@ public: void init(Parameter* para, GridProvider* gridProvider, CudaMemoryManager* cudaMemoryManager) override; void interact(Parameter* para, CudaMemoryManager* cudaMemoryManager, int level, uint t) override; void free(Parameter* para, CudaMemoryManager* cudaMemoryManager) override; + virtual void getInteractorFluidNodes(Parameter *para, GridProvider* gridProvider); SPtr<ProbeStruct> getProbeStruct(int level){ return this->probeParams[level]; }