From 8d995934aa853ed2c399cc89fae3f959b94da303 Mon Sep 17 00:00:00 2001 From: Henry <henry.korb@geo.uu.se> Date: Thu, 20 Jan 2022 13:45:42 +0100 Subject: [PATCH] minor changes in actuator line and probe --- .../PreCollisionInteractor/ActuatorLine.cu | 8 +- .../PreCollisionInteractor/Probes/Probe.cu | 90 +++++++++---------- .../PreCollisionInteractor/Probes/Probe.h | 2 +- 3 files changed, 50 insertions(+), 50 deletions(-) diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.cu index 7c49f1dc4..80560a514 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.cu +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.cu @@ -151,9 +151,9 @@ __global__ void applyBodyForces(real* gridCoordsX, real* gridCoordsY, real* grid fXYZ_Y += bladeForcesY[nBladeNodes-1]*(radius-last_r)*eta; fXYZ_Z += bladeForcesZ[nBladeNodes-1]*(radius-last_r)*eta; } - atomicAdd(&gridForcesX[gridIndex], fXYZ_X); - atomicAdd(&gridForcesY[gridIndex], fXYZ_Y); - atomicAdd(&gridForcesZ[gridIndex], fXYZ_Z); + atomicAdd(&gridForcesX[gridIndex], fXYZ_X*invForceRatio); + atomicAdd(&gridForcesY[gridIndex], fXYZ_Y*invForceRatio); + atomicAdd(&gridForcesZ[gridIndex], fXYZ_Z*invForceRatio); } @@ -291,7 +291,7 @@ void ActuatorLine::rotateBlades(real angle) real newCoordX, newCoordY, newCoordZ; rotateAboutX3D(angle, oldCoordX, oldCoordY, oldCoordZ, newCoordX, newCoordY, newCoordZ, this->turbinePosX, this->turbinePosY, this->turbinePosZ); - this->bladeCoordsYH[node] = newCoordX; + this->bladeCoordsXH[node] = newCoordX; this->bladeCoordsYH[node] = newCoordY; this->bladeCoordsZH[node] = newCoordZ; } diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu index 8c789616f..c3c94bb56 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu @@ -38,6 +38,7 @@ std::vector<std::string> getPostProcessingVariableNames(PostProcessingVariable v return varNames; } + __device__ void calculateQuantities(uint n, real* quantityArray, bool* quantities, uint* quantityArrayOffsets, uint nPoints, uint node, real vx, real vy, real vz, real rho) { //"https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm" @@ -85,6 +86,7 @@ __device__ void calculateQuantities(uint n, real* quantityArray, bool* quantitie } } + __global__ void interpQuantities( uint* pointIndices, uint nPoints, uint n, real* distX, real* distY, real* distZ, @@ -180,8 +182,14 @@ void Probe::init(Parameter* para, GridProvider* gridProvider, CudaMemoryManager* pointCoordsX_level, pointCoordsY_level, pointCoordsZ_level, level); } -} + for( int var=0; var < int(PostProcessingVariable::LAST); var++) + { + if(!this->quantities[var]) continue; + std::vector<std::string> names = getPostProcessingVariableNames(static_cast<PostProcessingVariable>(var)); + this->varNames.insert(this->varNames.end(), names.begin(), names.end()); + } +} void Probe::addProbeStruct(CudaMemoryManager* cudaManager, std::vector<int>& probeIndices, @@ -217,14 +225,14 @@ void Probe::addProbeStruct(CudaMemoryManager* cudaManager, std::vector<int>& pro cudaManager->cudaAllocProbeQuantitiesAndOffsets(this, level); - for( int var=0; var<int(PostProcessingVariable::LAST); var++){ - if(this->quantities[var]) + for( int var=0; var<int(PostProcessingVariable::LAST); var++) { + if(!this->quantities[var]) continue; probeParams[level]->quantitiesH[var] = true; probeParams[level]->arrayOffsetsH[var] = arrOffset; arrOffset += uint(getPostProcessingVariableNames(static_cast<PostProcessingVariable>(var)).size()); - }} + } cudaManager->cudaCopyProbeQuantitiesAndOffsetsHtoD(this, level); @@ -313,39 +321,43 @@ void Probe::writeCollectionFile(Parameter* para, int t) + "_t_" + StringUtil::toString<int>(t) + ".vtk"; - std::ofstream file; + std::vector<std::string> cellNames; + + WbWriterVtkXmlBinary::getInstance()->writeParallelFile(filename, this->fileNamesForCollectionFile, this->varNames, cellNames); - file.open( filename + ".pvtu" ); + // std::ofstream file; - ////////////////////////////////////////////////////////////////////////// + // file.open( filename + ".pvtu" ); + + // ////////////////////////////////////////////////////////////////////////// - file << "<VTKFile type=\"PUnstructuredGrid\" version=\"1.0\" byte_order=\"LittleEndian\" header_type=\"UInt64\">" << std::endl; - file << " <PUnstructuredGrid GhostLevel=\"1\">" << std::endl; + // file << "<VTKFile type=\"PUnstructuredGrid\" version=\"1.0\" byte_order=\"LittleEndian\" header_type=\"UInt64\">" << std::endl; + // file << " <PUnstructuredGrid GhostLevel=\"1\">" << std::endl; - file << " <PPointData>" << std::endl; + // file << " <PPointData>" << std::endl; - for(std::string varName: this->getVarNames()) - { - file << " <DataArray type=\"Float64\" Name=\""<< varName << "\" /> " << std::endl; - } - file << " </PPointData>" << std::endl; + // for(std::string varName: this->getVarNames()) + // { + // file << " <DataArray type=\"Float64\" Name=\""<< varName << "\" /> " << std::endl; + // } + // file << " </PPointData>" << std::endl; - file << " <PPoints>" << std::endl; - file << " <PDataArray type=\"Float32\" Name=\"Points\" NumberOfComponents=\"3\"/>" << std::endl; - file << " </PPoints>" << std::endl; + // file << " <PPoints>" << std::endl; + // file << " <PDataArray type=\"Float32\" Name=\"Points\" NumberOfComponents=\"3\"/>" << std::endl; + // file << " </PPoints>" << std::endl; - for( auto& fname : this->fileNamesForCollectionFile ) - { - const auto filenameWithoutPath=fname.substr( fname.find_last_of('/') + 1 ); - file << " <Piece Source=\"" << filenameWithoutPath << ".bin.vtu\"/>" << std::endl; - } + // for( auto& fname : this->fileNamesForCollectionFile ) + // { + // const auto filenameWithoutPath=fname.substr( fname.find_last_of('/') + 1 ); + // file << " <Piece Source=\"" << filenameWithoutPath << ".bin.vtu\"/>" << std::endl; + // } - file << " </PUnstructuredGrid>" << std::endl; - file << "</VTKFile>" << std::endl; + // file << " </PUnstructuredGrid>" << std::endl; + // file << "</VTKFile>" << std::endl; - ////////////////////////////////////////////////////////////////////////// + // ////////////////////////////////////////////////////////////////////////// - file.close(); + // file.close(); this->fileNamesForCollectionFile.clear(); } @@ -353,12 +365,11 @@ void Probe::writeCollectionFile(Parameter* para, int t) void Probe::writeGridFiles(Parameter* para, int level, std::vector<std::string>& fnames, int t) { std::vector< UbTupleFloat3 > nodes; - std::vector< std::string > nodedatanames = this->getVarNames(); uint startpos = 0; uint endpos = 0; uint sizeOfNodes = 0; - std::vector< std::vector< double > > nodedata(nodedatanames.size()); + std::vector< std::vector< double > > nodedata(this->varNames.size()); SPtr<ProbeStruct> probeStruct = this->getProbeStruct(level); @@ -380,9 +391,10 @@ void Probe::writeGridFiles(Parameter* para, int level, std::vector<std::string>& for( auto it=nodedata.begin(); it!=nodedata.end(); it++) it->resize(sizeOfNodes); - for( int var=0; var < int(PostProcessingVariable::LAST); var++){ - if(this->quantities[var]) + for( int var=0; var < int(PostProcessingVariable::LAST); var++) { + if(!this->quantities[var]) continue; + PostProcessingVariable quantity = static_cast<PostProcessingVariable>(var); real coeff; uint n_arrs = uint(getPostProcessingVariableNames(quantity).size()); @@ -408,20 +420,8 @@ void Probe::writeGridFiles(Parameter* para, int level, std::vector<std::string>& nodedata[arrOff+arr][pos-startpos] = double(probeStruct->quantitiesArrayH[(arrOff+arr)*arrLen+pos]*coeff); } } - }} - WbWriterVtkXmlBinary::getInstance()->writeNodesWithNodeData(fnames[part], nodes, nodedatanames, nodedata); + } + WbWriterVtkXmlBinary::getInstance()->writeNodesWithNodeData(fnames[part], nodes, this->varNames, nodedata); } } -std::vector<std::string> Probe::getVarNames() -{ - std::vector<std::string> varNames; - for( int var=0; var < int(PostProcessingVariable::LAST); var++){ - if(this->quantities[var]) - { - std::vector<std::string> names = getPostProcessingVariableNames(static_cast<PostProcessingVariable>(var)); - varNames.insert(varNames.end(), names.begin(), names.end()); - }} - return varNames; -} - diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h index ba6ec5d67..9da3847ce 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h +++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h @@ -77,7 +77,7 @@ private: void write(Parameter* para, int level, int t); void writeCollectionFile(Parameter* para, int t); void writeGridFiles(Parameter* para, int level, std::vector<std::string >& fnames, int t); - std::vector<std::string> getVarNames(); + std::vector<std::string> getVarNames(){ return this->varNames; }; private: const std::string probeName; -- GitLab