From a4e9c14a7bdc3fd400a8a4d83a55dd196c13069d Mon Sep 17 00:00:00 2001 From: HenrikAsmuth <henrik.asmuth@geo.uu.se> Date: Mon, 5 Sep 2022 14:25:33 +0200 Subject: [PATCH] fix refinement-related bug in WallModelProbe --- apps/gpu/LBM/BoundaryLayer/BoundaryLayer.cpp | 7 +++---- .../PreCollisionInteractor/Probes/Probe.cu | 2 +- .../PreCollisionInteractor/Probes/WallModelProbe.cu | 10 +++++----- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/apps/gpu/LBM/BoundaryLayer/BoundaryLayer.cpp b/apps/gpu/LBM/BoundaryLayer/BoundaryLayer.cpp index c397092e0..6b6bf1931 100644 --- a/apps/gpu/LBM/BoundaryLayer/BoundaryLayer.cpp +++ b/apps/gpu/LBM/BoundaryLayer/BoundaryLayer.cpp @@ -184,11 +184,10 @@ void multipleLevel(const std::string& configPath) gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, L_x, L_y, L_z, dx); - // gridBuilder->setNumberOfLayers(12, 8); + gridBuilder->setNumberOfLayers(12, 8); - // gridBuilder->addGrid( new Cuboid( 0.0, 0.0, 0.0, L_x, L_y, 0.2*L_z) , 1 ); - // gridBuilder->addGrid( new Cuboid( 0.0, 0.0, 0.0, L_x, L_y, 0.1*L_z) , 2 ); - // para->setMaxLevel(3); + gridBuilder->addGrid( new Cuboid( 0.0, 0.0, 0.0, L_x, L_y, 0.3*L_z) , 1 ); + para->setMaxLevel(2); gridBuilder->setPeriodicBoundaryCondition(true, true, false); diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu index e13f41127..0c56e557c 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu @@ -441,7 +441,7 @@ void Probe::writeGridFiles(Parameter* para, int level, std::vector<std::string>& uint arrOff = probeStruct->arrayOffsetsH[var]; uint arrLen = probeStruct->nPoints; - + for(uint arr=0; arr<n_arrs; arr++) { coeff = postProcessingVariables[arr].conversionFactor; diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.cu index da50219b1..06039e323 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.cu +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.cu @@ -155,7 +155,6 @@ void WallModelProbe::findPoints(Parameter* para, GridProvider* gridProvider, std std::vector<real>& pointCoordsX_level, std::vector<real>& pointCoordsY_level, std::vector<real>& pointCoordsZ_level, int level) { - if ( para->getParD(level)->stressBC.numberOfBCnodes < 1) throw std::runtime_error("WallModelProbe::findPoints(): stressBC.numberOfBCnodes < 1 !"); if ( !para->getHasWallModelMonitor()) throw std::runtime_error("WallModelProbe::findPoints(): !para->getHasWallModelMonitor() !"); real dt = para->getTimeRatio(); @@ -187,6 +186,10 @@ void WallModelProbe::findPoints(Parameter* para, GridProvider* gridProvider, std void WallModelProbe::calculateQuantities(SPtr<ProbeStruct> probeStruct, Parameter* para, uint t, int level) { bool doTmpAveraging = (t>this->getTStartTmpAveraging()); + real N = para->getParD(level)->stressBC.numberOfBCnodes; + if(N<1) return; //Skipping levels without StressBC + real n = (real)probeStruct->vals; + int nPoints = probeStruct->nPoints; // Pointer casts to use device arrays in thrust reductions thrust::device_ptr<real> u_el_thrust = thrust::device_pointer_cast(para->getParD(level)->stressBC.Vx); @@ -213,10 +216,6 @@ void WallModelProbe::calculateQuantities(SPtr<ProbeStruct> probeStruct, Paramete thrust::permutation_iterator<valIterator, indIterator> dpdz_iter_begin(dpdz_thrust, indices_thrust); thrust::permutation_iterator<valIterator, indIterator> dpdz_iter_end (dpdz_thrust, indices_thrust+probeStruct->nIndices); - real N = para->getParD(level)->stressBC.numberOfBCnodes; - real n = (real)probeStruct->vals; - int nPoints = probeStruct->nPoints; - if(probeStruct->quantitiesH[int(Statistic::SpatialMeans)]) { // Compute the instantaneous spatial means of the velocity moments @@ -293,6 +292,7 @@ void WallModelProbe::calculateQuantities(SPtr<ProbeStruct> probeStruct, Paramete } } } + this->tProbe += 1; getLastCudaError("WallModelProbe::calculateQuantities execution failed"); -- GitLab