MAIA bb96820c
Multiphysics at AIA
Loading...
Searching...
No Matches
PostProcessingLPT< nDim > Class Template Reference

#include <postprocessinglpt.h>

Inheritance diagram for PostProcessingLPT< nDim >:
[legend]
Collaboration diagram for PostProcessingLPT< nDim >:
[legend]

Public Types

using SolverType = LPT< nDim >
 
using Base = PostProcessing< nDim, PostProcessingLPT< nDim > >
 
- Public Types inherited from PostProcessing< nDim, PostProcessingLPT< nDim > >
using PPGrid = CartesianGrid< nDim >
 
using Cell = typename PPGrid::Cell
 
using GridProxy = typename maia::grid::Proxy< nDim >
 
using Data = PostData< nDim >
 

Public Member Functions

 PostProcessingLPT (MInt postprocessingId_, PostData< nDim > *data, SolverType *ppSolver_)
 
virtual ~PostProcessingLPT ()
 
SolverTypesolver () const
 
void initSprayData () override
 init arrays More...
 
- Public Member Functions inherited from PostProcessing< nDim, PostProcessingLPT< nDim > >
 PostProcessing (MInt postprocessingId_, PostData< nDim > *data)
 
 ~PostProcessing ()
 Destructor for the massive paralle postprocessing solver. More...
 
void initPostProcessing () override
 Reads all required properties in and prepares for postprocessing. More...
 
void postprocessPreSolve () override
 
void postprocessPostSolve () override
 
void postprocessInSolve (MBool finalTimeStep) override
 
void postprocessSolution () override
 
SolvermSolver () const override
 
DatapostData () const
 
- Public Member Functions inherited from PostProcessingInterface
 PostProcessingInterface (const MInt postprocessingId_)
 
virtual ~PostProcessingInterface ()=default
 
 PostProcessingInterface (const PostProcessingInterface &)=delete
 
PostProcessingInterfaceoperator= (const PostProcessingInterface &)=delete
 
virtual void initPostProcessing ()=0
 
virtual void postprocessPreSolve ()=0
 
virtual void postprocessPostSolve ()=0
 
virtual void postprocessInSolve (MBool finalTimeStep)=0
 
virtual void postprocessSolution ()=0
 
virtual SolvermSolver () const =0
 
MInt a_postprocessingId () const
 

Protected Member Functions

void initLPTSolutionFile () override
 init function for LPT particle solution file More...
 
void writeLPTSolutionFile () override
 base function which is called every time-Step in postprocessInSolve More...
 
void initParticleStatistics () override
 init function for LPT particle statistics file More...
 
void computeParticleStatistics () override
 compute average quantites of particle phase average particle Reynolds number ReP the root mean square particle velocity vrms the total kinetic energy of the particles More...
 
void initParticleLog ()
 initialize particle.log More...
 
void writeParticleLog ()
 write particle Log file, containing particle position and velocity at timestep t More...
 
void particleMass ()
 computes conervation variables (mass/momentum/energy!) More...
 
void parcelStatistics ()
 computes parcel statistics More...
 
void particlePenetration ()
 calculate vertical and horizontal penetration from given coordinate More...
 
MInt getInjectionData ()
 
void advanceDataStep ()
 
void resetDataStep ()
 
- Protected Member Functions inherited from PostProcessing< nDim, PostProcessingLPT< nDim > >
MBool isActive () const
 
void transferSensorWeights ()
 
void initReduceToLevelAvg ()
 Initializes properties for grid level reduction. More...
 
void initTimeStepProperties ()
 Initializes timestep properties for postprocessing. More...
 
void initTimeStepPropertiesSlice ()
 
void initTimeStepPropertiesLine ()
 
virtual void initAveragingProperties ()
 Initialize properties relevant for temporal averaging. More...
 
void initProbePoint ()
 Initializes properties for point probing. More...
 
void initProbeLine ()
 Initializes properties and memory for line probing. More...
 
void initProbeSlice ()
 Initializes properties and memory for slice probing. More...
 
void initSpatialAveraging ()
 
void initProbeArbitraryLine ()
 initializes properties and data for arbitrary line probing More...
 
void initProbeArbitrarySlice ()
 initializes properties and data for arbitrary slice probing More...
 
void initProbeLinePeriodic ()
 
virtual void probeLinePeriodic ()
 
virtual void probeLinePeriodicPost ()
 
virtual void initSprayData ()
 
virtual void computeSprayData ()
 
virtual void writeSprayData ()
 
virtual void initLPTSolutionFile ()
 
virtual void writeLPTSolutionFile ()
 
virtual void initParticleStatistics ()
 
virtual void computeParticleStatistics ()
 
virtual void initPLIsoTurbulenceStatistics ()
 
virtual void computePLIsoTurbulenceStatistics ()
 
virtual void initAverageVariables ()
 allocates memory for averageSolutions() and averageSolutionsInSolve() More...
 
void pp_saveCoarseSolution ()
 
void averageSolutions ()
 Averages solutions. More...
 
virtual void averageSolutionsInSolve ()
 
void computeAndSaveDivergence ()
 
void computeAndSaveMean ()
 
void initAverageSolutionsSlice ()
 Initializes properties for slice averaging. More...
 
void averageSolutionsSlice ()
 
void probeLocation ()
 
void findClosestProbePointsGridCells ()
 
virtual void initPointSamplingData ()
 
virtual void savePointSamplingData ()
 
virtual void initSurfaceSamplingData ()
 
virtual void saveSurfaceSamplingData ()
 
virtual void initVolumeSamplingData ()
 
virtual void saveVolumeSamplingData ()
 
virtual void initIsoTurbulenceStatistics ()
 
virtual void computeIsoTurbulenceStatistics ()
 
void initWritePointData ()
 
void writePointData ()
 
void spatialAveraging ()
 
void spatialAveragingPost ()
 
void createCellToMap1D (std::map< MFloat, MInt, coord_comp_1d_ > &coordinates, std::map< MFloat, MFloat, coord_comp_1d_ > &cell_to_map)
 
void createCellToMap2D (std::map< std::pair< MFloat, MFloat >, MInt, coord_comp_2d_ > &coordinates, std::map< std::pair< MFloat, MFloat >, std::pair< MFloat, MFloat >, coord_comp_2d_ > &cell_to_map)
 
void probeLine ()
 
void probeLinePre ()
 
void probeLinePost ()
 
void probeSlice ()
 
void probeSliceIn ()
 
void probeSlicePre ()
 
void probeSlicePost ()
 
void collectMinLvlCells ()
 
void findContainingCell (const MFloat *coord, MInt &cellId)
 
void probeArbitraryLine ()
 
void probeArbitraryLinePost ()
 
void probeArbitrarySlice ()
 
void probeArbitrarySlicePost ()
 
virtual void initMovingAverage ()
 Initializes properties and allocates memory for moving averaging. More...
 
void movingAverage ()
 
void movingAveragePost ()
 
void initCorrelation ()
 
void initPeriodicSliceAverage ()
 Initializes the periodic averaging on a slice. More...
 
void periodicSliceAverage ()
 
MInt findNearestGridCell (const MFloat *coord)
 
void movePointsToGrid (MFloat *in_points, MInt in_noPoints, MInt in_moveType)
 
void getSampleVariables (MInt cellId, const MFloat *&vars, MBool mode)
 
void getSampleVariables (MInt const cellId, std::vector< MFloat > &vars)
 
void calcSamplingVar (const MInt cellId, const MInt sampleVarId, MFloat *const vars)
 
void saveSliceAiaFileFormat (const MInt step, const MInt noVars, MFloatScratchSpace &vars, const MInt sliceId)
 
MFloat calcDivergence (const MInt cellIdSolver)
 
virtual void calcVorticity (const MFloatTensor &deriv, MFloat vorticity[nDim *2 - 3])
 
virtual void getVorticity (MFloat *const vorticity)
 
virtual void getVorticityT (MFloat *const vorticity)
 
virtual void getPrimitiveVariables (MInt, MFloat *, MFloat *, MInt)
 
virtual void computeAcousticSourceTermQe (MFloatScratchSpace &, MFloatScratchSpace &, MFloatScratchSpace &, MFloatScratchSpace &)
 
void getSampleVarsDerivatives (const MInt cellId, const MFloat *&vars)
 
MBool getSampleVarsDerivatives (const MInt, std::vector< MFloat > &)
 
virtual MFloatvorticityAtCell (const MInt cellId, const MInt dir)
 
virtual MFloat getBoundaryHeatFlux (const MInt cellId) const
 
virtual void getPrimitiveVarNames (MString *names) const
 
void neededMeanVarsForSourceTerm (const MInt sourceTerm, std::vector< MInt > &meanVars) const
 
MBool isMeanFile ()
 

Protected Attributes

SolverTypem_ppSolver
 
MFloat ** m_cInjData = nullptr
 
MFloat m_AvgRe_p = F0
 
MFloat m_VpRMS = F0
 
MFloat m_EkinP = F0
 
MBool m_writeParLog = false
 
MInt m_parLogInterval = 50
 
MBool m_parLogApp = false
 
- Protected Attributes inherited from PostProcessing< nDim, PostProcessingLPT< nDim > >
MInt m_noPostprocessingOps
 
MStringm_postprocessingOps
 
tvecpost m_postprocessingSolution
 
std::vector< tvecpostm_postprocessingMethods
 
std::vector< std::vector< MString > > m_postprocessingMethodsDesc
 
Datam_postData
 
MInt m_noVariables
 
MBool m_square
 
MBool m_skewness
 
MBool m_kurtosis
 
MBool m_computeAndSaveMean
 
MBool m_twoPass
 
MBool m_useKahan
 
MBool m_correlation
 
std::vector< MInt > * m_cell2globalIndex
 
MIntm_noPeriodicSliceCells
 
MFloat ** m_sliceAverage
 
MInt m_globalnoSlicePositions
 
std::multimap< MFloat, MFloatm_sliceGlobalPositions
 
MBool m_averageVorticity
 
MBool m_averageSpeedOfSound
 
MFloat m_gamma
 
MInt m_movingAverageStartTimestep
 
MInt m_movingAverageStopTimestep
 
MInt m_movingAverageInterval
 
MInt m_movingAverageDataPoints
 
MInt m_movingAverageCounter
 
MFloat ** m_movAvgVariables
 
MInt m_movAvgNoVariables
 
MStringm_movAvgVarNames
 
MInt m_spatialDirection1
 
MInt m_spatialDirection2
 
MFloat m_spatialWeightSinglePoint
 
MFloat m_spatialLvlWeight [20]
 
MIntm_spatialDispls
 
MIntm_spatialVarsDispls
 
MIntm_spatialRecvcnts
 
MIntm_spatialVarsRecvcnts
 
MInt m_spatialCoordSum
 
std::map< MFloat, MInt, coord_comp_1d_m_spatialLineCoordinates
 
std::map< MFloat, MFloat, coord_comp_1d_m_spatialLineCellToMap
 
std::map< MFloat, MInt, coord_comp_1d_m_spatialGlobalLineCoordinates
 
std::map< MFloat, MFloat, coord_comp_1d_m_spatialGlobalLineCellToMap
 
MInt m_spatialLineNoCells
 
MFloatm_spatialLineAllVars
 
MFloatm_spatialLineAllCoord
 
std::map< std::pair< MFloat, MFloat >, MInt, coord_comp_2d_m_spatialPlaneCoordinates
 
std::map< std::pair< MFloat, MFloat >, std::pair< MFloat, MFloat >, coord_comp_2d_m_spatialPlaneCellToMap
 
std::map< std::pair< MFloat, MFloat >, MInt, coord_comp_2d_m_spatialGlobalPlaneCoordinates
 
std::map< std::pair< MFloat, MFloat >, std::pair< MFloat, MFloat >, coord_comp_2d_m_spatialGlobalPlaneCellToMap
 
MInt m_spatialPlaneNoCells
 
MFloatm_spatialPlaneAllVars
 
MFloatm_spatialPlaneAllCoord
 
MInt m_noProbeLines
 
MIntm_probeLineDirection
 
MIntm_probeLinePeriodic
 
MFloat ** m_probeLineCoordinates
 
MInt ** m_probeLineIds
 
MIntm_noProbeLineIds
 
MFloat ** m_probeLinePositions
 
MIntm_globalNoProbeLineIds
 
MIntm_probeLineOffsets
 
MInt ** m_noGlobalProbeLineIds
 
MInt m_probeLineInterval
 
MInt m_probeLineStartTimestep
 
MInt m_probeLineStopTimestep
 
MIntm_correlationDirection
 
MIntm_correlationVariableIndex
 
MFloat ** m_correlationCoordinates
 
MInt m_noCorrelationLines
 
MIntm_noCorrelationIds
 
MInt ** m_correlationIds
 
MInt ** m_globalCorrelationIds
 
MFloat ** m_globalCorrelationPositions
 
MIntm_globalNoCorrelationIds
 
MFloat ** m_correlationPositions
 
MInt ** m_correlationIndexMapping
 
MFloat ** m_correlationExchangeVar
 
MFloat ** m_correlationExchangeVarMean
 
MFloat ** m_correlationExchangeVarRMS
 
MFloat ** m_globalCorrelationExchangeVar
 
MFloat ** m_globalCorrelationExchangeVarMean
 
MFloat ** m_globalCorrelationExchangeVarRMS
 
MIntm_probeLineAverageDirection
 
MFloat ** m_probeLineAverageCoordinates
 
MInt ** m_probeLineAverageCoordinatesSign
 
MInt ** m_noProbeLineAverageIds
 
MFloat *** m_globalProbeLineAverageVars
 
MInt m_noProbeLineAverageSteps
 
MInt ** m_globalNoProbeLineAverageIds
 
MInt *** m_probeLineAverageIds
 
MFloat *** m_probeLineAveragePositions
 
MInt m_noProbeSlices
 
MIntm_probeSliceDir
 
MFloatm_probeSliceCoordinate
 
MInt ** m_probeSliceIds
 
MIntm_noProbeSliceIds
 
MFloat ** m_probeSlicePositions
 
MIntm_globalNoProbeSliceIds
 
MIntm_probeSliceOffsets
 
MInt ** m_noGlobalProbeSliceIds
 
MStringm_probeSliceGridNames
 
MStringm_sliceAxis
 
MFloatm_sliceIntercept
 
MBool m_sliceAiaFileFormat
 
MBool m_optimizedSliceIo
 
MIntm_noProbeSliceNoHilbertIds
 
MIntm_noProbeSliceMaxNoHilbertIds
 
MInt ** m_noProbeSliceHilbertInfo
 
MIntm_noProbeSliceNoContHilbertIds
 
MIntm_noProbeSliceMaxNoContHilbertIds
 
MInt ** m_noProbeSliceContHilbertInfo
 
MInt m_probeSliceInterval
 
MInt m_probeSliceStartTimestep
 
MInt m_probeSliceStopTimestep
 
std::vector< MIntm_sliceVarIds
 List of slice variables. More...
 
std::vector< MIntm_noSliceVars
 Number of variables for each slice variable. More...
 
std::vector< std::vector< MString > > m_sliceVarNames
 List of variable names for each slice variable. More...
 
MInt m_noMinLvlIds
 
MIntm_minLvlIds
 
MInt m_movePointsToGrid
 
MBool m_spatialAveraging
 
MFloatm_arbLinePoints
 
MInt m_noArbLines
 
MIntm_noArbLineIds
 
MFloatm_arbLinePointsDistribution
 
MIntm_arbLineHasNewDistribution
 
MIntm_arbLineFull
 
MIntm_moveLinePointsToGrid
 
MIntm_globalNoArbLineIds
 
MInt ** m_arbLineIds
 
MIntm_arbLineOffsets
 
MFloat ** m_arbLineCoordinates
 
MFloatm_arbSlicePoints
 
MInt m_noArbSlices
 
MIntm_noArbSlicePoints
 
MFloatm_arbSlicePointsDistribution
 
MIntm_globalNoArbSlicePoints
 
MInt ** m_arbSliceIds
 
MIntm_arbSliceOffsets
 
MFloat ** m_arbSliceCoordinates
 
MString m_postprocessFileName
 
MFloat ** m_localVars
 
MBool m_averageRestart
 
MInt m_averageInterval
 
MInt m_averageStartTimestep
 
MInt m_averageStopTimestep
 
MInt m_noAveragedVorticities
 
MInt m_noSpeedOfSoundVars
 
MInt m_noSourceVars
 
MBool m_needVorticity
 
MString m_ReStressesAverageFileName
 
MFloat ** m_probeCoordinates
 
MString m_probePath
 
MIntm_probeCellIds
 
std::ofstream * m_probeFileStreams
 
MInt m_noProbePoints
 
MInt m_probeInterval
 
MInt m_probeWriteInterval
 
MString m_pdFileName
 
MInt m_pdStartTimestep
 
MInt m_pdStopTimestep
 
MInt m_pdRestartInterval
 
std::vector< MFloatm_pdPoints
 
std::vector< MIntm_pdCells
 
std::vector< MFloatm_pdVars
 
MInt m_pdNoPoints
 
MInt m_sprayComputeInterval
 
MInt m_sprayWriteInterval
 
MInt m_sprayDataSize
 
MInt m_sprayDataStep
 
MFloat ** m_particleCV
 
MFloat ** m_particlePen
 
MFloat ** m_sprayStat
 
MFloat ** m_sprayTimes
 
MFloat ** m_injectionData
 
MFloat ** m_vapourCV
 
MFloat ** m_vapourPen
 
MInt m_LPTSolutionInterval
 
MBool m_forceOutput
 
std::vector< MIntm_activeSourceTerms
 
std::array< MString, ST::totalNoSourceTermss_sourceTermNames
 
std::set< MIntm_activeMeanVars
 
- Protected Attributes inherited from PostProcessingInterface
MInt m_postprocessingId
 

Friends

template<MInt nDim_, class ppType >
class PostProcessing
 
template<MInt nDim_>
class LPT
 

Additional Inherited Members

- Public Attributes inherited from PostProcessing< nDim, PostProcessingLPT< nDim > >
MInt m_noLocalVars
 
MInt m_restartTimeStep
 
MBool m_statisticCombustionAnalysis
 
MBool m_acousticAnalysis
 
- Public Attributes inherited from PostProcessingInterface
MBool m_finalTimeStep = false
 
- Protected Types inherited from PostProcessing< nDim, PostProcessingLPT< nDim > >
typedef void(PostProcessing::* tpost) ()
 
typedef std::vector< tposttvecpost
 

Detailed Description

template<MInt nDim>
class PostProcessingLPT< nDim >

Definition at line 23 of file postprocessinglpt.h.

Member Typedef Documentation

◆ Base

template<MInt nDim>
using PostProcessingLPT< nDim >::Base = PostProcessing<nDim, PostProcessingLPT<nDim> >

Definition at line 32 of file postprocessinglpt.h.

◆ SolverType

template<MInt nDim>
using PostProcessingLPT< nDim >::SolverType = LPT<nDim>

Definition at line 31 of file postprocessinglpt.h.

Constructor & Destructor Documentation

◆ PostProcessingLPT()

template<MInt nDim>
PostProcessingLPT< nDim >::PostProcessingLPT ( MInt  postprocessingId_,
PostData< nDim > *  data,
SolverType ppSolver_ 
)

Definition at line 16 of file postprocessinglpt.cpp.

17 : PostProcessingInterface(postprocessingId_), PostProcessing<nDim, PostProcessingLPT<nDim>>(postprocessingId_, data) {
18 m_ppSolver = ppSolver_;
19}
SolverType * m_ppSolver

◆ ~PostProcessingLPT()

template<MInt nDim>
virtual PostProcessingLPT< nDim >::~PostProcessingLPT ( )
inlinevirtual

Definition at line 46 of file postprocessinglpt.h.

46{};

Member Function Documentation

◆ advanceDataStep()

template<MInt nDim>
void PostProcessingLPT< nDim >::advanceDataStep ( )
inlineprotected

◆ computeParticleStatistics()

template<MInt nDim>
void PostProcessingLPT< nDim >::computeParticleStatistics
overrideprotectedvirtual
Author
Johannes Grafen
Date
Jul 2022

Reimplemented from PostProcessing< nDim, PostProcessingLPT< nDim > >.

Definition at line 601 of file postprocessinglpt.cpp.

601 {
602 TRACE();
603
605 || this->m_forceOutput) {
606 const MInt globalNoPart = solver().globalNoParticles();
607 MFloat RePSum = F0;
608 MFloat VelmagnitudeSqSum = F0;
609 MFloat EkinSum = F0;
610
611 for(LPTSpherical<nDim>& part : solver().m_partList) {
612 const MFloat T = solver().a_fluidTemperature(part.m_cellId);
613 const MFloat fluidViscosity = solver().m_material->dynViscosityFun(T);
614 const MFloat relVel = part.magRelVel(&part.m_oldFluidVel[0], &part.m_oldVel[0]);
615
616 RePSum += part.particleRe(relVel, part.m_oldFluidDensity, fluidViscosity) * part.s_Re;
617
618 MFloat VelmagnitudeSq = F0;
619 for(MInt j = 0; j < nDim; j++) {
620 VelmagnitudeSq += POW2(part.m_velocity[j]);
621 }
622 VelmagnitudeSqSum += VelmagnitudeSq;
623
624 EkinSum += part.sphericalMass() * VelmagnitudeSq;
625 }
626
627 MPI_Allreduce(MPI_IN_PLACE, &RePSum, 1, MPI_DOUBLE, MPI_SUM, solver().mpiComm(), AT_, "INPLACE", "RePsum");
628
629 MFloat AverageReP = RePSum / globalNoPart;
630
631 MPI_Allreduce(MPI_IN_PLACE, &VelmagnitudeSqSum, 1, MPI_DOUBLE, MPI_SUM, solver().mpiComm(), AT_, "INPLACE",
632 "VelMagnitudesum");
633
634 MFloat VpRMS = sqrt(VelmagnitudeSqSum / globalNoPart);
635
636 MPI_Allreduce(MPI_IN_PLACE, &EkinSum, 1, MPI_DOUBLE, MPI_SUM, solver().mpiComm(), AT_, "INPLACE", "EkinSum");
637
638 MFloat EkinP = 0.5 * EkinSum;
639
640 if(solver().domainId() == 0) {
641 std::ofstream Plog;
642 Plog.open("ParticleStatistics.log", ios::app);
643 Plog << std::setw(5) << globalTimeStep << "\t" << std::setw(10) << VpRMS << "\t" << std::setw(10) << AverageReP
644 << "\t" << std::setw(10) << EkinP << endl;
645 Plog.close();
646 }
647 } else {
648 return;
649 }
650}
MFloat & a_fluidTemperature(const MInt cellId)
Definition: lpt.h:406
MInt globalNoParticles()
Definition: lpt.h:494
std::unique_ptr< MaterialState< nDim > > m_material
Definition: lpt.h:815
MBool m_forceOutput
MInt m_LPTSolutionInterval
MBool m_finalTimeStep
SolverType & solver() const
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

◆ getInjectionData()

template<MInt nDim>
MInt PostProcessingLPT< nDim >::getInjectionData
protected

Definition at line 378 of file postprocessinglpt.cpp.

378 {
379 TRACE();
380
381
382 if(solver().m_sprayModel == nullptr) {
383 return 0;
384 }
385
386 if(!solver().isActive()) {
387 solver().m_injData.clear();
388 return 0;
389 }
390
391 const MInt injectorCellId = solver().injectorCellId();
392 MInt count = 0;
393
394 // gather and sum all spray injection solver data
395 for(auto it = solver().m_injData.begin(); it != solver().m_injData.end(); it++) {
396 const MInt timeStep = it->first;
397 if(solver().domainId() == 0) {
398 m_injectionData[count][0] = timeStep;
399 } else {
400 m_injectionData[count][0] = 0.0;
401 }
402
403 for(MInt i = 0; i < 14; i++) {
404 const MFloat data = (it->second)[i];
405 m_injectionData[count][i + 1] = data;
406 }
407 count++;
408 }
409 count = 0;
410
411 MPI_Allreduce(MPI_IN_PLACE, &(m_injectionData[0][0]), 15 * this->m_sprayWriteInterval, MPI_DOUBLE, MPI_SUM,
412 solver().mpiComm(), AT_, "INPLACE", "m_injectionData");
413
414 MPI_Allreduce(MPI_IN_PLACE, &(m_cInjData[0][0]), (nDim + 5) * (this->m_sprayWriteInterval + 1), MPI_DOUBLE, MPI_MAX,
415 solver().mpiComm(), AT_, "INPLACE", "m_cInjData");
416
417 if(injectorCellId > -1) {
418 // get storage value
419 for(MInt i = 0; i < nDim + 5; i++) {
421 }
422
423 for(auto it = solver().m_injData.begin(); it != solver().m_injData.end(); it++) {
424 // add data from:
425 // injMass, injXMom, injYMom, injZMom, injEnergy, sumEvapMass, noRT-breakup, noKH-breakup
426 for(MInt i = 0; i < nDim + 5; i++) {
427 m_cInjData[count][i] += m_injectionData[count][7 + i];
428 }
429 count++;
430
431 // set pervious mass as mass in the next timeStep
432 for(MInt i = 0; i < nDim + 5; i++) {
433 m_cInjData[count][i] = m_cInjData[count - 1][i];
434 }
435 }
436 // put last value into storage
437 for(MInt i = 0; i < nDim + 5; i++) {
438 m_cInjData[this->m_sprayWriteInterval][i] = m_cInjData[count][i];
439 }
440
441 } else {
442 for(MInt id = 0; id < this->m_sprayWriteInterval + 1; id++) {
443 for(MInt j = 0; j < nDim + 5; j++) {
444 m_cInjData[id][j] = 0;
445 }
446 }
447 }
448
449 solver().m_injData.clear();
450
451 return count;
452}
MInt injectorCellId() const
Definition: lpt.h:481
std::map< MInt, std::vector< MFloat > > m_injData
Definition: lpt.h:491
MBool isActive() const
MInt m_sprayWriteInterval
MFloat ** m_injectionData
MFloat ** m_cInjData
MInt id
Definition: maiatypes.h:71

◆ initLPTSolutionFile()

template<MInt nDim>
void PostProcessingLPT< nDim >::initLPTSolutionFile
overrideprotectedvirtual
Author
Tim Wegmann
Date
Jan 2021

Reimplemented from PostProcessing< nDim, PostProcessingLPT< nDim > >.

Definition at line 459 of file postprocessinglpt.cpp.

459 {
460 TRACE();
462 Context::getSolverProperty<MInt>("particleSolutionInterval", m_postprocessingId, AT_, &m_LPTSolutionInterval);
463
464 m_writeParLog = Context::getSolverProperty<MBool>("writeParLog", m_postprocessingId, AT_, &m_writeParLog);
466}
MInt m_postprocessingId
MBool m_writeParLog
void initParticleLog()
initialize particle.log

◆ initParticleLog()

template<MInt nDim>
void PostProcessingLPT< nDim >::initParticleLog
protected
Author
Johannes Grafen

Definition at line 506 of file postprocessinglpt.cpp.

506 {
507 if(solver().m_restart && m_writeParLog) m_parLogApp = true;
508
510 Context::getSolverProperty<MInt>("particleLogInterval", m_postprocessingId, AT_, &m_parLogInterval);
511
512 if(solver().domainId() == 0) {
513 std::ofstream parLog;
514 if(m_parLogApp) {
515 parLog.open("particle.log", ios::app);
516 } else {
517 parLog.open("particle.log");
518 const MString columns[9] = {"x", "y", "z", "vel_x", "vel_y", "vel_z", "Re", "C_D"};
519 parLog << std::setw(5) << "t"
520 << "\t";
521 for(auto& i : columns) {
522 parLog << std::setw(15) << i << "\t";
523 }
524 }
525 parLog << std::endl;
526 parLog.close();
527 }
528}
MBool m_parLogApp
MInt m_parLogInterval
std::basic_string< char > MString
Definition: maiatypes.h:55

◆ initParticleStatistics()

template<MInt nDim>
void PostProcessingLPT< nDim >::initParticleStatistics
overrideprotectedvirtual
Author
Johannes Grafen
Date
Jul 2022

Reimplemented from PostProcessing< nDim, PostProcessingLPT< nDim > >.

Definition at line 578 of file postprocessinglpt.cpp.

578 {
579 TRACE();
580
581 if(solver().domainId() == 0) {
582 std::ofstream Plog;
583 Plog.open("ParticleStatistics.log", ios::app);
584 Plog << std::setw(5) << "t"
585 << "\t" << std::setw(10) << "VpRMS"
586 << "\t" << std::setw(10) << "AverageReP"
587 << "\t" << std::setw(10) << "EkinP" << endl;
588 Plog.close();
589 }
590}

◆ initSprayData()

template<MInt nDim>
void PostProcessingLPT< nDim >::initSprayData
overridevirtual
Author
Tim Wegmann
Date
Jan. 2021

Reimplemented from PostProcessing< nDim, PostProcessingLPT< nDim > >.

Definition at line 28 of file postprocessinglpt.cpp.

28 {
30 TRACE();
31
32 if(solver().domainId() == 0) {
33 cerr << "Allocating Post-processing LPT data!" << endl;
34 }
35
36 // gatherd in the postProcTimeInterval
37 mAlloc(m_particleCV, m_sprayDataSize, 2 + nDim, "m_particleCV", F0, AT_);
38 mAlloc(m_particlePen, m_sprayDataSize, 19, "m_particlePen", F0, AT_);
39 mAlloc(m_sprayStat, m_sprayDataSize, 5, "m_sprayStat", F0, AT_);
40 mAlloc(m_sprayTimes, m_sprayDataSize, 3, "m_sprayTimes", F0, AT_);
41
42 if(solver().m_sprayModel == nullptr) return;
43
44 // gatherd every timeStep
45 mAlloc(m_injectionData, this->m_sprayWriteInterval, 15, "m_injectionData", F0, AT_);
46 mAlloc(m_cInjData, this->m_sprayWriteInterval + 1, nDim + 5, "m_cInjData", F0, AT_);
47
48 if(!solver().isActive()) return;
49
50 array<MFloat, nDim + 5> loadedVariables = {};
51 // load the sum of the injected mass from last file
52 if(solver().m_restartFile && solver().domainId() == 0) {
53 ifstream readFile;
54 stringstream filename;
55 filename.clear();
56 filename.str("");
57 filename << solver().restartDir() << "injSums";
58 readFile.open(filename.str(), ios_base::in);
59 if(!readFile) {
60 filename.clear();
61 filename.str("");
62 filename << solver().restartDir() << "injSums_" << globalTimeStep;
63 readFile.open(filename.str(), ios_base::in);
64 if(!readFile) {
65 mTerm(1, AT_, "Error reading injection file!");
66 }
67 } else {
68 // file found -> create backup
69 MString backupName = solver().restartDir() + "injSums_" + to_string(globalTimeStep);
70 std::ifstream src(filename.str(), std::ios::binary);
71 std::ofstream dst(backupName, std::ios::binary);
72 dst << src.rdbuf();
73 }
74 readFile.seekg(-1, ios_base::end);
75
76 MChar ch;
77 MString lastLine;
78 readFile.get(ch);
79 if(ch == '\n') {
80 readFile.seekg(-2, ios::cur);
81 readFile.seekg(-1, ios::cur);
82 readFile.get(ch);
83 while(ch != '\n') {
84 readFile.seekg(-2, std::ios::cur);
85 readFile.get(ch);
86 }
87 getline(readFile, lastLine);
88 } else {
89 mTerm(1, AT_, "Wrong injection file-format!");
90 }
91 stringstream ss(lastLine);
92 MFloat timeStep;
93 ss >> timeStep;
94
95 if((MInt)timeStep == globalTimeStep) {
96 // matching time-step -> load data
97 for(MInt i = 0; i < nDim + 5; i++) {
98 ss >> loadedVariables[i];
99 cerr << "Loaded injected Data " << i << " is " << loadedVariables[i] << endl;
100 }
101 } else if((MInt)timeStep > globalTimeStep) {
102 cerr << "Searching correct line in injection data-file for " << globalTimeStep << " from last output " << timeStep
103 << endl;
104 while(timeStep > globalTimeStep) {
105 ss.str("");
106 readFile.seekg(-2, std::ios::cur);
107 readFile.seekg(-1, std::ios::cur);
108 readFile.get(ch);
109 const MInt oldPos = readFile.tellg();
110 while(ch != '\n') {
111 readFile.seekg(-2, std::ios::cur);
112 readFile.get(ch);
113 }
114 MString lastLine2;
115 getline(readFile, lastLine2);
116 const MInt newPos = readFile.tellg();
117 const MInt difPos = -(newPos - oldPos);
118 readFile.seekg(difPos, std::ios::cur);
119 ss.str(lastLine2);
120 ss >> timeStep;
121 }
122 for(MInt i = 0; i < nDim + 5; i++) {
123 ss >> loadedVariables[i];
124 cerr << "Loaded injected Data " << i << " is " << loadedVariables[i] << endl;
125 }
126
127 } else if((MInt)timeStep < globalTimeStep) {
128 for(MInt i = 0; i < nDim + 5; i++) {
129 loadedVariables[i] = 0;
130 }
131 readFile.close();
132
133 // if the restart timeStep is smaller than the last computed/written timeStep info
134 //-> search for matching timeStep in the backup file
135 filename.clear();
136 filename.str("");
137 filename << solver().restartDir() << "injSums_" << globalTimeStep;
138 readFile.open(filename.str(), ios_base::in);
139 if(readFile) {
140 mTerm(1, AT_, "Error reading injection file!");
141 }
142 readFile.seekg(-1, ios_base::end);
143 readFile.get(ch);
144 MString lastLine2;
145 if(ch == '\n') {
146 readFile.seekg(-2, ios::cur);
147 readFile.seekg(-1, ios::cur);
148 readFile.get(ch);
149 while(ch != '\n') {
150 readFile.seekg(-2, std::ios::cur);
151 readFile.get(ch);
152 }
153 getline(readFile, lastLine2);
154 } else {
155 mTerm(1, AT_, "Wrong injection file-format!");
156 }
157 stringstream ss2(lastLine2);
158 ss2 >> timeStep;
159 if((MInt)timeStep == globalTimeStep) {
160 for(MInt i = 0; i < nDim + 5; i++) {
161 ss2 >> loadedVariables[i];
162 if(solver().domainId() == 0) {
163 cerr << "Loaded injected Data " << i << " is " << loadedVariables[i] << endl;
164 }
165 }
166 } else {
167 cerr << "Correct Timestep count not be found at the end of in any of the injSums files!"
168 << "Either trunkate the files of implement version which checks through all lines!" << endl;
169 }
170 }
171 readFile.close();
172
173 for(MInt i = 0; i < nDim + 5; i++) {
174 m_cInjData[this->m_sprayWriteInterval][i] = loadedVariables[i];
175 }
176 }
177
178 if(solver().m_restartFile) {
179 MPI_Allreduce(MPI_IN_PLACE, &(m_cInjData[0][0]), (nDim + 5) * (this->m_sprayWriteInterval + 1), MPI_DOUBLE, MPI_MAX,
180 solver().mpiComm(), AT_, "INPLACE", "m_cInjData");
181 }
182}
void mAlloc(T *&a, const MLong N, const MString &objectName, MString function)
allocates memory for one-dimensional array 'a' of size N
Definition: alloc.h:173
MFloat ** m_sprayStat
MFloat ** m_particlePen
MFloat ** m_particleCV
MFloat ** m_sprayTimes
MInt m_sprayDataSize
void initSprayData() override
init arrays
MString restartDir() const
Return the directory for restart files.
Definition: solver.h:410
void mTerm(const MInt errorCode, const MString &location, const MString &message)
Definition: functions.cpp:29
char MChar
Definition: maiatypes.h:56
std::istream & getline(std::istream &input, std::string &line)
Definition: cpptoml.h:1519

◆ parcelStatistics()

template<MInt nDim>
void PostProcessingLPT< nDim >::parcelStatistics
protected
Author
Sven Berger, Tim Wegmann
Date
Jan. 2021

Definition at line 349 of file postprocessinglpt.cpp.

349 {
350 TRACE();
351
352 const MInt noPart = solver().a_noParticles();
353
354 MLong noDroplets = 0;
355 MFloat diameter = 0;
356 MFloat surfaceArea = 0;
357 MFloat volume = 0;
358 for(MInt id = 0; id < noPart; ++id) {
359 noDroplets += solver().m_partList[id].m_noParticles;
360 diameter += solver().m_partList[id].m_noParticles * solver().m_partList[id].m_diameter;
361 surfaceArea += solver().m_partList[id].m_noParticles * POW2(solver().m_partList[id].m_diameter);
362 volume += solver().m_partList[id].m_noParticles * POW3(solver().m_partList[id].m_diameter);
363 }
364
365
366 // const MFloat SMD = volume / surfaceArea;
367 // const MFloat meanD = diameter / noDroplets;
368
369 m_sprayStat[m_sprayDataStep][0] = noPart;
370 m_sprayStat[m_sprayDataStep][1] = noDroplets;
371 m_sprayStat[m_sprayDataStep][2] = diameter;
372 m_sprayStat[m_sprayDataStep][3] = surfaceArea;
373 m_sprayStat[m_sprayDataStep][4] = volume;
374}
MInt a_noParticles()
Definition: lpt.h:366
std::vector< LPTSpherical< nDim > > m_partList
Definition: lpt.h:527
constexpr Real POW3(const Real x)
Definition: functions.h:123
int64_t MLong
Definition: maiatypes.h:64

◆ particleMass()

template<MInt nDim>
void PostProcessingLPT< nDim >::particleMass
protected
Author
Sven Berger, Tim Wegmann
Date
Jan. 2021

Definition at line 191 of file postprocessinglpt.cpp.

191 {
192 TRACE();
193
194 // calculate conservative particle values
195 MFloat partMass = 0;
196 MFloat partE = 0;
197 MFloat partMomentum[nDim] = {};
198 for(MInt i = 0; i < nDim; i++) {
199 partMomentum[i] = 0;
200 }
201 for(MInt id = 0; id < solver().a_noParticles(); ++id) {
202 if(solver().m_partList[id].isInvalid()) continue;
203 MFloat mass = solver().m_partList[id].sphericalMass() * solver().m_partList[id].m_noParticles;
204 partMass += mass;
205 partE +=
206 solver().m_material->cp() / solver().m_material->gammaMinusOne() * mass * solver().m_partList[id].m_temperature;
207 MFloat velMagSquared = 0;
208 for(MInt i = 0; i < nDim; i++) {
209 partMomentum[i] += (mass * solver().m_partList[id].m_velocity[i]);
210 velMagSquared += POW2(solver().m_partList[id].m_velocity[i]);
211 }
212 partE += 0.5 * mass * velMagSquared;
213 }
214 m_particleCV[m_sprayDataStep][0] = partMass;
215 m_particleCV[m_sprayDataStep][1] = partE;
216 for(MInt i = 0; i < nDim; i++) {
217 m_particleCV[m_sprayDataStep][2 + i] = partMomentum[i];
218 }
219}

◆ particlePenetration()

template<MInt nDim>
void PostProcessingLPT< nDim >::particlePenetration
protected
Author
Sven Berger, Tim Wegmann
Date
Jan. 2021

Definition at line 229 of file postprocessinglpt.cpp.

229 {
230 TRACE();
231
232 // different penetration measurements
233 // 0: overal all maximum
234 // 1: parcel with 90% liquid mass fraction
235 // 2: parcel with LVFlimit
236 // 3: parcel with LVFlimit on refLvl
237 const MInt noPen = 4;
238 array<array<MFloat, noPen>, nDim + 1> maxLiqPen{};
239
240 const MFloat massFracLimit = 0.90;
241 const MFloat LVFlimit = 0.025; // 0.01 as first estimate
242 const MInt refLvl = 10;
243
244 // spray-width measurements in certain plans
245 static constexpr MInt nPlanes = 3;
246 // static constexpr MFloat yPlaneBorder = 0.1/75.0;
247 static constexpr MFloat yPlaneBorder = 0.001333;
248 // static constexpr MFloat yPlanes[nPlanes] = {15.0/75.0 , 25.0/75.0, 35.0/75.0};
249 static constexpr MFloat yPlanes[nPlanes] = {0.2, 0.3333, 0.46667};
250
251 vector<MFloat> width(nPlanes);
252 for(MInt n = 0; n < nPlanes; n++) {
253 width[n] = 0.0;
254 }
255
256 auto assignLarger = [&](MFloat& A, MFloat b) {
257 if(b > A) {
258 A = b;
259 }
260 };
261
262
263 for(MInt id = 0; id < solver().a_noParticles(); ++id) {
264 array<MFloat, nDim + 1> distance{};
265 for(MInt i = 0; i < nDim; i++) {
266 distance[i] = abs(solver().m_partList[id].m_position[i] - solver().m_spawnCoord[i]);
267 }
268
269 distance[nDim] = sqrt(POW2(distance[0]) + POW2(distance[1]) + POW2(distance[2]));
270
271
272 for(MInt i = 0; i < nDim + 1; i++) {
273 assignLarger(maxLiqPen[i][0], distance[i]);
274 }
275
276 for(MInt i = 0; i < nPlanes; i++) {
277 if(fabs(distance[1] - yPlanes[i]) < yPlaneBorder) {
278 assignLarger(width[i], distance[0]);
279 assignLarger(width[i], distance[2]);
280 }
281 }
282 const MInt cellId = solver().m_partList[id].m_cellId;
283 if(cellId < 0) continue;
284 if(solver().a_volumeFraction(cellId) > LVFlimit) {
285 for(MInt i = 0; i < nDim + 1; i++) {
286 assignLarger(maxLiqPen[i][1], distance[i]);
287 }
288 }
289 }
290
291 for(MInt cellId = 0; cellId < solver().noInternalCells(); cellId++) {
292 const MFloat massFraction =
293 solver().a_volumeFraction(cellId) * solver().m_material->density() / solver().a_fluidDensity(cellId);
294 array<MFloat, nDim + 1> distance{};
295
296 if(massFraction > massFracLimit) {
297 array<MFloat, nDim> cellCoordinate{};
298 for(MInt i = 0; i < nDim; i++) {
299 cellCoordinate[i] = solver().c_coordinate(cellId, i);
300 distance[i] = abs(cellCoordinate[i] - solver().m_spawnCoord[i]);
301 }
302 distance[nDim] = sqrt(POW2(distance[0]) + POW2(distance[1]) + POW2(distance[2]));
303
304 for(MInt i = 0; i < nDim + 1; i++) {
305 assignLarger(maxLiqPen[i][2], distance[i]);
306 }
307 }
308 if(solver().a_level(cellId) == refLvl) {
309 solver().reduceData(cellId, &solver().a_volumeFraction(0), 1);
310 if(solver().a_volumeFraction(cellId) > LVFlimit) {
311 array<MFloat, nDim> cellCoordinate{};
312 for(MInt i = 0; i < nDim; i++) {
313 cellCoordinate[i] = solver().c_coordinate(cellId, i);
314 distance[i] = abs(cellCoordinate[i] - solver().m_spawnCoord[i]);
315 }
316 distance[nDim] = sqrt(POW2(distance[0]) + POW2(distance[1]) + POW2(distance[2]));
317
318 for(MInt i = 0; i < nDim + 1; i++) {
319 assignLarger(maxLiqPen[i][3], distance[i]);
320 }
321 }
322 }
323 }
324
325 // save data:
326 MInt it = 0;
327 for(MInt n = 0; n < noPen; n++) {
328 for(MInt i = 0; i < nDim + 1; i++) {
329 m_particlePen[m_sprayDataStep][it++] = maxLiqPen[i][n];
330 }
331 }
332
333 for(MInt n = 0; n < nPlanes; n++) {
335 }
336
337 if(it > 19) {
338 mTerm(1, AT_, "PP: Penetration-Storage not matching!");
339 }
340}
MFloat & a_fluidDensity(const MInt cellId)
Definition: lpt.h:400
MFloat & a_volumeFraction(const MInt cellId)
Definition: lpt.h:382
MFloat c_coordinate(const MInt cellId, const MInt dir) const
Definition: lpt.h:972
MFloat reduceData(const MInt cellId, MFloat *data, const MInt dataBlockSize=1, const MBool average=true)
reduce data to lower level
Definition: lpt.cpp:8020
MInt noInternalCells() const override
Return the number of internal cells within this solver.
Definition: lpt.h:979
void const MInt cellId
Definition: collector.h:239
const MInt width
Definition: logtable.h:21
MFloat distance(const MFloat *a, const MFloat *b)
Definition: maiamath.h:249

◆ resetDataStep()

template<MInt nDim>
void PostProcessingLPT< nDim >::resetDataStep ( )
inlineprotected

Definition at line 69 of file postprocessinglpt.h.

69{ m_sprayDataStep = 0; };

◆ solver()

template<MInt nDim>
SolverType & PostProcessingLPT< nDim >::solver ( ) const
inline

Definition at line 48 of file postprocessinglpt.h.

48{ return *m_ppSolver; }

◆ writeLPTSolutionFile()

template<MInt nDim>
void PostProcessingLPT< nDim >::writeLPTSolutionFile
overrideprotectedvirtual
Author
Tim Wegmann, Johannes Grafen
Date
Jan. 2021

Reimplemented from PostProcessing< nDim, PostProcessingLPT< nDim > >.

Definition at line 475 of file postprocessinglpt.cpp.

475 {
476 TRACE();
477
478 if(!solver().isActive()) return;
479
481
483
485 || this->m_forceOutput) {
486 if(solver().domainId() == 0) {
487 cerr << "Writing particle File @" << globalTimeStep << "(" << solver().m_time << ")... ";
488 }
490
491 if(solver().m_collisions > 0) {
493 }
494
495 if(solver().domainId() == 0) {
496 cerr << " done. " << endl;
497 }
498 }
499}
void writeCollData()
Definition: lpt.cpp:6433
void crankAngleSolutionOutput()
save a full solutionOutput at timeSteps closesed to a specified crankAngle Interval save a solution s...
Definition: lpt.cpp:7935
void writePartData()
write particle snapshot to Netcdf file (using parallel output)
Definition: lpt.cpp:3997
MFloat m_time
Definition: lpt.h:555
void writeParticleLog()
write particle Log file, containing particle position and velocity at timestep t

◆ writeParticleLog()

template<MInt nDim>
void PostProcessingLPT< nDim >::writeParticleLog
protected
Author
Johannes Grafen

Definition at line 537 of file postprocessinglpt.cpp.

537 {
538 if(solver().globalNoParticles() > 1) {
539 m_writeParLog = false;
540 std::cerr << "writing particle.log is currently only implemented for single particles!" << std::endl;
541 return;
542 }
543
544 if(solver().m_partList.size() < 1) return;
545
546
547 std::ofstream parLog;
549 if(m_writeParLog) {
550 parLog.open("particle.log", std::ios::app);
551
552 parLog << std::setw(5) << globalTimeStep << "\t";
553 for(const MFloat& i : part.m_position) {
554 parLog << std::setw(10) << std::setprecision(12) << i << "\t";
555 }
556 for(const MFloat& i : part.m_velocity) {
557 parLog << std::setw(10) << i << "\t";
558 }
559
560 const MFloat T = solver().a_fluidTemperature(part.m_cellId);
561 const MFloat fluidViscosity = solver().m_material->dynViscosityFun(T);
562 const MFloat relVel = part.magRelVel(&part.m_oldFluidVel[0], &part.m_oldVel[0]);
563
564 const MFloat ReP = part.particleRe(relVel, part.m_oldFluidDensity, fluidViscosity) * part.s_Re;
565 const MFloat CD = part.dragFactor(ReP) * 24 / ReP;
566
567 parLog << std::setw(10) << ReP << "\t";
568 parLog << std::setw(10) << CD << "\t" << std::endl;
569 parLog.close();
570 }
571}
std::array< MFloat, nDim > m_position
Definition: lptbase.h:34
std::array< MFloat, nDim > m_velocity
Definition: lptbase.h:35
std::array< MFloat, nDim > m_oldVel
particle velocity of the last time step
Definition: lptbase.h:41
MInt m_cellId
Definition: lptbase.h:46
std::array< MFloat, nDim > m_oldFluidVel
fluid velocity of the last time step
Definition: lptspherical.h:70
MFloat m_oldFluidDensity
old fluid density
Definition: lptspherical.h:73
MFloat magRelVel(const MFloat *const velocity1, const MFloat *const velocity2) const
Calculate the magnitude of the relative velocity of the two given velocity vectors.
Definition: lptspherical.h:131
MFloat particleRe(const MFloat velocity, const MFloat density, const MFloat dynamicViscosity)
Calculate the particle reynoldsnumber.
Definition: lptspherical.h:149
MFloat dragFactor(const MFloat partRe)
Calculate drag factor of the current particle for the given particle Reynolds number....
static MFloat s_Re
Definition: lptspherical.h:96

Friends And Related Function Documentation

◆ LPT

template<MInt nDim>
template<MInt nDim_>
friend class LPT
friend

Definition at line 28 of file postprocessinglpt.h.

◆ PostProcessing

template<MInt nDim>
template<MInt nDim_, class ppType >
friend class PostProcessing
friend

Definition at line 26 of file postprocessinglpt.h.

Member Data Documentation

◆ m_AvgRe_p

template<MInt nDim>
MFloat PostProcessingLPT< nDim >::m_AvgRe_p = F0
protected

Definition at line 72 of file postprocessinglpt.h.

◆ m_cInjData

template<MInt nDim>
MFloat** PostProcessingLPT< nDim >::m_cInjData = nullptr
protected

Definition at line 71 of file postprocessinglpt.h.

◆ m_EkinP

template<MInt nDim>
MFloat PostProcessingLPT< nDim >::m_EkinP = F0
protected

Definition at line 74 of file postprocessinglpt.h.

◆ m_parLogApp

template<MInt nDim>
MBool PostProcessingLPT< nDim >::m_parLogApp = false
protected

Definition at line 78 of file postprocessinglpt.h.

◆ m_parLogInterval

template<MInt nDim>
MInt PostProcessingLPT< nDim >::m_parLogInterval = 50
protected

Definition at line 77 of file postprocessinglpt.h.

◆ m_ppSolver

template<MInt nDim>
SolverType* PostProcessingLPT< nDim >::m_ppSolver
protected

Definition at line 58 of file postprocessinglpt.h.

◆ m_VpRMS

template<MInt nDim>
MFloat PostProcessingLPT< nDim >::m_VpRMS = F0
protected

Definition at line 73 of file postprocessinglpt.h.

◆ m_writeParLog

template<MInt nDim>
MBool PostProcessingLPT< nDim >::m_writeParLog = false
protected

Definition at line 76 of file postprocessinglpt.h.


The documentation for this class was generated from the following files: