19template <MInt nDim, MInt nDist,
class SysEqn>
22template <MInt nDim, MInt nDist,
class SysEqn>
28template <MInt nDim, MInt nDist,
class SysEqn>
40 using Base::a_alphaGasLim;
41 using Base::a_coordinate;
42 using Base::a_diffusivity;
43 using Base::a_distribution;
44 using Base::a_distributionThermal;
45 using Base::a_distributionTransport;
46 using Base::a_externalForces;
47 using Base::a_hasNeighbor;
48 using Base::a_isActive;
49 using Base::a_isBndryGhostCell;
51 using Base::a_isInterfaceChild;
54 using Base::a_levelSetFunctionMB;
55 using Base::a_noCells;
58 using Base::a_oldDistribution;
59 using Base::a_oldDistributionThermal;
60 using Base::a_oldDistributionTransport;
61 using Base::a_oldVariable;
62 using Base::a_oldVariables_ptr;
63 using Base::a_variable;
64 using Base::a_variables_ptr;
65 using Base::c_cellLengthAtLevel;
66 using Base::c_isLeafCell;
68 using Base::c_neighborId;
69 using Base::c_noChildren;
70 using Base::c_parentId;
71 using Base::centerOfGravity;
73 using Base::exchangeData;
74 using Base::getReLambdaAndUrmsInit;
77 using Base::m_activeCellList;
78 using Base::m_activeCellListLvlOffset;
79 using Base::m_adaptation;
80 using Base::m_arraySize;
81 using Base::m_bandWidth;
82 using Base::m_calculateDissipation;
84 using Base::m_controlVelocity;
86 using Base::m_currentMaxNoCells;
88 using Base::m_densityFluctuations;
89 using Base::m_densityGradient;
90 using Base::m_diffusivity;
91 using Base::m_domainLength;
92 using Base::m_EELiquid;
93 using Base::m_extractedCells;
95 using Base::m_FftInit;
96 using Base::m_finalRe;
98 using Base::m_geometry;
99 using Base::m_geometryIntersection;
100 using Base::m_gridPoints;
101 using Base::m_initDensityGradient;
102 using Base::m_initFromCoarse;
103 using Base::m_initialNoCells;
104 using Base::m_initMethod;
105 using Base::m_initRe;
106 using Base::m_initStartTime;
107 using Base::m_initTime;
108 using Base::m_innerEnergy;
109 using Base::m_isCompressible;
110 using Base::m_isEELiquid;
111 using Base::m_isRefined;
112 using Base::m_isThermal;
113 using Base::m_isTransport;
115 using Base::m_levelSetId;
117 using Base::m_maxNoSets;
118 using Base::m_maxResId;
119 using Base::m_MijLij;
120 using Base::m_MijMij;
121 using Base::m_momentumFlux;
122 using Base::m_noEmbeddedBodies;
123 using Base::m_noPeakModes;
126 using Base::m_particleMomentumCoupling;
130 using Base::m_referenceLength;
131 using Base::m_ReLambda;
132 using Base::m_rescoordinates;
133 using Base::m_residual;
134 using Base::m_residualInterval;
135 using Base::m_resRePos;
136 using Base::m_resTimestepPos;
138 using Base::m_solutionInterval;
139 using Base::m_tanhInit;
140 using Base::m_tanhScaleFactor;
141 using Base::m_tmpResidual;
142 using Base::m_tmpResidualLvl;
143 using Base::m_totalEnergy;
145 using Base::m_distFld;
146 using Base::m_distType;
147 using Base::m_faculty;
152 using Base::m_oppositeDist;
154 using Base::m_ppdfDir;
157 using Base::m_updateAfterPropagation;
158 using Base::m_updateMacroscopicLocation;
159 using Base::m_UrmsInit;
160 using Base::m_velocityControl;
161 using Base::m_volumeAccel;
162 using Base::m_volumeAccelBase;
163 using Base::maxLevel;
164 using Base::minLevel;
166 using Base::noDomains;
167 using Base::noInternalCells;
168 using Base::noVariables;
169 using Base::outputDir;
171 using Base::saveUVWRhoTOnlyPar;
172 using Base::solverMethod;
173 using Base::swap_variables;
175 using Base::computeFFTStatistics;
176 using Base::m_resFileName;
182 template <MInt nDim_, MInt nDist_,
class SysEqn_>
185 template <MInt nDim_, MInt nDist_,
class SysEqn_>
188 template <MInt nDim_>
191 template <MInt nDim_, MInt nDist_,
class SysEqn_>
236 template <MInt timeStepOffset = 0>
249 void sensorVorticity(std::vector<std::vector<MFloat>>& sensors, std::vector<std::bitset<64>>& sensorCellFlag,
250 std::vector<MFloat>& sensorWeight,
MInt sensorOffset,
MInt sen)
override;
251 void sensorDivergence(std::vector<std::vector<MFloat>>& sensors, std::vector<std::bitset<64>>& sensorCellFlag,
252 std::vector<MFloat>& sensorWeight,
MInt sensorOffset,
MInt sen)
override;
253 void sensorTotalPressure(std::vector<std::vector<MFloat>>& sensors, std::vector<std::bitset<64>>& sensorCellFlag,
254 std::vector<MFloat>& sensorWeight,
MInt sensorOffset,
MInt sen)
override;
255 void sensorInterface(std::vector<std::vector<MFloat>>& sensors, std::vector<std::bitset<64>>& sensorCellFlag,
256 std::vector<MFloat>& sensorWeight,
MInt sensorOffset,
MInt sen)
override;
257 void sensorMeanStress(std::vector<std::vector<MFloat>>& sensors, std::vector<std::bitset<64>>& sensorCellFlag,
258 std::vector<MFloat>& sensorWeight,
MInt sensorOffset,
MInt sen)
override;
260 template <MBool useSmagorinsky>
274 template <MBool compressible = false>
276 template <MBool compressible = false>
278 template <MBool compressible = false>
281 template <MBool optimized, MBool useSmagorinsky>
292 template <MInt thermalMode>
294 template <MInt thermalMode>
300 template <MBool useSmagorinsky>
323 std::uniform_real_distribution<>
distrib{0.0, 1.0};
347 template <MBool compressible>
359 const MFloat*
const velocity);
362 const MFloat*
const velocity);
363 template <MInt thermalMode>
365 template <MInt thermalMode>
367 const MFloat*
const velocity);
370 const MFloat*
const velocity);
376 const MFloat*
const velocity);
377 template <MInt thermalMode>
379 template <MInt thermalMode>
381 const MFloat*
const velocity);
384 const MFloat*
const velocity);
400template <MInt nDim, MInt nDist,
class SysEqn>
402 const MFloat*
const velocity) {
403 std::array<MFloat, nDist> eqDist;
405 sysEqn().calcEqDists(rho, velocity, eqDist.data(), m_mFld1.data(), m_mFld2.data(), m_tp.data(), m_distFld.data());
407 a_distribution(cellId,
dist) = eqDist[
dist];
408 a_oldDistribution(cellId,
dist) = eqDist[
dist];
411 sysEqn().calcEqDists(rho, velocity, eqDist.data());
413 std::copy_n(eqDist.begin(), nDist, &a_distribution(cellId, 0));
414 std::copy_n(eqDist.begin(), nDist, &a_oldDistribution(cellId, 0));
430template <MInt nDim, MInt nDist,
class SysEqn>
432 const MFloat squaredVelocity,
const MFloat*
const velocity) {
433 std::array<MFloat, nDist> eqDist;
435 sysEqn().calcEqDists(rho, squaredVelocity, velocity, eqDist.data(), m_mFld1.data(), m_mFld2.data(), m_tp.data(),
438 a_distribution(cellId,
dist) = eqDist[
dist];
439 a_oldDistribution(cellId,
dist) = eqDist[
dist];
442 sysEqn().calcEqDists(rho, squaredVelocity, velocity, eqDist.data());
444 std::copy_n(eqDist.begin(), nDist, &a_distribution(cellId, 0));
445 std::copy_n(eqDist.begin(), nDist, &a_oldDistribution(cellId, 0));
461template <MInt nDim, MInt nDist,
class SysEqn>
463 const MFloat*
const velocity) {
465 setEqDistsThermal_<1>(cellId, T, rho, velocity);
466 }
else if(m_totalEnergy) {
467 setEqDistsThermal_<2>(cellId, T, rho, velocity);
469 setEqDistsThermal_<0>(cellId, T, rho, velocity);
487template <MInt nDim, MInt nDist,
class SysEqn>
488template <MInt thermalMode>
490 const MFloat*
const velocity) {
491 std::array<MFloat, nDist> eqDist;
493 IF_CONSTEXPR(thermalMode == 0) {
494 lbfunc::calcEqDistsThermal<nDim, nDist>(T, velocity, eqDist.data(), m_mFld1.data(), m_mFld2.data(), m_tp.data(),
497 IF_CONSTEXPR(thermalMode == 1) {
498 lbfunc::calcEqDistsInnerEnergy<nDim, nDist>(T, rho, velocity, eqDist.data(), m_mFld1.data(), m_mFld2.data(),
499 m_tp.data(), m_distFld.data());
501 IF_CONSTEXPR(thermalMode == 2) {
502 lbfunc::calcEqDistsTotalEnergy<nDim, nDist>(T, rho, velocity, eqDist.data(), m_mFld1.data(), m_mFld2.data(),
503 m_tp.data(), m_distFld.data());
506 a_distributionThermal(cellId,
dist) = eqDist[
dist];
507 a_oldDistributionThermal(cellId,
dist) = eqDist[
dist];
510 IF_CONSTEXPR(thermalMode == 0) { lbfunc::calcEqDistsThermal<nDim, nDist>(T, velocity, eqDist.data()); }
511 IF_CONSTEXPR(thermalMode == 1) { lbfunc::calcEqDistsInnerEnergy<nDim, nDist>(T, rho, velocity, eqDist.data()); }
512 IF_CONSTEXPR(thermalMode == 2) { lbfunc::calcEqDistsTotalEnergy<nDim, nDist>(T, rho, velocity, eqDist.data()); }
513 std::copy_n(eqDist.begin(), nDist, &a_distributionThermal(cellId, 0));
514 std::copy_n(eqDist.begin(), nDist, &a_oldDistributionThermal(cellId, 0));
531template <MInt nDim, MInt nDist,
class SysEqn>
533 const MFloat squaredVelocity,
534 const MFloat*
const velocity) {
536 setEqDistsThermal_<1>(cellId, T, rho, squaredVelocity, velocity);
537 }
else if(m_totalEnergy) {
538 setEqDistsThermal_<2>(cellId, T, rho, squaredVelocity, velocity);
540 setEqDistsThermal_<0>(cellId, T, rho, squaredVelocity, velocity);
559template <MInt nDim, MInt nDist,
class SysEqn>
560template <MInt thermalMode>
562 const MFloat squaredVelocity,
563 const MFloat*
const velocity) {
564 std::array<MFloat, nDist> eqDist;
566 IF_CONSTEXPR(thermalMode == 0) {
567 lbfunc::calcEqDistsThermal<nDim, nDist>(T, squaredVelocity, velocity, eqDist.data(), m_mFld1.data(), m_mFld2.data(),
568 m_tp.data(), m_distFld.data());
570 IF_CONSTEXPR(thermalMode == 1) {
571 lbfunc::calcEqDistsInnerEnergy<nDim, nDist>(T, rho, squaredVelocity, velocity, eqDist.data(), m_mFld1.data(),
572 m_mFld2.data(), m_tp.data(), m_distFld.data());
574 IF_CONSTEXPR(thermalMode == 2) {
575 lbfunc::calcEqDistsTotalEnergy<nDim, nDist>(T, rho, squaredVelocity, velocity, eqDist.data(), m_mFld1.data(),
576 m_mFld2.data(), m_tp.data(), m_distFld.data());
579 a_distributionThermal(cellId,
dist) = eqDist[
dist];
580 a_oldDistributionThermal(cellId,
dist) = eqDist[
dist];
583 IF_CONSTEXPR(thermalMode == 0) {
584 lbfunc::calcEqDistsThermal<nDim, nDist>(T, squaredVelocity, velocity, eqDist.data());
586 IF_CONSTEXPR(thermalMode == 1) {
587 lbfunc::calcEqDistsInnerEnergy<nDim, nDist>(T, rho, squaredVelocity, velocity, eqDist.data());
589 IF_CONSTEXPR(thermalMode == 2) {
590 lbfunc::calcEqDistsTotalEnergy<nDim, nDist>(T, rho, squaredVelocity, velocity, eqDist.data());
592 std::copy_n(eqDist.begin(), nDist, &a_distributionThermal(cellId, 0));
593 std::copy_n(eqDist.begin(), nDist, &a_oldDistributionThermal(cellId, 0));
606template <MInt nDim, MInt nDist,
class SysEqn>
608 const MFloat*
const velocity) {
609 std::array<MFloat, nDist> eqDist;
611 lbfunc::calcEqDistsTransport<nDim, nDist>(C, velocity, eqDist.data(), m_mFld1.data(), m_mFld2.data(), m_tp.data(),
614 a_distributionTransport(cellId,
dist) = eqDist[
dist];
615 a_oldDistributionTransport(cellId,
dist) = eqDist[
dist];
618 lbfunc::calcEqDistsTransport<nDim, nDist>(C, velocity, eqDist.data());
620 std::copy_n(eqDist.begin(), nDist, &a_distributionTransport(cellId, 0));
621 std::copy_n(eqDist.begin(), nDist, &a_oldDistributionTransport(cellId, 0));
637template <MInt nDim, MInt nDist,
class SysEqn>
639 const MFloat squaredVelocity,
640 const MFloat*
const velocity) {
641 std::array<MFloat, nDist> eqDist;
643 lbfunc::calcEqDistsTransport<nDim, nDist>(C, squaredVelocity, velocity, eqDist.data(), m_mFld1.data(), m_mFld2.data(),
644 m_tp.data(), m_distFld.data());
646 a_distributionTransport(cellId,
dist) = eqDist[
dist];
647 a_oldDistributionTransport(cellId,
dist) = eqDist[
dist];
650 lbfunc::calcEqDistsTransport<nDim, nDist>(C, squaredVelocity, velocity, eqDist.data());
652 std::copy_n(eqDist.begin(), nDist, &a_distributionTransport(cellId, 0));
653 std::copy_n(eqDist.begin(), nDist, &a_oldDistributionTransport(cellId, 0));
667template <MInt nDim, MInt nDist,
class SysEqn>
669 const MFloat*
const velocity) {
670 std::array<MFloat, nDist> eqDist{};
672 sysEqn().calcEqDists(rho, velocity, eqDist.data(), m_mFld1.data(), m_mFld2.data(), m_tp.data(), m_distFld.data());
674 sysEqn().calcEqDists(rho, velocity, eqDist.data());
690template <MInt nDim, MInt nDist,
class SysEqn>
692 const MFloat*
const velocity) {
693 std::array<MFloat, nDist> eqDist{};
695 sysEqn().calcEqDists(rho, squaredVelocity, velocity, eqDist.data(), m_mFld1.data(), m_mFld2.data(), m_tp.data(),
698 sysEqn().calcEqDists(rho, squaredVelocity, velocity, eqDist.data());
714template <MInt nDim, MInt nDist,
class SysEqn>
716 const MFloat*
const velocity) {
718 return getEqDistsThermal_<1>(t, rho, velocity);
719 }
else if(m_totalEnergy) {
720 return getEqDistsThermal_<2>(t, rho, velocity);
722 return getEqDistsThermal_<0>(t, rho, velocity);
739template <MInt nDim, MInt nDist,
class SysEqn>
740template <MInt thermalMode>
742 const MFloat*
const velocity) {
743 std::array<MFloat, nDist> eqDist;
745 IF_CONSTEXPR(thermalMode == 0) {
746 lbfunc::calcEqDistsThermal<nDim, nDist>(t, velocity, eqDist.data(), m_mFld1.data(), m_mFld2.data(), m_tp.data(),
749 IF_CONSTEXPR(thermalMode == 1) {
750 lbfunc::calcEqDistsInnerEnergy<nDim, nDist>(t, rho, velocity, eqDist.data(), m_mFld1.data(), m_mFld2.data(),
751 m_tp.data(), m_distFld.data());
753 IF_CONSTEXPR(thermalMode == 2) {
754 lbfunc::calcEqDistsTotalEnergy<nDim, nDist>(t, rho, velocity, eqDist.data(), m_mFld1.data(), m_mFld2.data(),
755 m_tp.data(), m_distFld.data());
758 IF_CONSTEXPR(thermalMode == 0) { lbfunc::calcEqDistsThermal<nDim, nDist>(t, velocity, eqDist.data()); }
759 IF_CONSTEXPR(thermalMode == 1) { lbfunc::calcEqDistsInnerEnergy<nDim, nDist>(t, rho, velocity, eqDist.data()); }
760 IF_CONSTEXPR(thermalMode == 2) { lbfunc::calcEqDistsTotalEnergy<nDim, nDist>(t, rho, velocity, eqDist.data()); }
777template <MInt nDim, MInt nDist,
class SysEqn>
779 const MFloat squaredVelocity,
780 const MFloat*
const velocity) {
782 return getEqDistsThermal_<1>(t, rho, squaredVelocity, velocity);
783 }
else if(m_totalEnergy) {
784 return getEqDistsThermal_<2>(t, rho, squaredVelocity, velocity);
786 return getEqDistsThermal_<0>(t, rho, squaredVelocity, velocity);
804template <MInt nDim, MInt nDist,
class SysEqn>
805template <MInt thermalMode>
807 const MFloat squaredVelocity,
808 const MFloat*
const velocity) {
809 std::array<MFloat, nDist> eqDist;
811 IF_CONSTEXPR(thermalMode == 0) {
812 lbfunc::calcEqDistsThermal<nDim, nDist>(t, squaredVelocity, velocity, eqDist.data(), m_mFld1.data(), m_mFld2.data(),
813 m_tp.data(), m_distFld.data());
815 IF_CONSTEXPR(thermalMode == 1) {
816 lbfunc::calcEqDistsInnerEnergy<nDim, nDist>(t, rho, squaredVelocity, velocity, eqDist.data(), m_mFld1.data(),
817 m_mFld2.data(), m_tp.data(), m_distFld.data());
819 IF_CONSTEXPR(thermalMode == 2) {
820 lbfunc::calcEqDistsTotalEnergy<nDim, nDist>(t, rho, squaredVelocity, velocity, eqDist.data(), m_mFld1.data(),
821 m_mFld2.data(), m_tp.data(), m_distFld.data());
824 IF_CONSTEXPR(thermalMode == 0) {
825 lbfunc::calcEqDistsThermal<nDim, nDist>(t, squaredVelocity, velocity, eqDist.data());
827 IF_CONSTEXPR(thermalMode == 1) {
828 lbfunc::calcEqDistsInnerEnergy<nDim, nDist>(t, rho, squaredVelocity, velocity, eqDist.data());
830 IF_CONSTEXPR(thermalMode == 2) {
831 lbfunc::calcEqDistsTotalEnergy<nDim, nDist>(t, rho, squaredVelocity, velocity, eqDist.data());
848template <MInt nDim, MInt nDist,
class SysEqn>
850 const MFloat*
const velocity) {
851 std::array<MFloat, nDist> eqDist;
853 lbfunc::calcEqDistsTransport<nDim, nDist>(c, velocity, eqDist.data(), m_mFld1.data(), m_mFld2.data(), m_tp.data(),
856 lbfunc::calcEqDistsTransport<nDim, nDist>(c, velocity, eqDist.data());
873template <MInt nDim, MInt nDist,
class SysEqn>
875 const MFloat squaredVelocity,
876 const MFloat*
const velocity) {
877 std::array<MFloat, nDist> eqDist;
879 lbfunc::calcEqDistsTransport<nDim, nDist>(c, squaredVelocity, velocity, eqDist.data(), m_mFld1.data(), m_mFld2.data(),
880 m_tp.data(), m_distFld.data());
882 lbfunc::calcEqDistsTransport<nDim, nDist>(c, squaredVelocity, velocity, eqDist.data());
896template <MInt nDim, MInt nDist,
class SysEqn>
897template <MBool compressible>
901 std::array<MFloat, nDist> oldDist;
903 oldDist[
dist] = a_oldDistribution(cellId,
dist);
905 const MInt fldlen = Ld::dxQyFld();
906 lbfunc::calcMacroVars<nDim, nDist, compressible>(oldDist.data(), rho, u, m_pFld.data(), m_nFld.data(), fldlen);
908 const MFloat*
const dist = &a_oldDistribution(cellId, 0);
909 lbfunc::calcMacroVars<nDim, nDist, compressible>(
dist, rho, u);
918template <MInt nDim, MInt nDist,
class SysEqn>
919template <MBool compressible>
924#ifndef WAR_NVHPC_PSTL
926 const MFloat*
const dist = &a_oldDistribution(pCellId, 0);
927 sysEqn().calcMomentumFlux(rho, u,
dist, momentumFlux);
929 std::array<MFloat, nDim> u;
930 std::array<MFloat, nDist>
dist;
931 for(
MInt d = 0; d < nDim; d++) {
934 for(
MInt d = 0; d < nDist; d++) {
935 dist[d] = a_oldDistribution(pCellId, d);
937 sysEqn().calcMomentumFlux(rho, u.data(),
dist.data(), momentumFlux);
948template <MInt nDim, MInt nDist,
class SysEqn>
949template <MBool compressible>
953 calculateMomentumFlux<compressible>(pCellId, m_momentumFlux[pCellId]);
MFloat & a_variable(const MInt cellId, const MInt varId, const MInt id=0)
Interface class holding all relevant data and methods for treating prolongation, restriction and init...
This class represents all LB models.
void updateViscosity() override
Update viscosity (a_nu and a_oldNu)
void sensorInterface(std::vector< std::vector< MFloat > > &sensors, std::vector< std::bitset< 64 > > &sensorCellFlag, std::vector< MFloat > &sensorWeight, MInt sensorOffset, MInt sen) override
Simple boundary sensor for ensuring boundary refinement during adaptation.
void postPropagationSrcTerm() override
Calls the post collision routine of the source term controller.
void sensorDivergence(std::vector< std::vector< MFloat > > &sensors, std::vector< std::bitset< 64 > > &sensorCellFlag, std::vector< MFloat > &sensorWeight, MInt sensorOffset, MInt sen) override
virtual void bgkc_transport_collision_step()
Collision step for Transport Lattice-Boltzmann.
void sensorTotalPressure(std::vector< std::vector< MFloat > > &sensors, std::vector< std::bitset< 64 > > &sensorCellFlag, std::vector< MFloat > &sensorWeight, MInt sensorOffset, MInt sen) override
void initLatticeBgkGaussDiffusion()
constexpr SysEqn sysEqn() const
virtual void averageGlobalVelocity(const MInt dir)
calculate average velocity of velocity component dir
void calculateSGSTensors()
Calculate tensors for dynamic Smagorinsky constant.
void bgki_euler_collision_step() override
void bgki_thermal_collision_step_base()
virtual void propagation_step_transport() override
Propagation step for Transport Lattice-Boltzmann.
void initNonEqDistFunctions()
std::uniform_real_distribution distrib
void bgki_thermal_and_transport_collision_step_base()
Collision step for coupled Thermal Transport Lattice-Boltzmann.
typename LbSolver< nDim >::GridProxy GridProxy
static constexpr MInt m_noDistributions
void initSrcTerms() override
Initialize the source term controller.
void initRunCorrection() override
virtual void propagation_step_thermaltransport() override
Propagation step for coupled Thermal Transport Lattice-Boltzmann.
virtual void propagation_step_thermal() override
void setEqDists(const MInt cellId, const MFloat rho, const MFloat *const velocity)
Set BOTH distributions to equilibrium.
virtual void restartInitLb()
void bgkc_collision_step() override
virtual void refineCellLb(const MInt parentId, const MInt *childIds)
: Initialize child variables from parent
void clb_collision_step_base()
void rbgk_collision_step_base()
virtual void bgki_innerEnergy_collision_step()
void setEqDistsThermal(const MInt cellId, const MFloat T, const MFloat rho, const MFloat *const velocity)
Calls function for setting thermal distributions to equilibrium.
virtual void initLatticeBgkTurbulentDuct()
void bgki_smagorinsky_collision_step() override
void calculateDissipation()
Calculate total energy, dissipation, and subgrid dissipation for Smagorinsky.
void initLatticeBgkFftMixingFilter()
virtual void bgki_thermal_collision_step()
void rbgk_dynamic_smago_collision_step() override
void bgki_dynamic_smago_collision_step() override
void(LbSolverDxQy< nDim, nDist, SysEqn >::* m_initMethodPtr)()
Pointers for the Boundary Conditions, for flow solving.
void initLatticeBgkFftChannel()
void initLatticeBgkLaminarCylinder()
virtual void propagation_step_thermal_vol() override
Propagation step for Thermal Lattice-Boltzmann.
void cumulant_collision_step() override
virtual void initLatticeBgkTurbulentMixing()
void bgki_smago_wall_collision_step() override
virtual void bgkc_totalenergy_transport_collision_step()
Collision step for coupled Thermal Transport Lattice-Boltzmann.
void initPressureForce() override
void bgki_init_collision_step() override
Consistent initialization step of the LBGK algorithm.
std::array< MFloat, nDist > getEqDistsTransport(const MFloat c, const MFloat *const velocity)
Return transport distributions to equilibrium.
void bgki_smagorinsky_collision_step_base()
void updateMacroscopicVariables()
Update macroscopic variables according to incoming PPDF.
virtual void initLatticeBgkLaminar()
virtual void propagation_step_thermaltransport_vol() override
Propagation step for coupled Thermal Transport Lattice-Boltzmann.
void mrt_smagorinsky_collision_step() override
void bgki_smagorinsky_collision_step2() override
virtual void initLatticeBgkTurbulentPipe()
virtual void propagation_step() override
standard OpenMP propagation step
void rbgk_smagorinsky_collision_step() override
std::array< MFloat, nDist > getEqDistsThermal(const MFloat t, const MFloat rho, const MFloat *const velocity)
Calls function to return the thermal equilibrium distribution.
virtual void initTransportEqDistFunctions()
Calculates equilibrium distribution functions after initialization of macroscopic variables.
void clb_collision_step() override
void mrt_collision_step() override
virtual void propagation_step_vol() override
This function propagates the locally calculated PPDFs to the neighboring cells after the collision st...
void mrt_collision_step_base()
Collision step for the MRT-Algorithm.
std::array< MFloat, nDist > getEqDistsThermal_(const MFloat t, const MFloat rho, const MFloat *const velocity)
Return thermal distributions to equilibrium.
void mrt2_collision_step() override
void setEqDistsTransport(const MInt cellId, const MFloat C, const MFloat *const velocity)
Set BOTH transport distributions to equilibrium.
void initLatticeBgkFftPipe()
virtual void initThermalEqDistFunctions()
Calculates equilibrium distribution functions after initialization of macroscopic variables.
void calculateMacroscopicVariables(const MInt cellId, MFloat &rho, MFloat *const u)
Calculate macroscopic variables for a given cell.
std::array< MFloat, nDist > getEqDists(const MFloat rho, const MFloat *const velocity)
Calls function to return the equilibrium distribution.
LbInterfaceDxQy< nDim, nDist, SysEqn > * m_interface
virtual void bgki_totalEnergy_collision_step()
void initLatticeBgkFftMixing()
MFloat m_smallestCellLength
void setEqDistsThermal_(const MInt cellId, const MFloat T, const MFloat rho, const MFloat *const velocity)
Set BOTH thermal distributions to equilibrium.
void initLatticeBgkFftIsotropicTurbulence()
void postPropagationBc() override
void initRunCorrection_()
Iterative initialize routine to obtained a valid density and non-eq field.
void sensorVorticity(std::vector< std::vector< MFloat > > &sensors, std::vector< std::bitset< 64 > > &sensorCellFlag, std::vector< MFloat > &sensorWeight, MInt sensorOffset, MInt sen) override
void calculateMomentumFlux(const MInt pCellId)
Calculate and set momentum flux for a given cell.
LbBndCnd * m_bndCnd
Pointers for the Boundary Conditions, for flow solving.
void rbgk_collision_step() override
void initEqDistFunctions()
Calculates equilibrium distribution functions after initialization of macroscopic variables.
virtual void restartBndCnd()
Restart bndCnd object.
virtual void updateVariablesFromOldDist_preCollision() override
virtual void initLatticeBgkTGV()
void preCollisionSrcTerm() override
Calls the pre collision routine of the source term controller.
void postCollisionBc() override
void clb_smagorinsky_collision_step() override
virtual void initLatticeBgkLaminarDir(MInt dir)
Initializes standard Lattice BGK laminar with or without a direction.
void initLatticeBgkGaussAdvection()
virtual MBool maxResidual()
virtual void initLatticeBgkVortex()
void initLatticeBgkGaussPulse()
void initLatticeBgkSpinningVorticies()
virtual void initializeLatticeBgk()
Initializes standard Lattice BGK.
maia::lb::LbSrcTermController< nDim, nDist, SysEqn > m_srcTermController
virtual void initLatticeBgkTurbulentBoundary()
virtual void initLatticeBgkLaminarChannel()
virtual void controlVelocity()
control velocity of a periodic channel flow via volume forces
void sensorMeanStress(std::vector< std::vector< MFloat > > &sensors, std::vector< std::bitset< 64 > > &sensorCellFlag, std::vector< MFloat > &sensorWeight, MInt sensorOffset, MInt sen) override
virtual void initLatticeBgkLaminarPipe()
virtual void calcNodalLsValues()
virtual void removeChildsLb(const MInt parentId)
: Initialize parent variables from children
void updateVariablesFromOldDist_()
virtual void initLatticeBgkTurbulentChannel()
void averageSGSTensors(const MInt direction, MInt &count, std::vector< MFloat > &meanTensors)
Calculate average SGS tensor.
void bgki_collision_step_Guo_forcing() override
void initSrcTermController() override
Initialize the source term controller.
virtual void calculateResidual()
Calculates residuals and prints to file.
void postCollisionSrcTerm() override
Calls the post collision routine of the source term controller.
virtual void bgkc_thermal_transport_collision_step()
Collision step for coupled Thermal Transport Lattice-Boltzmann.
virtual void bgki_collision_step()
virtual void volumeForces()
apply volumeForces to the oldDistributions
virtual void bgkc_innerenergy_transport_collision_step()
Collision step for coupled Thermal Transport Lattice-Boltzmann.
virtual void updateVariablesFromOldDist() override
virtual void propagation_step_transport_vol() override
Propagation step for Transport Lattice-Boltzmann.
void initVolumeForces() override
Front-end to control all source terms in a wrapping manner.
MFloat dist(const Point< DIM > &p, const Point< DIM > &q)
LB lattice descriptor for arrays depending on D and Q.