Loading [MathJax]/extensions/tex2jax.js
MAIA bb96820c
Multiphysics at AIA
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
postprocessinglblpt.cpp
Go to the documentation of this file.
1// Copyright (C) 2024 The m-AIA AUTHORS
2//
3// This file is part of m-AIA (https://git.rwth-aachen.de/aia/m-AIA/m-AIA)
4//
5// SPDX-License-Identifier: LGPL-3.0-only
6
8#include "postprocessing.cpp"
9
10using namespace std;
11
12template <MInt nDim>
14 PostData<nDim>* data,
15 LbSolver<nDim>* ppLbSolver_,
16 LPT<nDim>* ppLptSolver_)
17 : PostProcessingInterface(postprocessingId_),
18 PostProcessingLPT<nDim>(postprocessingId_, data, ppLptSolver_),
19 PostProcessingLb<nDim>(postprocessingId_, data, ppLbSolver_) {
20 m_ppSolverLpt = ppLptSolver_;
21 m_ppSolverLb = ppLbSolver_;
22}
23
24template <MInt nDim>
26 TRACE();
27 // TODO adjust:
28 // 1) read the following conversion factors as properties
29 MFloat lengthFactor = F1;
37 lengthFactor = Context::getSolverProperty<MFloat>("lengthFactor", m_postprocessingId, AT_, &lengthFactor);
38
39 const MFloat dx = lbSolver().c_cellLengthAtLevel(lbSolver().maxLevel());
40
41 m_conversionLbLptLength = lengthFactor * dx;
42 m_conversionLptLbLength = F1 / m_conversionLbLptLength;
43}
44
49template <MInt nDim>
51 TRACE();
52
53 getConversionFactors();
54 if(lbSolver().domainId() == 0) {
55 std::ofstream PLlog;
56 PLlog.open("PLIsoTurbStatistics.log", ios::app);
57 PLlog << std::setw(5) << "t"
58 << "\t" << std::setw(10) << "tau_p"
59 << "\t" << std::setw(10) << "St_eta" << std::endl;
60 PLlog.close();
61 }
62}
63
72template <MInt nDim>
74 TRACE();
75
76 if((lbSolver().a_FFTInterval() > 0 && globalTimeStep % lbSolver().a_FFTInterval() == 0) || m_finalTimeStep) {
77 const MInt globalNoPart = lptSolver().globalNoParticles();
78 MFloat tau_P = F0;
79 MFloat St_eta = F0;
80
81 for(const auto& part : lptSolver().m_partList) {
82 tau_P += 1.0 / 18.0 * part.m_densityRatio * POW2(part.m_diameter * m_conversionLptLbLength) / lbSolver().a_Nu();
83 St_eta += tau_P / m_tau_eta; // Stokes number
84 }
85
86 MPI_Allreduce(MPI_IN_PLACE, &tau_P, 1, MPI_DOUBLE, MPI_SUM, lbSolver().mpiComm(), AT_, "INPLACE", "tau_P");
87
88 MPI_Allreduce(MPI_IN_PLACE, &St_eta, 1, MPI_DOUBLE, MPI_SUM, lbSolver().mpiComm(), AT_, "INPLACE", "St_eta");
89
90 MFloat tau_P_Avg = tau_P / globalNoPart;
91 MFloat St_eta_Avg = St_eta / globalNoPart;
92
93 if(lbSolver().domainId() == 0) {
94 std::ofstream PLlog;
95 PLlog.open("PLIsoTurbStatistics.log", ios::app);
96 PLlog << std::setw(5) << globalTimeStep << "\t" << std::setw(10) << tau_P_Avg << "\t" << std::setw(10)
97 << St_eta_Avg << std::endl;
98 PLlog.close();
99 }
100 }
101}
102
103
104template class PostProcessingLbLPT<3>;
Definition: lpt.h:82
Definition: postdata.h:23
void initPLIsoTurbulenceStatistics() override
init function for particle-laden isotropic turbulence
lpt * m_ppSolverLpt
void getConversionFactors()
PostProcessingLbLPT(MInt postprocessingId_, PostData< nDim > *data, lb *ppLbSolver_, lpt *ppLptSolver_)
lb * m_ppSolverLb
void computePLIsoTurbulenceStatistics() override
compute average quantites of particle-laden isotropic turbulence average particle response time tau_p...
constexpr Real POW2(const Real x)
Definition: functions.h:119
MInt globalTimeStep
int32_t MInt
Definition: maiatypes.h:62
double MFloat
Definition: maiatypes.h:52
int MPI_Allreduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm, const MString &name, const MString &sndvarname, const MString &rcvvarname)
same as MPI_Allreduce