Skip to content
Snippets Groups Projects
Commit 2d661a46 authored by LEGOLAS\lenz's avatar LEGOLAS\lenz
Browse files

fixes simulation file writer

parent 9706b14d
No related branches found
No related tags found
No related merge requests found
...@@ -122,7 +122,7 @@ void Geometry::addIndices(std::vector<SPtr<Grid> > grids, uint level, SPtr<Bound ...@@ -122,7 +122,7 @@ void Geometry::addIndices(std::vector<SPtr<Grid> > grids, uint level, SPtr<Bound
uint neighborIndex = grids[level]->transCoordToIndex( x, y, z ); uint neighborIndex = grids[level]->transCoordToIndex( x, y, z );
if( grids[level]->getFieldEntry(neighborIndex) == STOPPER_OUT_OF_GRID_BOUNDARY ) if( qNode[dir] < -0.5 && grids[level]->getFieldEntry(neighborIndex) == STOPPER_OUT_OF_GRID_BOUNDARY )
qNode[dir] = 0.5; qNode[dir] = 0.5;
} }
......
...@@ -8,6 +8,7 @@ const std::string simulationFileNames::coordZ = "coordZ" + fileEnding; ...@@ -8,6 +8,7 @@ const std::string simulationFileNames::coordZ = "coordZ" + fileEnding;
const std::string simulationFileNames::neighborX = "neighborX" + fileEnding; const std::string simulationFileNames::neighborX = "neighborX" + fileEnding;
const std::string simulationFileNames::neighborY = "neighborY" + fileEnding; const std::string simulationFileNames::neighborY = "neighborY" + fileEnding;
const std::string simulationFileNames::neighborZ = "neighborZ" + fileEnding; const std::string simulationFileNames::neighborZ = "neighborZ" + fileEnding;
const std::string simulationFileNames::neighborWSB = "neighborWSB" + fileEnding;
const std::string simulationFileNames::geoVec = "geoVec" + fileEnding; const std::string simulationFileNames::geoVec = "geoVec" + fileEnding;
const std::string simulationFileNames::scaleCFC = "scaleCFC" + fileEnding; const std::string simulationFileNames::scaleCFC = "scaleCFC" + fileEnding;
...@@ -39,3 +40,6 @@ const std::string simulationFileNames::inletBoundaryValues = "inletBoundaryValue ...@@ -39,3 +40,6 @@ const std::string simulationFileNames::inletBoundaryValues = "inletBoundaryValue
const std::string simulationFileNames::outletBoundaryQ = "outletBoundaryQs" + fileEnding; const std::string simulationFileNames::outletBoundaryQ = "outletBoundaryQs" + fileEnding;
const std::string simulationFileNames::outletBoundaryValues = "outletBoundaryValues" + fileEnding; const std::string simulationFileNames::outletBoundaryValues = "outletBoundaryValues" + fileEnding;
const std::string simulationFileNames::numberNodes = "numberNodes" + fileEnding;
const std::string simulationFileNames::LBMvsSI = "LBMvsSI" + fileEnding;
...@@ -13,6 +13,7 @@ struct VF_PUBLIC simulationFileNames ...@@ -13,6 +13,7 @@ struct VF_PUBLIC simulationFileNames
static const std::string neighborX; static const std::string neighborX;
static const std::string neighborY; static const std::string neighborY;
static const std::string neighborZ; static const std::string neighborZ;
static const std::string neighborWSB;
static const std::string geoVec; static const std::string geoVec;
static const std::string scaleCFC; static const std::string scaleCFC;
...@@ -43,6 +44,9 @@ struct VF_PUBLIC simulationFileNames ...@@ -43,6 +44,9 @@ struct VF_PUBLIC simulationFileNames
static const std::string outletBoundaryQ; static const std::string outletBoundaryQ;
static const std::string outletBoundaryValues; static const std::string outletBoundaryValues;
static const std::string numberNodes;
static const std::string LBMvsSI;
}; };
......
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
#include <omp.h> #include <omp.h>
#include "stdint.h" #include "stdint.h"
#include "VirtualFluidsBasics/utilities/logger/Logger.h"
#include "SimulationFileNames.h" #include "SimulationFileNames.h"
#include <GridGenerator/grid/NodeValues.h> #include <GridGenerator/grid/NodeValues.h>
...@@ -47,6 +49,9 @@ void SimulationFileWriter::write(SPtr<GridBuilder> builder, FILEFORMAT format) ...@@ -47,6 +49,9 @@ void SimulationFileWriter::write(SPtr<GridBuilder> builder, FILEFORMAT format)
for (uint level = 0; level < numberOfLevel; level++) for (uint level = 0; level < numberOfLevel; level++)
{ {
writeNumberNodes(builder, level);
writeLBMvsSI(builder, level);
writeLevelSize(builder->getNumberOfNodes(level)); writeLevelSize(builder->getNumberOfNodes(level));
writeCoordFiles(builder, level, format); writeCoordFiles(builder, level, format);
...@@ -65,13 +70,14 @@ void SimulationFileWriter::write(SPtr<GridBuilder> builder, FILEFORMAT format) ...@@ -65,13 +70,14 @@ void SimulationFileWriter::write(SPtr<GridBuilder> builder, FILEFORMAT format)
void SimulationFileWriter::openFiles() void SimulationFileWriter::openFiles()
{ {
std::string path = folder; std::string path = folder;
xCoordFile.open((path + simulationFileNames::coordX).c_str(), std::ios::out | std::ios::binary); xCoordFile.open(( path + simulationFileNames::coordX).c_str(), std::ios::out | std::ios::binary);
yCoordFile.open((path + simulationFileNames::coordY).c_str(), std::ios::out | std::ios::binary); yCoordFile.open(( path + simulationFileNames::coordY).c_str(), std::ios::out | std::ios::binary);
zCoordFile.open((path + simulationFileNames::coordZ).c_str(), std::ios::out | std::ios::binary); zCoordFile.open(( path + simulationFileNames::coordZ).c_str(), std::ios::out | std::ios::binary);
xNeighborFile.open((path + simulationFileNames::neighborX).c_str(), std::ios::out | std::ios::binary); xNeighborFile.open(( path + simulationFileNames::neighborX).c_str(), std::ios::out | std::ios::binary);
yNeighborFile.open((path + simulationFileNames::neighborY).c_str(), std::ios::out | std::ios::binary); yNeighborFile.open(( path + simulationFileNames::neighborY).c_str(), std::ios::out | std::ios::binary);
zNeighborFile.open((path + simulationFileNames::neighborZ).c_str(), std::ios::out | std::ios::binary); zNeighborFile.open(( path + simulationFileNames::neighborZ).c_str(), std::ios::out | std::ios::binary);
geoVecFile.open((path + simulationFileNames::geoVec).c_str(), std::ios::out | std::ios::binary); wsbNeighborFile.open(( path + simulationFileNames::neighborWSB).c_str(), std::ios::out | std::ios::binary);
geoVecFile.open(( path + simulationFileNames::geoVec).c_str(), std::ios::out | std::ios::binary);
scaleCF_coarse_File.open((path + simulationFileNames::scaleCFC).c_str(), std::ios::out | std::ios::binary); scaleCF_coarse_File.open((path + simulationFileNames::scaleCFC).c_str(), std::ios::out | std::ios::binary);
scaleCF_fine_File.open((path + simulationFileNames::scaleCFF).c_str(), std::ios::out | std::ios::binary); scaleCF_fine_File.open((path + simulationFileNames::scaleCFF).c_str(), std::ios::out | std::ios::binary);
...@@ -109,6 +115,34 @@ void SimulationFileWriter::openFiles() ...@@ -109,6 +115,34 @@ void SimulationFileWriter::openFiles()
outV->open(valueNames[i].c_str(), std::ios::out | std::ios::binary); outV->open(valueNames[i].c_str(), std::ios::out | std::ios::binary);
valueStreams.push_back(outV); valueStreams.push_back(outV);
} }
numberNodes_File.open((path + simulationFileNames::numberNodes).c_str(), std::ios::out | std::ios::binary);
LBMvsSI_File.open((path + simulationFileNames::LBMvsSI).c_str(), std::ios::out | std::ios::binary);
}
void SimulationFileWriter::writeNumberNodes(SPtr<GridBuilder> builder, uint level)
{
SPtr<Grid> grid = builder->getGrid(level);
numberNodes_File << level << '\n';
numberNodes_File << grid->getNumberOfNodesX() << ' ';
numberNodes_File << grid->getNumberOfNodesY() << ' ';
numberNodes_File << grid->getNumberOfNodesZ() << ' ';
numberNodes_File << '\n';
}
void SimulationFileWriter::writeLBMvsSI(SPtr<GridBuilder> builder, uint level)
{
SPtr<Grid> grid = builder->getGrid(level);
LBMvsSI_File << grid->getStartX() << ' ';
LBMvsSI_File << grid->getStartY() << ' ';
LBMvsSI_File << grid->getStartZ() << ' ';
LBMvsSI_File << grid->getEndX() << ' ';
LBMvsSI_File << grid->getEndY() << ' ';
LBMvsSI_File << grid->getEndZ() << ' ';
LBMvsSI_File << '\n';
} }
void SimulationFileWriter::writeLevel(uint numberOfLevels) void SimulationFileWriter::writeLevel(uint numberOfLevels)
...@@ -121,6 +155,7 @@ void SimulationFileWriter::writeLevel(uint numberOfLevels) ...@@ -121,6 +155,7 @@ void SimulationFileWriter::writeLevel(uint numberOfLevels)
xNeighborFile << level << "\n"; xNeighborFile << level << "\n";
yNeighborFile << level << "\n"; yNeighborFile << level << "\n";
zNeighborFile << level << "\n"; zNeighborFile << level << "\n";
wsbNeighborFile << level << "\n";
geoVecFile << level << "\n"; geoVecFile << level << "\n";
scaleCF_coarse_File << level << "\n"; scaleCF_coarse_File << level << "\n";
...@@ -150,6 +185,7 @@ void SimulationFileWriter::writeLevelSize(uint numberOfNodes) ...@@ -150,6 +185,7 @@ void SimulationFileWriter::writeLevelSize(uint numberOfNodes)
xNeighborFile << numberOfNodes << "\n" << zeroIndex; xNeighborFile << numberOfNodes << "\n" << zeroIndex;
yNeighborFile << numberOfNodes << "\n" << zeroIndex; yNeighborFile << numberOfNodes << "\n" << zeroIndex;
zNeighborFile << numberOfNodes << "\n" << zeroIndex; zNeighborFile << numberOfNodes << "\n" << zeroIndex;
wsbNeighborFile << numberOfNodes << "\n" << zeroIndex;
geoVecFile << numberOfNodes << "\n" << zeroGeo; geoVecFile << numberOfNodes << "\n" << zeroGeo;
//const std::string geoRB = "noSlip\n"; //const std::string geoRB = "noSlip\n";
...@@ -173,8 +209,9 @@ void SimulationFileWriter::writeLevelSizeGridInterface(uint sizeCF, uint sizeFC) ...@@ -173,8 +209,9 @@ void SimulationFileWriter::writeLevelSizeGridInterface(uint sizeCF, uint sizeFC)
void SimulationFileWriter::writeCoordFiles(SPtr<GridBuilder> builder, uint level, FILEFORMAT format) void SimulationFileWriter::writeCoordFiles(SPtr<GridBuilder> builder, uint level, FILEFORMAT format)
{ {
for (uint index = 0; index < builder->getNumberOfNodes(level); index++) for (uint index = 0; index < builder->getGrid(level)->getSize(); index++){
writeCoordsNeighborsGeo(builder, index, level, format); writeCoordsNeighborsGeo(builder, index, level, format);
}
xCoordFile << "\n"; xCoordFile << "\n";
yCoordFile << "\n"; yCoordFile << "\n";
...@@ -183,6 +220,7 @@ void SimulationFileWriter::writeCoordFiles(SPtr<GridBuilder> builder, uint level ...@@ -183,6 +220,7 @@ void SimulationFileWriter::writeCoordFiles(SPtr<GridBuilder> builder, uint level
xNeighborFile << "\n"; xNeighborFile << "\n";
yNeighborFile << "\n"; yNeighborFile << "\n";
zNeighborFile << "\n"; zNeighborFile << "\n";
wsbNeighborFile << "\n";
geoVecFile << "\n"; geoVecFile << "\n";
} }
...@@ -216,21 +254,23 @@ void SimulationFileWriter::writeCoordsNeighborsGeo(SPtr<GridBuilder> builder, in ...@@ -216,21 +254,23 @@ void SimulationFileWriter::writeCoordsNeighborsGeo(SPtr<GridBuilder> builder, in
xNeighborFile.write((char*)(&grid->getNeighborsX()[index] + 1), sizeof(unsigned int)); xNeighborFile.write((char*)(&grid->getNeighborsX()[index] + 1), sizeof(unsigned int));
yNeighborFile.write((char*)(&grid->getNeighborsY()[index] + 1), sizeof(unsigned int)); yNeighborFile.write((char*)(&grid->getNeighborsY()[index] + 1), sizeof(unsigned int));
zNeighborFile.write((char*)(&grid->getNeighborsZ()[index] + 1), sizeof(unsigned int)); zNeighborFile.write((char*)(&grid->getNeighborsZ()[index] + 1), sizeof(unsigned int));
wsbNeighborFile.write((char*)(&grid->getNeighborsNegative()[index] + 1), sizeof(unsigned int));
geoVecFile.write((char*)&type, sizeof(unsigned int)); geoVecFile.write((char*)&type, sizeof(unsigned int));
} }
else else
{ {
xCoordFile << x << " "; xCoordFile << x << "\n";
yCoordFile << y << " "; yCoordFile << y << "\n";
zCoordFile << z << " "; zCoordFile << z << "\n";
// + 1 for numbering shift between GridGenerator and VF_GPU // + 1 for numbering shift between GridGenerator and VF_GPU
xNeighborFile << (grid->getNeighborsX()[index] + 1) << " "; xNeighborFile << (grid->getNeighborsX()[index] + 1) << "\n";
yNeighborFile << (grid->getNeighborsY()[index] + 1) << " "; yNeighborFile << (grid->getNeighborsY()[index] + 1) << "\n";
zNeighborFile << (grid->getNeighborsZ()[index] + 1) << " "; zNeighborFile << (grid->getNeighborsZ()[index] + 1) << "\n";
wsbNeighborFile << (grid->getNeighborsNegative()[index] + 1) << "\n";
geoVecFile << type << " "; geoVecFile << type << "\n";
} }
} }
...@@ -282,7 +322,7 @@ void SimulationFileWriter::writeGridInterfaceToFile(SPtr<GridBuilder> builder, u ...@@ -282,7 +322,7 @@ void SimulationFileWriter::writeGridInterfaceToFile(SPtr<GridBuilder> builder, u
if (numberOfNodesFC > 0) if (numberOfNodesFC > 0)
{ {
writeGridInterfaceOffsetToFile(numberOfNodesCF, offsetVecFC_File, fc_offset_X, fc_offset_Y, fc_offset_Z); writeGridInterfaceOffsetToFile(numberOfNodesFC, offsetVecFC_File, fc_offset_X, fc_offset_Y, fc_offset_Z);
} }
delete[] cf_offset_X; delete[] cf_offset_X;
...@@ -429,7 +469,11 @@ void SimulationFileWriter::writeBoundaryQsFile(SPtr<GridBuilder> builder) ...@@ -429,7 +469,11 @@ void SimulationFileWriter::writeBoundaryQsFile(SPtr<GridBuilder> builder)
auto bc = builder->getBoundaryCondition( sides[side], level ); auto bc = builder->getBoundaryCondition( sides[side], level );
if( !bc ) continue; if( !bc ){
*valueStreams[side] << "noSlip\n" << "0\n" << "0\n";
*qStreams[side] << "0\n" << "0\n";
continue;
}
if( level == 0 ){ if( level == 0 ){
...@@ -521,25 +565,26 @@ void SimulationFileWriter::writeBoundaryShort(SPtr<Grid> grid, SPtr<BoundaryCond ...@@ -521,25 +565,26 @@ void SimulationFileWriter::writeBoundaryShort(SPtr<Grid> grid, SPtr<BoundaryCond
auto bcPressure = dynamic_cast< PressureBoundaryCondition* >( boundaryCondition.get() ); auto bcPressure = dynamic_cast< PressureBoundaryCondition* >( boundaryCondition.get() );
*valueStreams[side] << bcPressure->getRho() << " "; *valueStreams[side] << bcPressure->getRho() << " ";
*valueStreams[side] << bcPressure->neighborIndices[index] << " "; // + 1 for numbering shift between GridGenerator and VF_GPU
*valueStreams[side] << grid->getSparseIndex( bcPressure->neighborIndices[index] ) + 1 << " ";
} }
if( boundaryCondition->getType() == BC_VELOCITY ) if( boundaryCondition->getType() == BC_VELOCITY )
{ {
auto bcVelocity = dynamic_cast< VelocityBoundaryCondition* >( boundaryCondition.get() ); auto bcVelocity = dynamic_cast< VelocityBoundaryCondition* >( boundaryCondition.get() );
*valueStreams[side] << bcVelocity->getVx() << " "; *valueStreams[side] << bcVelocity->getVx(index) << " ";
*valueStreams[side] << bcVelocity->getVy() << " "; *valueStreams[side] << bcVelocity->getVy(index) << " ";
*valueStreams[side] << bcVelocity->getVz() << " "; *valueStreams[side] << bcVelocity->getVz(index) << " ";
} }
if( boundaryCondition->getType() == BC_SOLID ) if( boundaryCondition->getType() == BC_SOLID )
{ {
auto bcGeometry = dynamic_cast< GeometryBoundaryCondition* >( boundaryCondition.get() ); auto bcGeometry = dynamic_cast< GeometryBoundaryCondition* >( boundaryCondition.get() );
*valueStreams[side] << bcGeometry->getVx() << " "; *valueStreams[side] << bcGeometry->getVx(index) << " ";
*valueStreams[side] << bcGeometry->getVy() << " "; *valueStreams[side] << bcGeometry->getVy(index) << " ";
*valueStreams[side] << bcGeometry->getVz() << " "; *valueStreams[side] << bcGeometry->getVz(index) << " ";
} }
*valueStreams[side] << "\n"; *valueStreams[side] << "\n";
...@@ -555,6 +600,7 @@ void SimulationFileWriter::closeFiles() ...@@ -555,6 +600,7 @@ void SimulationFileWriter::closeFiles()
xNeighborFile.close(); xNeighborFile.close();
yNeighborFile.close(); yNeighborFile.close();
zNeighborFile.close(); zNeighborFile.close();
wsbNeighborFile.close();
geoVecFile.close(); geoVecFile.close();
scaleCF_coarse_File.close(); scaleCF_coarse_File.close();
...@@ -569,6 +615,9 @@ void SimulationFileWriter::closeFiles() ...@@ -569,6 +615,9 @@ void SimulationFileWriter::closeFiles()
qStreams[rb]->close(); qStreams[rb]->close();
valueStreams[rb]->close(); valueStreams[rb]->close();
} }
numberNodes_File.close();
LBMvsSI_File.close();
} }
...@@ -584,6 +633,7 @@ std::ofstream SimulationFileWriter::zCoordFile; ...@@ -584,6 +633,7 @@ std::ofstream SimulationFileWriter::zCoordFile;
std::ofstream SimulationFileWriter::xNeighborFile; std::ofstream SimulationFileWriter::xNeighborFile;
std::ofstream SimulationFileWriter::yNeighborFile; std::ofstream SimulationFileWriter::yNeighborFile;
std::ofstream SimulationFileWriter::zNeighborFile; std::ofstream SimulationFileWriter::zNeighborFile;
std::ofstream SimulationFileWriter::wsbNeighborFile;
std::ofstream SimulationFileWriter::geoVecFile; std::ofstream SimulationFileWriter::geoVecFile;
std::string SimulationFileWriter::folder; std::string SimulationFileWriter::folder;
...@@ -594,3 +644,6 @@ std::ofstream SimulationFileWriter::scaleFC_fine_File; ...@@ -594,3 +644,6 @@ std::ofstream SimulationFileWriter::scaleFC_fine_File;
std::ofstream SimulationFileWriter::offsetVecCF_File; std::ofstream SimulationFileWriter::offsetVecCF_File;
std::ofstream SimulationFileWriter::offsetVecFC_File; std::ofstream SimulationFileWriter::offsetVecFC_File;
std::ofstream SimulationFileWriter::numberNodes_File;
std::ofstream SimulationFileWriter::LBMvsSI_File;
...@@ -30,6 +30,10 @@ public: ...@@ -30,6 +30,10 @@ public:
private: private:
static void write(SPtr<GridBuilder> builder, FILEFORMAT format); static void write(SPtr<GridBuilder> builder, FILEFORMAT format);
static void openFiles(); static void openFiles();
static void writeNumberNodes(SPtr<GridBuilder> builder, uint level);
static void writeLBMvsSI(SPtr<GridBuilder> builder, uint level);
static void writeLevel(uint numberOfLevels); static void writeLevel(uint numberOfLevels);
static void writeLevelSize(uint numberOfNodes); static void writeLevelSize(uint numberOfNodes);
static void writeCoordFiles(SPtr<GridBuilder> builder, uint level, FILEFORMAT format); static void writeCoordFiles(SPtr<GridBuilder> builder, uint level, FILEFORMAT format);
...@@ -57,6 +61,7 @@ private: ...@@ -57,6 +61,7 @@ private:
static std::ofstream xNeighborFile; static std::ofstream xNeighborFile;
static std::ofstream yNeighborFile; static std::ofstream yNeighborFile;
static std::ofstream zNeighborFile; static std::ofstream zNeighborFile;
static std::ofstream wsbNeighborFile;
static std::ofstream geoVecFile; static std::ofstream geoVecFile;
static std::ofstream scaleCF_coarse_File; static std::ofstream scaleCF_coarse_File;
...@@ -72,6 +77,10 @@ private: ...@@ -72,6 +77,10 @@ private:
static std::vector<std::ofstream> qFiles; static std::vector<std::ofstream> qFiles;
static std::vector<std::ofstream> valueFiles; static std::vector<std::ofstream> valueFiles;
static std::ofstream numberNodes_File;
static std::ofstream LBMvsSI_File;
static std::string folder; static std::string folder;
}; };
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment