25 while (*p <'0' || *p >
'9') p++;
32 FILE* file = fopen(
"/proc/self/status",
"r");
36 while (fgets(line, 128, file) != NULL){
37 if (strncmp(line,
"VmRSS:", 6) == 0){
46 void MF::Solver_CPU::ConsoleWriter::PrintComputationStatistics(
const std::chrono::time_point<std::chrono::high_resolution_clock> TimeStart,
const std::chrono::time_point<std::chrono::high_resolution_clock> TimeStop,
const unsigned int SimStep,
const std::shared_ptr<MF::Database::ThreadArray>& ThreadArray_Ptr) {
48 double cpu_time = std::chrono::duration_cast<std::chrono::duration<double, std::ratio<1> >> (TimeStop - TimeStart).count();
50 std::cout <<
"\n" <<
"Solver statistics : " << std::endl;
51 std::cout.unsetf(std::ios::scientific);
57 std::cout <<
"\n" <<
"CPU info: " << std::endl;
58 std::cout <<
"Maximum number of available threads = " << omp_get_max_threads() << std::endl;
59 std::cout <<
"Maximum number of available processor cores (including virtual) = " << omp_get_num_procs() << std::endl;
60 std::cout <<
"Number of CPU threads allocated for solver = " << CPU_ThreadsNr <<
"\n" << std::endl;
65 std::cout << std::endl;
66 std::cout <<
"Re = " << CaseParameters_Ptr->ReynoldsNumber_Re << std::endl;
67 std::cout <<
"U_Ch_LB = " << CaseParameters_Ptr->CharacteristicVelocityLBu_U_Ch_LB << std::endl;
68 std::cout <<
"Dt_phys [s] = " << CaseParameters_Ptr->DTPhysical_Dt_Phys << std::endl;
69 std::cout <<
"L_ch_LB [Lu] = " << CaseParameters_Ptr->CharacteristicLength_L_CH_LB << std::endl;
70 std::cout <<
"Nu_LB = " << CaseParameters_Ptr->FluidLBuViscosity_Nu_LB << std::endl;
71 std::cout <<
"Fx_LB = " << CaseParameters_Ptr->ForceX_LB << std::endl;
72 std::cout <<
"Fy_LB = " << CaseParameters_Ptr->ForceY_LB << std::endl;
73 std::cout <<
"Fz_LB = " << CaseParameters_Ptr->ForceZ_LB <<
"\n" << std::endl;
80 std::cout.setf(std::ios::left);
81 std::cout.setf(std::ios::scientific);
83 std::cout<<
"Grid statistics: " << std::endl;
94 float ratio = (total-fluid)/total*100;
95 std::cout.unsetf(std::ios::scientific);
96 std::cout<<
"Ratio of non-fluid nodes to total number of computational nodes [%] = " << ratio << std::endl;
97 std::cout<<
"Number of MFThreads = " << ThreadArray_Ptr->m_ThreadsTable_Ptr->size() << std::endl;
98 std::cout.setf(std::ios::scientific);
104 auto Time_now = std::chrono::high_resolution_clock::now();
105 double cpu_time = std::chrono::duration_cast<std::chrono::duration<double, std::ratio<1> >> (Time_now -
m_TimePreviousStep).count();
121 if (CaseParameters_Ptr->Sc_VelocityResidueError_ErrV > 0)
122 V_SimError = SimError_Vel;
126 double OutVMean, InVMean, DMF, DMF_LB;
128 if (CaseParameters_Ptr->AutomaticSurfaceChoice){
142 if (CaseParameters_Ptr->MassFlowError_ErrM > 0)
143 M_SimError = fabs(DMF);
149 std::cout <<
"Table legend: " <<
"Sc = Scaled, " <<
"M = Mean, " <<
"MLUPS = Million of Lattice nodes Updated Per Second." << std::endl;
154 std::cout << std::setw(194) << std::setfill(
'=') <<
"=" << std::setfill(
' ') << std::endl;
155 std::cout <<
"|" <<
" Step " <<
"|" <<
" Sc velocity residue, [-] " <<
"|" <<
" Maximal LB velocity, [-] " <<
"|" <<
" M outlet velocity, [m/s] " <<
"|" <<
" M inlet velocity, [m/s] " 156 <<
"|" <<
" Error mass flow, [%] " <<
"|" <<
" Error mass flow LB, [%] " <<
"|" <<
" MLUPS, [-] " <<
"|" << std::endl;
157 std::cout << std::setw(194) << std::setfill(
'=') <<
"=" << std::setfill(
' ') << std::endl;
161 std::cout <<
"| " << std::setw(8) << SimStep <<
"|" <<
" DeltaV = " << std::setw(16) << SimError_Vel <<
"|" <<
" uLB_maks = " << std::setw(14) << uLB_maks <<
"|" 162 <<
" OutVMean = " << std::setw(15) << OutVMean <<
"|" <<
" InVMean = " << std::setw(15) << InVMean <<
"|" <<
" DMF = " << std::setw(15) << DMF <<
"|" 163 <<
" DMF_LB = " << std::setw(15) << DMF_LB <<
"|" <<
" MLUPS = " << std::setw(15) << MLUPS <<
"|" << std::endl;
170 for (
auto & jt : *ThreadArray_Ptr->m_ThreadsTable_Ptr) {
171 std::cout << std::endl <<
"---- Thread nr = " << ++nr <<
" ----" << std::endl;
172 std::cout <<
"Thread name = " << jt.get()->m_ThreadName << std::endl;
173 std::cout <<
"NodeTypeID = " << jt.get()->m_NodeType << std::endl;
174 std::cout <<
"uidThreadNr = " << jt.get()->m_uidThreadNr << std::endl;
175 std::cout <<
"m_ThreadCount = " << jt.get()->m_ThreadCount << std::endl;
176 std::cout <<
"m_ComponentNr = " << (int)jt.get()->m_ComponentNr << std::endl;
177 std::cout <<
"m_PhaseNr = " << (int)jt.get()->m_PhaseNr << std::endl;
178 std::cout <<
"Do pre-collision = " << std::boolalpha << jt.get()->m_DoPreCollision << std::endl;
179 std::cout <<
"Do collision = " << std::boolalpha << jt.get()->m_DoCollision << std::endl;
180 std::cout <<
"Is on inlet surface = " << std::boolalpha << jt.get()->m_IsInletBalanceSurface << std::endl;
181 std::cout <<
"Is on outlet surface = " << std::boolalpha << jt.get()->m_IsOutletBalanceSurface << std::endl;
182 std::cout <<
"Boundary value ULB = " <<
"[" << jt.get()->m_BoundaryValue_ULB.x <<
"," << jt.get()->m_BoundaryValue_ULB.y <<
"," << jt.get()->m_BoundaryValue_ULB.z <<
"]" << std::endl;
183 std::cout <<
"Boundary value RhoLB = " << jt.get()->m_BoundaryValue_RhoLB << std::endl;
184 std::cout <<
"pBoundaryFunction = " <<
reinterpret_cast<void*
>(jt.get()->m_pBoundaryFunction) << std::endl;
185 std::cout <<
"pVRhoFunction = " <<
reinterpret_cast<double*
>(jt.get()->m_pVRLBFunction) << std::endl;
186 std::cout <<
"pCollideFunction = " <<
reinterpret_cast<void*
>(jt.get()->m_pColideFunc) << std::endl;
187 std::cout <<
"Nodes number = " << jt.get()->m_NodeArray_Ptr->size() << std::endl;
193 for (
auto & jt : *ThreadArray_Ptr->m_ThreadsTable_Ptr) {
194 std::cout << std::endl <<
"---- Thread nr = " << ++nr <<
" ----" << std::endl;
195 std::cout <<
"Thread name = " << jt.get()->m_ThreadName << std::endl;
196 std::cout <<
"NodeTypeID = " << jt.get()->m_NodeType << std::endl;
197 std::cout <<
"uidThreadNr = " << jt.get()->m_uidThreadNr << std::endl;
198 std::cout <<
"m_ThreadCount = " << jt.get()->m_ThreadCount << std::endl;
199 std::cout <<
"m_ComponentNr = " << (int)jt.get()->m_ComponentNr << std::endl;
200 std::cout <<
"m_PhaseNr = " << (int)jt.get()->m_PhaseNr << std::endl;
201 std::cout <<
"Do pre-collision = " << std::boolalpha << jt.get()->m_DoPreCollision << std::endl;
202 std::cout <<
"Do collision = " << std::boolalpha << jt.get()->m_DoCollision << std::endl;
203 std::cout <<
"Is on inlet surface = " << std::boolalpha << jt.get()->m_IsInletBalanceSurface << std::endl;
204 std::cout <<
"Is on outlet surface = " << std::boolalpha << jt.get()->m_IsOutletBalanceSurface << std::endl;
205 std::cout <<
"Boundary value ULB = " <<
"[" << jt.get()->m_BoundaryValue_ULB.x <<
"," << jt.get()->m_BoundaryValue_ULB.y <<
"," << jt.get()->m_BoundaryValue_ULB.z <<
"]" << std::endl;
206 std::cout <<
"Boundary value RhoLB = " << jt.get()->m_BoundaryValue_RhoLB << std::endl;
207 std::cout <<
"pBoundaryFunction = " <<
reinterpret_cast<void*
>(jt.get()->m_pBoundaryFunction) << std::endl;
208 std::cout <<
"pVRhoFunction = " <<
reinterpret_cast<double*
>(jt.get()->m_pVRLBFunction) << std::endl;
209 std::cout <<
"pCollideFunction = " <<
reinterpret_cast<void*
>(jt.get()->m_pColideFunc) << std::endl;
210 std::cout <<
"Nodes number = " << jt.get()->m_NodeArray_Ptr->size() << std::endl;
211 for (
auto node = 0; node < jt->m_Coordinate_Ptr.get()->size(); node++){
212 std::cout <<
"Node nr = " << node <<
" = [" << jt->m_Coordinate_Ptr->at(node).x <<
"," << jt->m_Coordinate_Ptr->at(node).y <<
"," << jt->m_Coordinate_Ptr->at(node).z <<
"]" << std::endl;
214 std::cout << std::endl <<
"**********************************************************************************" << std::endl;
220 const std::shared_ptr<MF::Solver_CPU::CaseParameters>& CaseParameters_Ptr,
221 const std::shared_ptr<MF::Database::ConfigData>& ConfigData_Ptr) {
223 std::cout << std::endl <<
"**********************************************************************************" << std::endl;
224 std::cout <<
"VERBOSE INFO ---program parameters---" << std::endl << std::endl;
227 std::cout <<
"File paths:" << std::endl;
228 std::cout <<
"\t CaseFolder = " << ProgramParameters_Ptr->CaseFolder << std::endl;
229 std::cout <<
"\t GeometryFolder = " << ProgramParameters_Ptr->GeometryFolder << std::endl;
230 std::cout <<
"\t GeometryFile = " << ProgramParameters_Ptr->GeometryFileName << std::endl;
231 std::cout <<
"\t CaseParametersFile = " << ProgramParameters_Ptr->CaseParametersFile << std::endl;
232 std::cout <<
"\t ThreadParametersFile = " << ProgramParameters_Ptr->ThreadParametersFile << std::endl;
233 std::cout <<
"\t ProgramParametersFile = " << ProgramParameters_Ptr->ProgramParametersFile << std::endl;
234 std::cout <<
"\t CheckPointFile = " << ProgramParameters_Ptr->CheckPointFile << std::endl;
235 std::cout <<
"\t OutputFile = " << ProgramParameters_Ptr->OutputFile << std::endl;
237 std::cout << std::endl;
240 std::cout <<
"*" << std::endl;
243 std::cout <<
"VERBOSE INFO ---case parameters---" << std::endl << std::endl;
244 std::cout <<
"BasicParams:" << std::endl;
246 std::cout <<
"\t GeometryDefinition = " <<
"FromSTL" << std::endl;
248 std::cout <<
"Unrecognized parameter " << std::endl;
250 std::cout <<
"\t FluidFlowModel_MT = " <<
"Incompressible" << std::endl;
252 std::cout <<
"\t FluidFlowModel_MT = " <<
"QuasiCompressible" << std::endl;
254 std::cout <<
"Unrecognized parameter " << std::endl;
256 std::cout <<
"\t CollisionModel_KT = " <<
"BGK" << std::endl;
258 std::cout <<
"\t CollisionModel_KT = " <<
"MRT" << std::endl;
260 std::cout <<
"\t CollisionModel_KT = " <<
"FBGK" << std::endl;
262 std::cout <<
"Unrecognized parameter " << std::endl;
264 std::cout <<
"\t LatticeType_La = " <<
"D3Q19" << std::endl;
266 std::cout <<
"Unrecognized parameter " << std::endl;
267 std::cout <<
"\t XNodesNumber_Nx1 = " << CaseParameters_Ptr->XNodesNumber_Nx1 << std::endl;
268 std::cout <<
"\t YNodesNumber_Ny1 = " << CaseParameters_Ptr->YNodesNumber_Ny1 << std::endl;
269 std::cout <<
"\t ZNodesNumber_Nz1 = " << CaseParameters_Ptr->ZNodesNumber_Nz1 << std::endl;
271 std::cout << std::endl <<
"Physical params:" << std::endl;
272 std::cout <<
"\t FluidPhysicalViscosity_Nu_Phys = " << CaseParameters_Ptr->FluidPhysicalViscosity_Nu_Phys << std::endl;
273 std::cout <<
"\t FluidPhysicalReferenceDensity_Rho0_Phys = " << CaseParameters_Ptr->FluidPhysicalReferenceDensity_Rho0_Phys << std::endl;
274 std::cout <<
"\t Tau = " << CaseParameters_Ptr->Tau << std::endl;
275 std::cout <<
"\t ForceX_fiz = " << CaseParameters_Ptr->ForceX_fiz << std::endl;
276 std::cout <<
"\t ForceY_fiz = " << CaseParameters_Ptr->ForceY_fiz << std::endl;
277 std::cout <<
"\t ForceZ_fiz = " << CaseParameters_Ptr->ForceZ_fiz << std::endl;
279 std::cout << std::endl <<
"Characterstic params:" << std::endl;
280 std::cout <<
"\t CharacteristicLengthNNodes_L_CH_LB = " << CaseParameters_Ptr->CharacteristicLength_L_CH_LB << std::endl;
281 std::cout <<
"\t CharactLengthPhysical_L_CH_Phys = " << CaseParameters_Ptr->CharactLengthPhysical_L_CH_Phys << std::endl;
282 std::cout <<
"\t CharactVelocityPhysical_U_CH_Phys = " << CaseParameters_Ptr->CharactVelocityPhysical_U_CH_Phys << std::endl;
284 std::cout << std::endl <<
"Termination conditions:" << std::endl;
285 std::cout <<
"\t Sc_VelocityResidueError_ErrV = " << CaseParameters_Ptr->Sc_VelocityResidueError_ErrV << std::endl;
287 std::cout << std::endl <<
"Initial conditions:" << std::endl;
288 std::cout <<
"\t ReferenceDensityLB_Rho0_LB = " << CaseParameters_Ptr->ReferenceDensityLB_Rho0_LB << std::endl;
289 std::cout <<
"\t XInitialVelocityUx0_Phys = " << CaseParameters_Ptr->XInitialVelocityUx0_Phys << std::endl;
290 std::cout <<
"\t YInitialVelocityUy0_Phys = " << CaseParameters_Ptr->YInitialVelocityUy0_Phys << std::endl;
291 std::cout <<
"\t ZInitialVelocityUz0_Phys = " << CaseParameters_Ptr->ZInitialVelocityUz0_Phys << std::endl;
293 std::cout << std::endl <<
"Default boundary conditions:" << std::endl;
294 std::cout <<
"\t DefaultWallNode_BN = " << CaseParameters_Ptr->DefaultWallNode_BN << std::endl;
295 std::cout <<
"\t DefaultNode_NN = " << CaseParameters_Ptr->DefaultNode_NN << std::endl;
297 std::cout << std::endl <<
"RWParams:" << std::endl;
298 std::cout <<
"\t CheckPointNumberRead_CHP_R = " << CaseParameters_Ptr->CheckPointNumberRead_CHP_R << std::endl;
299 std::cout <<
"\t ConsoleWriteStep_K_W = " << CaseParameters_Ptr->ConsoleWriteStep_K_W << std::endl;
300 std::cout <<
"\t VTKWriteStep_VTK_W = " << CaseParameters_Ptr->VTKWriteStep_VTK_W << std::endl;
301 std::cout <<
"\t VTKFileMaxNumber_VTK_Max = " << CaseParameters_Ptr->VTKFileMaxNumber_VTK_Max << std::endl;
303 std::cout << std::endl <<
"ThreadParams:" << std::endl;
304 std::cout <<
"\t ThreadMaxSize = " << CaseParameters_Ptr->ThreadMaxSize << std::endl;
307 std::cout << std::endl <<
"BalanceParams:" << std::endl;
308 std::cout <<
"\t AutomaticSurfaceChoice = " << CaseParameters_Ptr->AutomaticSurfaceChoice << std::endl;
311 std::cout << std::endl <<
"CPUParams:" << std::endl;
312 std::cout <<
"\t CPU_ThreadsNr = " << CaseParameters_Ptr->CPU_ThreadsNr << std::endl;
314 std::cout << std::endl <<
"**********************************************************************************" << std::endl << std::endl;
317 std::cout <<
"Threads defined in thread_params.cfg file" << std::endl;
318 std::cout <<
"Total number of threads = " << ConfigData_Ptr->getThreadsNumber() << std::endl;
319 for (
int j = 0; j < ConfigData_Ptr->getThreadsNumber(); j++) {
320 std::cout <<
"#########################################################################################################################" << std::endl;
321 std::cout <<
"ThreadID = " << j << std::endl;
322 std::cout <<
"ThreadName = " << ConfigData_Ptr->getThreadStringParam(j,
"ThreadName") << std::endl;
323 std::cout <<
"GridType = " << ConfigData_Ptr->getThreadStringParam(j,
"GridType") << std::endl;
324 if (ConfigData_Ptr->getThreadParamLength(j,
"NodeTypeID") > 0)
325 std::cout <<
"NodeTypeID = " << ConfigData_Ptr->getThreadIntParam(j,
"NodeTypeID") << std::endl;
326 std::cout <<
"Data number = " << ConfigData_Ptr->getThreadParamLength(j,
"uid-Node") << std::endl;
327 if (ConfigData_Ptr->getThreadParamLength(j,
"uid-Node") > 0)
328 for (
int i = 0; i < ConfigData_Ptr->getThreadParamLength(j,
"uid-Node"); i++) {
329 if (i > 0) std::cout << std::endl;
330 std::cout <<
"Node, Coordinate = " <<
"[" << ConfigData_Ptr->getThreadDataIntVectorParam(0, j, i,
"uid-Node",
"Coordinate") <<
", " 331 << ConfigData_Ptr->getThreadDataIntVectorParam(1, j, i,
"uid-Node",
"Coordinate")
332 <<
", " << ConfigData_Ptr->getThreadDataIntVectorParam(2, j, i,
"uid-Node",
"Coordinate") <<
"]";
333 if (ConfigData_Ptr->getThreadDataVectorParamLength(j, i,
"uid-Node",
"Velocity") > 0)
334 std::cout <<
", Velocity = " <<
"[" << ConfigData_Ptr->getThreadDataFloatVectorParam(0, j, i,
"uid-Node",
"Velocity") <<
", " 335 << ConfigData_Ptr->getThreadDataFloatVectorParam(1, j, i,
"uid-Node",
"Velocity")
336 <<
", " << ConfigData_Ptr->getThreadDataFloatVectorParam(2, j, i,
"uid-Node",
"Velocity") <<
"]";
337 if (i == ConfigData_Ptr->getThreadParamLength(j,
"uid-Node") - 1) std::cout << std::endl;
339 if (ConfigData_Ptr->getThreadParamLength(j,
"Velocity_fiz") > 0)
340 std::cout <<
"Velocity = " <<
"[" << ConfigData_Ptr->getThreadFloatVectorParam(0, j,
"Velocity_fiz") <<
", " << ConfigData_Ptr->getThreadFloatVectorParam(1, j,
"Velocity_fiz")
341 <<
", " << ConfigData_Ptr->getThreadFloatVectorParam(2, j,
"Velocity_fiz") <<
"]" << std::endl;
342 if (ConfigData_Ptr->getThreadParamLength(j,
"NodeCoordinateFileColumnNames") > 0)
343 std::cout <<
"NodeCoordinateFileColumnNames = " <<
"[" << ConfigData_Ptr->getThreadStringVectorParam(0, j,
"NodeCoordinateFileColumnNames")
344 <<
", " << ConfigData_Ptr->getThreadStringVectorParam(1, j,
"NodeCoordinateFileColumnNames") <<
", " 345 << ConfigData_Ptr->getThreadStringVectorParam(2, j,
"NodeCoordinateFileColumnNames") <<
"]" << std::endl;
346 if (ConfigData_Ptr->getThreadParamLength(j,
"NodeFilePath") > 0) {
347 std::cout <<
"NodeFilePath = " << ConfigData_Ptr->getThreadStringParam(j,
"NodeFilePath") << std::endl;
348 std::string FilePath =
349 ConfigData_Ptr->CaseFolder + ConfigData_Ptr->getProgramStringParam(
"GeometryFolder") + ConfigData_Ptr->getThreadStringParam(j,
"NodeFilePath");
350 auto data_Ptr = std::make_unique<std::vector<double>>();
351 std::vector<std::string> VariableNameList{ConfigData_Ptr->getThreadStringVectorParam(0, j,
"NodeCoordinateFileColumnNames"),
352 ConfigData_Ptr->getThreadStringVectorParam(1, j,
"NodeCoordinateFileColumnNames"),
353 ConfigData_Ptr->getThreadStringVectorParam(2, j,
"NodeCoordinateFileColumnNames")};
355 for (
auto i=data_Ptr->begin(); i != data_Ptr->end(); i++) {
356 std::cout <<
"[" << *i; i++; std::cout <<
", " << *i; i++; std::cout <<
", " << *i <<
"]" << std::endl;
360 if (ConfigData_Ptr->getThreadParamLength(j,
"Pressure_fiz") > 0)
361 std::cout <<
"Pressure = " << ConfigData_Ptr->getThreadFloatParam(j,
"Pressure") << std::endl;
363 std::cout <<
"#########################################################################################################################" << std::endl;
static double VelocityFizMeanForOutlet(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Scaled (surface weighted) fiz velocity for all outlet threads.
static double VelocityFizMeanForPNodes(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Scaled (surface weighted) fiz velocity for all nodes type 30.
static unsigned int m_iter
static int getMemoryUsageValue()
static double VelocityFizMeanForVNodes(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Mean Fiz velocity for all nodes type 20.
static void PrintTimeStepStatistics(double &V_SimError, double &M_SimError, const unsigned int &SimStep, const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr, const std::shared_ptr< MF::Solver_CPU::CaseParameters > &CaseParameters_Ptr)
Prints on console time step statistics.
static void PrintComputationStatistics(std::chrono::time_point< std::chrono::high_resolution_clock > TimeStart, std::chrono::time_point< std::chrono::high_resolution_clock > TimeStop, unsigned int SimStep, const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Prints on console final computation statistics.
static double DeltaMassFlowThread_LB(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr, const std::shared_ptr< MF::Solver_CPU::CaseParameters > &CaseParameters_Ptr)
Returns the difference in mass flow rate in LB units (inlet-outlet)/inlet*100. Surfaces are defined i...
static double DeltaMassFlow_fiz(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr, const std::shared_ptr< MF::Solver_CPU::CaseParameters > &CaseParameters_Ptr)
Returns the difference in mass flow rate (inlet-outlet)/inlet*100. Surfaces are automatically detecte...
static void PrintCPUInfo(const int &CPU_ThreadsNr)
Prints on console CPU usage info.
static double VelocityFizMeanForInlet(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Mean Fiz velocity for all inlet threads.
static void ExtendedInfo(const std::shared_ptr< MF::Solver_CPU::ProgramParameters > &ProgramParameters_Ptr, const std::shared_ptr< MF::Solver_CPU::CaseParameters > &CaseParameters_Ptr, const std::shared_ptr< MF::Database::ConfigData > &ConfigData_Ptr)
Prints on console case and program parameters and also uid-threads defined in thread_params.cfg.
static double DeltaMassFlowLB(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr, const std::shared_ptr< MF::Solver_CPU::CaseParameters > &CaseParameters_Ptr)
Returns the difference in mass flow rate in LB units (inlet-outlet)/inlet*100. Surfaces are automatic...
static void DataReadFromCSVFile(const std::string &DataFilePath, const std::vector< std::string > &VariableNameList, std::vector< double > *pDataArray)
Reads data from text file.
static unsigned int m_SimPreviousStep
static void ThreadsArrayInfo(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Prints on console information about all MFThreads.
static std::chrono::time_point< std::chrono::high_resolution_clock > m_TimePreviousStep
static uint64_t getSolidNodeNumber_1(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Returns number of solid nodes.
static uint64_t getVelocityNodeNumber_20(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Returns number of boundary velocity nodes.
static void ThreadsNodeInfo(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Prints on console information about all Threads node.
static uint64_t getTotalNodeNumber(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Returns total number of computational nodes (non-solid).
static int parseFileLine(char *line)
static uint64_t getPeriodicNodeNumber_4(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Returns number of boundary periodic nodes.
static void PrintGridStatistics(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Prints on console basic grid statistics.
static double getULBmaks(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Returns the maximal value of LB velocity noticed in lattice node.
static void PrintComputationParameters(const std::shared_ptr< MF::Solver_CPU::CaseParameters > &CaseParameters_Ptr)
Prints on console basic solution parameters.
static uint64_t getBBNodeNumber_61(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Returns number of bounce-back nodes.
static double DeltaMassFlowThread_fiz(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr, const std::shared_ptr< MF::Solver_CPU::CaseParameters > &CaseParameters_Ptr)
Returns the difference in mass flow rate (inlet-outlet)/inlet*100. Surfaces are defined in thread_par...
static uint64_t getVelocity0NodeNumber_40(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Returns number of boundary velocity 0 nodes.
static uint64_t getPressureNodeNumber_30(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Returns number of boundary pressure nodes.
static uint64_t getFluidNodeNumber_1(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Returns number of fluid nodes.
static double VelocityLBVolumeSum(const std::shared_ptr< MF::Database::ThreadArray > &ThreadArray_Ptr)
Mean LB velocity for all fluid nodes type 1.