From b5463c708dd50b14fd0a2d111fc801acfe4e757f Mon Sep 17 00:00:00 2001 From: HenrikAsmuth <henrik.asmuth@geo.uu.se> Date: Tue, 6 Sep 2022 10:00:09 +0200 Subject: [PATCH] restructuring of Probes using scaled getters for conversion ratios --- .../Probes/PlanarAverageProbe.cu | 48 +++++++++---------- .../Probes/PlaneProbe.cu | 8 ++-- .../Probes/PointProbe.cu | 8 ++-- .../PreCollisionInteractor/Probes/Probe.cu | 19 +++++--- .../PreCollisionInteractor/Probes/Probe.h | 18 +++---- .../Probes/WallModelProbe.cu | 12 ++--- 6 files changed, 60 insertions(+), 53 deletions(-) diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlanarAverageProbe.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlanarAverageProbe.cu index 60932417e..f5b520acf 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlanarAverageProbe.cu +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlanarAverageProbe.cu @@ -154,40 +154,40 @@ std::vector<PostProcessingVariable> PlanarAverageProbe::getPostProcessingVariabl postProcessingVariables.push_back( PostProcessingVariable("nut_spatTmpMean", this->viscosityRatio) ); break; case Statistic::SpatialCovariances: - postProcessingVariables.push_back( PostProcessingVariable("vxvx_spatMean", pow(this->velocityRatio, 2.0)) ); - postProcessingVariables.push_back( PostProcessingVariable("vyvy_spatMean", pow(this->velocityRatio, 2.0)) ); - postProcessingVariables.push_back( PostProcessingVariable("vzvz_spatMean", pow(this->velocityRatio, 2.0)) ); - postProcessingVariables.push_back( PostProcessingVariable("vxvy_spatMean", pow(this->velocityRatio, 2.0)) ); - postProcessingVariables.push_back( PostProcessingVariable("vxvz_spatMean", pow(this->velocityRatio, 2.0)) ); - postProcessingVariables.push_back( PostProcessingVariable("vyvz_spatMean", pow(this->velocityRatio, 2.0)) ); + postProcessingVariables.push_back( PostProcessingVariable("vxvx_spatMean", this->stressRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("vyvy_spatMean", this->stressRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("vzvz_spatMean", this->stressRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("vxvy_spatMean", this->stressRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("vxvz_spatMean", this->stressRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("vyvz_spatMean", this->stressRatio) ); break; case Statistic::SpatioTemporalCovariances: - postProcessingVariables.push_back( PostProcessingVariable("vxvx_spatTmpMean", pow(this->velocityRatio, 2.0)) ); - postProcessingVariables.push_back( PostProcessingVariable("vyvy_spatTmpMean", pow(this->velocityRatio, 2.0)) ); - postProcessingVariables.push_back( PostProcessingVariable("vzvz_spatTmpMean", pow(this->velocityRatio, 2.0)) ); - postProcessingVariables.push_back( PostProcessingVariable("vxvy_spatTmpMean", pow(this->velocityRatio, 2.0)) ); - postProcessingVariables.push_back( PostProcessingVariable("vxvz_spatTmpMean", pow(this->velocityRatio, 2.0)) ); - postProcessingVariables.push_back( PostProcessingVariable("vyvz_spatTmpMean", pow(this->velocityRatio, 2.0)) ); + postProcessingVariables.push_back( PostProcessingVariable("vxvx_spatTmpMean", this->stressRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("vyvy_spatTmpMean", this->stressRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("vzvz_spatTmpMean", this->stressRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("vxvy_spatTmpMean", this->stressRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("vxvz_spatTmpMean", this->stressRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("vyvz_spatTmpMean", this->stressRatio) ); break; case Statistic::SpatialSkewness: - postProcessingVariables.push_back( PostProcessingVariable("Sx_spatMean", 1.0) ); - postProcessingVariables.push_back( PostProcessingVariable("Sy_spatMean", 1.0) ); - postProcessingVariables.push_back( PostProcessingVariable("Sz_spatMean", 1.0) ); + postProcessingVariables.push_back( PostProcessingVariable("Sx_spatMean", this->nondimensional) ); + postProcessingVariables.push_back( PostProcessingVariable("Sy_spatMean", this->nondimensional) ); + postProcessingVariables.push_back( PostProcessingVariable("Sz_spatMean", this->nondimensional) ); break; case Statistic::SpatioTemporalSkewness: - postProcessingVariables.push_back( PostProcessingVariable("Sx_spatTmpMean", 1.0) ); - postProcessingVariables.push_back( PostProcessingVariable("Sy_spatTmpMean", 1.0) ); - postProcessingVariables.push_back( PostProcessingVariable("Sz_spatTmpMean", 1.0) ); + postProcessingVariables.push_back( PostProcessingVariable("Sx_spatTmpMean", this->nondimensional) ); + postProcessingVariables.push_back( PostProcessingVariable("Sy_spatTmpMean", this->nondimensional) ); + postProcessingVariables.push_back( PostProcessingVariable("Sz_spatTmpMean", this->nondimensional) ); break; case Statistic::SpatialFlatness: - postProcessingVariables.push_back( PostProcessingVariable("Fx_spatMean", 1.0) ); - postProcessingVariables.push_back( PostProcessingVariable("Fy_spatMean", 1.0) ); - postProcessingVariables.push_back( PostProcessingVariable("Fz_spatMean", 1.0) ); + postProcessingVariables.push_back( PostProcessingVariable("Fx_spatMean", this->nondimensional) ); + postProcessingVariables.push_back( PostProcessingVariable("Fy_spatMean", this->nondimensional) ); + postProcessingVariables.push_back( PostProcessingVariable("Fz_spatMean", this->nondimensional) ); break; case Statistic::SpatioTemporalFlatness: - postProcessingVariables.push_back( PostProcessingVariable("Fx_spatTmpMean", 1.0) ); - postProcessingVariables.push_back( PostProcessingVariable("Fy_spatTmpMean", 1.0) ); - postProcessingVariables.push_back( PostProcessingVariable("Fz_spatTmpMean", 1.0) ); + postProcessingVariables.push_back( PostProcessingVariable("Fx_spatTmpMean", this->nondimensional) ); + postProcessingVariables.push_back( PostProcessingVariable("Fy_spatTmpMean", this->nondimensional) ); + postProcessingVariables.push_back( PostProcessingVariable("Fz_spatTmpMean", this->nondimensional) ); break; default: diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.cu index e18de63c7..7d1c02052 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.cu +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.cu @@ -57,10 +57,10 @@ std::vector<PostProcessingVariable> PlaneProbe::getPostProcessingVariables(Stati postProcessingVariables.push_back( PostProcessingVariable("rho_mean", this->densityRatio ) ); break; case Statistic::Variances: - postProcessingVariables.push_back( PostProcessingVariable("vx_var", pow(this->velocityRatio, 2.0)) ); - postProcessingVariables.push_back( PostProcessingVariable("vy_var", pow(this->velocityRatio, 2.0)) ); - postProcessingVariables.push_back( PostProcessingVariable("vz_var", pow(this->velocityRatio, 2.0)) ); - postProcessingVariables.push_back( PostProcessingVariable("rho_var", pow(this->densityRatio, 2.0)) ); + postProcessingVariables.push_back( PostProcessingVariable("vx_var", this->stressRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("vy_var", this->stressRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("vz_var", this->stressRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("rho_var", this->densityRatio) ); break; default: diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.cu index cebac1700..e78a98f02 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.cu +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.cu @@ -55,10 +55,10 @@ std::vector<PostProcessingVariable> PointProbe::getPostProcessingVariables(Stati postProcessingVariables.push_back( PostProcessingVariable("rho_mean", this->densityRatio ) ); break; case Statistic::Variances: - postProcessingVariables.push_back( PostProcessingVariable("vx_var", pow(this->velocityRatio, 2.0)) ); - postProcessingVariables.push_back( PostProcessingVariable("vy_var", pow(this->velocityRatio, 2.0)) ); - postProcessingVariables.push_back( PostProcessingVariable("vz_var", pow(this->velocityRatio, 2.0)) ); - postProcessingVariables.push_back( PostProcessingVariable("rho_var", pow(this->densityRatio, 2.0)) ); + postProcessingVariables.push_back( PostProcessingVariable("vx_var", this->stressRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("vy_var", this->stressRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("vz_var", this->stressRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("rho_var", this->densityRatio) ); break; default: diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu index 0c56e557c..cc027b07b 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu @@ -37,6 +37,7 @@ #include <helper_cuda.h> #include "VirtualFluids_GPU/GPU/GeometryUtils.h" +#include <lbm/constants/NumericConstants.h> #include "basics/writer/WbWriterVtkXmlBinary.h" #include <Core/StringUtilities/StringUtil.h> @@ -44,6 +45,7 @@ #include "DataStructureInitializer/GridProvider.h" #include "GPU/CudaMemoryManager.h" +using namespace vf::lbm::constant; __device__ void calculatePointwiseQuantities(uint n, real* quantityArray, bool* quantities, uint* quantityArrayOffsets, uint nPoints, uint node, real vx, real vy, real vz, real rho) { @@ -177,14 +179,17 @@ __global__ void interpAndCalcQuantitiesKernel( uint* pointIndices, bool Probe::getHasDeviceQuantityArray(){ return this->hasDeviceQuantityArray; } +real Probe::getNondimensionalConversionFactor(int level){ return c1o1; } + void Probe::init(Parameter* para, GridProvider* gridProvider, CudaMemoryManager* cudaMemoryManager) { - this->velocityRatio = para->getVelocityRatio(); - this->densityRatio = para->getDensityRatio(); - this->forceRatio = para->getForceRatio(); - this->stressRatio = para->getDensityRatio()*pow(para->getVelocityRatio(), 2.0); - this->accelerationRatio = para->getVelocityRatio()/para->getTimeRatio(); - this->viscosityRatio = para->getViscosityRatio(); + using std::placeholders::_1; + this->velocityRatio = std::bind(&Parameter::getScaledVelocityRatio, para, _1); + this->densityRatio = std::bind(&Parameter::getScaledDensityRatio, para, _1); + this->forceRatio = std::bind(&Parameter::getScaledForceRatio, para, _1); + this->stressRatio = std::bind(&Parameter::getScaledPressureRatio, para, _1); + this->viscosityRatio = std::bind(&Parameter::getScaledViscosityRatio, para, _1); + this->nondimensional = std::bind(&Probe::getNondimensionalConversionFactor, this, _1); probeParams.resize(para->getMaxLevel()+1); @@ -444,7 +449,7 @@ void Probe::writeGridFiles(Parameter* para, int level, std::vector<std::string>& for(uint arr=0; arr<n_arrs; arr++) { - coeff = postProcessingVariables[arr].conversionFactor; + coeff = postProcessingVariables[arr].conversionFactor(level); for (uint pos = startpos; pos < endpos; pos++) { diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h index 07ffd19c1..9cb0bd43e 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h @@ -92,9 +92,9 @@ enum class Statistic{ typedef struct PostProcessingVariable{ std::string name; - real conversionFactor; + std::function<real(int)> conversionFactor; PostProcessingVariable( std::string _name, - real _conversionFactor): + std::function<real(int)> _conversionFactor): name(_name), conversionFactor(_conversionFactor){}; } PostProcessingVariable; @@ -171,6 +171,8 @@ public: void setFileNameToNOut(){this->fileNameLU = false;} void setTStartTmpAveraging(uint _tStartTmpAveraging){this->tStartTmpAveraging = _tStartTmpAveraging;} + real getNondimensionalConversionFactor(int level); + private: virtual bool isAvailableStatistic(Statistic _variable) = 0; @@ -214,12 +216,12 @@ protected: uint tProbe = 0; //!> counter for number of probe evaluations. Only used when outputting timeseries - real velocityRatio; - real densityRatio; - real forceRatio; - real stressRatio; - real accelerationRatio; - real viscosityRatio; + std::function<real(int)> velocityRatio; + std::function<real(int)> densityRatio; + std::function<real(int)> forceRatio; + std::function<real(int)> stressRatio; + std::function<real(int)> viscosityRatio; + std::function<real(int)> nondimensional; }; #endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.cu index 06039e323..81da15595 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.cu +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.cu @@ -117,9 +117,9 @@ std::vector<PostProcessingVariable> WallModelProbe::getPostProcessingVariables(S postProcessingVariables.push_back( PostProcessingVariable("Fz_spatMean", this->outputStress? this->stressRatio: this->forceRatio) ); if(this->evaluatePressureGradient) { - postProcessingVariables.push_back( PostProcessingVariable("dpdx_spatMean", this->accelerationRatio) ); - postProcessingVariables.push_back( PostProcessingVariable("dpdy_spatMean", this->accelerationRatio) ); - postProcessingVariables.push_back( PostProcessingVariable("dpdz_spatMean", this->accelerationRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("dpdx_spatMean", this->forceRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("dpdy_spatMean", this->forceRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("dpdz_spatMean", this->forceRatio) ); } break; case Statistic::SpatioTemporalMeans: @@ -135,9 +135,9 @@ std::vector<PostProcessingVariable> WallModelProbe::getPostProcessingVariables(S postProcessingVariables.push_back( PostProcessingVariable("Fz_spatTmpMean", this->outputStress? this->stressRatio: this->forceRatio) ); if(this->evaluatePressureGradient) { - postProcessingVariables.push_back( PostProcessingVariable("dpdx_spatTmpMean", this->accelerationRatio) ); - postProcessingVariables.push_back( PostProcessingVariable("dpdy_spatTmpMean", this->accelerationRatio) ); - postProcessingVariables.push_back( PostProcessingVariable("dpdz_spatTmpMean", this->accelerationRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("dpdx_spatTmpMean", this->forceRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("dpdy_spatTmpMean", this->forceRatio) ); + postProcessingVariables.push_back( PostProcessingVariable("dpdz_spatTmpMean", this->forceRatio) ); } break; -- GitLab