diff --git a/source/Applications/DLR-F16-Solid/f16-solid-coarse.cfg b/source/Applications/DLR-F16-Solid/f16-solid-coarse.cfg index 5c6cc98a524836dd42cbecc956e66fc6ac9fae21..ef4dfc22d540e8f2f234e4cfa5d1cb0fcaad6e46 100644 --- a/source/Applications/DLR-F16-Solid/f16-solid-coarse.cfg +++ b/source/Applications/DLR-F16-Solid/f16-solid-coarse.cfg @@ -1,16 +1,16 @@ -pathOut = d:/temp/DLR-F16-Solid-L1 +pathOut = d:/temp/DLR-F16-Solid-L6 pathGeo = d:/Projects/SFB880/DLR-F16/Geometry fngFileWhole1 = F16_broad_Quad_noTape_full.stl fngFileWhole2 = F16_broad_Quad_thickTape_full.stl -accuracy = 1 +accuracy = 0 reinit = false pathReInit = /work/koskuche/DLR-F16_L1 stepReInit = 10000 -numOfThreads = 1 +numOfThreads = 8 availMem = 10e9 logToFile = false @@ -23,44 +23,44 @@ logToFile = false #boundingBox = -0.125 1.5 0.0 0.03 -1.1 0.3 #boundingBox = -0.90 1.5 0.0 0.03 -1.05 0.66 #boundingBox = -0.30 2.52 0.0 0.03 -2.08 2.08 -boundingBox = -0.3 1.17 0.0 0.03 -1.11 1.11 +boundingBox = -0.3 1.17 0.0 0.03 -1.17 1.17 blockNx = 10 10 10 -refineLevel = 1 +refineLevel = 6 #deltaXfine = 0.003 #level 0 -deltaXfine = 0.0015 #level 1 +#deltaXfine = 0.0015 #level 1 #deltaXfine = 0.00075 #level 2 #deltaXfine = 0.000375 #level 3 #deltaXfine = 0.0001875 #level 4 #deltaXfine = 0.00009375 #level 5 -#deltaXfine = 0.000046875 #level 6 +deltaXfine = 0.000046875 #level 6 #deltaXfine = 0.0000234375 #level 7 startDistance = -1.0e-3 -#refineDistance = 0.6e-3 -refineDistance = 30.0e-3 +refineDistance = 0.6e-3 +#refineDistance = 30.0e-3 -writeBlocks = false +writeBlocks = true -newStart = false -restartStep = 14000 +newStart = true +restartStep = 3000 cpStep = 1000 cpStart = 1000 -outTimeStep = 1000 -outTimeStart = 1000 +outTimeStep = 100 +outTimeStart = 100 -endTime = 26000 +endTime = 3100 #Cp #pcpStart = 1000000 #pcpStop = 1000000 -timeAvStart = 100 -timeAvStop = 100 +timeAvStart = 3000 +timeAvStop = 5000 nupsStep = 100 100 10000000 diff --git a/source/Applications/DLR-F16-Solid/f16.cpp b/source/Applications/DLR-F16-Solid/f16.cpp index d466749df99c369788d2bd2919f3236e7b611e1f..1924e67aa76bfdbc34a191296cce6b137f246406 100644 --- a/source/Applications/DLR-F16-Solid/f16.cpp +++ b/source/Applications/DLR-F16-Solid/f16.cpp @@ -133,6 +133,7 @@ void run(string configname) //if (myid==0) GbSystem3D::writeGeoObject(spongeLayerX1max.get(), pathOut+"/geo/spongeLayerX1max", WbWriterVtkXmlASCII::getInstance()); //return; + //////////////////////////////////////////////////////////////////////// //Grid ////////////////////////////////////////////////////////////////////////// @@ -458,6 +459,11 @@ void run(string configname) } grid->updateDistributedBlocks(comm); + if (writeBlocks) + { + migCoProcessor->writeBlocks(0); + } + std::vector<int> dirs; for (int i = D3Q27System::E; i<=D3Q27System::TS; i++) { @@ -520,6 +526,12 @@ void run(string configname) ppblocks.process(3); } + //SetSolidBlocksBlockVisitor fngSolidVisitor(fngIntrWhole2); + //grid->accept(fngSolidVisitor); + //SetBcBlocksBlockVisitor fngBcVisitor(fngIntrWhole2); + //grid->accept(fngBcVisitor); + + GbCuboid3DPtr mic6(new GbCuboid3D( 0.3, 0.015, -0.46+4.25*deltaXcoarse, 0.3+deltaXcoarse, 0.015+deltaXcoarse, -0.46+5.25*deltaXcoarse)); if (myid==0) GbSystem3D::writeGeoObject(mic6.get(), pathOut+"/geo/mic6", WbWriterVtkXmlBinary::getInstance()); GbCuboid3DPtr mic7(new GbCuboid3D(0.3, 0.015, -0.3+4.25*deltaXcoarse, 0.3+deltaXcoarse, 0.015+deltaXcoarse, -0.3+5.25*deltaXcoarse)); @@ -550,10 +562,7 @@ void run(string configname) UBLOG(logINFO, "Available memory per process = "<<availMem<<" bytes"); } - if (writeBlocks) - { - migCoProcessor->writeBlocks(0); - } + SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); grid->accept(kernelVisitor); @@ -576,6 +585,13 @@ void run(string configname) //BC intHelper.setBC(); + + //for (SPtr<Block3D> block : fngIntrWhole2->getSolidBlockSet()) + //{ + // fngIntrWhole2->setDifferencesToGbObject3D(block); + //} + //fngIntrWhole2->initInteractor(); + if (myid==0) UBLOG(logINFO, "intHelper.setBC():end"); if (myid==0) @@ -745,113 +761,39 @@ void run(string configname) if (myid==0) GbSystem3D::writeGeoObject(bbBox.get(), pathOut+"/geo/bbBox", WbWriterVtkXmlASCII::getInstance()); SPtr<WriteMQFromSelectionCoProcessor> writeMQSelectCoProcessor(new WriteMQFromSelectionCoProcessor(grid, stepSch, bbBox, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - //SPtr<UbScheduler> tavSch(new UbScheduler(1, timeAvStart, timeAvStop)); - //SPtr<TimeAveragedValuesCoProcessor> tav(new TimeAveragedValuesCoProcessor(grid, pathOut, WbWriterVtkXmlBinary::getInstance(), tavSch, comm, - // TimeAveragedValuesCoProcessor::Density | TimeAveragedValuesCoProcessor::Velocity | TimeAveragedValuesCoProcessor::Fluctuations)); - //tav->setWithGhostLayer(true); + SPtr<UbScheduler> tavSch(new UbScheduler(1, timeAvStart, timeAvStop)); + SPtr<TimeAveragedValuesCoProcessor> tav(new TimeAveragedValuesCoProcessor(grid, pathOut, WbWriterVtkXmlBinary::getInstance(), tavSch, comm, + TimeAveragedValuesCoProcessor::Density | TimeAveragedValuesCoProcessor::Velocity | TimeAveragedValuesCoProcessor::Fluctuations)); + tav->setWithGhostLayer(true); - //SPtr<IntegrateValuesHelper> mic1(new IntegrateValuesHelper(grid, comm, 0.3-deltaXfine, 0.015, 0.0005, 0.3, 0.015+deltaXfine, 0.0005+deltaXfine)); - //if (myid==0) GbSystem3D::writeGeoObject(mic1->getBoundingBox().get(), pathOut+"/geo/mic1", WbWriterVtkXmlBinary::getInstance()); - //SPtr<UbScheduler> stepMV(new UbScheduler(1, 0, 1000000)); - //SPtr<TimeseriesCoProcessor> tsp1(new TimeseriesCoProcessor(grid, stepMV, mic1, pathOut+"/mic/mic1", comm)); - - //SPtr<IntegrateValuesHelper> mic2(new IntegrateValuesHelper(grid, comm, 0.3+deltaXfine, 0.015, 0.001685, 0.3, 0.015+deltaXfine, 0.001685+deltaXfine)); - //if (myid==0) GbSystem3D::writeGeoObject(mic2->getBoundingBox().get(), pathOut+"/geo/mic2", WbWriterVtkXmlBinary::getInstance()); - //SPtr<TimeseriesCoProcessor> tsp2(new TimeseriesCoProcessor(grid, stepMV, mic2, pathOut+"/mic/mic2", comm)); - - //SPtr<IntegrateValuesHelper> mic3(new IntegrateValuesHelper(grid, comm, 0.3-deltaXcoarse, 0.015, -0.46+4.25*deltaXcoarse, 0.3, 0.015+deltaXcoarse, -0.46+5.25*deltaXcoarse)); - //if (myid==0) GbSystem3D::writeGeoObject(mic3->getBoundingBox().get(), pathOut+"/geo/mic3", WbWriterVtkXmlBinary::getInstance()); - //SPtr<TimeseriesCoProcessor> tsp3(new TimeseriesCoProcessor(grid, stepMV, mic3, pathOut+"/mic/mic3", comm)); - - //SPtr<IntegrateValuesHelper> mic4(new IntegrateValuesHelper(grid, comm, 0.3-deltaXcoarse, 0.015, 0.46-5.25*deltaXcoarse, 0.3, 0.015+deltaXcoarse, 0.46-4.25*deltaXcoarse)); - //if (myid==0) GbSystem3D::writeGeoObject(mic4->getBoundingBox().get(), pathOut+"/geo/mic4", WbWriterVtkXmlBinary::getInstance()); - //SPtr<TimeseriesCoProcessor> tsp4(new TimeseriesCoProcessor(grid, stepMV, mic4, pathOut+"/mic/mic4", comm)); - - //SPtr<IntegrateValuesHelper> mic5(new IntegrateValuesHelper(grid, comm, 0.3+deltaXfine, 0.015, 0.000517+0.00037+7.0*deltaXfine, 0.3+2.0*deltaXfine, 0.015+deltaXfine, 0.000517+0.00037+8.0*deltaXfine)); - //if (myid==0) GbSystem3D::writeGeoObject(mic5->getBoundingBox().get(), pathOut+"/geo/mic5", WbWriterVtkXmlBinary::getInstance()); - //SPtr<TimeseriesCoProcessor> tsp5(new TimeseriesCoProcessor(grid, stepMV, mic5, pathOut+"/mic/mic5", comm)); - - ////0.46 m / 1.5c - //SPtr<IntegrateValuesHelper> mic6(new IntegrateValuesHelper(grid, comm, 0.3, 0.015, -0.4599-deltaXcoarse, 0.3+deltaXcoarse, 0.015+deltaXcoarse, -0.4599)); - //if (myid==0) GbSystem3D::writeGeoObject(mic6->getBoundingBox().get(), pathOut+"/geo/mic6", WbWriterVtkXmlBinary::getInstance()); - //SPtr<TimeseriesCoProcessor> tsp6(new TimeseriesCoProcessor(grid, stepMV, mic6, pathOut+"/mic/mic6", comm)); - - ////0.3 m / 1.0c - //SPtr<IntegrateValuesHelper> mic7(new IntegrateValuesHelper(grid, comm, 0.3, 0.015, -0.299, 0.3+deltaXcoarse, 0.015+deltaXcoarse, -0.299+deltaXcoarse)); - //if (myid==0) GbSystem3D::writeGeoObject(mic7->getBoundingBox().get(), pathOut+"/geo/mic7", WbWriterVtkXmlBinary::getInstance()); - //SPtr<TimeseriesCoProcessor> tsp7(new TimeseriesCoProcessor(grid, stepMV, mic7, pathOut+"/mic/mic7", comm)); - - ////0.075 m / 0.25c - //SPtr<IntegrateValuesHelper> mic8(new IntegrateValuesHelper(grid, comm, 0.3, 0.015, -0.0744-deltaXcoarse, 0.3+deltaXcoarse, 0.015+deltaXcoarse, -0.0744)); - //if (myid==0) GbSystem3D::writeGeoObject(mic8->getBoundingBox().get(), pathOut+"/geo/mic8", WbWriterVtkXmlBinary::getInstance()); - //SPtr<TimeseriesCoProcessor> tsp8(new TimeseriesCoProcessor(grid, stepMV, mic8, pathOut+"/mic/mic8", comm)); - - double dist = 0.0744; //0.25c SPtr<UbScheduler> stepMV(new UbScheduler(1, 0, 1000000)); - //0.0 - //SPtr<IntegrateValuesHelper> mic0new(new IntegrateValuesHelper(grid, comm, 0.3+deltaXfine, 0.015, 0.000517+0.00037+7.0*deltaXfine, 0.3+2.0*deltaXfine, 0.015+deltaXfine, 0.000517+0.00037+8.0*deltaXfine)); - //if (myid==0) GbSystem3D::writeGeoObject(mic0new->getBoundingBox().get(), pathOut+"/geo/mic0new", WbWriterVtkXmlBinary::getInstance()); - //SPtr<TimeseriesCoProcessor> tsp0(new TimeseriesCoProcessor(grid, stepMV, mic0new, pathOut+"/mic/mic0new", comm)); - ////0.25c - //SPtr<IntegrateValuesHelper> mic1new(new IntegrateValuesHelper(grid, comm, 0.3, 0.015, -dist-deltaXcoarse, 0.3+deltaXcoarse, 0.015+deltaXcoarse, -dist)); - //if (myid==0) GbSystem3D::writeGeoObject(mic1new->getBoundingBox().get(), pathOut+"/geo/mic1new", WbWriterVtkXmlBinary::getInstance()); - //SPtr<TimeseriesCoProcessor> tsp1(new TimeseriesCoProcessor(grid, stepMV, mic1new, pathOut+"/mic/mic1new", comm)); - ////0.5c - //SPtr<IntegrateValuesHelper> mic2new(new IntegrateValuesHelper(grid, comm, 0.3, 0.015, -dist*2.0-deltaXcoarse, 0.3+deltaXcoarse, 0.015+deltaXcoarse, -dist*2.0)); - //if (myid==0) GbSystem3D::writeGeoObject(mic2new->getBoundingBox().get(), pathOut+"/geo/mic2new", WbWriterVtkXmlBinary::getInstance()); - //SPtr<TimeseriesCoProcessor> tsp2(new TimeseriesCoProcessor(grid, stepMV, mic2new, pathOut+"/mic/mic2new", comm)); - ////0.75c - //SPtr<IntegrateValuesHelper> mic3new(new IntegrateValuesHelper(grid, comm, 0.3, 0.015, -dist*3.0-deltaXcoarse, 0.3+deltaXcoarse, 0.015+deltaXcoarse, -dist*3.0)); - //if (myid==0) GbSystem3D::writeGeoObject(mic3new->getBoundingBox().get(), pathOut+"/geo/mic3new", WbWriterVtkXmlBinary::getInstance()); - //SPtr<TimeseriesCoProcessor> tsp3(new TimeseriesCoProcessor(grid, stepMV, mic3new, pathOut+"/mic/mic3new", comm)); - ////1.0c - //SPtr<IntegrateValuesHelper> mic4new(new IntegrateValuesHelper(grid, comm, 0.3, 0.015, -dist*4.0-deltaXcoarse, 0.3+deltaXcoarse, 0.015+deltaXcoarse, -dist*4.0)); - //if (myid==0) GbSystem3D::writeGeoObject(mic4new->getBoundingBox().get(), pathOut+"/geo/mic4new", WbWriterVtkXmlBinary::getInstance()); - //SPtr<TimeseriesCoProcessor> tsp4(new TimeseriesCoProcessor(grid, stepMV, mic4new, pathOut+"/mic/mic4new", comm)); - ////1.25c - //SPtr<IntegrateValuesHelper> mic5new(new IntegrateValuesHelper(grid, comm, 0.3, 0.015, -dist*5.0-deltaXcoarse, 0.3+deltaXcoarse, 0.015+deltaXcoarse, -dist*5.0)); - //if (myid==0) GbSystem3D::writeGeoObject(mic5new->getBoundingBox().get(), pathOut+"/geo/mic5new", WbWriterVtkXmlBinary::getInstance()); - //SPtr<TimeseriesCoProcessor> tsp5(new TimeseriesCoProcessor(grid, stepMV, mic5new, pathOut+"/mic/mic5new", comm)); - ////1.5c - //SPtr<IntegrateValuesHelper> mic6new(new IntegrateValuesHelper(grid, comm, 0.3, 0.015, -dist*6.0-deltaXcoarse, 0.3+deltaXcoarse, 0.015+deltaXcoarse, -dist*6.0)); - //if (myid==0) GbSystem3D::writeGeoObject(mic6new->getBoundingBox().get(), pathOut+"/geo/mic6new", WbWriterVtkXmlBinary::getInstance()); - //SPtr<TimeseriesCoProcessor> tsp6(new TimeseriesCoProcessor(grid, stepMV, mic6new, pathOut+"/mic/mic6new", comm)); - ////1.75c - //SPtr<IntegrateValuesHelper> mic7new(new IntegrateValuesHelper(grid, comm, 0.3, 0.015, -dist*7.0-deltaXcoarse, 0.3+deltaXcoarse, 0.015+deltaXcoarse, -dist*7.0)); - //if (myid==0) GbSystem3D::writeGeoObject(mic7new->getBoundingBox().get(), pathOut+"/geo/mic7new", WbWriterVtkXmlBinary::getInstance()); - //SPtr<TimeseriesCoProcessor> tsp7(new TimeseriesCoProcessor(grid, stepMV, mic7new, pathOut+"/mic/mic7new", comm)); - ////2.0c - //SPtr<IntegrateValuesHelper> mic8new(new IntegrateValuesHelper(grid, comm, 0.3, 0.015, -dist*8.0-deltaXcoarse, 0.3+deltaXcoarse, 0.015+deltaXcoarse, -dist*8.0)); - //if (myid==0) GbSystem3D::writeGeoObject(mic8new->getBoundingBox().get(), pathOut+"/geo/mic8new", WbWriterVtkXmlBinary::getInstance()); - //SPtr<TimeseriesCoProcessor> tsp8(new TimeseriesCoProcessor(grid, stepMV, mic8new, pathOut+"/mic/mic8new", comm)); - SPtr<MicrophoneArrayCoProcessor> micCoProcessor(new MicrophoneArrayCoProcessor(grid, stepSch, pathOut, comm) ); - micCoProcessor->addMicrophone(Vector3D(0.47, 0.015, -1.0)); - micCoProcessor->addMicrophone(Vector3D(0.47, 0.015, -0.5)); - micCoProcessor->addMicrophone(Vector3D(0.47, 0.015, 0.0)); - micCoProcessor->addMicrophone(Vector3D(0.47, 0.015, 0.5)); - micCoProcessor->addMicrophone(Vector3D(0.47, 0.015, 1.0)); - - + double offsetX1 = 0.017; + double offsetZ1 = 0.11375; + std::vector<UbTupleFloat3> nodes; + for (int i = 0; i <= 10; i++) + { + micCoProcessor->addMicrophone(Vector3D(0.31+offsetX1*double(i), 0.015, 0.0-offsetZ1*double(i))); + nodes.push_back(UbTupleFloat3(float(0.31+offsetX1*float(i)), float(0.015), float(0.0-offsetZ1*float(i)))); + } + double offsetX2 = 0.1; + for (int i = 0; i <= 6; i++) + { + micCoProcessor->addMicrophone(Vector3D(0.17+offsetX2*double(i), 0.015, -1.1375)); + nodes.push_back(UbTupleFloat3(float(0.17+offsetX2*float(i)), float(0.015), float(-1.1375))); + } + + if (myid==0) WbWriterVtkXmlBinary::getInstance()->writeNodes(pathOut+"/geo/mic", nodes); omp_set_num_threads(numOfThreads); SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, endTime)); calculator->addCoProcessor(nupsCoProcessor); - //calculator->addCoProcessor(tsp0); - //calculator->addCoProcessor(tsp1); - //calculator->addCoProcessor(tsp2); - //calculator->addCoProcessor(tsp3); - //calculator->addCoProcessor(tsp4); - //calculator->addCoProcessor(tsp5); - //calculator->addCoProcessor(tsp6); - //calculator->addCoProcessor(tsp7); - //calculator->addCoProcessor(tsp8); calculator->addCoProcessor(micCoProcessor); - //calculator->addCoProcessor(restartCoProcessor); - //calculator->addCoProcessor(writeMQSelectCoProcessor); - //calculator->addCoProcessor(writeMQCoProcessor); - //calculator->addCoProcessor(tav); + calculator->addCoProcessor(restartCoProcessor); + calculator->addCoProcessor(writeMQSelectCoProcessor); + calculator->addCoProcessor(writeMQCoProcessor); + calculator->addCoProcessor(tav); if (myid==0) UBLOG(logINFO, "Simulation-start"); diff --git a/source/VirtualFluidsBasic/basics/utilities/UbLogger.h b/source/VirtualFluidsBasic/basics/utilities/UbLogger.h index 0f6cbd37b4db4a2b298d0fbcb5b023e51fa22802..baaf8e5e47c421846f9da423da635dac16de9261 100644 --- a/source/VirtualFluidsBasic/basics/utilities/UbLogger.h +++ b/source/VirtualFluidsBasic/basics/utilities/UbLogger.h @@ -12,7 +12,6 @@ #include <iostream> #include <fstream> #include <iomanip> -#include <PointerDefinitions.h> #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(_WIN64) || defined(__WIN64__) #include <windows.h> diff --git a/source/VirtualFluidsBasic/basics/writer/WbWriterVtkXmlBinary.cpp b/source/VirtualFluidsBasic/basics/writer/WbWriterVtkXmlBinary.cpp index a6a0bcbaed4341d2070534805f2516b82c9047df..e10ef65395d0ddfa6724b4a30dc66a6b2f35ed99 100644 --- a/source/VirtualFluidsBasic/basics/writer/WbWriterVtkXmlBinary.cpp +++ b/source/VirtualFluidsBasic/basics/writer/WbWriterVtkXmlBinary.cpp @@ -1494,7 +1494,7 @@ std::string WbWriterVtkXmlBinary::writeNodesWithNodeData(const std::string& file int bytesCellConnectivty = 1 /*nodes per cell */ * nofNodes * sizeof(int ); int bytesCellOffsets = 1 /*offset per cell*/ * nofNodes * sizeof(int ); int bytesCellTypes = 1 /*type of oct */ * nofNodes * sizeof(unsigned char); - int bytesScalarData = 1 /*scalar */ * nofNodes * sizeof(float); + int bytesScalarData = 1 /*scalar */ * nofNodes * sizeof(double); int offset = 0; //VTK FILE @@ -1523,7 +1523,7 @@ std::string WbWriterVtkXmlBinary::writeNodesWithNodeData(const std::string& file out<<" <PointData>\n"; for(size_t s=0; s<datanames.size(); ++s) { - out<< " <DataArray type=\"Float32\" Name=\""<< datanames[s] <<"\" format=\"appended\" offset=\""<< offset <<"\" /> \n"; + out<< " <DataArray type=\"Float64\" Name=\""<< datanames[s] <<"\" format=\"appended\" offset=\""<< offset <<"\" /> \n"; offset += (bytesPerByteVal + bytesScalarData); } out<<" </PointData>\n"; @@ -1569,8 +1569,10 @@ std::string WbWriterVtkXmlBinary::writeNodesWithNodeData(const std::string& file for(size_t d=0; d<nodedata[s].size(); ++d) { //loake kopie machen, da in nodedata "doubles" sind - float tmp = (float)nodedata[s][d]; - out.write((char*)&tmp,sizeof(float)); + //float tmp = (float)nodedata[s][d]; + //out.write((char*)&tmp,sizeof(float)); + double tmp = nodedata[s][d]; + out.write((char*)&tmp, sizeof(double)); } } out<<"\n</AppendedData>\n"; diff --git a/source/VirtualFluidsCore/CoProcessors/MicrophoneArrayCoProcessor.cpp b/source/VirtualFluidsCore/CoProcessors/MicrophoneArrayCoProcessor.cpp index e9acb40fb0eb4eb62ca0b52b8b0dcb210995aab4..86bc2b7a35c816442a6135b394696c888ccd9001 100644 --- a/source/VirtualFluidsCore/CoProcessors/MicrophoneArrayCoProcessor.cpp +++ b/source/VirtualFluidsCore/CoProcessors/MicrophoneArrayCoProcessor.cpp @@ -8,6 +8,8 @@ #include "DataSet3D.h" #include "D3Q27System.h" #include "UbScheduler.h" +#include "BCProcessor.h" +#include "BCArray3D.h" MicrophoneArrayCoProcessor::MicrophoneArrayCoProcessor(SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string & path, SPtr<Communicator> comm) : CoProcessor(grid, s), path(path), comm(comm) { @@ -48,32 +50,38 @@ void MicrophoneArrayCoProcessor::addMicrophone(Vector3D coords) SPtr<ILBMKernel> kernel = block->getKernel(); if (kernel) { - if (kernel->getCompressible()) + SPtr<BCArray3D> bcarray = kernel->getBCProcessor()->getBCArray(); + UbTupleInt3 nodes = grid->getNodeIndexes(block, coords[0], coords[1], coords[2]); + if (!bcarray->isUndefined(val<1>(nodes), val<2>(nodes), val<3>(nodes))) { - calcMacros = &D3Q27System::calcCompMacroscopicValues; - } - else - { - calcMacros = &D3Q27System::calcIncompMacroscopicValues; - } - SPtr<Mic> mic(new Mic); - mic->distridution = kernel->getDataSet()->getFdistributions(); - mic->nodeIndexes = grid->getNodeIndexes(block, coords[0], coords[1], coords[2]); - microphones.push_back(mic); - values.resize((microphones.size()+1)*static_cast<int>(scheduler->getMinStep())); - std::string fname = path+"/mic/mic_"+UbSystem::toString(comm->getProcessID())+".csv"; - std::ofstream ostr; - ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app); - if (!ostr) - { - ostr.clear(); - std::string path = UbSystem::getPathFromString(fname); - if (path.size()>0) { UbSystem::makeDirectory(path); ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app); } - if (!ostr) throw UbException(UB_EXARGS, "couldn't open file "+fname); + if (kernel->getCompressible()) + { + calcMacros = &D3Q27System::calcCompMacroscopicValues; + } + else + { + calcMacros = &D3Q27System::calcIncompMacroscopicValues; + } + SPtr<Mic> mic(new Mic); + mic->distridution = kernel->getDataSet()->getFdistributions(); + mic->nodeIndexes = grid->getNodeIndexes(block, coords[0], coords[1], coords[2]); + microphones.push_back(mic); + values.resize((microphones.size()+1)*static_cast<int>(scheduler->getMinStep())); + + std::string fname = path+"/mic/mic_"+UbSystem::toString(comm->getProcessID())+".csv"; + std::ofstream ostr; + ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app); + if (!ostr) + { + ostr.clear(); + std::string path = UbSystem::getPathFromString(fname); + if (path.size()>0) { UbSystem::makeDirectory(path); ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app); } + if (!ostr) throw UbException(UB_EXARGS, "couldn't open file "+fname); + } + ostr << "#microphone position: " << coords[0] << "; " << coords[1] << "; " << coords[2] << "; " << "\n"; + return; } - ostr << "#microphone position: " << coords[0] << "; " << coords[1] << "; " << coords[2] << "; " << "\n"; - return; } } }