Microflow 3D  v1.0
FluidFromThread.cpp
Go to the documentation of this file.
1 // ==============================================================================================
2 // Microflow 3D, http://www.microflow.pwr.edu.pl/
3 // Created by Roman Szafran on 07.05.2020.
4 // Modified by Roman Szafran, last on 07.05.2020.
5 // Copyright (c) 2020 Wroclaw University of Science and Technology.
6 // Distributed under the Apache License, Version 2.0, You may obtain a copy of the License at
7 // http://www.apache.org/licenses/LICENSE-2.0 or see accompanying file license.txt.
8 // Redistributions of source code must retain the above copyright and license notice.
9 // ==============================================================================================
10 
11 #include "FluidFromThread.h"
12 #include "NodeID.h"
13 
14 void MF::GB::FluidFromThread::VDBFluidAdd(const openvdb::Int64Grid::Ptr& VDBGrid, const std::shared_ptr<MF::Database::ConfigData> & ConfigData_Ptr) {
15  MF::GB::NodeID nodeTMP, PresentNodeID;
16  nodeTMP.node_id.NodeID = {0};
17  for (unsigned int iter = 0; iter < ConfigData_Ptr->getThreadsNumber(); iter++) {
18  if (ConfigData_Ptr->getThreadStringParam(iter, "GridType") == "VDB") {
19  if (ConfigData_Ptr->getThreadParamLength(iter, "NodeFilePath") > 0) {
20  if (ConfigData_Ptr->getThreadIntParam(iter, "NodeTypeID") == 1) { //process only threads with definition of fluid nodes
21  auto nodeID = (int16_t) ConfigData_Ptr->getThreadIntParam(iter, "NodeTypeID");
22  std::string FilePath =
23  ConfigData_Ptr->CaseFolder + ConfigData_Ptr->getProgramStringParam("GeometryFolder") +
24  ConfigData_Ptr->getThreadStringParam(iter, "NodeFilePath");
25  auto data_Ptr = std::make_unique<std::vector<double>>();
26  std::vector<std::string> VariableNameList{
27  ConfigData_Ptr->getThreadStringVectorParam(0, iter, "NodeCoordinateFileColumnNames"),
28  ConfigData_Ptr->getThreadStringVectorParam(1, iter, "NodeCoordinateFileColumnNames"),
29  ConfigData_Ptr->getThreadStringVectorParam(2, iter, "NodeCoordinateFileColumnNames")};
30  MF::RW::CSVReader::DataReadFromCSVFile(FilePath, VariableNameList, data_Ptr.get());
31  auto accessor = VDBGrid->getAccessor();
32  openvdb::Coord xyz;
33  int32_t &i = xyz[0], &j = xyz[1], &h = xyz[2];
34 
35  for (auto it = data_Ptr->begin(); it < data_Ptr->end(); it += 3) {
36  i = int32_t(*it);
37  j = int32_t(*(it + 1));
38  h = int32_t(*(it + 2));
39  PresentNodeID.node_id.NodeID = accessor.getValue(xyz);
40  nodeTMP.node_id.Node.nodeType = nodeID;
41  nodeTMP.node_id.Node.uidThreadNr = (uint16_t) iter + 1; // uidThreadNr added from the thread_params.cfg starts from 1 because automatically created threads have uidThreadNr = 0;
42  accessor.setValue(xyz, nodeTMP.node_id.NodeID);
43  }
44  data_Ptr.reset();
45  }
46  }
47  }
48  }
49 }
struct MF::GB::NodeID::@0::@1 Node
A class that allows to determine the proper NodeID from combined nodeType, uidThreadNr, ThreadCount, ComponentNr and PhaseNr.
Definition: NodeID.h:18
static void VDBFluidAdd(const openvdb::Int64Grid::Ptr &VDBGrid, const std::shared_ptr< MF::Database::ConfigData > &ConfigData_Ptr)
static void DataReadFromCSVFile(const std::string &DataFilePath, const std::vector< std::string > &VariableNameList, std::vector< double > *pDataArray)
Reads data from text file.
Definition: CSVReader.cpp:13
uint64_t NodeID
Definition: NodeID.h:29
union MF::GB::NodeID::@0 node_id