MAIA bb96820c
Multiphysics at AIA
Loading...
Searching...
No Matches
FvStructuredSolver< nDim > Class Template Referenceabstract

Base class of the structured solver. More...

#include <fvstructuredsolver.h>

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

Classes

struct  MRes
 

Public Types

using Timers = maia::structured::Timers_
 

Public Member Functions

 FvStructuredSolver (MInt solverId, StructuredGrid< nDim > *, MBool *propertiesGroups, const MPI_Comm comm)
 Constructor of the structured solver. More...
 
MBool isActive () const
 
void initializeFQField ()
 Counts the number of necessary FQ fields, allocates them and corrects the indexes of the FQ variable pointers. More...
 
MInt timer (const MInt timerId) const
 
MInt noSolverTimers (const MBool allTimings) override
 
virtual void writeHeaderAttributes (ParallelIoHdf5 *pio, MString fileType)
 Overloaded version of writeHeaderAttributes that receives ParallelIoHdf5 object pointer instead of 'fileId'. More...
 
virtual void writePropertiesAsAttributes (ParallelIoHdf5 *pio, MString path)
 Overloaded version of writePropertiesAsAttributes that receives ParallelIoHdf5 object pointer instead of 'fileId'. More...
 
void saveSolverSolution (MBool=false, const MBool=false) override
 
void saveSolution (MBool)
 Saves the soution to hdf5 file. More...
 
void savePartitions ()
 Saves the partitioned grid into an HDF5 file. Not used in production use but useful for debugging. More...
 
void saveBoxes ()
 
virtual void savePointsToAsciiFile (MBool)
 
virtual void initPointsToAsciiFile ()
 
virtual void saveInterpolatedPoints ()
 
virtual void saveNodalBoxes ()
 
virtual void reIntAfterRestart (MBool)
 
MBool prepareRestart (MBool, MBool &) override
 Prepare the solvers for a grid-restart. More...
 
void writeRestartFile (MBool) override
 
void writeRestartFile (const MBool, const MBool, const MString, MInt *) override
 
void shiftCellValuesRestart (MBool)
 
void loadRestartFile ()
 Load Restart File (primitive and conservative output) general formulation. More...
 
MBool loadBoxFile (MString, MString, MInt, MInt)
 Load Box file general formulation. More...
 
virtual void loadRestartBC2600 ()
 
virtual void loadRestartBC2601 ()
 
virtual void loadRestartSTG (MBool)
 
void saveForcesToAsciiFile (MBool)
 Function to save the force coefficients and power to an ASCII file. More...
 
void saveAveragedVariables (MString, MInt, MFloat **)
 Saves the averaged (mean) variables from postprocessing to an HDF5 file. More...
 
void saveProductionTerms (MString, MFloat **)
 Writes the production terms into a given file. More...
 
void saveDissipation (MString, MFloat *)
 Writes the dissipation into a given file. More...
 
void saveGradients (MString, MFloat **, MString *)
 Writes the gradients into a given file. More...
 
void saveAverageRestart (MString, MInt, MFloat **, MFloat **, MFloat **, MFloat **)
 Writes an restart file for postprocessing. More...
 
void getSolverTimings (std::vector< std::pair< MString, MFloat > > &solverTimings, const MBool allTimings) override
 Get solver timings. More...
 
void getDomainDecompositionInformation (std::vector< std::pair< MString, MInt > > &domainInfo) override
 Return decomposition information, i.e. number of local elements,... More...
 
virtual MFloat getCellLengthY (MInt, MInt, MInt)
 
virtual MFloat getCellCoordinate (MInt, MInt)
 
MInt noInternalCells () const override
 Return the number of internal cells within this solver. More...
 
void saveAuxData ()
 
void saveForceCoefficient (ParallelIoHdf5 *parallelIoHdf5)
 Saves force coefficients to an HDF5 file. More...
 
void computeAuxData ()
 
void computeAuxDataRoot ()
 
virtual void computeDomainWidth ()
 
void computeForceCoef ()
 Function to compute the force coefficient cl, split split into the viscous part cLv and the pressure part cLp. More...
 
void computeForceCoefRoot ()
 Function to compute the coefficient, split split into the viscous part cLv and the pressure part cLp The ROOT version is faster due to an MPI_Reduce instead of an MPI_Allreduce, but only root rank has data. More...
 
virtual void computeFrictionPressureCoef (MBool)=0
 
virtual ~FvStructuredSolver ()
 
MFloat computeRecConstSVD (const MInt ijk, const MInt noNghbrIds, MInt *nghbr, MInt ID, MInt sID, MFloatScratchSpace &tmpA, MFloatScratchSpace &tmpC, MFloatScratchSpace &weights, const MInt recDim)
 AUX DATA ENDS /////////////////////////////////////////////////////////////. More...
 
void initializeFvStructuredSolver (MBool *propertiesGroups)
 Structured Solver Constructor reads and allocate properties/variables. More...
 
void allocateAndInitBlockMemory ()
 
void allocateAuxDataMaps ()
 AUX DATA //////////////////////////////////////////////////////////////////. More...
 
void setRungeKuttaProperties ()
 This function reads the properties required for Runge Kutta time stepping. More...
 
void setSamplingProperties ()
 
void setNumericalProperties ()
 Reads and initializes properties associated with the numerical method. More...
 
void setInputOutputProperties ()
 Reads properties and initializes variables associated with input/output. More...
 
void setZonalProperties ()
 Set which zones are RANS and which are LES or if full LES or full RANS. More...
 
void allocateVariables ()
 
void setTestcaseProperties ()
 Reads and initializes properties associated with the Testcase. More...
 
void setMovingGridProperties ()
 Reads and initializes properties associated with the Moving Grid Methods. More...
 
void setBodyForceProperties ()
 Reads and initializes properties associated with the Moving Grid Methods. More...
 
void setPorousProperties ()
 Set properties for porous blocks. More...
 
void readAndSetSpongeLayerProperties ()
 
void setSTGProperties ()
 
void setProfileBCProperties ()
 
void createMPIGroups ()
 
void readAndSetAuxDataMap ()
 
void computePV ()
 
MFloat dummy (MInt) const
 
MFloat pressure_twoEqRans (MInt cellId) const
 
MFloat totalEnergy_twoEqRans (MInt cellId) const
 
void partitionGrid ()
 
virtual void computePrimitiveVariables ()
 
virtual void computeConservativeVariables ()
 
template<MFloat(FvStructuredSolver::*)(MInt) const = &FvStructuredSolver::dummy>
void computeConservativeVariables_ ()
 
void saveVarToPrimitive (MInt, MInt, MFloat)
 
virtual void gcFillGhostCells (std::vector< MFloat * > &)
 
void computeSamplingInterval ()
 
void checkNans ()
 Checks whole domain for NaNs and adds the number of NaNs globally. More...
 
void setVolumeForce ()
 
void computeVolumeForces ()
 
virtual void computePorousRHS (MBool)
 
void initPorous ()
 
virtual void applyBoundaryCondtition ()
 
virtual void moveGrid (MInt)
 
virtual void initMovingGrid ()
 
virtual void moveGrid (MBool, MBool)
 
virtual void initBodyForce ()
 
virtual void applyBodyForce (MBool, MBool)
 
virtual void computeLambda2Criterion ()
 
virtual void computeVorticity ()
 
void exchange ()
 SVD STUFF ENDS /////////////////////////////////////////////////////////////. More...
 
void exchange (std::vector< std::unique_ptr< StructuredComm< nDim > > > &, std::vector< std::unique_ptr< StructuredComm< nDim > > > &)
 Parallel exchange of primitive variables between partitions with MPI. More...
 
void send (const MBool, std::vector< std::unique_ptr< StructuredComm< nDim > > > &, std::vector< MPI_Request > &)
 
void receive (const MBool, std::vector< std::unique_ptr< StructuredComm< nDim > > > &, std::vector< MPI_Request > &)
 
virtual void gather (const MBool, std::vector< std::unique_ptr< StructuredComm< nDim > > > &)
 
virtual void scatter (const MBool, std::vector< std::unique_ptr< StructuredComm< nDim > > > &)
 
MBool isPeriodicComm (std::unique_ptr< StructuredComm< nDim > > &)
 
MBool skipPeriodicDirection (std::unique_ptr< StructuredComm< nDim > > &)
 
virtual void zonalExchange ()
 
virtual void spanwiseAvgZonal (std::vector< MFloat * > &)
 
virtual void waveExchange ()
 
virtual void spanwiseWaveReorder ()
 
void setTimeStep ()
 
void setLimiterVisc ()
 
void fixTimeStepTravelingWave ()
 
void exchangeTimeStep ()
 
void initializeRungeKutta ()
 
virtual void computeTimeStep ()
 
MBool isInInterval (MInt)
 
MInt getNoCells ()
 
MInt noVariables () const override
 Return the number of variables. More...
 
MInt getNoActiveCells ()
 
MIntgetActiveCells ()
 
MIntgetOffsetCells ()
 
MInt getNoGhostLayers ()
 
MInt getWaveAvrgInterval ()
 
MInt getWaveStepOffset ()
 
MIntgetCellGrid ()
 
MBool isMovingGrid ()
 
MInt getGridMovingMethod ()
 
MInt getBodyForceMethod ()
 
MBool isStreamwiseTravelingWave ()
 
MBool isTravelingWave ()
 
StructuredGrid< nDim > * getGrid ()
 
MFloat getGamma ()
 
MFloat getSutherlandConstant ()
 
MFloat getRe0 ()
 
MFloat getMa ()
 
MPI_Comm getCommunicator ()
 
virtual void computeCumulativeAverage (MBool)
 
virtual void loadSampleFile (MString)
 
virtual void getSampleVariables (MInt, MFloat *)
 
MFloat getPV (MInt var, MInt cellId)
 
void setPV (MInt var, MInt cellId, MFloat value)
 
virtual MFloat getSampleVorticity (MInt, MInt)
 
virtual MFloat dvardxyz (MInt, MInt, MFloat *)
 
virtual MFloat dvardx (MInt, MFloat *)
 
virtual void loadAverageRestartFile (const char *, MFloat **, MFloat **, MFloat **, MFloat **)
 
virtual void loadAveragedVariables (const char *)
 
void convertRestartVariables (MFloat oldMa)
 
virtual void convertRestartVariablesSTG (MFloat oldMa)
 
virtual bool rungeKuttaStep ()=0
 
virtual void viscousFlux ()=0
 
virtual void Muscl (MInt=-1)=0
 
virtual void applyBoundaryCondition ()=0
 
virtual void initSolutionStep (MInt)=0
 
virtual void initialCondition ()=0
 
void tred2 (MFloatScratchSpace &A, MInt dim, MFloat *diag, MFloat *offdiag)
 Householder Reduction according to Numercial Recipies in C: The Art of Scientific Computing. More...
 
void tqli2 (MFloat *diag, MFloat *offdiag, MInt dim)
 Compute Eigenvalues with implicit shift according to Numercial Recipies in C: The Art of Scientific Computing. More...
 
void insertSort (MInt dim, MFloat *list)
 Sorting function to sort list in ascending order. More...
 
MFloat pythag (MFloat a, MFloat b)
 
void resetRHS ()
 Reset the right hand side to zero. More...
 
void rhs ()
 
void rhsBnd ()
 
void lhsBnd ()
 
void initSolver () override
 
virtual MBool maxResidual ()
 
MBool solutionStep () override
 
void preTimeStep () override
 
void postTimeStep () override
 : Performs the post time step More...
 
void finalizeInitSolver () override
 
void cleanUp () override
 
virtual void updateSpongeLayer ()=0
 
MFloat time () const override
 Return the time. More...
 
MInt determineRestartTimeStep () const override
 Load the restart time step from the restart file (useNonSpecifiedRestartFile enabled) More...
 
MBool hasRestartTimeStep () const override
 
void init ()
 
std::array< MInt, nDim > beginP0 ()
 
std::array< MInt, nDim > beginP1 ()
 
std::array< MInt, nDim > beginP2 ()
 
std::array< MInt, nDim > endM2 ()
 
std::array< MInt, nDim > endM1 ()
 
std::array< MInt, nDim > endM0 ()
 
- Public Member Functions inherited from Solver
MString getIdentifier (const MBool useSolverId=false, const MString preString="", const MString postString="_")
 
virtual ~Solver ()=default
 
virtual MInt noInternalCells () const =0
 Return the number of internal cells within this solver. More...
 
virtual MFloat time () const =0
 Return the time. More...
 
virtual MInt noVariables () const
 Return the number of variables. More...
 
virtual void getDimensionalizationParams (std::vector< std::pair< MFloat, MString > > &) const
 Return the dimensionalization parameters of this solver. More...
 
void updateDomainInfo (const MInt domainId, const MInt noDomains, const MPI_Comm mpiComm, const MString &loc)
 Set new domain information. More...
 
virtual MFloata_slope (const MInt, MInt const, const MInt)
 
virtual MBool a_isBndryCell (const MInt) const
 
virtual MFloata_FcellVolume (MInt)
 
virtual MInt getCurrentTimeStep () const
 
virtual void accessSampleVariables (MInt, MFloat *&)
 
virtual void getSampleVariableNames (std::vector< MString > &NotUsed(varNames))
 
virtual MBool a_isBndryGhostCell (MInt) const
 
virtual void saveCoarseSolution ()
 
virtual void getSolverSamplingProperties (std::vector< MInt > &NotUsed(samplingVarIds), std::vector< MInt > &NotUsed(noSamplingVars), std::vector< std::vector< MString > > &NotUsed(samplingVarNames), const MString NotUsed(featureName)="")
 
virtual void initSolverSamplingVariables (const std::vector< MInt > &NotUsed(varIds), const std::vector< MInt > &NotUsed(noSamplingVars))
 
virtual void calcSamplingVariables (const std::vector< MInt > &NotUsed(varIds), const MBool NotUsed(exchange))
 
virtual void calcSamplingVarAtPoint (const MFloat *NotUsed(point), const MInt NotUsed(id), const MInt NotUsed(sampleVarId), MFloat *NotUsed(state), const MBool NotUsed(interpolate)=false)
 
virtual void balance (const MInt *const NotUsed(noCellsToReceiveByDomain), const MInt *const NotUsed(noCellsToSendByDomain), const MInt *const NotUsed(targetDomainsByCell), const MInt NotUsed(oldNoCells))
 Perform load balancing. More...
 
virtual MBool hasSplitBalancing () const
 Return if load balancing for solver is split into multiple methods or implemented in balance() More...
 
virtual void balancePre ()
 
virtual void balancePost ()
 
virtual void finalizeBalance ()
 
virtual void resetSolver ()
 Reset the solver/solver for load balancing. More...
 
virtual void cancelMpiRequests ()
 Cancel open mpi (receive) requests in the solver (e.g. due to interleaved execution) More...
 
virtual void setCellWeights (MFloat *)
 Set cell weights. More...
 
virtual MInt noLoadTypes () const
 
virtual void getDefaultWeights (MFloat *NotUsed(weights), std::vector< MString > &NotUsed(names)) const
 
virtual void getLoadQuantities (MInt *const NotUsed(loadQuantities)) const
 
virtual MFloat getCellLoad (const MInt NotUsed(cellId), const MFloat *const NotUsed(weights)) const
 
virtual void limitWeights (MFloat *NotUsed(weights))
 
virtual void localToGlobalIds ()
 
virtual void globalToLocalIds ()
 
virtual MInt noCellDataDlb () const
 Methods to inquire solver data information. More...
 
virtual MInt cellDataTypeDlb (const MInt NotUsed(dataId)) const
 
virtual MInt cellDataSizeDlb (const MInt NotUsed(dataId), const MInt NotUsed(cellId))
 
virtual void getCellDataDlb (const MInt NotUsed(dataId), const MInt NotUsed(oldNoCells), const MInt *const NotUsed(bufferIdToCellId), MInt *const NotUsed(data))
 
virtual void getCellDataDlb (const MInt NotUsed(dataId), const MInt NotUsed(oldNoCells), const MInt *const NotUsed(bufferIdToCellId), MLong *const NotUsed(data))
 
virtual void getCellDataDlb (const MInt NotUsed(dataId), const MInt NotUsed(oldNoCells), const MInt *const NotUsed(bufferIdToCellId), MFloat *const NotUsed(data))
 
virtual void setCellDataDlb (const MInt NotUsed(dataId), const MInt *const NotUsed(data))
 
virtual void setCellDataDlb (const MInt NotUsed(dataId), const MLong *const NotUsed(data))
 
virtual void setCellDataDlb (const MInt NotUsed(dataId), const MFloat *const NotUsed(data))
 
virtual void getGlobalSolverVars (std::vector< MFloat > &NotUsed(globalFloatVars), std::vector< MInt > &NotUsed(globalIntVars))
 
virtual void setGlobalSolverVars (std::vector< MFloat > &NotUsed(globalFloatVars), std::vector< MInt > &NotUsed(globalIdVars))
 
void enableDlbTimers ()
 
void reEnableDlbTimers ()
 
void disableDlbTimers ()
 
MBool dlbTimersEnabled ()
 
void startLoadTimer (const MString name)
 
void stopLoadTimer (const MString &name)
 
void stopIdleTimer (const MString &name)
 
void startIdleTimer (const MString &name)
 
MBool isLoadTimerRunning ()
 
virtual MInt noSolverTimers (const MBool NotUsed(allTimings))
 
virtual void getSolverTimings (std::vector< std::pair< MString, MFloat > > &NotUsed(solverTimings), const MBool NotUsed(allTimings))
 
virtual void getDomainDecompositionInformation (std::vector< std::pair< MString, MInt > > &NotUsed(domainInfo))
 
void setDlbTimer (const MInt timerId)
 
virtual void prepareAdaptation (std::vector< std::vector< MFloat > > &, std::vector< MFloat > &, std::vector< std::bitset< 64 > > &, std::vector< MInt > &)
 
virtual void reinitAfterAdaptation ()
 
virtual void prepareAdaptation ()
 prepare adaptation for split adaptation before the adaptation loop More...
 
virtual void setSensors (std::vector< std::vector< MFloat > > &, std::vector< MFloat > &, std::vector< std::bitset< 64 > > &, std::vector< MInt > &)
 set solver sensors for split adaptation within the adaptation loop More...
 
virtual void saveSensorData (const std::vector< std::vector< MFloat > > &, const MInt &, const MString &, const MInt *const)
 
virtual void postAdaptation ()
 post adaptation for split adaptation within the adaptation loop More...
 
virtual void finalizeAdaptation ()
 finalize adaptation for split sadptation after the adaptation loop More...
 
virtual void refineCell (const MInt)
 Refine the given cell. More...
 
virtual void removeChilds (const MInt)
 Coarsen the given cell. More...
 
virtual void removeCell (const MInt)
 Remove the given cell. More...
 
virtual void swapCells (const MInt, const MInt)
 Swap the given cells. More...
 
virtual void swapProxy (const MInt, const MInt)
 Swap the given cells. More...
 
virtual MInt cellOutside (const MFloat *, const MInt, const MInt)
 Check whether cell is outside the fluid domain. More...
 
virtual void resizeGridMap ()
 Swap the given cells. More...
 
virtual MBool prepareRestart (MBool, MBool &)
 Prepare the solvers for a grid-restart. More...
 
virtual void reIntAfterRestart (MBool)
 
MPI_Comm mpiComm () const
 Return the MPI communicator used by this solver. More...
 
virtual MInt domainId () const
 Return the domainId (rank) More...
 
virtual MInt noDomains () const
 
virtual MBool isActive () const
 
void setSolverStatus (const MBool status)
 
MBool getSolverStatus ()
 Get the solver status indicating if the solver is currently active in the execution recipe. More...
 
MString testcaseDir () const
 Return the testcase directory. More...
 
MString outputDir () const
 Return the directory for output files. More...
 
MString restartDir () const
 Return the directory for restart files. More...
 
MString solverMethod () const
 Return the solverMethod of this solver. More...
 
MString solverType () const
 Return the solverType of this solver. More...
 
MInt restartInterval () const
 Return the restart interval of this solver. More...
 
MInt restartTimeStep () const
 Return the restart interval of this solver. More...
 
MInt solverId () const
 Return the solverId. More...
 
MBool restartFile ()
 
MInt readSolverSamplingVarNames (std::vector< MString > &varNames, const MString featureName="") const
 Read sampling variables names, store in vector and return the number of sampling variables. More...
 
virtual MBool hasRestartTimeStep () const
 
virtual MBool forceAdaptation ()
 
virtual void preTimeStep ()=0
 
virtual void postTimeStep ()=0
 
virtual void initSolver ()=0
 
virtual void finalizeInitSolver ()=0
 
virtual void saveSolverSolution (const MBool NotUsed(forceOutput)=false, const MBool NotUsed(finalTimeStep)=false)=0
 
virtual void cleanUp ()=0
 
virtual MBool solutionStep ()
 
virtual void preSolutionStep (MInt)
 
virtual MBool postSolutionStep ()
 
virtual MBool solverConverged ()
 
virtual void getInterpolatedVariables (MInt, const MFloat *, MFloat *)
 
virtual void loadRestartFile ()
 
virtual MInt determineRestartTimeStep () const
 
virtual void writeRestartFile (MBool)
 
virtual void writeRestartFile (const MBool, const MBool, const MString, MInt *)
 
virtual void setTimeStep ()
 
virtual void implicitTimeStep ()
 
virtual void prepareNextTimeStep ()
 
- Public Member Functions inherited from StructuredPostprocessing< nDim, FvStructuredSolver< nDim > >
 StructuredPostprocessing ()
 Constructor for the postprocessing solver. More...
 
 ~StructuredPostprocessing ()
 Destructor for the postprocessing solver. More...
 
void postprocessPreInit ()
 
void postprocessPreSolve ()
 
void postprocessPostSolve ()
 
void postprocessInSolve ()
 

Public Attributes

StructuredGrid< nDim > * m_grid
 
MPI_Comm m_StructuredComm
 
MInt m_restartTimeStep
 
MString m_outputFormat
 
MInt m_lastOutputTimeStep
 
- Public Attributes inherited from Solver
std::set< MIntm_freeIndices
 
MBool m_singleAdaptation = false
 
MBool m_splitAdaptation = true
 
MBool m_saveSensorData = false
 
- Public Attributes inherited from StructuredPostprocessing< nDim, FvStructuredSolver< nDim > >
MInt m_restartTimeStep
 

Protected Member Functions

void initTimers ()
 
virtual void initFsc ()
 Init for Falkner-Skan-Cooke flow. More...
 
virtual MFloat getFscPressure (MInt cellId)
 
virtual MFloat getFscPressure (MFloat coordX)
 
virtual MFloat getFscEta (MFloat coordX, MFloat coordY)
 
virtual void getFscVelocity (MInt cellId, MFloat *const vel)
 Load variables for the specified timeStep. More...
 
virtual void getFscVelocity (MFloat coordX, MFloat coordY, MFloat *const vel)
 
virtual void initBlasius ()
 Init for Blasius boundary layer. More...
 
virtual MFloat getBlasiusEta (MFloat coordX, MFloat coordY)
 
virtual void getBlasiusVelocity (MInt cellId, MFloat *const vel)
 Load variables for the specified timeStep. More...
 
virtual void getBlasiusVelocity (MFloat coordX, MFloat coordY, MFloat *const vel)
 
- Protected Member Functions inherited from Solver
 Solver (const MInt solverId, const MPI_Comm comm, const MBool isActive=true)
 
MFloat returnLoadRecord () const
 
MFloat returnIdleRecord () const
 
- Protected Member Functions inherited from StructuredPostprocessing< nDim, FvStructuredSolver< nDim > >
void initStructuredPostprocessing ()
 
void initAverageIn ()
 Initializes properties for averaging during solver run. More...
 
void initAverageVariables ()
 allocates memory for averageSolutions() and averageSolutionsInSolve() More...
 
void initTimeStepProperties ()
 Initializes timestep properties for postprocessing. More...
 
void initMovingAverage ()
 
void initProductionVariables ()
 
void initDissipationVariables ()
 
void averageSolutionsInSolve ()
 
void averageSolutions ()
 
void addAveragingSample ()
 Adds one sample to the summedVars. More...
 
void addTempWaveSample ()
 Adds for the travelling wave setups. More...
 
void saveAveragedSolution (MInt)
 
void computeAveragedSolution ()
 Computes the mean variables from summed vars. More...
 
void computeAverageSkinFriction ()
 Computes skin friction of an averaged field. More...
 
void subtractPeriodicFluctuations ()
 
void subtractMean ()
 
void movingAverage ()
 
void movingAveragePost ()
 
void computeProductionTerms ()
 Computes the production terms from an averaged field. More...
 
void computeDissipationTerms ()
 Computes the production terms from an averaged field. More...
 
void decomposeCf ()
 
void decomposeCfDouble ()
 
void writeGradients ()
 
void loadAveragedSolution ()
 Loads an averaged file again. More...
 
void saveAverageRestart ()
 
void loadMeanFile (const MChar *fileName)
 
void getSampleVariables (MInt cellId, const MFloat *&vars)
 
MInt getNoPPVars ()
 Returns number of postprocessing variables. More...
 
MInt getNoVars ()
 
MInt getNoPPSquareVars ()
 Returns number of pp Square variables. More...
 

Protected Attributes

std::unique_ptr< MConservativeVariables< nDim > > CV
 
std::unique_ptr< MPrimitiveVariables< nDim > > PV
 
MFloat m_eps
 
MFloatm_QLeft = nullptr
 
MFloatm_QRight = nullptr
 
MBool m_movingGrid
 
MBool m_mgExchangeCoordinates
 
MInt m_gridMovingMethod = 0
 
MInt m_movingGridStepOffset
 
MBool m_synchronizedMGOutput
 
MInt m_waveNoStepsPerCell
 
MFloat m_wallVel
 
MFloat m_movingGridTimeOffset
 
MBool m_movingGridSaveGrid
 
MBool m_travelingWave
 
MBool m_streamwiseTravelingWave
 
MFloat m_waveLengthPlus
 
MFloat m_waveAmplitudePlus
 
MFloat m_waveTimePlus
 
MFloat m_waveTime
 
MFloat m_waveLength
 
MFloat m_waveAmplitude
 
MFloat m_waveAmplitudeSuction
 
MFloat m_waveAmplitudePressure
 
MFloat m_waveGradientSuction
 
MFloat m_waveGradientPressure
 
MFloat m_waveSpeed
 
MFloat m_waveSpeedPlus
 
MFloat m_waveBeginTransition
 
MFloat m_waveEndTransition
 
MFloat m_waveOutBeginTransition
 
MFloat m_waveOutEndTransition
 
MFloat m_wavePressureBeginTransition
 
MFloat m_wavePressureEndTransition
 
MFloat m_wavePressureOutBeginTransition
 
MFloat m_wavePressureOutEndTransition
 
MFloat m_waveYBeginTransition
 
MFloat m_waveYEndTransition
 
MFloat m_waveAngle
 
MFloat m_waveTemporalTransition
 
MBool m_movingGridInitialStart
 
MBool m_waveRestartFadeIn
 
MInt m_waveTimeStepComputed
 
MInt m_waveCellsPerWaveLength
 
MFloat m_wavePenetrationHeight
 
MInt m_bodyForceMethod = 0
 
MBool m_bodyForce
 
MFloatm_waveForceField = nullptr
 
MFloatm_waveForceY = nullptr
 
MFloatm_waveForceZ = nullptr
 
MString m_waveForceFieldFile
 
MFloat m_waveDomainWidth
 
MFloat m_oscAmplitude
 
MFloat m_oscSr
 
MFloat m_oscFreq
 
MFloatm_rhs = nullptr
 
MBool m_dsIsComputed
 
MBool m_useNonSpecifiedRestartFile
 
MInt m_outputOffset
 
MBool m_vorticityOutput
 
MBool m_debugOutput
 
MInt m_outputIterationNumber
 
MBool m_sampleSolutionFiles
 
StructuredCellm_cells = nullptr
 
MStringm_variableNames = nullptr
 
MStringm_pvariableNames = nullptr
 
MFloat ** pointProperties = nullptr
 
MBool m_ignoreUID
 
std::unique_ptr< FvStructuredSolverWindowInfo< nDim > > m_windowInfo
 
MInt m_noGhostLayers
 
MIntm_nPoints = nullptr
 
MIntm_nActivePoints = nullptr
 
MIntm_nOffsetPoints = nullptr
 
MInt m_noCells
 
MInt m_noActiveCells
 
MInt m_noPoints
 
MInt m_noSurfaces
 
MFloat m_referenceLength
 
MFloat m_physicalReferenceLength
 
MFloat m_Pr
 
MFloat m_rPr
 
MFloat m_cfl
 
MInt m_orderOfReconstruction
 
MFloat m_inflowTemperatureRatio
 
MBool m_considerVolumeForces
 
MBool m_euler
 
MFloatm_volumeForce = nullptr
 
MInt m_volumeForceMethod = 0
 
MInt m_volumeForceUpdateInterval
 
MFloat m_gamma
 
MFloat m_gammaMinusOne
 
MFloat m_fgammaMinusOne
 
MFloat m_Re0
 
MFloat m_ReTau
 
MFloatm_angle = nullptr
 
MInt m_periodicConnection
 
MInt m_channelFlow
 
MFloat m_sutherlandConstant
 
MFloat m_sutherlandPlusOne
 
MFloat m_TinfS
 
MBool m_computeLambda2
 
MFloat m_hInfinity
 
MFloat m_referenceEnthalpy
 
MString m_rans2eq_mode
 
MBool m_keps_nonDimType
 
MBool m_solutionAnomaly
 
MFloat m_I
 
MFloat m_epsScale
 
MInt m_kepsICMethod
 
std::unique_ptr< StructuredFQVariablesFQ
 
MInt m_maxNoVariables
 
MBool m_bForce
 
MBool m_bPower
 
MFloatm_forceCoef = nullptr
 
MBool m_detailAuxData
 
MBool m_bForceLineAverage
 
std::vector< MStringm_forceHeaderNames
 
MInt m_forceAveragingDir
 
MInt m_forceOutputInterval
 
MInt m_forceAsciiOutputInterval
 
MInt m_forceAsciiComputeInterval
 
MFloat ** m_forceData = nullptr
 
MInt m_forceCounter
 
MInt m_lastForceOutputTimeStep
 
MInt m_lastForceComputationTimeStep
 
MInt m_noForceDataFields
 
MBool m_forceSecondOrder
 
MFloat m_globalDomainWidth
 
MBool m_auxDataCoordinateLimits
 
MFloatm_auxDataLimits = nullptr
 
MBool m_setLocalWallDistance = false
 
MInt m_intpPointsOutputInterval
 
MInt m_intpPointsNoLines
 
MInt m_intpPointsNoLines2D
 
MInt m_intpPointsNoPointsTotal
 
MIntm_intpPointsNoPoints = nullptr
 
MIntm_intpPointsNoPoints2D = nullptr
 
MIntm_intpPointsOffsets = nullptr
 
MFloat ** m_intpPointsStart = nullptr
 
MFloat ** m_intpPointsDelta = nullptr
 
MFloat ** m_intpPointsDelta2D = nullptr
 
MFloat ** m_intpPointsCoordinates = nullptr
 
MIntm_intpPointsHasPartnerGlobal = nullptr
 
MIntm_intpPointsHasPartnerLocal = nullptr
 
MFloat ** m_intpPointsVarsGlobal = nullptr
 
MFloat ** m_intpPointsVarsLocal = nullptr
 
MBool m_intpPoints
 
MInt m_boxNoBoxes
 
MInt m_boxOutputInterval
 
MIntm_boxBlock = nullptr
 
MInt ** m_boxOffset = nullptr
 
MInt ** m_boxSize = nullptr
 
MBool m_boxWriteCoordinates
 
std::unique_ptr< StructuredInterpolation< nDim > > m_nodalBoxInterpolation
 
MInt m_nodalBoxNoBoxes
 
MString m_nodalBoxOutputDir
 
MInt m_nodalBoxOutputInterval
 
MIntm_nodalBoxBlock = nullptr
 
MInt ** m_nodalBoxOffset = nullptr
 
MInt ** m_nodalBoxPoints = nullptr
 
MInt ** m_nodalBoxLocalOffset = nullptr
 
MInt ** m_nodalBoxLocalPoints = nullptr
 
MInt ** m_nodalBoxLocalDomainOffset = nullptr
 
MIntm_nodalBoxLocalSize = nullptr
 
MIntm_nodalBoxPartnerLocal = nullptr
 
MFloat ** m_nodalBoxCoordinates = nullptr
 
MFloat ** m_nodalBoxVariables = nullptr
 
MBool m_nodalBoxWriteCoordinates
 
MInt m_nodalBoxTotalLocalSize
 
MIntm_nodalBoxTotalLocalOffset = nullptr
 
MBool m_nodalBoxInitialized
 
MInt m_pointsToAsciiComputeInterval
 
MInt m_pointsToAsciiOutputInterval
 
MInt m_pointsToAsciiNoPoints
 
MInt m_pointsToAsciiLastOutputStep
 
MInt m_pointsToAsciiLastComputationStep
 
MFloat ** m_pointsToAsciiCoordinates = nullptr
 
MFloat ** m_pointsToAsciiVars = nullptr
 
MInt m_pointsToAsciiVarId
 
MInt m_pointsToAsciiCounter
 
MIntm_pointsToAsciiHasPartnerGlobal = nullptr
 
MIntm_pointsToAsciiHasPartnerLocal = nullptr
 
std::unique_ptr< StructuredInterpolation< nDim > > m_pointsToAsciiInterpolation
 
MFloat m_referenceTemperature
 
MInt m_noSpecies
 
MFloatm_referenceComposition = nullptr
 
MFloatm_formationEnthalpy = nullptr
 
MInt m_noRKSteps
 
MFloatm_RKalpha = nullptr
 
MFloat m_time
 
MInt m_RKStep
 
MFloat m_timeStep
 
MBool m_localTimeStep
 
MInt m_rungeKuttaOrder
 
MInt m_timeStepMethod
 
MInt m_timeStepComputationInterval
 
MFloat m_timeRef
 
MInt m_dualTimeStepping
 
MFloat m_physicalTimeStep
 
MFloat m_physicalTime
 
MInt m_timerGroup = -1
 
std::array< MInt, Timers::_countm_timers {}
 
MBool m_constantTimeStep
 
MInt m_rescalingCommGrRoot = -1
 
MInt m_rescalingCommGrRootGlobal = -1
 
MPI_Comm m_rescalingCommGrComm = MPI_COMM_NULL
 
MPI_Comm m_commStg = MPI_COMM_NULL
 
MInt m_commStgRoot = -1
 
MInt m_commStgRootGlobal = -1
 
MInt m_commStgMyRank = -1
 
MBool m_stgIsActive
 
MFloat m_stgBLT1
 
MFloat m_stgBLT2
 
MFloat m_stgBLT3
 
MFloat m_stgDelta99Inflow
 
MBool m_stgInitialStartup
 
MInt m_stgNoEddieProperties
 
MFloat ** m_stgEddies = nullptr
 
MInt m_stgNoEddies
 
MInt m_stgMaxNoEddies
 
MFloat m_stgExple
 
MFloat m_stgEddieDistribution
 
MInt m_stgBoxSize [3]
 
MBool m_stgLocal
 
MBool m_stgCreateNewEddies
 
MBool m_stgRootRank
 
MInt m_stgNoVariables
 
MInt m_stgShapeFunction
 
MBool m_stgEddieLengthScales
 
MBool m_stgSubSup
 
MBool m_stgSupersonic
 
MInt m_stgFace
 
MFloatm_stgLengthFactors = nullptr
 
MFloatm_stgRSTFactors = nullptr
 
MInt m_stgMyRank
 
MFloat m_chi
 
MInt m_noSpongeDomainInfos
 
MIntm_spongeBcWindowInfo = nullptr
 
MBool m_useSponge
 
MInt m_spongeLayerType
 
MFloatm_sigmaSponge = nullptr
 
MFloatm_betaSponge = nullptr
 
MFloatm_spongeLayerThickness = nullptr
 
MFloat m_targetDensityFactor
 
MBool m_computeSpongeFactor
 
MFloat m_workload
 
MFloat m_workloadIncrement
 
MResm_residualSnd = nullptr
 
MRes m_residualRcv
 
MInt m_residualOutputInterval
 
MFloat m_avrgResidual
 
MFloat m_firstMaxResidual
 
MFloat m_firstAvrgResidual
 
MLong m_totalNoCells
 
MBool m_residualFileExist
 
MPI_Op m_resOp
 
MPI_Datatype m_mpiStruct
 
FILE * m_resFile
 
MBool m_convergence
 
MFloat m_convergenceCriterion
 
MBool m_restart
 
MInt m_initialCondition
 
MFloat m_deltaP
 
MBool m_restartInterpolation
 
MString m_solutionFileName
 
MString m_boxOutputDir
 
MString m_intpPointsOutputDir
 
MString m_auxOutputDir
 
MBool m_savePartitionOutput
 
MIntm_nCells = nullptr
 
MIntm_nActiveCells = nullptr
 
MIntm_nOffsetCells = nullptr
 
MInt m_blockId
 
MInt m_noBlocks
 
MIntm_noWindows = nullptr
 
MInt ** m_bndryCndInfo = nullptr
 
MInt ** m_bndryCnd = nullptr
 
MBool m_limiter
 
MString m_limiterMethod
 
MFloat m_venkFactor
 
MBool m_limiterVisc
 
MFloat m_CFLVISC
 
MString m_musclScheme
 
MString m_ausmScheme
 
MBool m_viscCompact
 
MBool m_zonal
 
MInt m_rans
 
RansMethod m_ransMethod = NORANS
 
MInt m_noRansEquations
 
MString m_zoneType
 
MFloat m_ransTransPos
 
MBool m_hasSTG
 
MInt m_zonalExchangeInterval
 
std::vector< MFloat * > m_zonalSpanwiseAvgVars
 
MPI_Comm m_commBC2600 = MPI_COMM_NULL
 
MInt m_commBC2600Root = -1
 
MInt m_commBC2600RootGlobal = -1
 
MInt m_commBC2600MyRank = -1
 
MPI_Comm * m_commZonal = nullptr
 
MIntm_commZonalRoot = nullptr
 
MIntm_commZonalRootGlobal = nullptr
 
MInt m_commZonalMyRank = -1
 
MBool m_zonalRootRank = false
 
MBool m_zonalExponentialAveraging
 
MInt m_zonalStartAvgTime
 
MFloat m_zonalAveragingFactor
 
MFloat m_rhoNuTildeInfinty
 
MFloat m_nutInfinity
 
MFloat m_mutInfinity
 
std::vector< std::unique_ptr< StructuredComm< nDim > > > m_sndComm
 
std::vector< std::unique_ptr< StructuredComm< nDim > > > m_rcvComm
 
MInt m_currentPeriodicDirection
 
std::vector< std::unique_ptr< StructuredComm< nDim > > > m_waveSndComm
 
std::vector< std::unique_ptr< StructuredComm< nDim > > > m_waveRcvComm
 
MInt m_noNghbrDomains
 
MIntm_nghbrDomainId = nullptr
 
MIntm_noNghbrDomainBufferSize = nullptr
 
MFloat ** m_bufferCellsSndRcv = nullptr
 
MFloat ** m_bufferPointsSendRcv = nullptr
 
MIntm_nghbrFaceId = nullptr
 
MInt ** m_nghbrFaceInfo = nullptr
 
MPI_Request * mpi_sndRequest = nullptr
 
MPI_Request * mpi_rcvRequest = nullptr
 
MPI_Status * mpi_sndRcvStatus = nullptr
 
MPI_Comm m_plenumComm = MPI_COMM_NULL
 
MInt m_plenumRoot = -1
 
MPI_Comm m_commChannelIn = MPI_COMM_NULL
 
MPI_Comm m_commChannelOut = MPI_COMM_NULL
 
MPI_Comm m_commChannelWorld = MPI_COMM_NULL
 
MIntm_channelRoots = nullptr
 
MFloat m_channelPresInlet
 
MFloat m_channelPresOutlet
 
MFloat m_channelLength
 
MFloat m_channelHeight
 
MFloat m_channelWidth
 
MFloat m_channelInflowPlaneCoordinate
 
MFloat m_channelC1
 
MFloat m_channelC2
 
MFloat m_channelC3
 
MFloat m_channelC4
 
MBool m_channelFullyPeriodic
 
MFloat m_inflowVelAvg
 
MPI_Comm m_commPerRotOne = MPI_COMM_NULL
 
MPI_Comm m_commPerRotTwo = MPI_COMM_NULL
 
MPI_Comm m_commPerRotWorld = MPI_COMM_NULL
 
MIntm_commPerRotRoots = nullptr
 
MInt m_commPerRotGroup = -1
 
MBool m_bc2600IsActive
 
MBool m_bc2600InitialStartup
 
MFloat ** m_bc2600Variables = nullptr
 
MBool m_bc2600
 
MIntm_bc2600noCells = nullptr
 
MIntm_bc2600noActiveCells = nullptr
 
MIntm_bc2600noOffsetCells = nullptr
 
MInt m_bc2600RootRank
 
MInt m_bc2600Face
 
MBool m_bc2601IsActive
 
MBool m_bc2601InitialStartup
 
MFloat ** m_bc2601Variables = nullptr
 
MFloat ** m_bc2601ZerothOrderSolution = nullptr
 
MBool m_bc2601
 
MIntm_bc2601noCells = nullptr
 
MIntm_bc2601noActiveCells = nullptr
 
MIntm_bc2601noOffsetCells = nullptr
 
MFloat m_bc2601GammaEpsilon
 
MBool m_useConvectiveUnitWrite
 
MFloat m_convectiveUnitInterval
 
MInt m_noConvectiveOutputs
 
MBool m_isInitTimers = false
 
MFloat m_UInfinity
 
MFloat m_VInfinity
 
MFloat m_WInfinity
 
MFloat m_PInfinity
 
MFloat m_TInfinity
 
MFloat m_DthInfinity
 
MFloat m_muInfinity
 
MFloat m_DInfinity
 
MFloat m_VVInfinity [3]
 
MFloat m_rhoUInfinity
 
MFloat m_rhoVInfinity
 
MFloat m_rhoWInfinity
 
MFloat m_rhoEInfinity
 
MFloat m_rhoInfinity
 
MFloat m_rhoVVInfinity [3]
 
MBool m_changeMa
 
MInt m_restartBc2800
 
MFloat m_restartTimeBc2800
 
MFloatm_adiabaticTemperature = nullptr
 
MInt m_useAdiabaticRestartTemperature
 
SingularInformationm_singularity = nullptr
 
MInt m_hasSingularity
 
MBool m_useSandpaperTrip
 
MInt m_tripNoTrips
 
MFloatm_tripDelta1 = nullptr
 
MFloatm_tripXOrigin = nullptr
 
MFloatm_tripXLength = nullptr
 
MFloatm_tripYOrigin = nullptr
 
MFloatm_tripYHeight = nullptr
 
MFloatm_tripCutoffZ = nullptr
 
MFloatm_tripMaxAmpSteady = nullptr
 
MFloatm_tripMaxAmpFluc = nullptr
 
MInt m_tripNoModes
 
MFloatm_tripDeltaTime = nullptr
 
MIntm_tripTimeStep = nullptr
 
MInt m_tripSeed
 
MFloatm_tripG = nullptr
 
MFloatm_tripH1 = nullptr
 
MFloatm_tripH2 = nullptr
 
MFloatm_tripModesG = nullptr
 
MFloatm_tripModesH1 = nullptr
 
MFloatm_tripModesH2 = nullptr
 
MFloatm_tripCoords = nullptr
 
MInt m_tripNoCells
 
MFloat m_tripDomainWidth
 
MBool m_tripUseRestart
 
MBool m_tripAirfoil
 
MFloatm_airfoilCoords = nullptr
 
MFloatm_airfoilNormalVec = nullptr
 
MInt m_airfoilNoWallPoints
 
MFloatm_airfoilWallDist = nullptr
 
MBool m_porous
 
MString m_blockType
 
std::vector< MIntm_porousBlockIds
 
MFloat m_c_Dp
 
MFloat m_c_Dp_eps
 
MFloat m_c_wd
 
MFloat m_c_t
 
MFloat m_c_eps
 
MInt m_fsc
 
MFloatm_fsc_eta
 
MFloatm_fsc_fs
 
MFloatm_fsc_f
 
MFloatm_fsc_g
 
MInt m_fsc_noPoints
 
MFloat m_fsc_x0
 
MFloat m_fsc_y0
 
MFloat m_fsc_dx0
 
MFloat m_fsc_m
 
MFloat m_fsc_Re
 
MBool m_useBlasius
 
MFloatm_blasius_eta
 
MFloatm_blasius_f
 
MFloatm_blasius_fp
 
MInt m_blasius_noPoints
 
MFloat m_blasius_x0
 
MFloat m_blasius_y0
 
MFloat m_blasius_dx0
 
- Protected Attributes inherited from Solver
MFloat m_Re {}
 the Reynolds number More...
 
MFloat m_Ma {}
 the Mach number More...
 
MInt m_solutionInterval
 The number of timesteps before writing the next solution file. More...
 
MInt m_solutionOffset {}
 
std::set< MIntm_solutionTimeSteps
 
MInt m_restartInterval
 The number of timesteps before writing the next restart file. More...
 
MInt m_restartTimeStep
 
MInt m_restartOffset
 
MString m_solutionOutput
 
MBool m_useNonSpecifiedRestartFile = false
 
MBool m_initFromRestartFile
 
MInt m_residualInterval
 The number of timesteps before writing the next residual. More...
 
const MInt m_solverId
 a unique solver identifier More...
 
MFloatm_outerBandWidth = nullptr
 
MFloatm_innerBandWidth = nullptr
 
MIntm_bandWidth = nullptr
 
MBool m_restart = false
 
MBool m_restartFile = false
 
- Protected Attributes inherited from StructuredPostprocessing< nDim, FvStructuredSolver< nDim > >
MBool m_postprocessing
 
MInt m_noPostprocessingOps
 
MStringm_postprocessingOps
 
MInt m_dissFileStart
 
MInt m_dissFileEnd
 
MInt m_dissFileStep
 
MString m_dissFileDir
 
MString m_dissFilePrefix
 
MInt m_dissFileBoxNr
 
std::vector< tvecpostm_postprocessingMethods
 
std::vector< std::vector< MString > > m_postprocessingMethodsDesc
 
MInt m_noVariables
 
MFloat ** m_summedVars
 
MFloat ** m_square
 
MFloat ** m_cube
 
MFloat ** m_fourth
 
MFloat ** m_tempWaveSample
 
MFloat ** m_favre
 
MBool m_useKahan
 
MFloat ** m_cSum
 
MFloat ** m_ySum
 
MFloat ** m_tSum
 
MFloat ** m_cSquare
 
MFloat ** m_ySquare
 
MFloat ** m_tSquare
 
MFloat ** m_cCube
 
MFloat ** m_yCube
 
MFloat ** m_tCube
 
MFloat ** m_cFourth
 
MFloat ** m_yFourth
 
MFloat ** m_tFourth
 
MBool m_twoPass
 
MBool m_skewness
 
MBool m_kurtosis
 
MBool m_averageVorticity
 
MBool m_averagingFavre
 
MFloat ** m_production
 
MStringm_avgVariableNames
 
MStringm_avgFavreNames
 
MFloatm_dissipation
 
MFloat ** m_gradients
 
MStringm_gradientNames
 
MInt m_movingAvgInterval
 
MInt m_movingAvgDataPoints
 
MInt m_movingAvgCounter
 
MInt m_movAvgNoVariables
 
MFloat ** m_movAvgVariables
 
MStringm_movAvgVarNames
 
MFloat ** m_spanAvg
 
MInt m_averageInterval
 
MInt m_averageStartTimestep
 
MInt m_averageStopTimestep
 
MInt m_averageRestartInterval
 
MInt m_averageRestart
 
MInt m_noSamples
 
MBool m_movingGrid
 
MBool m_computeProductionTerms
 
MBool m_computeDissipationTerms
 
MString m_postprocessFileName
 
MFloat m_sutherlandConstant
 
MFloat m_sutherlandPlusOne
 

Private Member Functions

virtual void initStructuredPostprocessing ()
 PostProcessingSolver interface: More...
 
virtual void saveAverageRestart ()
 

Private Attributes

MBool m_timeStepConverged = false
 Convergence status of the current time step. More...
 
MBool m_isActive = false
 

Friends

template<MInt nDim_>
class StructuredBndryCnd
 
template<MInt nDim_>
class StructuredInterpolation
 
class FvStructuredSolver3DRans
 
class FvStructuredSolver2DRans
 
template<class SolverType >
class AccesorStructured
 

Additional Inherited Members

- Protected Types inherited from StructuredPostprocessing< nDim, FvStructuredSolver< nDim > >
typedef void(StructuredPostprocessing::* tpost) ()
 
typedef std::vector< tposttvecpost
 
- Static Protected Attributes inherited from StructuredPostprocessing< nDim, FvStructuredSolver< nDim > >
static const MInt xsd
 
static const MInt ysd
 
static const MInt zsd
 

Detailed Description

template<MInt nDim>
class FvStructuredSolver< nDim >

This is the base class of the structured solver from which the 2D and 3D solvers are derived

Definition at line 41 of file fvstructuredsolver.h.

Member Typedef Documentation

◆ Timers

template<MInt nDim>
using FvStructuredSolver< nDim >::Timers = maia::structured::Timers_

Definition at line 68 of file fvstructuredsolver.h.

Constructor & Destructor Documentation

◆ FvStructuredSolver()

template<MInt nDim>
FvStructuredSolver< nDim >::FvStructuredSolver ( MInt  solverId,
StructuredGrid< nDim > *  grid_,
MBool propertiesGroups,
const MPI_Comm  comm 
)
Authors
Pascal Meysonnat, Marian Albers
Parameters
[in]solverIDID of this solver
[in]grid_Pointer to the StructuredGrid object for which this solver is used
[in]propertiesGroups
[in]commMPI communicator

Definition at line 33 of file fvstructuredsolver.cpp.

35 : Solver(solverId, comm),
37 m_grid(grid_),
38 m_eps(std::numeric_limits<MFloat>::epsilon()) {
39 (void)propertiesGroups;
40 const MLong oldAllocatedBytes = allocatedBytes();
41
42 // initialize all timers
43 initTimers();
44
45 if(domainId() == 0) {
46 cout << "Initializing Structured Solver..." << endl;
47 }
48
49 m_isActive = true;
50
51 // for the zonal approach we will have to split the communicator
52 m_StructuredComm = comm;
53
54 // intialize the most important properties
55 initializeFvStructuredSolver(propertiesGroups);
56
57 // numericals method:
59
60 // set testcase parameters
62
63 // set moving grid parameters
65
67
68 // initialize cell
70
74 RECORD_TIMER_START(m_timers[Timers::GridDecomposition]);
75 m_grid->gridDecomposition(false);
76 RECORD_TIMER_STOP(m_timers[Timers::GridDecomposition]);
77
78
79 m_log << "Setting porous properties..." << endl;
81 m_log << "Setting porous properties... SUCCESSFUL!" << endl;
82
83 m_log << "Setting zonal properties..." << endl;
85 m_log << "Setting zonal properties... SUCCESSFUL!" << endl;
86
87 m_log << "Allocating variables..." << endl;
89 m_log << "Allocating variables... SUCCESSFUL!" << endl;
90
91 m_log << "Reading input output properties..." << endl;
93 m_log << "Reading input output properties... SUCCESSFUL!" << endl;
94
98 // 4) assign window winformation (3D-2D possible because of dimension)
99 // but be careful, only 3D has been tested and implemented
100 m_grid->setCells(m_cells);
101 m_grid->prepareReadGrid(); // determines grid dimensions (point and cell wise) and allocates m_grid->m_coordinates
102
103 m_noCells = m_grid->m_noCells;
104 m_noActiveCells = m_grid->m_noActiveCells;
105 m_noPoints = m_grid->m_noPoints;
106 m_totalNoCells = m_grid->m_totalNoCells;
107
108 m_nOffsetCells = m_grid->m_nOffsetCells;
109 m_nOffsetPoints = m_grid->m_nOffsetPoints;
110 m_nPoints = m_grid->m_nPoints;
111 m_nActivePoints = m_grid->m_nActivePoints;
112 m_nCells = m_grid->m_nCells;
113 m_nActiveCells = m_grid->m_nActiveCells;
114 m_noBlocks = m_grid->getNoBlocks();
115 m_blockId = m_grid->getMyBlockId();
116
118 make_unique<FvStructuredSolverWindowInfo<nDim>>(m_grid, m_StructuredComm, noDomains(), domainId(), m_solverId);
119
120 m_windowInfo->readWindowInfo();
121 m_windowInfo->initGlobals();
122
123 m_windowInfo->readWindowCoordinates(m_grid->m_periodicDisplacements);
124
126
128
130 Context::getSolverProperty<MBool>("setLocalWallDistance", m_solverId, AT_, &m_setLocalWallDistance);
131 IF_CONSTEXPR(nDim == 3) {
132 if(m_setLocalWallDistance) mTerm(-1, "Not implemented in 3D yet!");
133 }
134 if(m_zonal || m_rans) {
135 if(!m_setLocalWallDistance) m_windowInfo->setWallInformation();
136 }
137
138 // Create the mapping for the boundary and domain windows
139 // the windows are needed for boundary condition application
140 // and data exchange between the domains
146 &m_grid->m_hasSingularity, &m_plenumComm, &m_plenumRoot);
147
148 m_singularity = m_grid->m_singularity; // new SingularInformation[30]; //TODO_SS labels:FV,totest check this
149 m_hasSingularity = m_grid->m_hasSingularity;
150
151 //
153
154 // Creating the communication flags needed
155 // for all inter-domain exchange operations
156
157
159 // set flag for the periodic exchange
160 for(MInt i = 0; i < (MInt)m_windowInfo->rcvMap.size(); i++) {
161 if(m_windowInfo->rcvMap[i]->BC >= 4000 && m_windowInfo->rcvMap[i]->BC <= 4999) {
163 break;
164 }
165 }
166
167 // TODO_SS labels:FV,toremove the following is not used
168 // if(m_zonal || m_rans) {
169 // if (m_setLocalWallDistance)
170 // m_windowInfo->setLocalWallInformation();
171 // }
172
176 // Information about singularities needs to be known for allocating metrices
177 m_grid->allocateMetricsAndJacobians();
178
180
181 m_windowInfo->createCommunicationExchangeFlags(m_sndComm, m_rcvComm, PV->noVariables, m_cells->pvariables);
182
183 MInt averageCellsPerDomain = (MInt)(m_totalNoCells / noDomains());
184 MFloat localDeviation = ((MFloat)averageCellsPerDomain - (MFloat)m_noActiveCells) / ((MFloat)averageCellsPerDomain);
185 MFloat localDeviationSquare = POW2(localDeviation);
186 MFloat globalMaxDeviation = F0;
187 MFloat globalMinDeviation = F0;
188 MFloat globalAvgDeviation = F0;
189 MInt globalMaxNoCells = 0;
190 MInt globalMinNoCells = 0;
191 MPI_Allreduce(&localDeviation, &globalMaxDeviation, 1, MPI_DOUBLE, MPI_MAX, m_StructuredComm, AT_, "localDeviation",
192 "globalMaxDeviation");
193 MPI_Allreduce(&localDeviation, &globalMinDeviation, 1, MPI_DOUBLE, MPI_MIN, m_StructuredComm, AT_, "localDeviation",
194 "globalMinDeviation");
195 MPI_Allreduce(&localDeviationSquare, &globalAvgDeviation, 1, MPI_DOUBLE, MPI_SUM, m_StructuredComm, AT_,
196 "localDeviation", "globalAvgDeviation");
197 globalAvgDeviation = sqrt(globalAvgDeviation / noDomains());
198 MPI_Allreduce(&m_noActiveCells, &globalMaxNoCells, 1, MPI_INT, MPI_MAX, m_StructuredComm, AT_, "m_noActiveCells",
199 "globalMaxNoCells");
200 MPI_Allreduce(&m_noActiveCells, &globalMinNoCells, 1, MPI_INT, MPI_MIN, m_StructuredComm, AT_, "m_noActiveCells",
201 "globalMinNoCells");
202
203
204 if(domainId() == 0) {
205 cout << "///////////////////////////////////////////////////////////////////" << endl
206 << "Total no. of grid cells: " << m_totalNoCells << endl
207 << "Average cells per domain: " << averageCellsPerDomain << endl
208 << "Max no of cells per domain: " << globalMaxNoCells << endl
209 << "Min no of cells per domain: " << globalMinNoCells << endl
210 << "Average deviation from average: " << globalAvgDeviation * 100.0 << " percent" << endl
211 << "Maximum deviation from average: +" << globalMaxDeviation * 100.0 << " / " << globalMinDeviation * 100.0
212 << " percent" << endl
213 << "///////////////////////////////////////////////////////////////////" << endl;
214 }
215
216 // read the grid from partition and
217 // and move coordinates to right position
218 if(domainId() == 0) {
219 cout << "Reading Grid..." << endl;
220 }
221 m_log << "->reading the grid file" << endl;
222 RECORD_TIMER_START(m_timers[Timers::GridReading]);
223 m_grid->readGrid();
224 RECORD_TIMER_STOP(m_timers[Timers::GridReading]);
225 m_log << "------------- Grid read successfully! -------------- " << endl;
226 if(domainId() == 0) {
227 cout << "Reading Grid SUCCESSFUL!" << endl;
228 }
229
230 // get the zonal BC information
231 if(m_zonal) {
232 m_windowInfo->setZonalBCInformation();
233 }
234
235 // set properties for synthetic turbulence generation method
237
238 // set the properties for bc2600 (if existing)
240
241 // initialize the postprocessing class
243
244 // print allocated scratch memory
245 if(domainId() == 0) {
246 MFloat scratchMemory = (Scratch::getTotalMemory() / 1024.0) * noDomains();
247 MString memoryUnit = " KB";
248 if(scratchMemory > 1024.0) {
249 scratchMemory /= 1024.0;
250 memoryUnit = " MB";
251 }
252 if(scratchMemory > 1024.0) {
253 scratchMemory /= 1024.0;
254 memoryUnit = " GB";
255 }
256 cout << "=== Total global scratch space memory: " << setprecision(2) << fixed << scratchMemory << memoryUnit
257 << " ===" << endl;
258 }
259
260 printAllocatedMemory(oldAllocatedBytes, "FvStructuredSolver", m_StructuredComm);
261}
MLong allocatedBytes()
Return the number of allocated bytes.
Definition: alloc.cpp:121
void setInputOutputProperties()
Reads properties and initializes variables associated with input/output.
std::unique_ptr< FvStructuredSolverWindowInfo< nDim > > m_windowInfo
void initializeFvStructuredSolver(MBool *propertiesGroups)
Structured Solver Constructor reads and allocate properties/variables.
virtual void initStructuredPostprocessing()
PostProcessingSolver interface:
void setBodyForceProperties()
Reads and initializes properties associated with the Moving Grid Methods.
std::array< MInt, Timers::_count > m_timers
void setMovingGridProperties()
Reads and initializes properties associated with the Moving Grid Methods.
std::vector< std::unique_ptr< StructuredComm< nDim > > > m_sndComm
StructuredGrid< nDim > * m_grid
SingularInformation * m_singularity
std::unique_ptr< MPrimitiveVariables< nDim > > PV
void setZonalProperties()
Set which zones are RANS and which are LES or if full LES or full RANS.
void setTestcaseProperties()
Reads and initializes properties associated with the Testcase.
void setNumericalProperties()
Reads and initializes properties associated with the numerical method.
void setPorousProperties()
Set properties for porous blocks.
std::vector< std::unique_ptr< StructuredComm< nDim > > > m_rcvComm
StructuredCell * m_cells
static size_t getTotalMemory()
Returns the amount of total available memory in scratch.
Definition: scratch.h:157
Parent class of all solvers This class is the base for all solvers. I.e. all solver class (e....
Definition: solver.h:29
virtual MInt domainId() const
Return the domainId (rank)
Definition: solver.h:383
MInt solverId() const
Return the solverId.
Definition: solver.h:425
const MInt m_solverId
a unique solver identifier
Definition: solver.h:90
virtual MInt noDomains() const
Definition: solver.h:387
MFloat ** pvariables
void mTerm(const MInt errorCode, const MString &location, const MString &message)
Definition: functions.cpp:29
constexpr Real POW2(const Real x)
Definition: functions.h:119
void printAllocatedMemory(const MLong oldAllocatedBytes, const MString &solverName, const MPI_Comm comm)
Prints currently allocated memory.
InfoOutFile m_log
int32_t MInt
Definition: maiatypes.h:62
std::basic_string< char > MString
Definition: maiatypes.h:55
double MFloat
Definition: maiatypes.h:52
int64_t MLong
Definition: maiatypes.h:64
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

◆ ~FvStructuredSolver()

template<MInt nDim>
FvStructuredSolver< nDim >::~FvStructuredSolver
virtual

Definition at line 265 of file fvstructuredsolver.cpp.

265 {
266 RECORD_TIMER_STOP(m_timers[Timers::Structured]);
267 delete m_cells;
268}

Member Function Documentation

◆ allocateAndInitBlockMemory()

template<MInt nDim>
void FvStructuredSolver< nDim >::allocateAndInitBlockMemory

Definition at line 306 of file fvstructuredsolver.cpp.

306 {
308 if(m_travelingWave) {
309 mAlloc(m_tempWaveSample, (PV->noVariables + (2 * nDim - 3)), m_noCells, "m_tempWaveSample", F0, FUN_);
310 }
311 }
312
313 if(m_localTimeStep) {
314 mAlloc(m_cells->localTimeStep, m_noCells, "m_cells->localTimeStep", -1.01010101, AT_);
315 }
316
317 mAlloc(m_cells->variables, m_maxNoVariables, m_noCells, "m_cells->variables", -99999.0, AT_);
318 mAlloc(m_cells->pvariables, m_maxNoVariables, m_noCells, "m_cells->pvariables", -99999.0, AT_);
319 mAlloc(m_cells->temperature, m_noCells, "m_cells->temperature", -99999.0, AT_);
320 mAlloc(m_cells->oldVariables, m_maxNoVariables, m_noCells, "m_cells->oldVariables", -99999.0, AT_);
321 mAlloc(m_cells->dss, nDim, m_noCells, "m_cells->dss", F0, AT_);
322
323
324 // always allocate moving grid volume fluxes
325 // but leave them zero if not moving grid
326 mAlloc(m_cells->dxt, nDim, m_noCells, "m_cells->dxt", F0, AT_);
327
328 // allocate viscous flux computation variables
329 MInt noVarsFluxes = (CV->noVariables - 1 + m_rans);
330
331 m_log << "Allocating fFlux with " << (CV->noVariables - 1 + m_rans) << " variables for " << m_noCells << " cells"
332 << endl;
333
334 mAlloc(m_cells->rightHandSide, CV->noVariables, m_noCells, "m_cells->rhs", F0, AT_);
335 mAlloc(m_cells->flux, CV->noVariables, m_noCells, "m_cells->flux", 10000.0, AT_);
336 mAlloc(m_cells->eFlux, noVarsFluxes, m_noCells, "m_cells->eFlux", F0, AT_);
337 mAlloc(m_cells->fFlux, noVarsFluxes, m_noCells, "m_cells->fFlux", F0, AT_);
338 mAlloc(m_cells->gFlux, noVarsFluxes, m_noCells, "m_cells->gFlux", F0, AT_);
339 // TODO_SS labels:FV,toenhance find a better way to save porous variables
340 mAlloc(m_cells->viscousFlux, (nDim + m_porous), m_noCells, "m_cells->viscousFlux", 1000.0, AT_);
341
342 mAlloc(m_QLeft, m_maxNoVariables, "m_QLeft", F0, AT_);
343 mAlloc(m_QRight, m_maxNoVariables, "m_QRight", F0, AT_);
344
345
346 IF_CONSTEXPR(nDim == 2) {
347 if(m_viscCompact) mAlloc(m_cells->dT, 4, m_noCells, "m_cells->dT", F0, AT_);
348 }
349}
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
std::unique_ptr< MConservativeVariables< nDim > > CV
MFloat ** variables
MFloat ** rightHandSide
MFloat * temperature
MFloat * localTimeStep
MFloat ** viscousFlux
MFloat ** oldVariables

◆ allocateAuxDataMaps()

template<MInt nDim>
void FvStructuredSolver< nDim >::allocateAuxDataMaps

Definition at line 7804 of file fvstructuredsolver.cpp.

7804 {
7805 TRACE();
7806
7808 m_bForce = true;
7809 m_detailAuxData = true;
7810 }
7811
7812 if(m_bForce) {
7813 const MInt noFields = nDim + m_detailAuxData * 2 * nDim;
7814
7815 MInt noAuxDataMaps = m_windowInfo->physicalAuxDataMap.size();
7816 if(noAuxDataMaps > 0) {
7817 mAlloc(m_cells->cfOffsets, noAuxDataMaps, "m_cells->cfOffsets", 0, AT_);
7818 mAlloc(m_cells->cpOffsets, noAuxDataMaps, "m_cells->cpOffsets", 0, AT_);
7819 mAlloc(m_cells->powerOffsets, noAuxDataMaps, "m_cells->powerOffsets", 0, AT_);
7820 }
7821 MInt totalSizeCf = 0, totalSizeCp = 0, totalSizePower = 0;
7822 for(MInt i = 0; i < noAuxDataMaps; ++i) {
7823 MInt dataSize = 1;
7824 for(MInt j = 0; j < nDim; ++j) {
7825 if(m_windowInfo->physicalAuxDataMap[i]->end1[j] == m_windowInfo->physicalAuxDataMap[i]->start1[j]) {
7826 continue;
7827 }
7828 dataSize *= m_windowInfo->physicalAuxDataMap[i]->end1[j] - m_windowInfo->physicalAuxDataMap[i]->start1[j];
7829 }
7830 m_cells->cfOffsets[i] = totalSizeCf;
7831 m_cells->cpOffsets[i] = totalSizeCp;
7832 m_cells->powerOffsets[i] = totalSizePower;
7833 totalSizeCf += dataSize * noFields;
7834 totalSizeCp += dataSize;
7835 totalSizePower += dataSize * nDim;
7836 }
7837
7838 if(totalSizeCf > 0) {
7839 mAlloc(m_cells->cf, totalSizeCf, "m_cells->cf", -1.23456123456, AT_);
7840 }
7841 if(totalSizeCp > 0) {
7842 mAlloc(m_cells->cp, totalSizeCp, "m_cells->cp", -1.23456123456, AT_);
7843 }
7844
7845 if(m_bPower) {
7846 if(totalSizePower > 0) {
7847 mAlloc(m_cells->powerVisc, totalSizePower, "m_cells->power", -1.23456123456, AT_);
7848 mAlloc(m_cells->powerPres, totalSizePower, "m_cells->power", -1.23456123456, AT_);
7849 }
7850 }
7851
7852 m_forceHeaderNames.clear();
7853 m_forceHeaderNames.push_back("n");
7854 m_forceHeaderNames.push_back("t_ac");
7855 m_forceHeaderNames.push_back("t_conv");
7856 m_forceHeaderNames.push_back("f_x");
7857 m_forceHeaderNames.push_back("f_x,v");
7858 m_forceHeaderNames.push_back("f_x,p");
7859 m_forceHeaderNames.push_back("f_x,c");
7860 m_forceHeaderNames.push_back("f_y");
7861 m_forceHeaderNames.push_back("f_y,v");
7862 m_forceHeaderNames.push_back("f_y,p");
7863 m_forceHeaderNames.push_back("f_y,c");
7864 IF_CONSTEXPR(nDim == 3) {
7865 m_forceHeaderNames.push_back("f_z");
7866 m_forceHeaderNames.push_back("f_z,v");
7867 m_forceHeaderNames.push_back("f_z,p");
7868 m_forceHeaderNames.push_back("f_z,c");
7869 }
7870 m_forceHeaderNames.push_back("area");
7871 if(m_bPower) {
7872 m_forceHeaderNames.push_back("P_x");
7873 m_forceHeaderNames.push_back("P_x,v");
7874 m_forceHeaderNames.push_back("P_x,p");
7875 m_forceHeaderNames.push_back("P_y");
7876 m_forceHeaderNames.push_back("P_y,v");
7877 m_forceHeaderNames.push_back("P_y,p");
7878 IF_CONSTEXPR(nDim == 3) {
7879 m_forceHeaderNames.push_back("P_z");
7880 m_forceHeaderNames.push_back("P_z,v");
7881 m_forceHeaderNames.push_back("P_z,p");
7882 }
7883 }
7884
7886 m_forceCounter = 0;
7887
7888 const MInt noWalls = m_windowInfo->m_auxDataWindowIds.size();
7889 if(m_forceAsciiOutputInterval > 0 && noWalls * m_noForceDataFields > 0) {
7890 mAlloc(m_forceData, m_forceAsciiOutputInterval, noWalls * m_noForceDataFields, "m_forceData", F0, AT_);
7891 }
7892
7893 // Allocate memory for integral coefficients
7894 if(noWalls * m_noForceDataFields > 0) {
7895 mAlloc(m_forceCoef, noWalls * m_noForceDataFields, "m_forceCoef", F0, AT_);
7896 }
7897 }
7898
7899
7900 IF_CONSTEXPR(nDim == 3) {
7902 // compute Domain Width for Averaging
7904 }
7905 }
7906
7907 if(domainId() == 0 && m_forceAsciiOutputInterval != 0) {
7908 // we need to decide how many files to open
7909 const MInt noWalls = m_windowInfo->m_auxDataWindowIds.size();
7910
7913
7914 // create file header if file does not exist
7915 for(MInt i = 0; i < noWalls; ++i) {
7916 stringstream iWall;
7917 iWall << i;
7918 MString filename = "./forces." + iWall.str() + ".dat";
7919
7920
7921 if(FILE* file = fopen(filename.c_str(), "r")) {
7922 fclose(file);
7923 } else {
7924 FILE* f_forces;
7925 f_forces = fopen(filename.c_str(), "a+");
7926
7927 fprintf(f_forces,
7928 "# Force coefficient file, the force coefficents in the 2 or 3 space directions\n"
7929 "# are listed in columns, the subscript v denotes a viscous force, p a pressure force,\n"
7930 "# and c the compressible contribution of the stress tensor\n");
7931 fprintf(f_forces, "# 1:%s ", m_forceHeaderNames[0].c_str());
7932 for(MInt j = 1; j < (MInt)m_forceHeaderNames.size(); j++) {
7933 fprintf(f_forces, " %d:%s ", (j + 1), m_forceHeaderNames[j].c_str());
7934 }
7935 fprintf(f_forces, "\n");
7936 fclose(f_forces);
7937 }
7938 }
7939 }
7940}
std::vector< MString > m_forceHeaderNames
virtual void computeDomainWidth()
@ RANS_KEPSILON
Definition: enums.h:58

◆ allocateVariables()

template<MInt nDim>
void FvStructuredSolver< nDim >::allocateVariables

Definition at line 4361 of file fvstructuredsolver.cpp.

4361 {
4362 // We will decide whether we will use RANS Variables or not depending on the solver
4363
4364 if(m_zoneType == "RANS") {
4365 // number of RANS equations
4367
4368 CV = make_unique<MConservativeVariables<nDim>>(m_noSpecies, m_noRansEquations);
4369 PV = make_unique<MPrimitiveVariables<nDim>>(m_noSpecies, m_noRansEquations);
4370 } else {
4371 // we only have LES solvers
4373 CV = make_unique<MConservativeVariables<nDim>>(m_noSpecies);
4374 PV = make_unique<MPrimitiveVariables<nDim>>(m_noSpecies);
4375 }
4376
4377 // LES zones have 5 but RANS zone have 6 variables,
4378 // we have to use maxNoVariables for allocations and
4379 // IO related procedures which use MPI
4380 m_maxNoVariables = -1;
4381 MPI_Allreduce(&PV->noVariables, &m_maxNoVariables, 1, MPI_INT, MPI_MAX, m_StructuredComm, AT_, "PV->noVariables",
4382 "m_maxNoVariables");
4383 m_log << "Max number of variables: " << m_maxNoVariables << endl;
4384}
MInt noRansEquations(RansMethod ransMethod)

◆ applyBodyForce()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::applyBodyForce ( MBool  ,
MBool   
)
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 183 of file fvstructuredsolver.h.

183{};

◆ applyBoundaryCondition()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::applyBoundaryCondition ( )
pure virtual

◆ applyBoundaryCondtition()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::applyBoundaryCondtition ( )
inlinevirtual

Definition at line 178 of file fvstructuredsolver.h.

178{};

◆ beginP0()

template<MInt nDim>
std::array< MInt, nDim > FvStructuredSolver< nDim >::beginP0 ( )
inline

Definition at line 280 of file fvstructuredsolver.h.

280 {
281 IF_CONSTEXPR(nDim == 2) { return {0, 0}; }
282 else {
283 return {0, 0, 0};
284 }
285 }

◆ beginP1()

template<MInt nDim>
std::array< MInt, nDim > FvStructuredSolver< nDim >::beginP1 ( )
inline

Definition at line 287 of file fvstructuredsolver.h.

287 {
288 IF_CONSTEXPR(nDim == 2) { return {1, 1}; }
289 else {
290 return {1, 1, 1};
291 }
292 }

◆ beginP2()

template<MInt nDim>
std::array< MInt, nDim > FvStructuredSolver< nDim >::beginP2 ( )
inline

Definition at line 294 of file fvstructuredsolver.h.

294 {
295 IF_CONSTEXPR(nDim == 2) { return {2, 2}; }
296 else {
297 return {2, 2, 2};
298 }
299 }

◆ checkNans()

template<MInt nDim>
void FvStructuredSolver< nDim >::checkNans
Author
Marian Albers
Date
19.08.2015

Definition at line 7029 of file fvstructuredsolver.cpp.

7029 {
7030 TRACE();
7031 MInt noNansLocal = 0;
7032 for(MInt cellid = 0; cellid < m_noCells; cellid++) {
7033 // go through every cell
7034 for(MInt i = 0; i < CV->noVariables; i++) {
7035 if(std::isnan(m_cells->variables[i][cellid])) {
7036 noNansLocal++;
7037 }
7038 }
7039 }
7040
7041 MInt noNansGlobal = 0;
7042 MPI_Allreduce(&noNansLocal, &noNansGlobal, 1, MPI_INT, MPI_SUM, m_StructuredComm, AT_, "noNansLocal", "noNansGlobal");
7043
7044 if(domainId() == 0) {
7045 cout << "GlobalTimeStep: " << globalTimeStep << " , noNansGlobal: " << noNansGlobal << endl;
7046 }
7047}
MInt globalTimeStep

◆ cleanUp()

template<MInt nDim>
void FvStructuredSolver< nDim >::cleanUp
overridevirtual

Implements Solver.

Definition at line 8307 of file fvstructuredsolver.cpp.

8307 {
8308 RECORD_TIMER_START(m_timers[Timers::Run]);
8309 // write a solution file before the solution run ends
8310
8314 }
8317 }
8318 saveSolution(true);
8320 }
8321
8322 this->postprocessPostSolve();
8323 RECORD_TIMER_STOP(m_timers[Timers::Run]);
8324}
void saveSolution(MBool)
Saves the soution to hdf5 file.
void saveForcesToAsciiFile(MBool)
Function to save the force coefficients and power to an ASCII file.
virtual void saveAverageRestart()
virtual void savePointsToAsciiFile(MBool)

◆ computeAuxData()

template<MInt nDim>
void FvStructuredSolver< nDim >::computeAuxData

Definition at line 7989 of file fvstructuredsolver.cpp.

7989 {
7990 if(m_bForce && m_bPower) {
7992 } else {
7994 }
7995
7997}
virtual void computeFrictionPressureCoef(MBool)=0
void computeForceCoef()
Function to compute the force coefficient cl, split split into the viscous part cLv and the pressure ...

◆ computeAuxDataRoot()

template<MInt nDim>
void FvStructuredSolver< nDim >::computeAuxDataRoot

Definition at line 8001 of file fvstructuredsolver.cpp.

8001 {
8002 if(m_bForce && m_bPower) {
8004 } else {
8006 }
8007
8009}
void computeForceCoefRoot()
Function to compute the coefficient, split split into the viscous part cLv and the pressure part cLp ...

◆ computeConservativeVariables()

template<MInt nDim>
void FvStructuredSolver< nDim >::computeConservativeVariables
virtual

Definition at line 4456 of file fvstructuredsolver.cpp.

4456 {
4457 if(noRansEquations(m_ransMethod) == 2) {
4458 if(m_rans2eq_mode == "production")
4459 computeConservativeVariables_<&FvStructuredSolver::totalEnergy_twoEqRans>();
4460 else
4462 } else
4464}

◆ computeConservativeVariables_()

template<MInt nDim>
template<MFloat(FvStructuredSolver< nDim >::*)(MInt) const totalEnergy_func>
void FvStructuredSolver< nDim >::computeConservativeVariables_

Definition at line 4415 of file fvstructuredsolver.cpp.

4415 {
4416 m_log << "we got into the general formulation but should be in the other one" << endl;
4417 const MFloat FgammaMinusOne = F1 / (m_gamma - 1.0);
4418 MFloat** const RESTRICT cvars = m_cells->variables;
4419 MFloat** const RESTRICT pvars = m_cells->pvariables;
4420 MFloat rhoVelocity[3] = {0.0, 0.0, 0.0};
4421
4422 for(MInt cellId = 0; cellId < m_noCells; cellId++) {
4423 MFloat velPOW2 = F0;
4424 // copy the density
4425 const MFloat rho = pvars[PV->RHO][cellId];
4426 // compute the rho * velocity
4427 for(MInt i = 0; i < nDim; i++) {
4428 rhoVelocity[i] = pvars[PV->VV[i]][cellId] * rho;
4429 velPOW2 += POW2(pvars[PV->VV[i]][cellId]);
4430 }
4431
4432 // regular conservative variables
4433 cvars[CV->RHO][cellId] = rho;
4434 for(MInt i = 0; i < nDim; i++) {
4435 cvars[CV->RHO_VV[i]][cellId] = rhoVelocity[i];
4436 }
4437
4438 cvars[CV->RHO_E][cellId] =
4439 pvars[PV->P][cellId] * FgammaMinusOne + F1B2 * rho * velPOW2 + (this->*totalEnergy_func)(cellId);
4440
4441 // rans
4442 for(MInt ransVar = 0; ransVar < m_noRansEquations; ransVar++) {
4443 // pvars[PV->RANS_VAR[ransVar]][cellId] = mMax(pvars[PV->RANS_VAR[ransVar]][cellId], F0);
4444 // cvars[CV->RANS_VAR[ransVar]][cellId] = mMax(pvars[PV->RANS_VAR[ransVar]][cellId], F0)*rho;
4445 cvars[CV->RANS_VAR[ransVar]][cellId] = pvars[PV->RANS_VAR[ransVar]][cellId] * rho;
4446 }
4447
4448 // species
4449 for(MInt s = 0; s < m_noSpecies; s++) {
4450 cvars[CV->RHO_Y[s]][cellId] = pvars[PV->Y[s]][cellId] * rho;
4451 }
4452 }
4453}
void const MInt cellId
Definition: collector.h:239

◆ computeCumulativeAverage()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::computeCumulativeAverage ( MBool  )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 232 of file fvstructuredsolver.h.

232{};

◆ computeDomainWidth()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::computeDomainWidth ( )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 127 of file fvstructuredsolver.h.

127{};

◆ computeForceCoef()

template<MInt nDim>
void FvStructuredSolver< nDim >::computeForceCoef
Authors
Marian Albers, Pascal Meysonnat

Definition at line 7948 of file fvstructuredsolver.cpp.

7948 {
7949 const MInt noWalls = m_windowInfo->m_auxDataWindowIds.size();
7950 MPI_Allreduce(MPI_IN_PLACE, m_forceCoef, noWalls * m_noForceDataFields, MPI_DOUBLE, MPI_SUM, m_StructuredComm, AT_,
7951 "MPI_IN_PLACE", "m_forceCoef");
7952
7954 for(MInt i = 0; i < noWalls * m_noForceDataFields; ++i) {
7956 }
7957 }
7958}

◆ computeForceCoefRoot()

template<MInt nDim>
void FvStructuredSolver< nDim >::computeForceCoefRoot
Author
Marian Albers

Definition at line 7969 of file fvstructuredsolver.cpp.

7969 {
7970 const MInt noWalls = m_windowInfo->m_auxDataWindowIds.size();
7971
7972 MFloatScratchSpace force(noWalls * m_noForceDataFields, AT_, "force");
7973 for(MInt i = 0; i < noWalls * m_noForceDataFields; ++i) {
7974 force(i) = m_forceCoef[i];
7975 }
7976
7977
7978 MPI_Reduce(force.begin(), m_forceCoef, noWalls * m_noForceDataFields, MPI_DOUBLE, MPI_SUM, 0, m_StructuredComm, AT_,
7979 "force", "forceCoef");
7981 for(MInt i = 0; i < noWalls * m_noForceDataFields; ++i) {
7983 }
7984 }
7985}
This class is a ScratchSpace.
Definition: scratch.h:758
int MPI_Reduce(const void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm, const MString &name, const MString &sndvarname, const MString &rcvvarname)
same as MPI_Reduce

◆ computeFrictionPressureCoef()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::computeFrictionPressureCoef ( MBool  )
pure virtual

◆ computeLambda2Criterion()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::computeLambda2Criterion ( )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 184 of file fvstructuredsolver.h.

184{};

◆ computePorousRHS()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::computePorousRHS ( MBool  )
inlinevirtual

Reimplemented in FvStructuredSolver2D, and FvStructuredSolver3D.

Definition at line 176 of file fvstructuredsolver.h.

176{ mTerm(1, "called virtual computePorousRHS()"); };

◆ computePrimitiveVariables()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::computePrimitiveVariables ( )
inlinevirtual

Reimplemented in FvStructuredSolver2D, and FvStructuredSolver3D.

Definition at line 166 of file fvstructuredsolver.h.

166{ mTerm(-1, AT_, "not implemented in general solver"); };

◆ computePV()

template<MInt nDim>
void FvStructuredSolver< nDim >::computePV

Definition at line 4405 of file fvstructuredsolver.cpp.

4405 {
4406 // don't do this here, because it
4407 // will be executed before exchange() and
4408 // then wrong primitve values are in the GC
4409 // computePrimitiveVariables();
4410}

◆ computeRecConstSVD()

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::computeRecConstSVD ( const MInt  ijk,
const MInt  noNghbrIds,
MInt nghbr,
MInt  ID,
MInt  sID,
MFloatScratchSpace tmpA,
MFloatScratchSpace tmpC,
MFloatScratchSpace weights,
const MInt  recDim 
)

SVD STUFF //////////////////////////////////////////////////////////////////

Definition at line 8020 of file fvstructuredsolver.cpp.

8022 {
8023 if(noNghbrIds == 0) return F0;
8024
8025 const MFloat normalizationFactor = 1 / 0.01; // reduces the condition number of the eq system
8026
8027 for(MInt n = 0; n < noNghbrIds; n++) {
8028 MInt nghbrId = nghbr[n];
8029 MFloat dx[nDim];
8030 for(MInt i = 0; i < nDim; i++) {
8031 dx[i] = (m_cells->coordinates[i][nghbrId] - m_grid->m_coordinates[i][ijk]) * normalizationFactor;
8032 }
8033
8034 tmpA(n, 0) = F1 * normalizationFactor;
8035 for(MInt i = 0; i < nDim; i++) {
8036 tmpA(n, i + 1) = dx[i];
8037 }
8038 }
8039
8040 maia::math::invert(tmpA, weights, tmpC, noNghbrIds, recDim);
8041
8042 // condition number could be calculated using:
8043 // condNum = svd.singularValues()(0)/svd.singularValues()(size-1);
8044 // but would double the computational effort...
8045
8046 for(MInt n = 0; n < noNghbrIds; n++) {
8047 for(MInt i = 0; i < nDim + 1; i++) {
8048 m_singularity[sID].ReconstructionConstants[i][ID + n] = tmpC(i, n) * normalizationFactor;
8049 }
8050 }
8051
8052 return 0;
8053}
MFloat ** coordinates
void invert(MFloat *A, const MInt m, const MInt n)
Definition: maiamath.cpp:171
MFloat ** ReconstructionConstants

◆ computeSamplingInterval()

template<MInt nDim>
void FvStructuredSolver< nDim >::computeSamplingInterval ( )

◆ computeTimeStep()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::computeTimeStep ( )
inlinevirtual

Reimplemented in FvStructuredSolver2D, and FvStructuredSolver3D.

Definition at line 208 of file fvstructuredsolver.h.

208{};

◆ computeVolumeForces()

template<MInt nDim>
void FvStructuredSolver< nDim >::computeVolumeForces

Definition at line 4504 of file fvstructuredsolver.cpp.

4504 {
4505 TRACE();
4506
4507 for(MInt dim = 0; dim < nDim; dim++) {
4508 for(MInt cellId = 0; cellId < m_noCells; cellId++) {
4509 m_cells->rightHandSide[CV->RHO_VV[dim]][cellId] +=
4511 m_cells->rightHandSide[CV->RHO_E][cellId] +=
4512 m_cells->variables[CV->RHO_VV[dim]][cellId] * m_volumeForce[dim] * m_cells->cellJac[cellId];
4513 }
4514 }
4515}

◆ computeVorticity()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::computeVorticity ( )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 185 of file fvstructuredsolver.h.

185{};

◆ convertRestartVariables()

template<MInt nDim>
void FvStructuredSolver< nDim >::convertRestartVariables ( MFloat  oldMa)

Definition at line 7344 of file fvstructuredsolver.cpp.

7344 {
7345 TRACE();
7346 const MFloat eps = pow(10.0, -5.0);
7347 if(ABS(oldMa - m_Ma) > eps) {
7348 m_log << "converting restart variables from old Ma: " << oldMa << " to new Ma: " << m_Ma << " ..." << endl;
7349 const MFloat gammaMinusOne = m_gamma - 1.0;
7350 // old references
7351 MFloat T8old = 1.0 / (1.0 + 0.5 * gammaMinusOne * POW2(oldMa));
7352 MFloat p8old = pow(T8old, (m_gamma / gammaMinusOne)) / m_gamma;
7353 MFloat u8old = oldMa * sqrt(T8old);
7354 MFloat rho8old = pow(T8old, (1.0 / gammaMinusOne));
7355 // MFloat rhoU8old = rho8old*u8old;
7356 MFloat rhoE8old = p8old / gammaMinusOne + rho8old * (F1B2 * POW2(u8old));
7357 // new references
7358 MFloat T8new = 1.0 / (1.0 + 0.5 * gammaMinusOne * POW2(m_Ma));
7359 MFloat p8new = pow(T8new, (m_gamma / gammaMinusOne)) / m_gamma;
7360 MFloat u8new = m_Ma * sqrt(T8new);
7361 MFloat rho8new = pow(T8new, (1.0 / gammaMinusOne));
7362 // MFloat rhoU8new = rho8new*u8new;
7363 MFloat rhoE8new = p8new / gammaMinusOne + rho8new * (F1B2 * POW2(u8new));
7364 // ratios
7365 MFloat velRatio = u8new / u8old;
7366 MFloat rhoRatio = rho8new / rho8old;
7367 MFloat pRatio = p8new / p8old;
7368 MFloat rhoERatio = rhoE8new / rhoE8old;
7369
7370 // conversion
7371 for(MInt cellId = 0; cellId < m_noCells; ++cellId) {
7372 // density
7373 m_cells->pvariables[PV->RHO][cellId] *= rhoRatio;
7374 // velocities
7375 for(MInt i = 0; i < nDim; ++i) {
7376 m_cells->pvariables[PV->VV[i]][cellId] *= velRatio;
7377 }
7378 // energy
7379 m_cells->pvariables[PV->P][cellId] *= pRatio;
7380 }
7381
7382 if(m_useSponge) {
7383 if(m_spongeLayerType == 2) {
7384 for(MInt cellId = 0; cellId < m_noCells; ++cellId) {
7385 m_cells->fq[FQ->SPONGE_RHO][cellId] *= rhoRatio;
7386 m_cells->fq[FQ->SPONGE_RHO_E][cellId] *= rhoERatio;
7387 }
7388 }
7389
7390 if(m_spongeLayerType == 4) {
7391 for(MInt cellId = 0; cellId < m_noCells; ++cellId) {
7392 m_cells->fq[FQ->SPONGE_RHO][cellId] *= rhoRatio;
7393 }
7394 }
7395 }
7396
7398
7399 m_log << "converting restart variables from old Ma: " << oldMa << " to new Ma: " << m_Ma << " ... SUCCESSFUL!"
7400 << endl;
7401 }
7402 return;
7403}
std::unique_ptr< StructuredFQVariables > FQ
virtual void computeConservativeVariables()
MFloat m_Ma
the Mach number
Definition: solver.h:71
Real ABS(const Real x)
Definition: functions.h:85

◆ convertRestartVariablesSTG()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::convertRestartVariablesSTG ( MFloat  oldMa)
inlinevirtual

Definition at line 245 of file fvstructuredsolver.h.

245 {
246 (void)oldMa;
247 mTerm(-1, AT_, "not implemented for 0d,2d");
248 };

◆ createMPIGroups()

template<MInt nDim>
void FvStructuredSolver< nDim >::createMPIGroups

Definition at line 3159 of file fvstructuredsolver.cpp.

3159 {
3160 // Channel Communication
3161 mAlloc(m_channelRoots, 4, "m_channelRoots", -1, AT_);
3162
3163 // Periodic rotation boundary condtions communicators
3164 mAlloc(m_commPerRotRoots, 4, "m_commPerRotRoots", -1, AT_);
3165
3169 if(m_zonal) {
3170 mAlloc(m_commZonal, m_noBlocks, "m_commZonal", AT_);
3171 mAlloc(m_commZonalRoot, m_noBlocks, "m_commZonalRoot", -1, AT_);
3172 mAlloc(m_commZonalRootGlobal, m_noBlocks, "m_commZonalRoot", -1, AT_);
3173
3174 m_commZonalMyRank = -1;
3175 m_zonalRootRank = false;
3176
3177
3178 // first collect the ranks of each input solver in one array and count the number
3179 for(MInt i = 0; i < m_noBlocks; i++) {
3180 MPI_Group groupZonal, newGroupZonal;
3181 vector<MInt> tmpPartitions;
3182 MInt blockDomainId = 0;
3183 MInt hasBlockDomain = 0;
3184 MInt hasBlockDomainGlobal = 0;
3185 MIntScratchSpace nblockDomainArray(noDomains(), AT_, "nblockDomainArray");
3186 MIntScratchSpace nblockDomainOffset(noDomains(), AT_, "nblockDomainOffset");
3187 if(m_blockId == i) {
3188 blockDomainId = domainId();
3189 hasBlockDomain = 1;
3190 }
3191 MPI_Allreduce(&hasBlockDomain, &hasBlockDomainGlobal, 1, MPI_INT, MPI_SUM, m_StructuredComm, AT_,
3192 "hasBlockDomain", "hasBlockDomainGlobal");
3193 MPI_Allgather(&hasBlockDomain, 1, MPI_INT, &nblockDomainArray[0], 1, MPI_INT, m_StructuredComm, AT_,
3194 "hasBlockDomain", "nblockDomainArray[0]");
3195 nblockDomainOffset[0] = 0;
3196 for(MInt j = 1; j < noDomains(); j++) {
3197 nblockDomainOffset[j] = nblockDomainOffset[j - 1] + nblockDomainArray[j - 1];
3198 }
3199 MIntScratchSpace zonalRanks(hasBlockDomainGlobal, AT_, "zonalRanks");
3200 MPI_Allgatherv(&blockDomainId, nblockDomainArray[domainId()], MPI_INT, &zonalRanks[0], &nblockDomainArray[0],
3201 &nblockDomainOffset[0], MPI_INT, m_StructuredComm, AT_, "blockDomainId", "zonalRanks[0]");
3202
3203
3204 MInt zonalcommsize = hasBlockDomainGlobal;
3205
3206 MPI_Comm_group(m_StructuredComm, &groupZonal, AT_, "groupZonal");
3207 MPI_Group_incl(groupZonal, zonalcommsize, &zonalRanks[0], &newGroupZonal, AT_);
3208 MPI_Comm_create(m_StructuredComm, newGroupZonal, &m_commZonal[i], AT_, "m_commZonal[i]");
3209
3210 if(domainId() == zonalRanks[0]) {
3211 MPI_Comm_rank(m_commZonal[i], &m_commZonalRoot[i]);
3212 MPI_Comm_rank(m_StructuredComm, &m_commZonalRootGlobal[i]);
3213 m_zonalRootRank = true;
3214 }
3215
3216 MPI_Bcast(&m_commZonalRoot[0], m_noBlocks, MPI_INT, zonalRanks[0], m_StructuredComm, AT_, "m_commZonalRoot[0]");
3217 MPI_Bcast(&m_commZonalRootGlobal[0], m_noBlocks, MPI_INT, zonalRanks[0], m_StructuredComm, AT_,
3218 "m_commZonalRootGlobal[0]");
3219 }
3220 }
3221}
int MPI_Allgatherv(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, const int recvcounts[], const int displs[], MPI_Datatype recvtype, MPI_Comm comm, const MString &name, const MString &sndvarname, const MString &rcvvarname)
same as MPI_Allgatherv
int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm, const MString &name, const MString &varname)
same as MPI_Comm_create, but updates the number of MPI communicators
int MPI_Group_incl(MPI_Group group, int n, const int ranks[], MPI_Group *newgroup, const MString &name)
same as MPI_Group_incl
int MPI_Comm_group(MPI_Comm comm, MPI_Group *group, const MString &name, const MString &varname)
same as MPI_Comm_group
int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm, const MString &name, const MString &varname)
same as MPI_Bcast
int MPI_Allgather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm, const MString &name, const MString &sndvarname, const MString &rcvvarname)
same as MPI_Allgather

◆ determineRestartTimeStep()

template<MInt nDim>
MInt FvStructuredSolver< nDim >::determineRestartTimeStep
overridevirtual

Reimplemented from Solver.

Definition at line 5606 of file fvstructuredsolver.cpp.

5606 {
5607 TRACE();
5608
5610 TERMM(1, "determineRestartTimeStep should only be used with useNonSpecifiedRestartFile enabled!");
5611 }
5612
5613 MString restartFile = Context::getSolverProperty<MString>("restartVariablesFileName", m_solverId, AT_);
5614 std::stringstream restartFileName;
5615 restartFileName << outputDir() << restartFile;
5616 ParallelIoHdf5 pio(restartFileName.str(), maia::parallel_io::PIO_READ, MPI_COMM_SELF);
5617 MInt timeStep = -1;
5618 pio.getAttribute(&timeStep, "globalTimeStep", "");
5619
5620 return timeStep;
5621}
MString outputDir() const
Return the directory for output files.
Definition: solver.h:407
MBool restartFile()
Definition: solver.h:427
const MInt PIO_READ
Definition: parallelio.h:40

◆ dummy()

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::dummy ( MInt  ) const
inline

Definition at line 160 of file fvstructuredsolver.h.

160{ return 0.0; }

◆ dvardx()

template<MInt nDim>
virtual MFloat FvStructuredSolver< nDim >::dvardx ( MInt  ,
MFloat  
)
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 241 of file fvstructuredsolver.h.

241{ return 0; };

◆ dvardxyz()

template<MInt nDim>
virtual MFloat FvStructuredSolver< nDim >::dvardxyz ( MInt  ,
MInt  ,
MFloat  
)
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 240 of file fvstructuredsolver.h.

240{ return 0; };

◆ endM0()

template<MInt nDim>
std::array< MInt, nDim > FvStructuredSolver< nDim >::endM0 ( )
inline

Definition at line 315 of file fvstructuredsolver.h.

315 {
316 IF_CONSTEXPR(nDim == 2) { return {m_nCells[1], m_nCells[0]}; }
317 else {
318 return {m_nCells[2], m_nCells[1], m_nCells[0]};
319 }
320 }

◆ endM1()

template<MInt nDim>
std::array< MInt, nDim > FvStructuredSolver< nDim >::endM1 ( )
inline

Definition at line 308 of file fvstructuredsolver.h.

308 {
309 IF_CONSTEXPR(nDim == 2) { return {m_nCells[1] - 1, m_nCells[0] - 1}; }
310 else {
311 return {m_nCells[2] - 1, m_nCells[1] - 1, m_nCells[0] - 1};
312 }
313 }

◆ endM2()

template<MInt nDim>
std::array< MInt, nDim > FvStructuredSolver< nDim >::endM2 ( )
inline

Definition at line 301 of file fvstructuredsolver.h.

301 {
302 IF_CONSTEXPR(nDim == 2) { return {m_nCells[1] - 2, m_nCells[0] - 2}; }
303 else {
304 return {m_nCells[2] - 2, m_nCells[1] - 2, m_nCells[0] - 2};
305 }
306 }

◆ exchange() [1/2]

template<MInt nDim>
void FvStructuredSolver< nDim >::exchange

Definition at line 8061 of file fvstructuredsolver.cpp.

8061 {
8063}
void exchange()
SVD STUFF ENDS /////////////////////////////////////////////////////////////.

◆ exchange() [2/2]

template<MInt nDim>
void FvStructuredSolver< nDim >::exchange ( std::vector< std::unique_ptr< StructuredComm< nDim > > > &  sndComm,
std::vector< std::unique_ptr< StructuredComm< nDim > > > &  rcvComm 
)

Definition at line 8070 of file fvstructuredsolver.cpp.

8071 {
8072 RECORD_TIMER_START(m_timers[Timers::Exchange]);
8073
8074
8078 if(noDomains() > 1) {
8079 std::vector<MPI_Request> sndRequests;
8080 std::vector<MPI_Request> rcvRequests;
8081 std::vector<MPI_Status> sndStatus;
8082 std::vector<MPI_Status> rcvStatus;
8083 sndRequests.reserve(sndComm.size());
8084 rcvRequests.reserve(rcvComm.size());
8085
8086 RECORD_TIMER_START(m_timers[Timers::Gather]);
8087 gather(false, sndComm);
8088 RECORD_TIMER_STOP(m_timers[Timers::Gather]);
8089
8090 RECORD_TIMER_START(m_timers[Timers::Send]);
8091 send(false, sndComm, sndRequests);
8092 RECORD_TIMER_STOP(m_timers[Timers::Send]);
8093
8094 RECORD_TIMER_START(m_timers[Timers::Receive]);
8095 receive(false, rcvComm, rcvRequests);
8096 RECORD_TIMER_STOP(m_timers[Timers::Receive]);
8097
8098 RECORD_TIMER_START(m_timers[Timers::SendWait]);
8099 sndStatus.resize(sndRequests.size());
8100 MPI_Waitall(sndRequests.size(), &sndRequests[0], &sndStatus[0], AT_);
8101 RECORD_TIMER_STOP(m_timers[Timers::SendWait]);
8102
8103 RECORD_TIMER_START(m_timers[Timers::ReceiveWait]);
8104 rcvStatus.resize(rcvRequests.size());
8105 MPI_Waitall(rcvRequests.size(), &rcvRequests[0], &rcvStatus[0], AT_);
8106 RECORD_TIMER_STOP(m_timers[Timers::ReceiveWait]);
8107
8108 RECORD_TIMER_START(m_timers[Timers::Scatter]);
8109 scatter(false, rcvComm);
8110 RECORD_TIMER_STOP(m_timers[Timers::Scatter]);
8111 }
8112
8116
8117 for(MInt periodicDir = 0; periodicDir < nDim; periodicDir++) {
8118 std::vector<MPI_Request> sndRequests;
8119 std::vector<MPI_Request> rcvRequests;
8120 std::vector<MPI_Status> sndStatus;
8121 std::vector<MPI_Status> rcvStatus;
8122 sndRequests.reserve(sndComm.size());
8123 rcvRequests.reserve(rcvComm.size());
8124
8125 m_currentPeriodicDirection = periodicDir;
8126 RECORD_TIMER_START(m_timers[Timers::Gather]);
8127 gather(true, sndComm);
8128 RECORD_TIMER_STOP(m_timers[Timers::Gather]);
8129
8130 RECORD_TIMER_START(m_timers[Timers::Send]);
8131 send(true, sndComm, sndRequests);
8132 RECORD_TIMER_STOP(m_timers[Timers::Send]);
8133
8134 RECORD_TIMER_START(m_timers[Timers::Receive]);
8135 receive(true, rcvComm, rcvRequests);
8136 RECORD_TIMER_STOP(m_timers[Timers::Receive]);
8137
8138 RECORD_TIMER_START(m_timers[Timers::SendWait]);
8139 sndStatus.resize(sndRequests.size());
8140 MPI_Waitall(sndRequests.size(), &sndRequests[0], &sndStatus[0], AT_);
8141 RECORD_TIMER_STOP(m_timers[Timers::SendWait]);
8142
8143 RECORD_TIMER_START(m_timers[Timers::ReceiveWait]);
8144 rcvStatus.resize(rcvRequests.size());
8145 MPI_Waitall(rcvRequests.size(), &rcvRequests[0], &rcvStatus[0], AT_);
8146 RECORD_TIMER_STOP(m_timers[Timers::ReceiveWait]);
8147
8148 RECORD_TIMER_START(m_timers[Timers::Scatter]);
8149 scatter(true, rcvComm);
8150 RECORD_TIMER_STOP(m_timers[Timers::Scatter]);
8151 }
8152
8153 RECORD_TIMER_STOP(m_timers[Timers::Exchange]);
8154}
void receive(const MBool, std::vector< std::unique_ptr< StructuredComm< nDim > > > &, std::vector< MPI_Request > &)
void send(const MBool, std::vector< std::unique_ptr< StructuredComm< nDim > > > &, std::vector< MPI_Request > &)
virtual void gather(const MBool, std::vector< std::unique_ptr< StructuredComm< nDim > > > &)
virtual void scatter(const MBool, std::vector< std::unique_ptr< StructuredComm< nDim > > > &)
int MPI_Waitall(int count, MPI_Request *request, MPI_Status *status, const MString &name)
same as MPI_Waitall

◆ exchangeTimeStep()

template<MInt nDim>
void FvStructuredSolver< nDim >::exchangeTimeStep

Definition at line 6837 of file fvstructuredsolver.cpp.

6837 {
6838 TRACE();
6839
6840 MFloat globalTimeStepMin = F0;
6841
6842 MPI_Allreduce(&m_timeStep, &globalTimeStepMin, 1, MPI_DOUBLE, MPI_MIN, m_StructuredComm, AT_, "m_timeStep",
6843 "globalTimeStepMin");
6844
6845 m_timeStep = globalTimeStepMin;
6846}

◆ finalizeInitSolver()

template<MInt nDim>
void FvStructuredSolver< nDim >::finalizeInitSolver
overridevirtual

◆ fixTimeStepTravelingWave()

template<MInt nDim>
void FvStructuredSolver< nDim >::fixTimeStepTravelingWave

Definition at line 7096 of file fvstructuredsolver.cpp.

7096 {
7097 const MFloat waveTransSpeed = fabs(m_waveSpeed);
7098
7099 MFloat travelDist = F0;
7100 if(m_travelingWave) {
7101 if(nDim == 3) {
7102 travelDist = abs(m_grid->m_coordinates[2][0] - m_grid->m_coordinates[2][m_nPoints[2] * m_nPoints[1]]);
7103 } else {
7104 travelDist = abs(m_grid->m_coordinates[0][0] - m_grid->m_coordinates[0][1]);
7105 }
7106 } else if(m_streamwiseTravelingWave) {
7107 travelDist = m_waveLength;
7108 } else {
7109 m_log << "WARNING!!!!!!!!!!!!!!!!!!!!: dz was fixed and hardcoded !!!!!!!!!! " << endl;
7110 travelDist = 0.33200866159432146;
7111 }
7112
7114 // first compute time step as usual and exchange it
7116 if(noDomains() > 1) {
7118 }
7119
7120 // number of timeSteps the wave needs to move one cell width further
7121 m_waveNoStepsPerCell = ceil((travelDist / waveTransSpeed) / (m_timeStep));
7122 if(m_waveNoStepsPerCell < 2) {
7123 m_waveNoStepsPerCell = 2; // although highly improbable, see Nyquist-Shannon-Theorem
7124 }
7125
7126 cout.precision(18);
7127 if(domainId() == 0) {
7128 cout << "Old time step = " << m_timeStep << endl;
7129 }
7130 m_log << "/////////////////// TRAVELING WAVE /////////////////////////////" << endl;
7131 m_log << "Old time step = " << m_timeStep << endl;
7132
7133 m_timeStep = (travelDist / waveTransSpeed) / (m_waveNoStepsPerCell);
7135
7136 MBool syncSolutionInterval = false;
7137 MBool syncForceInterval = false;
7138 MBool syncBoxInterval = false;
7139 MBool syncIntpPointsInterval = false;
7140
7141
7142 // fix output writing functions in case
7144 // change the output frequency of the different io routines to be in accordance with the new time step such that
7145 // only in full number of iterations in which the moving grid has traveld one cell distance is ensured
7146 // if(m_outputOffset){
7147 // m_log << "ERROR: m_outputOffset and synchronized output cannot be combined (not implemented yet)" << endl;
7148 // mTerm(1, AT_, "ERROR: m_outputOffset and synchronized output cannot be combined (not implemented yet)");
7149 //}
7150
7151 if(domainId() == 0) {
7152 cout << "m_movingGridStepOffset: " << m_movingGridStepOffset
7153 << " m_movingGridInitialStart: " << m_movingGridInitialStart << endl;
7154 }
7155
7156
7158 const MInt offsetCounter =
7161 } else {
7162 m_outputOffset = m_movingGridStepOffset; // for input output such that it works propberly
7163 }
7164
7166 m_log << "ERROR: m_useConvectiveUnitWrite and synchronized output cannot be combined (not implemented yet)"
7167 << endl;
7168 mTerm(1, AT_,
7169 "ERROR: m_useConvetiveUnitWrite and synchronized output cannot be combined (not implemented yet)");
7170 }
7171 if(m_solutionInterval) {
7175 syncSolutionInterval = true;
7176 }
7181 syncForceInterval = true;
7182 }
7187
7188 syncBoxInterval = true;
7189 }
7194 syncIntpPointsInterval = true;
7195 }
7196 }
7197
7198 if(domainId() == 0) {
7199 cout << "New time step: " << m_timeStep << " new physical time step: " << m_physicalTimeStep << endl;
7200 cout << "Number of steps to move one cell width: " << travelDist / (m_waveSpeed * m_timeStep) << " time steps"
7201 << endl;
7202 cout << "Number of steps to move one physical time step: " << F1 / m_physicalTimeStep << endl;
7203 cout << "Number of steps to move one wave length: " << m_waveLength / (m_waveSpeed * m_timeStep) << endl;
7204 cout << "Cells per wavelength: " << m_waveLength / travelDist << " travelDist: " << travelDist << endl;
7205 cout << "Time for wave to travel one wave length: " << m_waveLength / m_waveSpeed << endl;
7206 cout << "Physical time for wave to travel one wave length: " << m_waveLength / m_waveSpeed * m_timeRef << endl;
7207 cout << "solution output interval was reset: " << syncSolutionInterval << " and changed to " << m_solutionInterval
7208 << endl;
7209 cout << "box output interval was reset: " << syncBoxInterval << " and changed to " << m_boxOutputInterval << endl;
7210 cout << "force output interval was reset: " << syncForceInterval << " and changed to " << m_forceOutputInterval
7211 << endl;
7212 cout << "intpPoints output interval was reset: " << syncIntpPointsInterval << " and changed to "
7213 << m_intpPointsOutputInterval << endl;
7214 }
7215
7216 m_log << "New time step: " << m_timeStep << " new physical time step: " << m_physicalTimeStep << endl;
7217 m_log << "Number of steps to move one cell width: " << travelDist / (m_waveSpeed * m_timeStep) << " time steps"
7218 << endl;
7219 m_log << "Number of steps to move one physical time step: " << F1 / m_physicalTimeStep << endl;
7220 m_log << "Number of steps to move one wave length: " << m_waveLength / (m_waveSpeed * m_timeStep) << endl;
7221 m_log << "Cells per wavelength: " << m_waveLength / travelDist << " travelDist: " << travelDist << endl;
7222 m_log << "Time for wave to travel one wave length: " << m_waveLength / m_waveSpeed << endl;
7223 m_log << "Physical time for wave to travel one wave length: " << m_waveLength / m_waveSpeed * m_timeRef << endl;
7224 m_log << "solution output interval was reset: " << syncSolutionInterval << " and changed to " << m_solutionInterval
7225 << endl;
7226 m_log << "box output interval was reset: " << syncBoxInterval << " and changed to " << m_boxOutputInterval << endl;
7227 m_log << "force output interval was reset: " << syncForceInterval << " and changed to " << m_forceOutputInterval
7228 << endl;
7229 m_log << "intpPoints output interval was reset: " << syncIntpPointsInterval << " and changed to "
7230 << m_intpPointsOutputInterval << endl;
7231 m_log << "solution writing out will start at" << m_outputOffset << endl;
7232 m_log << "////////////////////////////////////////////////////////////////" << endl;
7233
7235 }
7236
7238 MBool syncSolutionInterval = false;
7239 MBool syncForceInterval = false;
7240 MBool syncBoxInterval = false;
7241 MBool syncIntpPointsInterval = false;
7242
7243 // fix output writing functions in case
7245 // change the output frequency of the different io routines to be in accordance with the new time step such that
7246 // only in full number of iterations in which the moving grid has traveld one cell distance is ensured
7247 // if(m_outputOffset!=m_movingGridStepOffset){
7248 // m_log << "ERROR: m_outputOffset and synchronized output cannot be combined (not implemented yet)" << endl;
7249 // mTerm(1, AT_, "ERROR: m_outputOffset and synchronized output cannot be combined (not implemented yet)");
7250 //}
7251 // shift the starting point of the outputs for the moving grid
7252
7254 const MInt offsetCounter =
7257 } else {
7258 m_outputOffset = m_movingGridStepOffset; // for input output such that it works propberly
7259 }
7260
7261
7263 m_log << "ERROR: m_useConvectiveUnitWrite and synchronized output cannot be combined (not implemented yet)"
7264 << endl;
7265 mTerm(1, AT_,
7266 "ERROR: m_useConvetiveUnitWrite and synchronized output cannot be combined (not implemented yet)");
7267 }
7268 if(m_solutionInterval) {
7272 syncSolutionInterval = true;
7273 }
7278 syncForceInterval = true;
7279 }
7284 syncBoxInterval = true;
7285 }
7290 syncIntpPointsInterval = true;
7291 }
7292 }
7293
7294 m_log << "/////////////////// TRAVELING WAVE /////////////////////////////" << endl;
7295 m_log << "New time step: " << m_timeStep << " new physical time step: " << m_physicalTimeStep << endl;
7296 m_log << "Number of steps to move one cell width: " << travelDist / (m_waveSpeed * m_timeStep) << " time steps"
7297 << endl;
7298 m_log << "Number of steps to move one physical time step: " << F1 / m_physicalTimeStep << endl;
7299 m_log << "Number of steps to move one wave length: " << m_waveLength / (m_waveSpeed * m_timeStep) << endl;
7300 m_log << "Time for wave to travel one wave length: " << m_waveLength / m_waveSpeed << endl;
7301 m_log << "Cells per wavelength: " << m_waveLength / travelDist << " travelDist: " << travelDist << endl;
7302 m_log << "solution output interval was reset: " << syncSolutionInterval << " and changed to " << m_solutionInterval
7303 << endl;
7304 m_log << "box output interval was reset: " << syncBoxInterval << " and changed to " << m_boxOutputInterval << endl;
7305 m_log << "force output interval was reset: " << syncForceInterval << " and changed to " << m_forceOutputInterval
7306 << endl;
7307 m_log << "intpPoints output interval was reset: " << syncIntpPointsInterval << " and changed to "
7308 << m_intpPointsOutputInterval << endl;
7309 m_log << "solution writing out will start at" << m_outputOffset << endl;
7310 m_log << "////////////////////////////////////////////////////////////////" << endl;
7311 // correct Averaging Time Steps
7312 if(m_postprocessing) {
7313 const MInt waveNoStepsPerCell = m_waveNoStepsPerCell;
7314 if(m_averageInterval % waveNoStepsPerCell != 0) {
7315 m_log << "Changed averageInterval from " << m_averageInterval;
7316 const MInt minAverageInterval = waveNoStepsPerCell;
7318 mMax(minAverageInterval,
7319 (MInt)(waveNoStepsPerCell * floor((MFloat)m_averageInterval / (MFloat)waveNoStepsPerCell)));
7320 m_log << " to " << m_averageInterval << ", every " << m_averageInterval * m_physicalTimeStep
7321 << " convective units" << endl;
7322 }
7323
7324 const MInt waveStepOffset = m_movingGridStepOffset;
7325 if((m_averageStartTimestep - waveStepOffset) % m_averageInterval != 0) {
7326 m_log << "Changed averageStartTimeStep from " << m_averageStartTimestep;
7327 MInt offsetCounter =
7328 ceil(((MFloat)m_averageStartTimestep - (MFloat)waveStepOffset) / (MFloat)m_averageInterval);
7329 m_averageStartTimestep = waveStepOffset + offsetCounter * m_averageInterval;
7330 m_log << " to " << m_averageStartTimestep << ". Averaging every " << m_averageInterval << " time steps" << endl;
7331 }
7332
7333 if((m_averageStopTimestep - waveStepOffset) % m_averageInterval != 0) {
7334 m_log << "Changed averageStopTimeStep from " << m_averageStopTimestep;
7335 MInt offsetCounter = ceil(((MFloat)m_averageStopTimestep - (MFloat)waveStepOffset) / (MFloat)m_averageInterval);
7336 m_averageStopTimestep = waveStepOffset + offsetCounter * m_averageInterval;
7337 m_log << " to " << m_averageStopTimestep << ". Averaging every " << m_averageInterval << " time steps" << endl;
7338 }
7339 }
7340 }
7341}
virtual void computeTimeStep()
MInt m_solutionInterval
The number of timesteps before writing the next solution file.
Definition: solver.h:74
constexpr T mMax(const T &x, const T &y)
Definition: functions.h:94
bool MBool
Definition: maiatypes.h:58

◆ gather()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::gather ( const  MBool,
std::vector< std::unique_ptr< StructuredComm< nDim > > > &   
)
inlinevirtual

Definition at line 193 of file fvstructuredsolver.h.

193{};

◆ gcFillGhostCells()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::gcFillGhostCells ( std::vector< MFloat * > &  )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 171 of file fvstructuredsolver.h.

171{};

◆ getActiveCells()

template<MInt nDim>
MInt * FvStructuredSolver< nDim >::getActiveCells ( )
inline

Definition at line 213 of file fvstructuredsolver.h.

213{ return m_grid->m_nActiveCells; };

◆ getBlasiusEta()

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::getBlasiusEta ( MFloat  coordX,
MFloat  coordY 
)
protectedvirtual

Definition at line 7726 of file fvstructuredsolver.cpp.

7726 {
7727 const MFloat nu8 = SUTHERLANDLAW(PV->TInfinity) / CV->rhoInfinity;
7728 m_blasius_x0 = F1 / POW2(1.7208) * PV->UInfinity / nu8 * m_Re0;
7729
7730 const MFloat dx = coordX - m_blasius_dx0;
7731 const MFloat x = m_blasius_x0 + dx;
7732 const MFloat y = coordY - m_blasius_y0;
7733
7734 return y * sqrt(PV->UInfinity * m_Re0 / (nu8 * x));
7735}
define array structures

◆ getBlasiusVelocity() [1/2]

template<MInt nDim>
void FvStructuredSolver< nDim >::getBlasiusVelocity ( MFloat  coordX,
MFloat  coordY,
MFloat *const  vel 
)
protectedvirtual

Definition at line 7739 of file fvstructuredsolver.cpp.

7739 {
7740 // coordinates
7741 const MFloat nu8 = SUTHERLANDLAW(PV->TInfinity) / CV->rhoInfinity;
7742 m_blasius_x0 = F1 / POW2(1.7208) * PV->UInfinity / nu8 * m_Re0;
7743 const MFloat eta = getBlasiusEta(coordX, coordY);
7744 const MFloat dx = coordX - m_blasius_dx0;
7745 const MFloat x = m_blasius_x0 + dx;
7746
7747 // get f, fp, and g
7748 MFloat fp, f;
7749 if(eta >= m_blasius_eta[m_blasius_noPoints - 1]) { // freestream
7753 } else if(eta <= F0) { // set zero, this is wrong in case of blowing or suction
7754 fp = F0;
7755 f = F0;
7756 } else { // interpolate
7757 // get index
7758 const MFloat Deta = m_blasius_eta[1];
7759 const MInt etai = eta / Deta;
7760 ASSERT((etai + 1) <= (m_blasius_noPoints - 1), "error computing the index for Blasius distributions");
7761 const MFloat deta = eta - m_blasius_eta[etai];
7762 const MFloat phi = deta / Deta;
7763 fp = m_blasius_fp[etai] * (F1 - phi) + m_blasius_fp[etai + 1] * phi;
7764 f = m_blasius_f[etai] * (F1 - phi) + m_blasius_f[etai + 1] * phi;
7765 }
7766
7767 vel[0] = PV->UInfinity * fp;
7768 vel[1] = F1B2 * sqrt(PV->UInfinity * nu8 / (x * m_Re0)) * (eta * fp - f);
7769 IF_CONSTEXPR(nDim == 3) { vel[2] = 0.0; }
7770}
virtual MFloat getBlasiusEta(MFloat coordX, MFloat coordY)

◆ getBlasiusVelocity() [2/2]

template<MInt nDim>
void FvStructuredSolver< nDim >::getBlasiusVelocity ( MInt  cellId,
MFloat *const  vel 
)
protectedvirtual
Author
T.Schilden
Date
11.12.2013

Definition at line 7721 of file fvstructuredsolver.cpp.

7721 {
7722 getBlasiusVelocity(m_cells->coordinates[0][cellId], m_cells->coordinates[1][cellId], vel);
7723}
virtual void getBlasiusVelocity(MInt cellId, MFloat *const vel)
Load variables for the specified timeStep.

◆ getBodyForceMethod()

template<MInt nDim>
MInt FvStructuredSolver< nDim >::getBodyForceMethod ( )
inline

Definition at line 221 of file fvstructuredsolver.h.

221{ return m_bodyForceMethod; };

◆ getCellCoordinate()

template<MInt nDim>
virtual MFloat FvStructuredSolver< nDim >::getCellCoordinate ( MInt  ,
MInt   
)
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 118 of file fvstructuredsolver.h.

118{ return 0; };

◆ getCellGrid()

template<MInt nDim>
MInt * FvStructuredSolver< nDim >::getCellGrid ( )
inline

Definition at line 218 of file fvstructuredsolver.h.

218{ return m_grid->m_nCells; };

◆ getCellLengthY()

template<MInt nDim>
virtual MFloat FvStructuredSolver< nDim >::getCellLengthY ( MInt  ,
MInt  ,
MInt   
)
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 117 of file fvstructuredsolver.h.

117{ return 0; };

◆ getCommunicator()

template<MInt nDim>
MPI_Comm FvStructuredSolver< nDim >::getCommunicator ( )
inline

Definition at line 231 of file fvstructuredsolver.h.

231{ return m_StructuredComm; };

◆ getDomainDecompositionInformation()

template<MInt nDim>
void FvStructuredSolver< nDim >::getDomainDecompositionInformation ( std::vector< std::pair< MString, MInt > > &  domainInfo)
override
Author
Marian Albers

Definition at line 7411 of file fvstructuredsolver.cpp.

7411 {
7412 TRACE();
7413
7414 const MString namePrefix = "b" + std::to_string(solverId()) + "_";
7415
7416 // Number of Cells
7417 const MInt noCells = m_noCells;
7418
7419 domainInfo.emplace_back(namePrefix + "noStructuredCells", noCells);
7420}

◆ getFscEta()

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::getFscEta ( MFloat  coordX,
MFloat  coordY 
)
protectedvirtual

Definition at line 7586 of file fvstructuredsolver.cpp.

7586 {
7587 const MFloat dx = coordX - m_fsc_dx0;
7588 const MFloat x = m_fsc_x0 + dx;
7589 const MFloat y = coordY - m_fsc_y0;
7590 return y * sqrt((m_fsc_m + F1) * m_fsc_Re * pow(x / m_fsc_x0, m_fsc_m) / (F2 * x));
7591}

◆ getFscPressure() [1/2]

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::getFscPressure ( MFloat  coordX)
protectedvirtual

Definition at line 7565 of file fvstructuredsolver.cpp.

7565 {
7566 const MFloat dx = coordX - m_fsc_dx0;
7567 const MFloat x = m_fsc_x0 + dx;
7568
7569 const MFloat fac = CV->rhoInfinity * POW2(PV->UInfinity) * F1B2;
7570 return PV->PInfinity + fac * (F1 - pow(x / m_fsc_x0, F2 * m_fsc_m));
7571}

◆ getFscPressure() [2/2]

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::getFscPressure ( MInt  cellId)
protectedvirtual

Definition at line 7560 of file fvstructuredsolver.cpp.

7560 {
7561 return getFscPressure(m_cells->coordinates[0][cellId]);
7562}
virtual MFloat getFscPressure(MInt cellId)

◆ getFscVelocity() [1/2]

template<MInt nDim>
void FvStructuredSolver< nDim >::getFscVelocity ( MFloat  coordX,
MFloat  coordY,
MFloat *const  vel 
)
protectedvirtual

Definition at line 7595 of file fvstructuredsolver.cpp.

7595 {
7596 // coordinates
7597 const MFloat eta = getFscEta(coordX, coordY);
7598 const MFloat dx = coordX - m_fsc_dx0;
7599 const MFloat x = m_fsc_x0 + dx;
7600
7601 // get f, fs
7602 MFloat fs, f;
7603 if(eta >= m_fsc_eta[m_fsc_noPoints - 1]) { // freestream
7604 fs = m_fsc_fs[m_fsc_noPoints - 1];
7606 } else if(eta <= F0) { // set zero, this is wrong in case of blowing or suction
7607 fs = F0;
7608 f = F0;
7609 } else { // interpolate
7610 // get index
7611 const MFloat Deta = m_fsc_eta[1];
7612 const MInt etai = eta / Deta;
7613 ASSERT((etai + 1) <= (m_fsc_noPoints - 1), "error computing the index for fsc distributions");
7614 const MFloat deta = eta - m_fsc_eta[etai];
7615 const MFloat phi = deta / Deta;
7616 fs = m_fsc_fs[etai] * (F1 - phi) + m_fsc_fs[etai + 1] * phi;
7617 f = m_fsc_f[etai] * (F1 - phi) + m_fsc_f[etai + 1] * phi;
7618 }
7619
7620 // "streamwise"
7621 vel[0] = PV->UInfinity * pow(x / m_fsc_x0, m_fsc_m) * fs;
7622 // normal, computet as inside the eta range
7623 const MFloat fac = sqrt(F2 * pow(x / m_fsc_x0, m_fsc_m) / ((m_fsc_m + F1) * m_fsc_x0 * m_fsc_Re)) / F2;
7624 // eta might be < 0 but then, fs and f are zero
7625 vel[1] = PV->UInfinity * fac * ((F1 - m_fsc_m) * fs * eta - (F1 + m_fsc_m) * f);
7626
7627 // spanwise
7628 IF_CONSTEXPR(nDim > 2) {
7629 MFloat g;
7630 if(eta >= m_fsc_eta[m_fsc_noPoints - 1]) { // freestream
7631 g = m_fsc_g[m_fsc_noPoints - 1];
7632 } else if(eta <= F0) { // set zero, this is wrong in case of blowing or suction
7633 g = F0;
7634 } else { // interpolate
7635 // get index
7636 const MFloat Deta = m_fsc_eta[1];
7637 const MInt etai = eta / Deta;
7638 ASSERT((etai + 1) <= (m_fsc_noPoints - 1), "error computing the index for fsc distributions");
7639 const MFloat deta = eta - m_fsc_eta[etai];
7640 const MFloat phi = deta / Deta;
7641 g = m_fsc_g[etai] * (F1 - phi) + m_fsc_g[etai + 1] * phi;
7642 }
7643 vel[2] = PV->WInfinity * g;
7644 }
7645}
virtual MFloat getFscEta(MFloat coordX, MFloat coordY)

◆ getFscVelocity() [2/2]

template<MInt nDim>
void FvStructuredSolver< nDim >::getFscVelocity ( MInt  cellId,
MFloat *const  vel 
)
protectedvirtual
Author
T.Schilden
Date
11.12.2013

Definition at line 7581 of file fvstructuredsolver.cpp.

7581 {
7582 getFscVelocity(m_cells->coordinates[0][cellId], m_cells->coordinates[1][cellId], vel);
7583}
virtual void getFscVelocity(MInt cellId, MFloat *const vel)
Load variables for the specified timeStep.

◆ getGamma()

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::getGamma ( )
inline

Definition at line 227 of file fvstructuredsolver.h.

227{ return m_gamma; };

◆ getGrid()

template<MInt nDim>
StructuredGrid< nDim > * FvStructuredSolver< nDim >::getGrid ( )
inline

Definition at line 225 of file fvstructuredsolver.h.

225{ return m_grid; };

◆ getGridMovingMethod()

template<MInt nDim>
MInt FvStructuredSolver< nDim >::getGridMovingMethod ( )
inline

Definition at line 220 of file fvstructuredsolver.h.

220{ return m_gridMovingMethod; };

◆ getMa()

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::getMa ( )
inline

Definition at line 230 of file fvstructuredsolver.h.

230{ return m_Ma; };

◆ getNoActiveCells()

template<MInt nDim>
MInt FvStructuredSolver< nDim >::getNoActiveCells ( )
inline

Definition at line 212 of file fvstructuredsolver.h.

212{ return m_grid->m_noActiveCells; };

◆ getNoCells()

template<MInt nDim>
MInt FvStructuredSolver< nDim >::getNoCells ( )
inline

Definition at line 210 of file fvstructuredsolver.h.

210{ return m_grid->m_noCells; };

◆ getNoGhostLayers()

template<MInt nDim>
MInt FvStructuredSolver< nDim >::getNoGhostLayers ( )
inline

Definition at line 215 of file fvstructuredsolver.h.

215{ return m_grid->m_noGhostLayers; };

◆ getOffsetCells()

template<MInt nDim>
MInt * FvStructuredSolver< nDim >::getOffsetCells ( )
inline

Definition at line 214 of file fvstructuredsolver.h.

214{ return m_nOffsetCells; };

◆ getPV()

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::getPV ( MInt  var,
MInt  cellId 
)
inline

Definition at line 237 of file fvstructuredsolver.h.

237{ return m_cells->pvariables[var][cellId]; }

◆ getRe0()

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::getRe0 ( )
inline

Definition at line 229 of file fvstructuredsolver.h.

229{ return m_Re0; };

◆ getSampleVariables()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::getSampleVariables ( MInt  ,
MFloat  
)
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 236 of file fvstructuredsolver.h.

236{};

◆ getSampleVorticity()

template<MInt nDim>
virtual MFloat FvStructuredSolver< nDim >::getSampleVorticity ( MInt  ,
MInt   
)
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 239 of file fvstructuredsolver.h.

239{ return 0; };

◆ getSolverTimings()

template<MInt nDim>
void FvStructuredSolver< nDim >::getSolverTimings ( std::vector< std::pair< MString, MFloat > > &  solverTimings,
const MBool  allTimings 
)
override

Definition at line 7425 of file fvstructuredsolver.cpp.

7426 {
7427 TRACE();
7428 const MString namePrefix = "b" + std::to_string(solverId()) + "_";
7429
7430
7431 solverTimings.emplace_back(namePrefix + "Viscous Flux", RETURN_TIMER_TIME(m_timers[Timers::ViscousFlux]));
7432 solverTimings.emplace_back(namePrefix + "ConvectiveFlux", RETURN_TIMER_TIME(m_timers[Timers::ConvectiveFlux]));
7433 solverTimings.emplace_back(namePrefix + "Exchange", RETURN_TIMER_TIME(m_timers[Timers::Exchange]));
7434 solverTimings.emplace_back(namePrefix + "BoundaryCondition", RETURN_TIMER_TIME(m_timers[Timers::BoundaryCondition]));
7435 solverTimings.emplace_back(namePrefix + "RungeKutta Step", RETURN_TIMER_TIME(m_timers[Timers::RungeKutta]));
7436 solverTimings.emplace_back(namePrefix + "Save output", RETURN_TIMER_TIME(m_timers[Timers::SaveOutput]));
7437 solverTimings.emplace_back(namePrefix + "Save forces", RETURN_TIMER_TIME(m_timers[Timers::SaveForces]));
7438 solverTimings.emplace_back(namePrefix + "Save auxdata", RETURN_TIMER_TIME(m_timers[Timers::SaveAuxdata]));
7439 solverTimings.emplace_back(namePrefix + "Save boxes", RETURN_TIMER_TIME(m_timers[Timers::SaveBoxes]));
7440 solverTimings.emplace_back(namePrefix + "Save intp points", RETURN_TIMER_TIME(m_timers[Timers::SaveIntpPoints]));
7441 solverTimings.emplace_back(namePrefix + "Save solution", RETURN_TIMER_TIME(m_timers[Timers::SaveSolution]));
7442 solverTimings.emplace_back(namePrefix + "Sandpaper tripping", RETURN_TIMER_TIME(m_timers[Timers::SandpaperTrip]));
7443 solverTimings.emplace_back(namePrefix + "Moving Grid", RETURN_TIMER_TIME(m_timers[Timers::MovingGrid]));
7444 solverTimings.emplace_back(namePrefix + "Moving grid volume flux", RETURN_TIMER_TIME(m_timers[Timers::MGVolumeFlux]));
7445 solverTimings.emplace_back(namePrefix + "MG Move Grid", RETURN_TIMER_TIME(m_timers[Timers::MGMoveGrid]));
7446}

◆ getSutherlandConstant()

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::getSutherlandConstant ( )
inline

Definition at line 228 of file fvstructuredsolver.h.

228{ return m_sutherlandConstant; };

◆ getWaveAvrgInterval()

template<MInt nDim>
MInt FvStructuredSolver< nDim >::getWaveAvrgInterval ( )
inline

Definition at line 216 of file fvstructuredsolver.h.

216{ return (m_waveNoStepsPerCell); };

◆ getWaveStepOffset()

template<MInt nDim>
MInt FvStructuredSolver< nDim >::getWaveStepOffset ( )
inline

Definition at line 217 of file fvstructuredsolver.h.

217{ return (m_movingGridStepOffset); };

◆ hasRestartTimeStep()

template<MInt nDim>
MBool FvStructuredSolver< nDim >::hasRestartTimeStep ( ) const
inlineoverridevirtual

Return if the restart time step can be determined from the restart file (for useNonSpecifiedRestartFile = true) see determineRestartTimeStep()

Reimplemented from Solver.

Definition at line 276 of file fvstructuredsolver.h.

276{ return true; }

◆ init()

template<MInt nDim>
void FvStructuredSolver< nDim >::init ( )
inline

Definition at line 278 of file fvstructuredsolver.h.

278{ m_log << "Called Structured::init without Implementation" << std::endl; }

◆ initBlasius()

template<MInt nDim>
void FvStructuredSolver< nDim >::initBlasius
protectedvirtual
Author
Marian Albers
Date
03.06.2020

Definition at line 7656 of file fvstructuredsolver.cpp.

7656 {
7657 TRACE();
7658
7659
7660 const MFloat fppwall = 0.332051914927913096446;
7661
7662 // Calculate Blasius solution
7663 const MFloat etamax = 20.0;
7664 const MFloat deta = 0.001;
7665 const MInt steps = etamax / deta;
7666
7667 MFloatScratchSpace blasius(steps + 1, 4, "m_blasius", AT_);
7668 blasius.fill(F0);
7669 blasius(0, 3) = fppwall;
7670
7671 // Lets use the shooting method for getting the Blasius solution
7672 for(MInt i = 0; i < steps; i++) {
7673 blasius(i + 1, 0) = blasius(i, 0) + deta;
7674 blasius(i + 1, 1) = blasius(i, 1) + blasius(i, 2) * deta;
7675 blasius(i + 1, 2) = blasius(i, 2) + blasius(i, 3) * deta;
7676 blasius(i + 1, 3) = blasius(i, 3) + (-0.5 * blasius(i, 1) * blasius(i, 3)) * deta;
7677 }
7678
7679 m_blasius_noPoints = steps;
7680
7681 // allocate memory for the arrays
7682 mAlloc(m_blasius_eta, m_blasius_noPoints, "m_blasius_eta", AT_);
7683 mAlloc(m_blasius_fp, m_blasius_noPoints, "m_blasius_fp", AT_);
7684 mAlloc(m_blasius_f, m_blasius_noPoints, "m_blasius_f", AT_);
7685
7686 const MFloat finalfp = blasius(steps - 1, 2);
7687
7688 for(MInt i = 0; i < steps; i++) {
7689 m_blasius_eta[i] = blasius(i, 0);
7690 m_blasius_f[i] = blasius(i, 1) / finalfp;
7691 m_blasius_fp[i] = blasius(i, 2) / finalfp;
7692 }
7693
7694 // debug raw distributions
7695 if(domainId() == 0) {
7696 ofstream blasiusf;
7697 // write pressure to file
7698 blasiusf.open("blasius_raw.dat", ios::trunc);
7699 if(blasiusf) {
7700 blasiusf << "#eta f fp" << endl;
7701 for(MInt i = 0; i < m_blasius_noPoints; i++) {
7702 blasiusf << m_blasius_eta[i] << " " << m_blasius_f[i] << " " << m_blasius_fp[i] << endl;
7703 }
7704 blasiusf.close();
7705 }
7706 }
7707
7708 m_blasius_dx0 = 0.0;
7709 m_blasius_y0 = 0.0; // position of the wall
7710}

◆ initBodyForce()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::initBodyForce ( )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 182 of file fvstructuredsolver.h.

182{};

◆ initFsc()

template<MInt nDim>
void FvStructuredSolver< nDim >::initFsc
protectedvirtual
Author
T.Schilden
Date
11.12.2013

Definition at line 7484 of file fvstructuredsolver.cpp.

◆ initialCondition()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::initialCondition ( )
pure virtual

◆ initializeFQField()

template<MInt nDim>
void FvStructuredSolver< nDim >::initializeFQField
Author
Marian Albers
Date
17.09.2015

Definition at line 277 of file fvstructuredsolver.cpp.

277 {
278 TRACE();
279 // count the number of needed FQ fields and allocate
280 MInt noFQFieldsNeeded = 0;
281 for(MInt i = 0; i < FQ->maxNoFQVariables; i++) {
282 noFQFieldsNeeded += FQ->neededFQVariables[i];
283 }
284
285 FQ->noFQVariables = noFQFieldsNeeded;
286
287 m_log << "Allocating " << noFQFieldsNeeded << " FQ fields for " << m_noCells << "..." << endl;
288 mAlloc(m_cells->fq, noFQFieldsNeeded, m_noCells, "m_cells->fq", F0, AT_);
289 mAlloc(FQ->loadedFromRestartFile, noFQFieldsNeeded, "FQ->loadedFromRestartFile", false, AT_);
290 m_log << "Allocating " << noFQFieldsNeeded << " FQ fields for " << m_noCells << "...SUCCESSFUL" << endl;
291
292 MInt currentPos = 0;
293 for(MInt i = 0; i < FQ->maxNoFQVariables; i++) {
294 if(FQ->neededFQVariables[i] == 0) {
295 continue;
296 }
297
298 FQ->activateFQField(i, currentPos, FQ->outputFQVariables[i], FQ->boxOutputFQVariables[i]);
299
300 FQ->noFQBoxOutput += (MInt)FQ->boxOutputFQVariables[i];
301 currentPos++;
302 }
303}

◆ initializeFvStructuredSolver()

template<MInt nDim>
void FvStructuredSolver< nDim >::initializeFvStructuredSolver ( MBool propertiesGroups)

Initializes the general properties of the FV Structured solver.

Author
Pascal Meysonnat

Definition at line 1876 of file fvstructuredsolver.cpp.

◆ initializeRungeKutta()

template<MInt nDim>
void FvStructuredSolver< nDim >::initializeRungeKutta

Definition at line 3600 of file fvstructuredsolver.cpp.

3600 {
3601 TRACE();
3603
3604 if(!m_restart) {
3605 m_time = F0;
3606 m_physicalTime = F0;
3607 globalTimeStep = 0;
3608 } else {
3609 m_time = -1.0;
3610 m_physicalTime = -1.0;
3611 }
3612
3613 m_RKStep = 0;
3614
3615 // this is used to initialize the counter the very first time this is called
3616 // and to initialize the very first residual
3617 if(approx(m_time, F0, m_eps)) {
3618 m_workload = 0;
3620 m_firstMaxResidual = F0;
3622 }
3623}
void setRungeKuttaProperties()
This function reads the properties required for Runge Kutta time stepping.
MBool approx(const T &, const U &, const T)
Definition: functions.h:272

◆ initMovingGrid()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::initMovingGrid ( )
inlinevirtual

Reimplemented in FvStructuredSolver2D, and FvStructuredSolver3D.

Definition at line 180 of file fvstructuredsolver.h.

180{};

◆ initPointsToAsciiFile()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::initPointsToAsciiFile ( )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 88 of file fvstructuredsolver.h.

88{};

◆ initPorous()

template<MInt nDim>
void FvStructuredSolver< nDim >::initPorous

Definition at line 3027 of file fvstructuredsolver.cpp.

3027 {
3028 TRACE();
3029
3030 // Assign defaults
3031 m_c_Dp = 0.2;
3032 m_c_Dp_eps = 0.2;
3033 m_c_wd = 5.0;
3034 m_c_t = 0.0;
3035 m_c_eps = 0.0;
3036
3037 // Read in from property file
3038 m_c_Dp = Context::getSolverProperty<MFloat>("c_Dp", m_solverId, AT_, &m_c_Dp);
3039 m_c_Dp_eps = Context::getSolverProperty<MFloat>("c_Dp_eps", m_solverId, AT_, &m_c_Dp_eps);
3040 m_c_wd = Context::getSolverProperty<MFloat>("c_wd", m_solverId, AT_, &m_c_wd);
3041 m_c_t = Context::getSolverProperty<MFloat>("c_t", m_solverId, AT_, &m_c_t);
3042 m_c_eps = Context::getSolverProperty<MFloat>("c_eps", m_solverId, AT_, &m_c_eps);
3043
3044 // Fill porosity, Da, Forch (By now each porous solver is homogeneous)
3045 if(m_blockType == "porous") {
3046 const MInt inputBoxID = m_grid->getMyBlockId();
3047 const MFloat por = Context::getSolverProperty<MFloat>("porosity", m_solverId, AT_,
3048 m_porousBlockIds[inputBoxID]); // m_porousID);
3049 const MFloat Da =
3050 Context::getSolverProperty<MFloat>("Da", m_solverId, AT_, m_porousBlockIds[inputBoxID]); // m_porousID);
3051 const MFloat cf =
3052 Context::getSolverProperty<MFloat>("cf", m_solverId, AT_, m_porousBlockIds[inputBoxID]); // m_porousID);
3053 for(MInt cellId = 0; cellId < m_noCells; ++cellId) {
3054 m_cells->fq[FQ->POROSITY][cellId] = por;
3055 m_cells->fq[FQ->DARCY][cellId] = Da;
3056 m_cells->fq[FQ->FORCH][cellId] = cf;
3057 }
3058 } else {
3059 // Fluid solver has only porosity
3060 for(MInt cellId = 0; cellId < m_noCells; ++cellId) {
3061 m_cells->fq[FQ->POROSITY][cellId] = 1.0;
3062 m_cells->fq[FQ->DARCY][cellId] = std::numeric_limits<MFloat>::max();
3063 }
3064 }
3065
3066 // TODO_SS labels:FV,toenhance Move stuff from initBc6002 into here
3067}
std::vector< MInt > m_porousBlockIds

◆ initSolutionStep()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::initSolutionStep ( MInt  )
pure virtual

◆ initSolver()

template<MInt nDim>
void FvStructuredSolver< nDim >::initSolver
overridevirtual

Initialize solver moved from methods

Author
Sven Berger
Template Parameters
nDim

Implements Solver.

Definition at line 7778 of file fvstructuredsolver.cpp.

7778 {
7779 TRACE();
7780 RECORD_TIMER_START(m_timers[Timers::RunInit]);
7782
7783 // Note: timers needed here for subtimers started in exchange() called from initSolutionStep()
7784 RECORD_TIMER_START(m_timers[Timers::Run]);
7785 RECORD_TIMER_START(m_timers[Timers::MainLoop]);
7786 initSolutionStep(-1);
7787 RECORD_TIMER_STOP(m_timers[Timers::MainLoop]);
7788 RECORD_TIMER_STOP(m_timers[Timers::Run]);
7789
7790 setTimeStep();
7791 RECORD_TIMER_STOP(m_timers[Timers::RunInit]);
7792}
virtual void initSolutionStep(MInt)=0

◆ initStructuredPostprocessing()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::initStructuredPostprocessing ( )
inlineprivatevirtual

◆ initTimers()

template<MInt nDim>
void FvStructuredSolver< nDim >::initTimers
protected

Definition at line 3083 of file fvstructuredsolver.cpp.

3083 {
3084 TRACE();
3085 m_timers.fill(-1);
3086
3087 NEW_TIMER_GROUP_NOCREATE(m_timerGroup, "Structured Solver");
3088 NEW_TIMER_NOCREATE(m_timers[Timers::Structured], "total object lifetime", m_timerGroup);
3089 RECORD_TIMER_START(m_timers[Timers::Structured]);
3090
3091 // Create & start constructor timer
3092 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::Constructor], "Constructor", m_timers[Timers::Structured]);
3093 RECORD_TIMER_START(m_timers[Timers::Constructor]);
3094
3095 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::GridDecomposition], "Grid Decomposition", m_timers[Timers::Constructor]);
3096 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::GridReading], "Grid reading", m_timers[Timers::Constructor]);
3097 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::BuildUpSponge], "Build up sponge", m_timers[Timers::Constructor]);
3098 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::ComputeMetrics], "Compute Metrics", m_timers[Timers::Constructor]);
3099 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::ComputeJacobian], "Compute Jacobian", m_timers[Timers::Constructor]);
3100
3101 // Create regular solver-wide timers
3102 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::RunInit], "Init", m_timers[Timers::Structured]);
3103 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::LoadRestart], "Load restart", m_timers[Timers::RunInit]);
3104 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::LoadVariables], "load restart variables", m_timers[Timers::LoadRestart]);
3105 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::LoadSponge], "load sponge", m_timers[Timers::LoadRestart]);
3106 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::LoadSTG], "load STG", m_timers[Timers::LoadRestart]);
3107
3108
3109 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::Run], "Run function", m_timers[Timers::Structured]);
3110 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::MainLoop], "Main loop", m_timers[Timers::Run]);
3111 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::ConvectiveFlux], "Convective Flux", m_timers[Timers::MainLoop]);
3112 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::ViscousFlux], "Viscous Flux", m_timers[Timers::MainLoop]);
3113 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::MGVolumeFlux], "Volume Flux", m_timers[Timers::MainLoop]);
3114 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::SandpaperTrip], "Sandpaper tripping", m_timers[Timers::MainLoop]);
3115
3116 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::MovingGrid], "Moving Grid", m_timers[Timers::MainLoop]);
3117 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::MGVolumeFlux], "MG Volume Flux", m_timers[Timers::MovingGrid]);
3118 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::MGMoveGrid], "MG Move Grid", m_timers[Timers::MovingGrid]);
3119 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::MGExchange], "MG Exchange", m_timers[Timers::MGMoveGrid]);
3120 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::MGCellCenterCoordinates], "MG Cell Center Coordinates",
3122 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::MGMetrics], "MG Metrics", m_timers[Timers::MGMoveGrid]);
3123 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::MGSurfaceMetrics], "MG Surface Metrics", m_timers[Timers::MGMetrics]);
3124 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::MGCellMetrics], "MG Cell Metrics", m_timers[Timers::MGMetrics]);
3125 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::MGCornerMetrics], "MG Corner Metrics", m_timers[Timers::MGMetrics]);
3126 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::MGJacobian], "MG Jacobian", m_timers[Timers::MGMoveGrid]);
3127
3128 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::MGSaveGrid], "MG Save Grid", m_timers[Timers::MovingGrid]);
3129
3130 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::Exchange], "Exchange", m_timers[Timers::MainLoop]);
3131 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::Gather], "Gather", m_timers[Timers::Exchange]);
3132 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::Send], "Send", m_timers[Timers::Exchange]);
3133 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::SendWait], "SendWait", m_timers[Timers::Exchange]);
3134 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::Receive], "Receive", m_timers[Timers::Exchange]);
3135 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::ReceiveWait], "ReceiveWait", m_timers[Timers::Exchange]);
3136 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::Scatter], "Scatter", m_timers[Timers::Exchange]);
3137 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::Receive], "Receive", m_timers[Timers::Exchange]);
3138
3139 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::BoundaryCondition], "Boundary Conditions", m_timers[Timers::MainLoop]);
3140
3141 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::RungeKutta], "RungeKutta", m_timers[Timers::MainLoop]);
3142
3143 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::SaveOutput], "Save output", m_timers[Timers::Run]);
3144 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::SaveSolution], "Save solution", m_timers[Timers::SaveOutput]);
3145 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::SaveForces], "Save forces", m_timers[Timers::SaveOutput]);
3146 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::SaveAuxdata], "Save auxdata", m_timers[Timers::SaveOutput]);
3147 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::SaveBoxes], "Save boxes", m_timers[Timers::SaveOutput]);
3148 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::SaveIntpPoints], "Save lines", m_timers[Timers::SaveOutput]);
3149
3150
3151 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::SetTimeStep], "Set Time Step", m_timers[Timers::MainLoop]);
3152 NEW_SUB_TIMER_NOCREATE(m_timers[Timers::UpdateSponge], "Update sponge", m_timers[Timers::MainLoop]);
3153
3154 // Set status to initialized
3155 m_isInitTimers = true;
3156}

◆ insertSort()

template<MInt nDim>
void FvStructuredSolver< nDim >::insertSort ( MInt  dim,
MFloat list 
)

sorts an array list into ascending numerical order, by straight insertion. dim is input(size of list); list is replaced on output by its sorted rearrangement.

Definition at line 6998 of file fvstructuredsolver.cpp.

6998 {
6999 MFloat temp = F0;
7000 MInt j = 0;
7001 for(MInt i = 1; i < dim; i++) {
7002 temp = list[i];
7003 j = i - 1;
7004 while(j >= 0 && temp < list[j]) {
7005 list[j + 1] = list[j];
7006 j = j - 1;
7007 }
7008 list[j + 1] = temp;
7009 }
7010}

◆ isActive()

template<MInt nDim>
MBool FvStructuredSolver< nDim >::isActive ( ) const
inlinevirtual

Return if the solver is active on this rank; needs to be implemented in derived solver since access to gridproxy not possible here

Reimplemented from Solver.

Definition at line 71 of file fvstructuredsolver.h.

71{ return m_isActive; }

◆ isInInterval()

template<MInt nDim>
MBool FvStructuredSolver< nDim >::isInInterval ( MInt  interval)

Definition at line 5196 of file fvstructuredsolver.cpp.

5196 {
5197 if(interval > 0) {
5198 if((globalTimeStep - m_outputOffset) % interval == 0 && globalTimeStep - m_outputOffset >= 0) {
5199 return true;
5200 }
5201 }
5202 return false;
5203}

◆ isMovingGrid()

template<MInt nDim>
MBool FvStructuredSolver< nDim >::isMovingGrid ( )
inline

Definition at line 219 of file fvstructuredsolver.h.

219{ return m_movingGrid; };

◆ isPeriodicComm()

template<MInt nDim>
MBool FvStructuredSolver< nDim >::isPeriodicComm ( std::unique_ptr< StructuredComm< nDim > > &  comm)

Definition at line 8197 of file fvstructuredsolver.cpp.

8197 {
8198 if(comm->commType == PERIODIC_BC || comm->commType == PERIODIC_BC_SINGULAR) {
8199 return true;
8200 } else {
8201 return false;
8202 }
8203}
@ PERIODIC_BC_SINGULAR
Definition: enums.h:343
@ PERIODIC_BC
Definition: enums.h:343

◆ isStreamwiseTravelingWave()

template<MInt nDim>
MBool FvStructuredSolver< nDim >::isStreamwiseTravelingWave ( )
inline

Definition at line 222 of file fvstructuredsolver.h.

222{ return m_streamwiseTravelingWave; };

◆ isTravelingWave()

template<MInt nDim>
MBool FvStructuredSolver< nDim >::isTravelingWave ( )
inline

Definition at line 223 of file fvstructuredsolver.h.

223{ return m_travelingWave; };

◆ lhsBnd()

template<MInt nDim>
void FvStructuredSolver< nDim >::lhsBnd

Definition at line 8249 of file fvstructuredsolver.cpp.

8249 {
8251
8252 exchange();
8253
8254 if(m_zonal) {
8258 zonalExchange();
8259 }
8260 }
8261
8262 RECORD_TIMER_START(m_timers[Timers::BoundaryCondition]);
8264 RECORD_TIMER_STOP(m_timers[Timers::BoundaryCondition]);
8265}
virtual void spanwiseAvgZonal(std::vector< MFloat * > &)
virtual void zonalExchange()
virtual void computeCumulativeAverage(MBool)
virtual void applyBoundaryCondition()=0
virtual void computePrimitiveVariables()
std::vector< MFloat * > m_zonalSpanwiseAvgVars

◆ loadAveragedVariables()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::loadAveragedVariables ( const char *  )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 243 of file fvstructuredsolver.h.

243{};

◆ loadAverageRestartFile()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::loadAverageRestartFile ( const char *  ,
MFloat **  ,
MFloat **  ,
MFloat **  ,
MFloat **   
)
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 242 of file fvstructuredsolver.h.

242{}

◆ loadBoxFile()

template<MInt nDim>
MBool FvStructuredSolver< nDim >::loadBoxFile ( MString  fileDir,
MString  filePrefix,
MInt  currentStep,
MInt  boxNr 
)
Author
Marian Albers
Date
: 02.10.2019

Definition at line 5992 of file fvstructuredsolver.cpp.

5992 {
5993 TRACE();
5994
5995 stringstream fileName;
5996 fileName << fileDir << "/" << filePrefix << currentStep << ".hdf5";
5997 if(FILE* file = fopen((fileName.str()).c_str(), "r")) {
5998 fclose(file);
5999 if(domainId() == 0) {
6000 cout << "Loading box file " << fileName.str() << endl;
6001 }
6002 } else {
6003 if(domainId() == 0) {
6004 cout << "Box file " << fileName.str() << " does not exist" << endl;
6005 }
6006 return false;
6007 }
6008
6009
6011 stringstream boxPath;
6012 boxPath << "t" << currentStep << "/box" << boxNr;
6013
6014 MInt boxOffset[3] = {0, 0, 0};
6015 pio.getAttribute(&boxOffset[0], "offsetk", boxPath.str());
6016 pio.getAttribute(&boxOffset[1], "offsetj", boxPath.str());
6017 pio.getAttribute(&boxOffset[2], "offseti", boxPath.str());
6018 MInt boxSize[3] = {0, 0, 0};
6019 pio.getAttribute(&boxSize[0], "sizek", boxPath.str());
6020 pio.getAttribute(&boxSize[1], "sizej", boxPath.str());
6021 pio.getAttribute(&boxSize[2], "sizei", boxPath.str());
6022
6023 ParallelIo::size_type localBoxSize[3] = {0, 0, 0};
6024 ParallelIo::size_type localBoxOffset[3] = {0, 0, 0};
6025 ParallelIo::size_type localDomainBoxOffset[3] = {0, 0, 0};
6026
6027 if(((m_nOffsetCells[2] <= boxOffset[2] && boxOffset[2] < m_nOffsetCells[2] + m_nActiveCells[2])
6028 || (boxOffset[2] <= m_nOffsetCells[2] && m_nOffsetCells[2] < boxOffset[2] + boxSize[2]))
6029 && ((m_nOffsetCells[1] <= boxOffset[1] && boxOffset[1] < m_nOffsetCells[1] + m_nActiveCells[1])
6030 || (boxOffset[1] <= m_nOffsetCells[1] && m_nOffsetCells[1] < boxOffset[1] + boxSize[1]))
6031 && ((m_nOffsetCells[0] <= boxOffset[0] && boxOffset[0] < m_nOffsetCells[0] + m_nActiveCells[0])
6032 || (boxOffset[0] <= m_nOffsetCells[0]
6033 && m_nOffsetCells[0] < boxOffset[0] + boxSize[0]))) { // the box is contained
6034
6035 // get the size of the box
6036 for(MInt dim = 0; dim < nDim; ++dim) {
6037 if(m_nOffsetCells[dim] <= boxOffset[dim]
6038 && boxOffset[dim] + boxSize[dim] < m_nOffsetCells[dim] + m_nActiveCells[dim]) {
6039 localBoxSize[dim] = boxSize[dim];
6040 localBoxOffset[dim] = 0;
6041 localDomainBoxOffset[dim] = boxOffset[dim] - m_nOffsetCells[dim];
6042 } else if(m_nOffsetCells[dim] <= boxOffset[dim]) {
6043 localBoxSize[dim] = (m_nOffsetCells[dim] + m_nActiveCells[dim]) - boxOffset[dim];
6044 localBoxOffset[dim] = 0;
6045 localDomainBoxOffset[dim] = boxOffset[dim] - m_nOffsetCells[dim];
6046 } else if(boxOffset[dim] <= m_nOffsetCells[dim]
6047 && m_nOffsetCells[dim] + m_nActiveCells[dim] < boxOffset[dim] + boxSize[dim]) {
6048 localBoxSize[dim] = m_nActiveCells[dim];
6049 localBoxOffset[dim] = m_nOffsetCells[dim] - boxOffset[dim];
6050 localDomainBoxOffset[dim] = 0;
6051 } else {
6052 localBoxSize[dim] = (boxOffset[dim] + boxSize[dim]) - m_nOffsetCells[dim];
6053 localBoxOffset[dim] = m_nOffsetCells[dim] - boxOffset[dim];
6054 localDomainBoxOffset[dim] = 0;
6055 }
6056 }
6057
6058 MInt totalLocalSize = 1;
6059 for(MInt dim = 0; dim < nDim; ++dim) {
6060 totalLocalSize *= localBoxSize[dim];
6061 }
6062
6063 MFloatScratchSpace localBoxVar(totalLocalSize, AT_, "local Box Variables");
6064 for(MInt var = 0; var < PV->noVariables; var++) {
6065 pio.readArray(&localBoxVar[0], boxPath.str(), m_pvariableNames[var], nDim, localBoxOffset, localBoxSize);
6066
6067 for(MInt k = m_noGhostLayers + localDomainBoxOffset[0];
6068 k < m_noGhostLayers + localDomainBoxOffset[0] + localBoxSize[0];
6069 ++k) {
6070 for(MInt j = m_noGhostLayers + localDomainBoxOffset[1];
6071 j < m_noGhostLayers + localDomainBoxOffset[1] + localBoxSize[1];
6072 ++j) {
6073 for(MInt i = m_noGhostLayers + localDomainBoxOffset[2];
6074 i < m_noGhostLayers + localDomainBoxOffset[2] + localBoxSize[2];
6075 ++i) {
6076 const MInt cellId = i + (j + k * m_nCells[1]) * m_nCells[2];
6077 const MInt boxI = i - m_noGhostLayers - localDomainBoxOffset[2];
6078 const MInt boxJ = j - m_noGhostLayers - localDomainBoxOffset[1];
6079 const MInt boxK = k - m_noGhostLayers - localDomainBoxOffset[0];
6080 const MInt localId = boxI + (boxJ + boxK * localBoxSize[1]) * localBoxSize[2];
6081 m_cells->pvariables[var][cellId] = localBoxVar[localId];
6082 }
6083 }
6084 }
6085 }
6086 } else {
6087 for(MInt var = 0; var < PV->noVariables; var++) {
6088 ParallelIo::size_type offset[3] = {0, 0, 0};
6089 ParallelIo::size_type size[3] = {0, 0, 0};
6090 MFloat empty = 0;
6091 pio.readArray(&empty, boxPath.str(), m_pvariableNames[var], nDim, offset, size);
6092 }
6093 }
6094
6095
6096 if(domainId() == 0) {
6097 cout << "Done loading box file " << currentStep << endl;
6098 }
6099
6100 return true;
6101}

◆ loadRestartBC2600()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::loadRestartBC2600 ( )
inlinevirtual

Reimplemented in FvStructuredSolver2D, and FvStructuredSolver3D.

Definition at line 104 of file fvstructuredsolver.h.

104{};

◆ loadRestartBC2601()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::loadRestartBC2601 ( )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 105 of file fvstructuredsolver.h.

105{};

◆ loadRestartFile()

template<MInt nDim>
void FvStructuredSolver< nDim >::loadRestartFile
virtual
Author
Pascal Meysonnat

Reimplemented from Solver.

Definition at line 5638 of file fvstructuredsolver.cpp.

◆ loadRestartSTG()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::loadRestartSTG ( MBool  )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 106 of file fvstructuredsolver.h.

106{ mTerm(-1, AT_, "not implemented in basic solver"); };

◆ loadSampleFile()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::loadSampleFile ( MString  )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 235 of file fvstructuredsolver.h.

235{};

◆ maxResidual()

template<MInt nDim>
virtual MBool FvStructuredSolver< nDim >::maxResidual ( )
inlinevirtual

Reimplemented in FvStructuredSolver2D, and FvStructuredSolver3D.

Definition at line 266 of file fvstructuredsolver.h.

266{ return true; };

◆ moveGrid() [1/2]

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::moveGrid ( MBool  ,
MBool   
)
inlinevirtual

Reimplemented in FvStructuredSolver2D, and FvStructuredSolver3D.

Definition at line 181 of file fvstructuredsolver.h.

181{};

◆ moveGrid() [2/2]

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::moveGrid ( MInt  )
inlinevirtual

Definition at line 179 of file fvstructuredsolver.h.

179{};

◆ Muscl()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::Muscl ( MInt  = -1)
pure virtual

◆ noInternalCells()

template<MInt nDim>
MInt FvStructuredSolver< nDim >::noInternalCells ( ) const
inlineoverridevirtual

Implements Solver.

Definition at line 120 of file fvstructuredsolver.h.

120{ return m_noCells; }

◆ noSolverTimers()

template<MInt nDim>
MInt FvStructuredSolver< nDim >::noSolverTimers ( const MBool  allTimings)
inlineoverride

Definition at line 76 of file fvstructuredsolver.h.

76 {
77 TERMM_IF_COND(!allTimings, "FIXME: reduced timings mode not yet supported by StructuredFvSolver.");
78 return 16; // Default: load and idle timer
79 }

◆ noVariables()

template<MInt nDim>
MInt FvStructuredSolver< nDim >::noVariables ( ) const
inlineoverridevirtual

Reimplemented from Solver.

Definition at line 211 of file fvstructuredsolver.h.

211{ return PV->noVariables; };

◆ partitionGrid()

template<MInt nDim>
void FvStructuredSolver< nDim >::partitionGrid ( )

◆ postTimeStep()

template<MInt nDim>
void FvStructuredSolver< nDim >::postTimeStep
overridevirtual
Author
Thomas Hoesgen

Implements Solver.

Definition at line 8296 of file fvstructuredsolver.cpp.

8296 {
8297 TRACE();
8298 RECORD_TIMER_START(m_timers[Timers::Run]);
8299 RECORD_TIMER_START(m_timers[Timers::MainLoop]);
8301 RECORD_TIMER_STOP(m_timers[Timers::MainLoop]);
8302 RECORD_TIMER_STOP(m_timers[Timers::Run]);
8303}
virtual MBool maxResidual()
MBool m_timeStepConverged
Convergence status of the current time step.

◆ prepareRestart()

template<MInt nDim>
MBool FvStructuredSolver< nDim >::prepareRestart ( MBool  ,
MBool  
)
inlineoverridevirtual

Reimplemented from Solver.

Definition at line 93 of file fvstructuredsolver.h.

93{ return false; };

◆ pressure_twoEqRans()

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::pressure_twoEqRans ( MInt  cellId) const
inline

Definition at line 161 of file fvstructuredsolver.h.

161{ return -mMax(m_cells->variables[CV->RANS_VAR[0]][cellId], F0); }

◆ preTimeStep()

template<MInt nDim>
void FvStructuredSolver< nDim >::preTimeStep ( )
inlineoverridevirtual

Implements Solver.

Definition at line 268 of file fvstructuredsolver.h.

268{}

◆ pythag()

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::pythag ( MFloat  a,
MFloat  b 
)

Definition at line 7013 of file fvstructuredsolver.cpp.

7013 {
7014 MFloat absa = F0, absb = F0;
7015 absa = fabs(a);
7016 absb = fabs(b);
7017 if(absa > absb)
7018 return absa * sqrt(1.0 + POW2(absb / absa));
7019 else
7020 return (approx(absb, F0, m_eps) ? F0 : absb * sqrt(1.0 + POW2(absa / absb)));
7021}
Definition: contexttypes.h:19

◆ readAndSetAuxDataMap()

template<MInt nDim>
void FvStructuredSolver< nDim >::readAndSetAuxDataMap
Date
2020-03-19

Definition at line 3232 of file fvstructuredsolver.cpp.

◆ readAndSetSpongeLayerProperties()

template<MInt nDim>
void FvStructuredSolver< nDim >::readAndSetSpongeLayerProperties

Definition at line 3291 of file fvstructuredsolver.cpp.

◆ receive()

template<MInt nDim>
void FvStructuredSolver< nDim >::receive ( const MBool  periodicExchange,
std::vector< std::unique_ptr< StructuredComm< nDim > > > &  rcvComm,
std::vector< MPI_Request > &  rcvRequests 
)

Definition at line 8174 of file fvstructuredsolver.cpp.

8176 {
8177 for(auto& rcv : rcvComm) {
8178 if(periodicExchange && skipPeriodicDirection(rcv)) continue;
8179
8180 MPI_Request request{};
8181 const MInt tag = rcv->nghbrId + (rcv->tagHelper) * noDomains();
8182 const MInt err = MPI_Irecv((void*)&rcv->cellBuffer[0], rcv->cellBufferSize, MPI_DOUBLE, rcv->nghbrId, tag,
8183 m_StructuredComm, &request, AT_, "rcv->cellBuffer");
8184 rcvRequests.push_back(request);
8185 if(err) cout << "rank " << domainId() << " sending throws error " << endl;
8186 }
8187}
MBool skipPeriodicDirection(std::unique_ptr< StructuredComm< nDim > > &)
int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request *request, const MString &name, const MString &varname)
same as MPI_Irecv

◆ reIntAfterRestart()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::reIntAfterRestart ( MBool  )
inlinevirtual

Reimplemented from Solver.

Definition at line 92 of file fvstructuredsolver.h.

92{};

◆ resetRHS()

template<MInt nDim>
void FvStructuredSolver< nDim >::resetRHS
Author
Pascal Meysonnat

Definition at line 4392 of file fvstructuredsolver.cpp.

4392 {
4393 // as only 1D array is used the ghostcells will also need to have a right hand side variables
4394 // if storage need to be saved go over the inner loops and remove storge of ghost rhs
4395 const MInt noVars = CV->noVariables;
4396 for(MInt cellId = 0; cellId < m_noCells; cellId++) {
4397 for(MInt varId = 0; varId < noVars; varId++) {
4398 m_cells->rightHandSide[varId][cellId] = F0;
4399 }
4400 }
4401}

◆ rhs()

template<MInt nDim>
void FvStructuredSolver< nDim >::rhs

Compute right-hand side. moved from methods

Author
Sven Berger
Template Parameters
nDim

Definition at line 8211 of file fvstructuredsolver.cpp.

8211 {
8212 TRACE();
8213
8214 resetRHS();
8215
8216 Muscl();
8217
8218 if(!m_euler) {
8219 RECORD_TIMER_START(m_timers[Timers::ViscousFlux]);
8220 viscousFlux();
8221 RECORD_TIMER_STOP(m_timers[Timers::ViscousFlux]);
8222 }
8223
8227 }
8228
8229 if(m_blockType == "porous") {
8230 if(m_rans)
8231 computePorousRHS(true);
8232 else
8233 computePorousRHS(false);
8234 }
8235}
virtual void computePorousRHS(MBool)
virtual void viscousFlux()=0
void resetRHS()
Reset the right hand side to zero.
virtual void Muscl(MInt=-1)=0

◆ rhsBnd()

template<MInt nDim>
void FvStructuredSolver< nDim >::rhsBnd

Apply boundary condition moved from methods

Author
Sven Berger
Template Parameters
nDim

Definition at line 8242 of file fvstructuredsolver.cpp.

8242 {
8243 RECORD_TIMER_START(m_timers[Timers::UpdateSponge]);
8245 RECORD_TIMER_STOP(m_timers[Timers::UpdateSponge]);
8246}
virtual void updateSpongeLayer()=0

◆ rungeKuttaStep()

template<MInt nDim>
virtual bool FvStructuredSolver< nDim >::rungeKuttaStep ( )
pure virtual

◆ saveAuxData()

template<MInt nDim>
void FvStructuredSolver< nDim >::saveAuxData

Definition at line 6105 of file fvstructuredsolver.cpp.

6105 {
6107 stringstream fileName;
6108 MChar gridFile[25];
6109 MString tempG;
6110
6111 fileName << m_auxOutputDir << "auxData" << m_outputIterationNumber << m_outputFormat;
6112
6113 strcpy(gridFile, tempG.c_str());
6115 writeHeaderAttributes(&pio, "auxdata");
6117 const MString powerNamesVisc[3] = {"Pxv", "Pyv", "Pzv"};
6118 const MString powerNamesPres[3] = {"Pxp", "Pyp", "Pzp"};
6119
6120 const MString dataNames3D[] = {"cfx", "cfy", "cfz", "ax", "ay", "az", "x", "y", "z"};
6121 MString dataNames[3 * nDim];
6122 MInt cnt = 0;
6123 for(MInt i = 0; i < 3; ++i) {
6124 for(MInt dim = 0; dim < nDim; ++dim)
6125 dataNames[cnt++] = dataNames3D[i * 3 + dim];
6126 }
6127 MInt noFields = nDim;
6128 if(m_detailAuxData) {
6129 noFields = 3 * nDim;
6130 }
6131
6132 for(auto it = m_windowInfo->m_auxDataWindowIds.cbegin(); it != m_windowInfo->m_auxDataWindowIds.cend(); ++it) {
6133 const MInt i = it->first;
6134 ParallelIo::size_type datasetSize[nDim - 1];
6135 MInt dim1 = nDim - 2;
6136 for(MInt dim = 0; dim < nDim; ++dim) {
6137 if(m_windowInfo->globalStructuredBndryCndMaps[i]->end2[dim]
6138 == m_windowInfo->globalStructuredBndryCndMaps[i]->start2[dim]) {
6139 continue;
6140 }
6141 datasetSize[dim1--] = m_windowInfo->globalStructuredBndryCndMaps[i]->end2[dim]
6142 - m_windowInfo->globalStructuredBndryCndMaps[i]->start2[dim];
6143 }
6144
6145 if(m_bForce) {
6146 stringstream datasetId;
6147 datasetId << it->second; //==m_windowInfo->globalStructuredBndryCndMaps[i]->Id2;
6148 MString pathName = "window";
6149 pathName += datasetId.str();
6150 MString dataNamesCp = "cp";
6151 for(MInt j = 0; j < noFields; j++) {
6152 pio.defineArray(maia::parallel_io::PIO_FLOAT, pathName, dataNames[j], nDim - 1, datasetSize);
6153 }
6154 pio.defineArray(maia::parallel_io::PIO_FLOAT, pathName, dataNamesCp, nDim - 1, datasetSize);
6155 }
6156
6157 if(m_bPower) {
6158 stringstream datasetId;
6159 datasetId << it->second; //==m_windowInfo->globalStructuredBndryCndMaps[i]->Id2;
6160 MString pathName = "window";
6161 pathName += datasetId.str();
6162 for(MInt j = 0; j < nDim; j++) {
6163 pio.defineArray(maia::parallel_io::PIO_FLOAT, pathName, powerNamesVisc[j], nDim - 1, datasetSize);
6164 pio.defineArray(maia::parallel_io::PIO_FLOAT, pathName, powerNamesPres[j], nDim - 1, datasetSize);
6165 }
6166 }
6167 }
6168
6169 for(auto it = m_windowInfo->m_auxDataWindowIds.cbegin(); it != m_windowInfo->m_auxDataWindowIds.cend(); ++it) {
6170 stringstream datasetname;
6171 datasetname << it->second; //==m_windowInfo->globalStructuredBndryCndMaps[i]->Id2;
6172
6173 MBool isLocalAuxMap = false;
6174 MInt localAuxMapId = 0;
6175 const MUint noAuxDataMaps = m_windowInfo->physicalAuxDataMap.size();
6176
6177 // loop through all local auxDataMaps
6178 // to find if this partition shares a part of it
6179 // and then save the local id
6180 for(MUint j = 0; j < noAuxDataMaps; ++j) {
6181 stringstream datasetId;
6182 datasetId << m_windowInfo->physicalAuxDataMap[j]->Id2;
6183 if(datasetId.str() == datasetname.str()) {
6184 isLocalAuxMap = true;
6185 localAuxMapId = j;
6186 break;
6187 }
6188 }
6189
6190 if(isLocalAuxMap) {
6191 stringstream datasetId;
6192 datasetId << m_windowInfo->physicalAuxDataMap[localAuxMapId]->Id2;
6193
6194 ParallelIo::size_type offset[nDim - 1] = {};
6195 ParallelIo::size_type dataSize[nDim - 1] = {};
6196 MInt dataSetSize = 1;
6197 MInt dim1 = nDim - 2;
6198 for(MInt j = 0; j < nDim; ++j) {
6199 if(m_windowInfo->physicalAuxDataMap[localAuxMapId]->start2[j]
6200 == m_windowInfo->physicalAuxDataMap[localAuxMapId]->end2[j])
6201 continue;
6202 dataSize[dim1] = m_windowInfo->physicalAuxDataMap[localAuxMapId]->end2[j]
6203 - m_windowInfo->physicalAuxDataMap[localAuxMapId]->start2[j];
6204 offset[dim1] = m_windowInfo->physicalAuxDataMap[localAuxMapId]->start2[j];
6205 dataSetSize *= dataSize[dim1];
6206 dim1--;
6207 }
6208
6209 if(m_bForce) {
6210 const MInt mapOffset = m_cells->cfOffsets[localAuxMapId];
6211 MString pathName = "window" + datasetId.str();
6212 for(MInt j = 0; j < noFields; j++) {
6213 pio.writeArray(&m_cells->cf[mapOffset + dataSetSize * j], pathName, dataNames[j], nDim - 1, offset, dataSize);
6214 }
6215 const MInt mapOffsetCp = m_cells->cpOffsets[localAuxMapId];
6216 MString dataname = "cp";
6217 pio.writeArray(&m_cells->cp[mapOffsetCp], pathName, dataname, nDim - 1, offset, dataSize);
6218 }
6219
6220 if(m_bPower) {
6221 const MInt mapOffset = m_cells->powerOffsets[localAuxMapId];
6222 MString pathName = "window" + datasetId.str();
6223 for(MInt j = 0; j < nDim; j++) {
6224 pio.writeArray(&m_cells->powerVisc[mapOffset + dataSetSize * j], pathName, powerNamesVisc[j], nDim - 1,
6225 offset, dataSize);
6226 pio.writeArray(&m_cells->powerPres[mapOffset + dataSetSize * j], pathName, powerNamesPres[j], nDim - 1,
6227 offset, dataSize);
6228 }
6229 }
6230 } else {
6231 ParallelIo::size_type offset[nDim] = {};
6232 ParallelIo::size_type dataSize[nDim] = {};
6233 for(MInt j = 0; j < nDim - 1; ++j) {
6234 offset[j] = 0;
6235 dataSize[j] = 0;
6236 }
6237 // skin-friction and pressure coefficient
6238 if(m_bForce) {
6239 MString pathName = "window" + datasetname.str();
6240 MFloat empty = 0;
6241 for(MInt j = 0; j < noFields; j++) {
6242 pio.writeArray(&empty, pathName, dataNames[j], nDim - 1, offset, dataSize);
6243 }
6244 MString dataname = "cp";
6245 pio.writeArray(&empty, pathName, dataname, nDim - 1, offset, dataSize);
6246 }
6247 // power
6248 if(m_bPower) {
6249 MString pathName = "window" + datasetname.str();
6250 MFloat empty = 0;
6251 for(MInt j = 0; j < nDim; j++) {
6252 pio.writeArray(&empty, pathName, powerNamesVisc[j], nDim - 1, offset, dataSize);
6253 pio.writeArray(&empty, pathName, powerNamesPres[j], nDim - 1, offset, dataSize);
6254 }
6255 }
6256 }
6257 }
6258
6259 if(m_bForce) {
6261 }
6262}
void saveForceCoefficient(ParallelIoHdf5 *parallelIoHdf5)
Saves force coefficients to an HDF5 file.
virtual void writePropertiesAsAttributes(ParallelIoHdf5 *pio, MString path)
Overloaded version of writePropertiesAsAttributes that receives ParallelIoHdf5 object pointer instead...
virtual void writeHeaderAttributes(ParallelIoHdf5 *pio, MString fileType)
Overloaded version of writeHeaderAttributes that receives ParallelIoHdf5 object pointer instead of 'f...
uint32_t MUint
Definition: maiatypes.h:63
char MChar
Definition: maiatypes.h:56
const MInt PIO_REPLACE
Definition: parallelio.h:36
const MInt PIO_FLOAT
Definition: parallelio.h:46

◆ saveAveragedVariables()

template<MInt nDim>
void FvStructuredSolver< nDim >::saveAveragedVariables ( MString  name,
MInt  noVars,
MFloat **  summedVars 
)
Author
Marian Albers, Nov 15, 2015
Date
15.11.2015

Definition at line 6460 of file fvstructuredsolver.cpp.

6460 {
6461 // Function to write the solution to file with iolibrary
6462 stringstream fileName;
6463
6464 m_log << "writing Averaged Variables to file " << name << m_outputFormat << " ... " << endl;
6465 fileName << name << m_outputFormat;
6466
6468
6469 writeHeaderAttributes(&pio, "solution");
6471
6472 pio.setAttribute(m_averageStartTimestep, "averageStartTimeStep", "");
6473 pio.setAttribute(m_averageInterval, "averageSampleInterval", "");
6474 pio.setAttribute(m_noSamples, "noSamples", "");
6475
6476 for(MInt i = 0; i < m_noBlocks; i++) {
6477 ParallelIo::size_type noCells[nDim] = {};
6478 for(MInt j = 0; j < nDim; j++) {
6479 noCells[j] = m_grid->getBlockNoCells(i, j);
6480 }
6481 // create datasets for the io library
6482 stringstream path;
6483 path << i;
6484 MString blockPathStr = "block";
6485 blockPathStr += path.str();
6486
6487 // create dataset and write
6488 for(MInt var = 0; var < noVars; var++) {
6489 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, m_avgVariableNames[var], nDim, noCells);
6490 }
6491
6492 if(m_averagingFavre) {
6493 for(MInt var = 0; var < PV->noVariables; var++) {
6494 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, m_avgFavreNames[var], nDim, noCells);
6495 }
6496 }
6497 }
6498
6499 ParallelIo::size_type ioOffset[3] = {0, 0, 0};
6500 ParallelIo::size_type ioSize[3] = {0, 0, 0};
6501 ParallelIo::size_type ioGhost[3] = {m_noGhostLayers, m_noGhostLayers, m_noGhostLayers};
6502 for(MInt dim = 0; dim < nDim; ++dim) {
6503 ioOffset[dim] = m_nOffsetCells[dim];
6504 ioSize[dim] = m_nActiveCells[dim];
6505 }
6506
6507 stringstream path;
6508 path << m_blockId;
6509 MString blockPathStr = "block";
6510 blockPathStr += path.str();
6511 for(MInt var = 0; var < noVars; var++) {
6512 pio.writeArray(&summedVars[var][0], blockPathStr, m_avgVariableNames[var], nDim, ioOffset, ioSize, ioGhost);
6513 }
6514
6515 if(m_averagingFavre) {
6516 for(MInt var = 0; var < PV->noVariables; var++) {
6517 pio.writeArray(&m_favre[var][0], blockPathStr, m_avgFavreNames[var], nDim, ioOffset, ioSize, ioGhost);
6518 }
6519 }
6520}

◆ saveAverageRestart() [1/2]

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::saveAverageRestart ( )
inlineprivatevirtual

◆ saveAverageRestart() [2/2]

template<MInt nDim>
void FvStructuredSolver< nDim >::saveAverageRestart ( MString  name,
MInt  noVars,
MFloat **  summedVars,
MFloat **  square,
MFloat **  cube,
MFloat **  fourth 
)
Author
Frederik Temme
Date
12.01.2015

Definition at line 6528 of file fvstructuredsolver.cpp.

6529 {
6530 (void)noVars;
6531
6532 // Function to write the solution to file with iolibrary
6533 stringstream fileName;
6534
6535 m_log << "writing Averaged Restart Variables to file " << name << m_outputFormat << " ... " << endl;
6536 fileName << name << m_outputFormat;
6537
6539
6540 writeHeaderAttributes(&pio, "solution");
6542
6543 pio.setAttribute(m_averageStartTimestep, "averageStartTimeStep", "");
6544 pio.setAttribute(m_averageInterval, "averageSampleInterval", "");
6545 pio.setAttribute(m_noSamples, "noSamples", "");
6546
6547 ParallelIo::size_type allCells[3]; // not nDim because of compiler warning0
6548 for(MInt i = 0; i < m_noBlocks; i++) {
6549 for(MInt j = 0; j < nDim; j++) {
6550 allCells[j] = m_grid->getBlockNoCells(i, j);
6551 }
6552 // create datasets for the io library
6553 stringstream path;
6554 path << i; // m_blockId;
6555 MString blockPathStr = "block";
6556 blockPathStr += path.str();
6557
6558 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "u", 3, allCells);
6559 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "v", 3, allCells);
6560 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "w", 3, allCells);
6561 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "rho", 3, allCells);
6562 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "p", 3, allCells);
6563
6564 if(m_averagingFavre) {
6565 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "um_favre", 3, allCells);
6566 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "vm_favre", 3, allCells);
6567 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "wm_favre", 3, allCells);
6568 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "rhom_favre", 3, allCells);
6569 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "pm_favre", 3, allCells);
6570 }
6571
6572 if(m_averageVorticity) {
6573 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "vortx", 3, allCells);
6574 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "vorty", 3, allCells);
6575 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "vortz", 3, allCells);
6576 }
6577
6578 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "uu", 3, allCells);
6579 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "vv", 3, allCells);
6580 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "ww", 3, allCells);
6581 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "uv", 3, allCells);
6582 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "vw", 3, allCells);
6583 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "uw", 3, allCells);
6584 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "pp", 3, allCells);
6585
6586 if(m_averageVorticity) {
6587 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "vortxvortx", 3, allCells);
6588 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "vortyvorty", 3, allCells);
6589 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "vortzvortz", 3, allCells);
6590 }
6591
6592 if(m_kurtosis || m_skewness) {
6593 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "uuu", 3, allCells);
6594 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "vvv", 3, allCells);
6595 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "www", 3, allCells);
6596 }
6597
6598 if(m_kurtosis) {
6599 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "uuuu", 3, allCells);
6600 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "vvvv", 3, allCells);
6601 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "wwww", 3, allCells);
6602 }
6603 }
6604
6608 ParallelIo::size_type ioOffset[3] = {0, 0, 0};
6609 ParallelIo::size_type ioSize[3] = {0, 0, 0};
6610 ParallelIo::size_type ioGhost[3] = {m_noGhostLayers, m_noGhostLayers, m_noGhostLayers};
6611 for(MInt dim = 0; dim < nDim; ++dim) {
6612 ioOffset[dim] = m_nOffsetCells[dim];
6613 ioSize[dim] = m_nActiveCells[dim];
6614 }
6615
6616 stringstream path;
6617 path << m_blockId;
6618 MString blockPathStr = "block";
6619 blockPathStr += path.str();
6620 MInt offset = 0;
6621 pio.writeArray(&summedVars[0][0], blockPathStr, "u", nDim, ioOffset, ioSize, ioGhost);
6622 pio.writeArray(&summedVars[1][0], blockPathStr, "v", nDim, ioOffset, ioSize, ioGhost);
6623 pio.writeArray(&summedVars[2][0], blockPathStr, "w", nDim, ioOffset, ioSize, ioGhost);
6624 pio.writeArray(&summedVars[3][0], blockPathStr, "rho", nDim, ioOffset, ioSize, ioGhost);
6625 pio.writeArray(&summedVars[4][0], blockPathStr, "p", nDim, ioOffset, ioSize, ioGhost);
6626 offset = noVariables();
6627
6628 if(m_averagingFavre) {
6629 pio.writeArray(&m_favre[0][0], blockPathStr, "um_favre", nDim, ioOffset, ioSize, ioGhost);
6630 pio.writeArray(&m_favre[1][0], blockPathStr, "vm_favre", nDim, ioOffset, ioSize, ioGhost);
6631 pio.writeArray(&m_favre[2][0], blockPathStr, "wm_favre", nDim, ioOffset, ioSize, ioGhost);
6632 pio.writeArray(&m_favre[3][0], blockPathStr, "rhom_favre", nDim, ioOffset, ioSize, ioGhost);
6633 pio.writeArray(&m_favre[4][0], blockPathStr, "pm_favre", nDim, ioOffset, ioSize, ioGhost);
6634 }
6635
6636 if(m_averageVorticity) {
6637 pio.writeArray(&summedVars[offset + 0][0], blockPathStr, "vortx", nDim, ioOffset, ioSize, ioGhost);
6638 pio.writeArray(&summedVars[offset + 1][0], blockPathStr, "vorty", nDim, ioOffset, ioSize, ioGhost);
6639 pio.writeArray(&summedVars[offset + 2][0], blockPathStr, "vortz", nDim, ioOffset, ioSize, ioGhost);
6640 }
6641
6642 pio.writeArray(&square[0][0], blockPathStr, "uu", nDim, ioOffset, ioSize, ioGhost);
6643 pio.writeArray(&square[1][0], blockPathStr, "vv", nDim, ioOffset, ioSize, ioGhost);
6644 pio.writeArray(&square[2][0], blockPathStr, "ww", nDim, ioOffset, ioSize, ioGhost);
6645 pio.writeArray(&square[3][0], blockPathStr, "uv", nDim, ioOffset, ioSize, ioGhost);
6646 pio.writeArray(&square[4][0], blockPathStr, "vw", nDim, ioOffset, ioSize, ioGhost);
6647 pio.writeArray(&square[5][0], blockPathStr, "uw", nDim, ioOffset, ioSize, ioGhost);
6648 pio.writeArray(&square[6][0], blockPathStr, "pp", nDim, ioOffset, ioSize, ioGhost);
6649
6650 if(m_averageVorticity) {
6651 pio.writeArray(&square[7][0], blockPathStr, "vortxvortx", nDim, ioOffset, ioSize, ioGhost);
6652 pio.writeArray(&square[8][0], blockPathStr, "vortyvorty", nDim, ioOffset, ioSize, ioGhost);
6653 pio.writeArray(&square[9][0], blockPathStr, "vortzvortz", nDim, ioOffset, ioSize, ioGhost);
6654 }
6655
6656 if(m_kurtosis || m_skewness) {
6657 pio.writeArray(&cube[0][0], blockPathStr, "uuu", nDim, ioOffset, ioSize, ioGhost);
6658 pio.writeArray(&cube[1][0], blockPathStr, "vvv", nDim, ioOffset, ioSize, ioGhost);
6659 pio.writeArray(&cube[2][0], blockPathStr, "www", nDim, ioOffset, ioSize, ioGhost);
6660 }
6661
6662 if(m_kurtosis) {
6663 pio.writeArray(&fourth[0][0], blockPathStr, "uuuu", nDim, ioOffset, ioSize, ioGhost);
6664 pio.writeArray(&fourth[1][0], blockPathStr, "vvvv", nDim, ioOffset, ioSize, ioGhost);
6665 pio.writeArray(&fourth[2][0], blockPathStr, "wwww", nDim, ioOffset, ioSize, ioGhost);
6666 }
6667}
MInt noVariables() const override
Return the number of variables.

◆ saveBoxes()

template<MInt nDim>
void FvStructuredSolver< nDim >::saveBoxes ( )

◆ saveDissipation()

template<MInt nDim>
void FvStructuredSolver< nDim >::saveDissipation ( MString  name,
MFloat dissipation 
)
Author
Marian Albers

Definition at line 6733 of file fvstructuredsolver.cpp.

6733 {
6734 // Function to write the solution to file with iolibrary
6735
6736 m_log << "writing dissipation terms to file " << name << " ... " << endl;
6737
6739
6740 writeHeaderAttributes(&pio, "solution");
6742
6743 ParallelIo::size_type allCells[3];
6744 for(MInt i = 0; i < m_noBlocks; i++) {
6745 for(MInt j = 0; j < nDim; j++) {
6746 allCells[j] = m_grid->getBlockNoCells(i, j);
6747 }
6748 // create datasets for the io library
6749 stringstream path;
6750 path << i;
6751 MString blockPathStr = "block";
6752 blockPathStr += path.str();
6753
6754 // create dataset and write
6755 if(!pio.hasDataset("diss", blockPathStr)) {
6756 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "diss", nDim, allCells);
6757 } else {
6758 cout << "Dataset diss exists, not creating new" << endl;
6759 }
6760 }
6761
6762 stringstream path;
6763 path << m_blockId;
6764 MString blockPathStr = "block";
6765 blockPathStr += path.str();
6766
6767 ParallelIo::size_type ioOffset[3] = {0, 0, 0};
6768 ParallelIo::size_type ioSize[3] = {0, 0, 0};
6769 ParallelIo::size_type ioGhost[3] = {m_noGhostLayers, m_noGhostLayers, m_noGhostLayers};
6770 for(MInt dim = 0; dim < nDim; ++dim) {
6771 ioOffset[dim] = m_nOffsetCells[dim];
6772 ioSize[dim] = m_nActiveCells[dim];
6773 }
6774
6775 pio.writeArray(&dissipation[0], blockPathStr, "diss", nDim, ioOffset, ioSize, ioGhost);
6776}
const MInt PIO_APPEND
Definition: parallelio.h:38

◆ saveForceCoefficient()

template<MInt nDim>
void FvStructuredSolver< nDim >::saveForceCoefficient ( ParallelIoHdf5 pio)
Authors
Marian Albers, Pascal Meysonnat
Parameters
[in]OpenParallelIOHdf5 object to which attributes should be written

Definition at line 6273 of file fvstructuredsolver.cpp.

6273 {
6274 TRACE();
6275
6276 MInt noWalls = m_windowInfo->m_auxDataWindowIds.size();
6277 MFloatScratchSpace force(noWalls, nDim, AT_, "force");
6278 MFloatScratchSpace forceP(noWalls, nDim, AT_, "forceP");
6279 MFloatScratchSpace forceC(noWalls, nDim, AT_, "forceC");
6280 MFloatScratchSpace forceV(noWalls, nDim, AT_, "forceV");
6281 MFloatScratchSpace area(noWalls, nDim, AT_, "area");
6282 MFloatScratchSpace power(noWalls, nDim, AT_, "Ptot");
6283 MFloatScratchSpace powerV(noWalls, nDim, AT_, "Pvisc");
6284 MFloatScratchSpace powerP(noWalls, nDim, AT_, "Ppres");
6285
6286 for(MInt i = 0; i < noWalls; ++i) {
6287 for(MInt dim = 0; dim < nDim; dim++) {
6288 forceV(i, dim) = m_forceCoef[i * m_noForceDataFields + dim];
6289 forceC(i, dim) = m_forceCoef[i * m_noForceDataFields + nDim + dim];
6290 forceP(i, dim) = m_forceCoef[i * m_noForceDataFields + 2 * nDim + dim];
6291 force(i, dim) = forceV(i, dim) + forceC(i, dim) + forceP(i, dim);
6292 powerV(i, dim) = m_forceCoef[i * m_noForceDataFields + 3 * nDim + 1 + dim];
6293 powerP(i, dim) = m_forceCoef[i * m_noForceDataFields + 4 * nDim + 1 + dim];
6294 power(i, dim) = powerV(i, dim) + powerP(i, dim);
6295 }
6296 area[i] = m_forceCoef[i * m_noForceDataFields + 3 * nDim];
6297 }
6298
6299 MInt count = 0;
6300 for(auto it = m_windowInfo->m_auxDataWindowIds.cbegin(); it != m_windowInfo->m_auxDataWindowIds.cend(); ++it) {
6301 stringstream datasetname;
6302 datasetname << it->second; //==m_windowInfo->globalStructuredBndryCndMaps[it->first]->Id2;
6303 MString pathName = "window" + datasetname.str();
6304
6305 pio->setAttribute(force(count, 0), "forceX", pathName);
6306 pio->setAttribute(forceV(count, 0), "forceVX", pathName);
6307 pio->setAttribute(forceP(count, 0), "forcePX", pathName);
6308 pio->setAttribute(forceC(count, 0), "forceCX", pathName);
6309
6310 pio->setAttribute(force(count, 1), "forceY", pathName);
6311 pio->setAttribute(forceV(count, 1), "forceVY", pathName);
6312 pio->setAttribute(forceP(count, 1), "forcePY", pathName);
6313 pio->setAttribute(forceC(count, 1), "forceCY", pathName);
6314
6315 IF_CONSTEXPR(nDim == 3) {
6316 pio->setAttribute(force(count, 2), "forceZ", pathName);
6317 pio->setAttribute(forceV(count, 2), "forceVZ", pathName);
6318 pio->setAttribute(forceP(count, 2), "forcePZ", pathName);
6319 pio->setAttribute(forceC(count, 2), "forceCZ", pathName);
6320 }
6321
6322 pio->setAttribute(area[count], "area", pathName);
6323
6324 if(m_bPower) {
6325 pio->setAttribute(power(count, 0), "powerX", pathName);
6326 pio->setAttribute(power(count, 1), "powerY", pathName);
6327 pio->setAttribute(power(count, 2), "powerZ", pathName);
6328
6329 pio->setAttribute(powerP(count, 0), "powerPX", pathName);
6330 pio->setAttribute(powerP(count, 1), "powerPY", pathName);
6331 pio->setAttribute(powerP(count, 2), "powerPZ", pathName);
6332
6333 pio->setAttribute(powerV(count, 0), "powerVX", pathName);
6334 pio->setAttribute(powerV(count, 1), "powerVY", pathName);
6335 pio->setAttribute(powerV(count, 2), "powerVZ", pathName);
6336 }
6337
6338 count++;
6339 }
6340}
void setAttribute(const T &value, const MString &name, const MString &datasetName="")
Set a file or dataset attribute. [MPI]
Definition: parallelio.h:1438

◆ saveForcesToAsciiFile()

template<MInt nDim>
void FvStructuredSolver< nDim >::saveForcesToAsciiFile ( MBool  forceWrite)
Author
Marian Albers

Definition at line 6350 of file fvstructuredsolver.cpp.

6350 {
6351 TRACE();
6352 // compute the data
6353 if(m_bForce) {
6355
6356 // write all the data to files if domainId()==0
6357 if(domainId() == 0) {
6358 MInt noWalls = m_windowInfo->m_auxDataWindowIds.size();
6359
6360 MFloatScratchSpace cForce(noWalls, nDim, AT_, "cForce");
6361 MFloatScratchSpace cForceP(noWalls, nDim, AT_, "cForceP");
6362 MFloatScratchSpace cForceC(noWalls, nDim, AT_, "cForceC");
6363 MFloatScratchSpace cForceV(noWalls, nDim, AT_, "cForceV");
6364 MFloatScratchSpace area(noWalls, AT_, "area");
6365 // power consumption
6366 MFloatScratchSpace cPower(noWalls, nDim, AT_, "cPower");
6367 MFloatScratchSpace cPowerV(noWalls, nDim, AT_, "cPower");
6368 MFloatScratchSpace cPowerP(noWalls, nDim, AT_, "cPower");
6369
6370 for(MInt i = 0; i < noWalls; ++i) {
6371 for(MInt dim = 0; dim < nDim; dim++) {
6372 cForceV(i, dim) = m_forceCoef[i * m_noForceDataFields + dim];
6373 cForceC(i, dim) = m_forceCoef[i * m_noForceDataFields + nDim + dim];
6374 cForceP(i, dim) = m_forceCoef[i * m_noForceDataFields + 2 * nDim + dim];
6375 cForce(i, dim) = cForceV(i, dim) + cForceP(i, dim) + cForceC(i, dim);
6376 cPowerV(i, dim) = m_forceCoef[i * m_noForceDataFields + 3 * nDim + 1 + dim];
6377 cPowerP(i, dim) = m_forceCoef[i * m_noForceDataFields + 4 * nDim + 1 + dim];
6378 cPower(i, dim) = cPowerV(i, dim) + cPowerP(i, dim);
6379 }
6380 area[i] = m_forceCoef[i * m_noForceDataFields + 3 * nDim];
6381 }
6382
6384 for(MInt i = 0; i < noWalls; ++i) {
6385 MInt cnt = 0;
6389 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cForce(i, 0);
6390 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cForceV(i, 0);
6391 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cForceP(i, 0);
6392 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cForceC(i, 0);
6393 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cForce(i, 1);
6394 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cForceV(i, 1);
6395 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cForceP(i, 1);
6396 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cForceC(i, 1);
6397 IF_CONSTEXPR(nDim == 3) {
6398 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cForce(i, 2);
6399 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cForceV(i, 2);
6400 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cForceP(i, 2);
6401 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cForceC(i, 2);
6402 }
6403 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = area[i];
6404
6405 if(m_bPower) {
6406 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cPower(i, 0);
6407 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cPowerV(i, 0);
6408 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cPowerP(i, 0);
6409 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cPower(i, 1);
6410 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cPowerV(i, 1);
6411 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cPowerP(i, 1);
6412 IF_CONSTEXPR(nDim == 3) {
6413 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cPower(i, 2);
6414 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cPowerV(i, 2);
6415 m_forceData[m_forceCounter][i * m_noForceDataFields + cnt++] = cPowerP(i, 2);
6416 }
6417 }
6418 }
6421 }
6422
6424 cout << "globalTimeStep: " << globalTimeStep << " writing out to ascii file" << endl;
6425 // TODO_SS labels:FV why not looping over the elements of m_windowInfo->m_auxDataWindowIds and choosing windowId
6426 // for iWall
6427 for(MInt i = 0; i < noWalls; ++i) {
6428 stringstream iWall;
6429 iWall << i;
6430 MString filename = "./forces." + iWall.str() + ".dat";
6431
6432 FILE* f_forces;
6433 f_forces = fopen(filename.c_str(), "a+");
6434
6435 for(MInt j = 0; j < m_forceCounter; j++) {
6436 fprintf(f_forces, "%d ", (MInt)m_forceData[j][i * m_noForceDataFields + 0]);
6437 for(MInt k = 1; k < m_noForceDataFields; k++) {
6438 fprintf(f_forces, " %.8f ", m_forceData[j][i * m_noForceDataFields + k]);
6439 }
6440 fprintf(f_forces, "\n");
6441 }
6442 fclose(f_forces);
6443 }
6444
6445 m_forceCounter = 0;
6447 }
6448 }
6449 }
6450}

◆ saveGradients()

template<MInt nDim>
void FvStructuredSolver< nDim >::saveGradients ( MString  name,
MFloat **  gradients,
MString gradientNames 
)
Author
Marian Albers

Definition at line 6784 of file fvstructuredsolver.cpp.

6784 {
6785 // Function to write the solution to file with iolibrary
6786
6787 m_log << "writing gradients to file " << name << " ... " << endl;
6788
6790
6791 writeHeaderAttributes(&pio, "solution");
6793
6794 ParallelIo::size_type allCells[3];
6795 MInt noVars = 3 * 9;
6796 for(MInt i = 0; i < m_noBlocks; i++) {
6797 for(MInt j = 0; j < nDim; j++) {
6798 allCells[j] = m_grid->getBlockNoCells(i, j);
6799 }
6800 // create datasets for the io library
6801 stringstream path;
6802 path << i;
6803 MString blockPathStr = "block";
6804 blockPathStr += path.str();
6805
6806 // create dataset and write
6807 for(MInt var = 0; var < noVars; var++) {
6808 if(!pio.hasDataset(gradientNames[var], blockPathStr)) {
6809 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, gradientNames[var], nDim, allCells);
6810 } else {
6811 cout << "Dataset " << gradientNames[var] << " exists, not creating new" << endl;
6812 }
6813 }
6814 }
6815
6816
6817 stringstream path;
6818 path << m_blockId;
6819 MString blockPathStr = "block";
6820 blockPathStr += path.str();
6821
6822 ParallelIo::size_type ioOffset[3] = {0, 0, 0};
6823 ParallelIo::size_type ioSize[3] = {0, 0, 0};
6824 ParallelIo::size_type ioGhost[3] = {m_noGhostLayers, m_noGhostLayers, m_noGhostLayers};
6825 for(MInt dim = 0; dim < nDim; ++dim) {
6826 ioOffset[dim] = m_nOffsetCells[dim];
6827 ioSize[dim] = m_nActiveCells[dim];
6828 }
6829
6830 for(MInt var = 0; var < noVars; var++) {
6831 pio.writeArray(&gradients[var][0], blockPathStr, gradientNames[var].c_str(), nDim, ioOffset, ioSize, ioGhost);
6832 }
6833}

◆ saveInterpolatedPoints()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::saveInterpolatedPoints ( )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 89 of file fvstructuredsolver.h.

89{};

◆ saveNodalBoxes()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::saveNodalBoxes ( )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 90 of file fvstructuredsolver.h.

90{};

◆ savePartitions()

template<MInt nDim>
void FvStructuredSolver< nDim >::savePartitions
Author
: Pascal Meysonnat

Definition at line 5521 of file fvstructuredsolver.cpp.

5521 {
5522 // Function to write the solution to file with iolibrary
5523 stringstream fileName;
5524 ParallelIo::size_type noCells[3] = {0, 0, 0};
5525
5526 fileName << m_solutionOutput << "partitioned" << globalTimeStep << m_outputFormat;
5528 writeHeaderAttributes(&pio, "solution");
5530
5531 // save with ghostcells ==> multiple solvers;
5532 for(MInt i = 0; i < noDomains(); i++) {
5533 // create datasets for the io library
5534 for(MInt j = 0; j < nDim; j++) {
5535 noCells[j] = m_grid->getActivePoints(i, j) - 1 + 2 * m_noGhostLayers;
5536 }
5537 stringstream path;
5538 path << i;
5539 MString partitionPathStr = "block";
5540 partitionPathStr += path.str();
5541 const char* partitionPath = partitionPathStr.c_str();
5542 // create dataset for primitive/conservative variables
5543 for(MInt v = 0; v < m_maxNoVariables; v++) {
5544 pio.defineArray(maia::parallel_io::PIO_FLOAT, partitionPath, m_pvariableNames[v], nDim, noCells);
5545 }
5546 // create dataset for fq field variables
5547 for(MInt v = 0; v < FQ->noFQVariables; v++) {
5548 pio.defineArray(maia::parallel_io::PIO_FLOAT, partitionPath, FQ->fqNames[v], nDim, noCells);
5549 }
5550
5551 if(m_stgIsActive) {
5552 ParallelIo::size_type allCells7909[3];
5553 allCells7909[0] = m_grid->getActivePoints(i, 0) - 1 + 2 * m_noGhostLayers;
5554 allCells7909[1] = m_grid->getActivePoints(i, 1) - 1 + 2 * m_noGhostLayers;
5555 allCells7909[2] = 3;
5556
5557 for(MInt var = 0; var < m_stgNoVariables; var++) {
5558 stringstream fieldName;
5559 stringstream stgPath;
5560 stgPath << partitionPathStr << "/stg";
5561 fieldName << "stgFQ" << var;
5562 pio.defineArray(maia::parallel_io::PIO_FLOAT, stgPath.str(), fieldName.str(), nDim, allCells7909);
5563 }
5564 }
5565 }
5566
5567 // write the values into the array so that we can visualize it
5568 ParallelIo::size_type ioOffset[3] = {0, 0, 0};
5569 ParallelIo::size_type ioSize[3] = {m_nCells[0], m_nCells[1], m_nCells[2]};
5570 stringstream path;
5571 path << domainId();
5572 MString partitionPathStr = "block";
5573 partitionPathStr += path.str();
5574
5575 // write primitive variables
5576 for(MInt v = 0; v < m_maxNoVariables; ++v) {
5577 pio.writeArray(&m_cells->pvariables[v][0], partitionPathStr, m_pvariableNames[v], nDim, ioOffset, ioSize);
5578 }
5579
5580 for(MInt v = 0; v < FQ->noFQVariables; v++) {
5581 pio.writeArray(&m_cells->fq[v][0], partitionPathStr, FQ->fqNames[v], nDim, ioOffset, ioSize);
5582 }
5583
5587 if(m_stgIsActive) {
5588 ParallelIo::size_type bcOffset[3] = {0, 0, 0};
5589 ParallelIo::size_type bcCells[3] = {m_nCells[0], m_nCells[1], 3};
5590
5591 for(MInt var = 0; var < m_stgNoVariables; var++) {
5592 stringstream fieldName;
5593 stringstream stgPath;
5594 stgPath << partitionPathStr << "/stg";
5595 fieldName << "stgFQ" << var;
5596 pio.writeArray(&m_cells->stg_fq[var][0], stgPath.str(), fieldName.str(), nDim, bcOffset, bcCells);
5597 }
5598 }
5599}
MString m_solutionOutput
Definition: solver.h:82

◆ savePointsToAsciiFile()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::savePointsToAsciiFile ( MBool  )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 87 of file fvstructuredsolver.h.

87{};

◆ saveProductionTerms()

template<MInt nDim>
void FvStructuredSolver< nDim >::saveProductionTerms ( MString  name,
MFloat **  production 
)
Author
Marian Albers

Definition at line 6675 of file fvstructuredsolver.cpp.

6675 {
6676 // Function to write the solution to file with iolibrary
6677
6678 m_log << "writing production terms to file " << name << " ... " << endl;
6679
6681
6682 writeHeaderAttributes(&pio, "solution");
6684
6685 ParallelIo::size_type allCells[3];
6686 for(MInt i = 0; i < m_noBlocks; i++) {
6687 for(MInt j = 0; j < nDim; j++) {
6688 allCells[j] = m_grid->getBlockNoCells(i, j);
6689 }
6690 // create datasets for the io library
6691 stringstream path;
6692 path << i;
6693 MString blockPathStr = "block";
6694 blockPathStr += path.str();
6695
6696 // create dataset and write
6697 if(!pio.hasDataset("p1j", blockPathStr)) {
6698 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "p1j", nDim, allCells);
6699 } else {
6700 cout << "Dataset p1j exists, not creating new" << endl;
6701 }
6702 if(!pio.hasDataset("p2j", blockPathStr)) {
6703 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "p2j", nDim, allCells);
6704 }
6705 if(!pio.hasDataset("p3j", blockPathStr)) {
6706 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, "p3j", nDim, allCells);
6707 }
6708 }
6709
6710 stringstream path;
6711 path << m_blockId;
6712 MString blockPathStr = "block";
6713 blockPathStr += path.str();
6714
6715 ParallelIo::size_type ioOffset[3] = {0, 0, 0};
6716 ParallelIo::size_type ioSize[3] = {0, 0, 0};
6717 ParallelIo::size_type ioGhost[3] = {m_noGhostLayers, m_noGhostLayers, m_noGhostLayers};
6718 for(MInt dim = 0; dim < nDim; ++dim) {
6719 ioOffset[dim] = m_nOffsetCells[dim];
6720 ioSize[dim] = m_nActiveCells[dim];
6721 }
6722
6723 pio.writeArray(&production[0][0], blockPathStr, "p1j", nDim, ioOffset, ioSize, ioGhost);
6724 pio.writeArray(&production[1][0], blockPathStr, "p2j", nDim, ioOffset, ioSize, ioGhost);
6725 pio.writeArray(&production[2][0], blockPathStr, "p3j", nDim, ioOffset, ioSize, ioGhost);
6726}

◆ saveSolution()

template<MInt nDim>
void FvStructuredSolver< nDim >::saveSolution ( MBool  forceOutput)
Author
Pascal S. Meysonnat
Date
17.08.2018

Definition at line 5211 of file fvstructuredsolver.cpp.

5211 {
5212 stringstream fileName;
5214
5215 if(m_movingGrid) {
5218 }
5219 }
5220
5221 m_log << "writing Solution file " << fileName.str() << " ... forceOutput: " << forceOutput << endl;
5222
5223 // Check if file exists
5224 MInt fileMode = -1;
5225 // if (FILE *file = fopen((fileName.str()).c_str(), "r")) { // file does exist
5226 // fclose(file);
5227 // fileMode = maia::parallel_io::PIO_APPEND;
5228 // } else { // file does not exist
5230 //}
5231
5232 ParallelIoHdf5 pio(fileName.str(), fileMode, m_StructuredComm);
5233
5234 writeHeaderAttributes(&pio, "solution");
5236
5237 ParallelIo::size_type allCells[3] = {0, 0, 0};
5238 ParallelIo::size_type stgNoEddieFields = 1200;
5239 MString stgGlobalPathStr = "stgGlobal";
5240
5241 for(MInt i = 0; i < m_noBlocks; i++) {
5242 for(MInt j = 0; j < nDim; j++) {
5243 allCells[j] = m_grid->getBlockNoCells(i, j);
5244 }
5245 // create datasets for the io library
5246 stringstream path;
5247 path << i;
5248 MString blockPathStr = "block";
5249 blockPathStr += path.str();
5250 const char* blockPath = blockPathStr.c_str();
5251
5255 m_log << "writing primitive Output" << endl;
5256 for(MInt v = 0; v < m_maxNoVariables; v++) {
5257 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, m_pvariableNames[v], nDim, allCells);
5258 }
5259
5263 if(FQ->noFQVariables > 0) {
5264 for(MInt v = 0; v < FQ->noFQVariables; ++v) {
5265 if(FQ->fqWriteOutput[v]) {
5266 pio.defineArray(maia::parallel_io::PIO_FLOAT, blockPathStr, FQ->fqNames[v], nDim, allCells);
5267 }
5268 }
5269 }
5270
5274 if(m_bc2600IsActive) {
5275 ParallelIo::size_type allCells2600[3] = {allCells[0], allCells[1], allCells[2]};
5276 allCells2600[nDim - 1] = m_noGhostLayers;
5277 stringstream path2600Str;
5278 path2600Str << blockPath << "/bc2600";
5279 std::string path2600 = path2600Str.str();
5280
5281 for(MInt var = 0; var < m_maxNoVariables; var++) {
5282 pio.defineArray(maia::parallel_io::PIO_FLOAT, path2600, m_pvariableNames[var], nDim, allCells2600);
5283 }
5284 }
5285
5286 // ////////////////////////////////////////////////
5287 // ///////// Create BC2601 Information ////////////
5288 // ////////////////////////////////////////////////
5289 if(m_bc2601IsActive) {
5290 ParallelIo::size_type allCells2601[3] = {allCells[0], allCells[1], allCells[2]};
5291 allCells2601[nDim - 2] = m_noGhostLayers;
5292 stringstream path2601Str;
5293 path2601Str << blockPath << "/bc2601";
5294 std::string path2601 = path2601Str.str();
5295
5296 for(MInt var = 0; var < m_maxNoVariables; var++) {
5297 pio.defineArray(maia::parallel_io::PIO_FLOAT, path2601, m_pvariableNames[var], nDim, allCells2601);
5298 }
5299 }
5300
5304 if(m_stgIsActive) {
5305 ParallelIo::size_type allCells7909[3];
5306 allCells7909[0] = allCells[0];
5307 allCells7909[1] = allCells[1];
5308 allCells7909[2] = 3;
5309 for(MInt var = 0; var < m_stgNoVariables; var++) {
5310 stringstream stgPath;
5311 stgPath << blockPathStr << "/stg";
5312 stringstream fieldName;
5313 fieldName << "stgFQ" << var;
5314 pio.defineArray(maia::parallel_io::PIO_FLOAT, stgPath.str(), fieldName.str(), nDim, allCells7909);
5315 }
5316 }
5317 }
5318
5322 if(m_useSandpaperTrip) {
5323 stringstream tripPath;
5324 tripPath << "/trip";
5325 ParallelIo::size_type dataSize = m_tripNoTrips * 2 * m_tripNoModes;
5326
5327 pio.defineArray(maia::parallel_io::PIO_FLOAT, tripPath.str(), "tripModesG", 1, &dataSize);
5328 pio.defineArray(maia::parallel_io::PIO_FLOAT, tripPath.str(), "tripModesH1", 1, &dataSize);
5329 pio.defineArray(maia::parallel_io::PIO_FLOAT, tripPath.str(), "tripModesH2", 1, &dataSize);
5330 }
5331
5332 if(m_stgIsActive) {
5333 stgNoEddieFields = MInt(m_stgNoEddieProperties * m_stgMaxNoEddies);
5334 pio.defineArray(maia::parallel_io::PIO_FLOAT, stgGlobalPathStr, "FQeddies", 1, &stgNoEddieFields);
5335 }
5336
5340 stringstream path;
5341 path << m_blockId;
5342 MString blockPathStr = "block";
5343 blockPathStr += path.str();
5344 // write out the data
5345 ParallelIo::size_type ioOffset[3] = {0, 0, 0};
5346 ParallelIo::size_type ioSize[3] = {0, 0, 0};
5347 ParallelIo::size_type ioGhost[3] = {m_noGhostLayers, m_noGhostLayers, m_noGhostLayers};
5348 for(MInt dim = 0; dim < nDim; ++dim) {
5349 ioOffset[dim] = m_nOffsetCells[dim];
5350 ioSize[dim] = m_nActiveCells[dim];
5351 }
5352
5353 for(MInt v = 0; v < m_maxNoVariables; ++v) {
5354 pio.writeArray(&(m_cells->pvariables[v][0]), blockPathStr, m_pvariableNames[v], nDim, ioOffset, ioSize, ioGhost);
5355 }
5356
5360 if(FQ->noFQVariables > 0) {
5361 for(MInt v = 0; v < FQ->noFQVariables; ++v) {
5362 if(FQ->fqWriteOutput[v]) {
5363 pio.writeArray(&m_cells->fq[v][0], blockPathStr, FQ->fqNames[v], nDim, ioOffset, ioSize, ioGhost);
5364 }
5365 }
5366 }
5367
5368
5372 if(m_bc2600IsActive) {
5373 stringstream path2600Str;
5374 path2600Str << blockPathStr << "/bc2600";
5375 std::string path2600 = path2600Str.str();
5376
5377 ParallelIo::size_type ioSize2600[3] = {0, 0, 0};
5378 ParallelIo::size_type ioOffset2600[3] = {0, 0, 0};
5379 ParallelIo::size_type ioGhost2600[3] = {m_noGhostLayers, m_noGhostLayers, m_noGhostLayers};
5380 for(MInt dim = 0; dim < nDim; ++dim) {
5381 ioSize2600[dim] = m_bc2600noActiveCells[dim];
5382 ioOffset2600[dim] = m_bc2600noOffsetCells[dim];
5383 }
5384
5385 ioGhost2600[nDim - 1] = 0;
5386 if(m_bc2600) {
5387 for(MInt var = 0; var < m_maxNoVariables; var++) {
5388 pio.writeArray(&m_bc2600Variables[var][0], path2600, m_pvariableNames[var], nDim, ioOffset2600, ioSize2600,
5389 ioGhost2600);
5390 }
5391 } else {
5392 MFloat empty = 0;
5393 for(MInt var = 0; var < m_maxNoVariables; var++) {
5394 pio.writeArray(&empty, path2600, m_pvariableNames[var], nDim, ioOffset2600, ioSize2600, ioGhost2600);
5395 }
5396 }
5397 }
5398
5402 if(m_bc2601IsActive) {
5403 stringstream path2601Str;
5404 path2601Str << blockPathStr << "/bc2601";
5405 std::string path2601 = path2601Str.str();
5406
5407 ParallelIo::size_type ioSize2601[3] = {0, 0, 0};
5408 ParallelIo::size_type ioOffset2601[3] = {0, 0, 0};
5409 ParallelIo::size_type ioGhost2601[3] = {m_noGhostLayers, m_noGhostLayers, m_noGhostLayers};
5410 for(MInt dim = 0; dim < nDim; ++dim) {
5411 ioSize2601[dim] = m_bc2601noActiveCells[dim];
5412 ioOffset2601[dim] = m_bc2601noOffsetCells[dim];
5413 }
5414
5415 ioGhost2601[nDim - 2] = 0;
5416 if(m_bc2601) {
5417 for(MInt var = 0; var < m_maxNoVariables; var++) {
5418 pio.writeArray(&m_bc2601Variables[var][0], path2601, m_pvariableNames[var], nDim, ioOffset2601, ioSize2601,
5419 ioGhost2601);
5420 }
5421 } else {
5422 MFloat empty = 0;
5423 for(MInt var = 0; var < m_maxNoVariables; var++) {
5424 pio.writeArray(&empty, path2601, m_pvariableNames[var], nDim, ioOffset2601, ioSize2601, ioGhost2601);
5425 }
5426 }
5427 }
5428
5432 if(m_stgIsActive) {
5433 ParallelIo::size_type VBOffset = 0;
5434 if(m_stgRootRank) {
5435 pio.writeArray(&m_stgEddies[0][0], stgGlobalPathStr, "FQeddies", 1, &VBOffset, &stgNoEddieFields);
5436 } else {
5437 stgNoEddieFields = 0;
5438 MFloat empty = 0;
5439 pio.writeArray(&empty, stgGlobalPathStr, "FQeddies", 1, &VBOffset, &stgNoEddieFields);
5440 }
5441
5442 // if this domain has part of the STG bc write value, otherwise only write nullptr
5443 if(m_stgLocal) {
5444 MInt noActiveStgCells = (m_stgBoxSize[0] - 2 * m_noGhostLayers) * (m_stgBoxSize[1] - 2 * m_noGhostLayers) * 3;
5445 MFloatScratchSpace stgFqDummy(m_stgNoVariables, noActiveStgCells, AT_, "stgFqDummy");
5446
5447 for(MInt var = 0; var < m_stgNoVariables; var++) {
5448 for(MInt k = m_noGhostLayers; k < m_stgBoxSize[0] - m_noGhostLayers; k++) {
5449 for(MInt j = m_noGhostLayers; j < m_stgBoxSize[1] - m_noGhostLayers; j++) {
5450 for(MInt i = 0; i < m_stgBoxSize[2]; i++) {
5451 MInt cellIdBC = i + (j + k * m_stgBoxSize[1]) * 3;
5452 MInt cellIdDummy =
5453 i + ((j - m_noGhostLayers) + (k - m_noGhostLayers) * (m_stgBoxSize[1] - 2 * m_noGhostLayers)) * 3;
5454 stgFqDummy(var, cellIdDummy) = m_cells->stg_fq[var][cellIdBC];
5455 }
5456 }
5457 }
5458 }
5459
5460 ParallelIo::size_type bcOffset[3] = {m_nOffsetCells[0], m_nOffsetCells[1], 0};
5461 ParallelIo::size_type bcCells[3] = {m_stgBoxSize[0] - 2 * m_noGhostLayers, m_stgBoxSize[1] - 2 * m_noGhostLayers,
5462 m_stgBoxSize[2]};
5463
5464 for(MInt var = 0; var < m_stgNoVariables; var++) {
5465 stringstream fieldName;
5466 stringstream stgPath;
5467 stgPath << blockPathStr << "/stg";
5468 fieldName << "stgFQ" << var;
5469 pio.writeArray(&stgFqDummy(var, 0), stgPath.str(), fieldName.str(), nDim, bcOffset, bcCells);
5470 }
5471 } else {
5472 ParallelIo::size_type bcOffset[3] = {0, 0, 0};
5473 ParallelIo::size_type bcCells[3] = {0, 0, 0};
5474 MFloat empty = 0;
5475
5476 for(MInt var = 0; var < m_stgNoVariables; var++) {
5477 stringstream fieldName;
5478 stringstream stgPath;
5479 stgPath << blockPathStr << "/stg";
5480 fieldName << "stgFQ" << var;
5481 pio.writeArray(&empty, stgPath.str(), fieldName.str(), nDim, bcOffset, bcCells);
5482 }
5483 }
5484 }
5485
5489 if(m_useSandpaperTrip) {
5490 stringstream tripPath;
5491 tripPath << "trip";
5492
5493 if(domainId() == 0) {
5494 ParallelIo::size_type offset = 0;
5495 ParallelIo::size_type dataSize = m_tripNoTrips * m_tripNoModes * 2;
5496
5497 pio.writeArray(m_tripModesG, tripPath.str(), "tripModesG", 1, &offset, &dataSize);
5498 pio.writeArray(m_tripModesH1, tripPath.str(), "tripModesH1", 1, &offset, &dataSize);
5499 pio.writeArray(m_tripModesH2, tripPath.str(), "tripModesH2", 1, &offset, &dataSize);
5500 } else {
5501 ParallelIo::size_type offset = 0;
5502 ParallelIo::size_type dataSize = 0;
5503 MFloat empty = 0;
5504 pio.writeArray(&empty, tripPath.str(), "tripModesG", 1, &offset, &dataSize);
5505 pio.writeArray(&empty, tripPath.str(), "tripModesH1", 1, &offset, &dataSize);
5506 pio.writeArray(&empty, tripPath.str(), "tripModesH2", 1, &offset, &dataSize);
5507 }
5508 }
5509
5510 m_log << "...-> OK " << endl;
5511}

◆ saveSolverSolution()

template<MInt nDim>
void FvStructuredSolver< nDim >::saveSolverSolution ( MBool  forceOutput = false,
const MBool  finalTimeStep = false 
)
override
Author
Pascal S. Meysonnat
Date
03.03.2016

Definition at line 5073 of file fvstructuredsolver.cpp.

5073 {
5074 RECORD_TIMER_START(m_timers[Timers::Run]);
5075 RECORD_TIMER_START(m_timers[Timers::SaveOutput]);
5076
5077 // run postprocessing in-solve routines
5078 this->postprocessInSolve();
5079
5080 // Function to write the solution to file with iolibrary
5081 MBool writeSolution = false;
5082 MBool writeBox = false;
5083 MBool writeNodalBox = false;
5084 MBool writeIntpPoints = false;
5085 MBool writeAux = false;
5086 MBool computeForces = false;
5087 MBool writeForces = false;
5088 MBool computeAsciiCells = false;
5089 MBool writeAsciiCells = false;
5090
5091 // first find out which writeOut-mode we use (iteration or convective unit intervals)
5092 // then check which functions should write out in this timestep
5094 // in this mode we check the convective unit intervals
5095 // and write out files of each type if activated
5096 // activation is done by setting the interval
5097 // to a value greater than 0 (boxOutputInterval = 1)
5099 // restart file output is still triggered by iteration counter
5100 writeSolution = isInInterval(m_solutionInterval);
5101 forceOutput = writeSolution;
5102
5103 // activate the desired outputs
5104 writeSolution = m_sampleSolutionFiles;
5105 writeBox = (m_boxOutputInterval > 0);
5106 writeNodalBox = (m_nodalBoxOutputInterval > 0);
5107 writeIntpPoints = (m_intpPointsOutputInterval > 0);
5108 writeAux = (m_forceOutputInterval > 0);
5109 computeForces = (m_forceAsciiComputeInterval > 0);
5110
5113 }
5114 } else {
5115 // in this mode we check the iteration intervals
5116 // for each writeOut-type (solution, box, line, aux)
5117 writeSolution = isInInterval(m_solutionInterval);
5119 writeNodalBox = isInInterval(m_nodalBoxOutputInterval);
5120 writeIntpPoints = isInInterval(m_intpPointsOutputInterval);
5123 computeAsciiCells = isInInterval(m_pointsToAsciiComputeInterval);
5124 if(writeSolution || finalTimeStep) {
5125 writeForces = true;
5126 writeAsciiCells = true;
5127 }
5128
5129
5131 }
5132
5133 // compute vorticity if necessary
5134 if(m_vorticityOutput && (writeSolution || writeBox || forceOutput)) {
5136 }
5137
5138 // compute velocity if wanted
5139 if(m_computeLambda2 && (writeSolution || writeBox || forceOutput)) {
5141 }
5142
5143 // boxes, auxdata and lines
5144 // are only available for 3D checked by function pointer
5145
5146 RECORD_TIMER_START(m_timers[Timers::SaveBoxes]);
5147 if(writeBox) {
5148 saveBoxes();
5149 }
5150 if(writeNodalBox) {
5152 }
5153 RECORD_TIMER_STOP(m_timers[Timers::SaveBoxes]);
5154
5155 RECORD_TIMER_START(m_timers[Timers::SaveAuxdata]);
5156 if(writeAux) {
5157 saveAuxData();
5158 }
5159 RECORD_TIMER_STOP(m_timers[Timers::SaveAuxdata]);
5160 RECORD_TIMER_START(m_timers[Timers::SaveForces]);
5161 if(computeForces) {
5162 saveForcesToAsciiFile(writeForces);
5163 }
5164
5165 if(computeAsciiCells) {
5166 savePointsToAsciiFile(writeAsciiCells);
5167 }
5168
5169 RECORD_TIMER_STOP(m_timers[Timers::SaveForces]);
5170 IF_CONSTEXPR(nDim > 2) { // needs also to be implemented for 2d !!!!!!!!!!!!!!
5171 RECORD_TIMER_START(m_timers[Timers::SaveIntpPoints]);
5172 if(writeIntpPoints) {
5174 }
5175 RECORD_TIMER_STOP(m_timers[Timers::SaveIntpPoints]);
5176 }
5177
5178 if(writeSolution || forceOutput || finalTimeStep) {
5179 RECORD_TIMER_START(m_timers[Timers::SaveSolution]);
5180 // save out the partitions also if desired, i.e, for debugging purposses
5183 }
5184 // save postprocessing variables if activated
5186 // save solution/restart file
5187 saveSolution(forceOutput);
5189 RECORD_TIMER_STOP(m_timers[Timers::SaveSolution]);
5190 }
5191 RECORD_TIMER_STOP(m_timers[Timers::SaveOutput]);
5192 RECORD_TIMER_STOP(m_timers[Timers::Run]);
5193}
virtual void saveNodalBoxes()
void savePartitions()
Saves the partitioned grid into an HDF5 file. Not used in production use but useful for debugging.
virtual void computeLambda2Criterion()
virtual void saveInterpolatedPoints()
virtual void computeVorticity()

◆ saveVarToPrimitive()

template<MInt nDim>
void FvStructuredSolver< nDim >::saveVarToPrimitive ( MInt  cellId,
MInt  varId,
MFloat  var 
)

Definition at line 4468 of file fvstructuredsolver.cpp.

4468 {
4469 m_cells->pvariables[varId][cellId] = var;
4470}

◆ scatter()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::scatter ( const  MBool,
std::vector< std::unique_ptr< StructuredComm< nDim > > > &   
)
inlinevirtual

Definition at line 194 of file fvstructuredsolver.h.

194{};

◆ send()

template<MInt nDim>
void FvStructuredSolver< nDim >::send ( const MBool  periodicExchange,
std::vector< std::unique_ptr< StructuredComm< nDim > > > &  sndComm,
std::vector< MPI_Request > &  sndRequests 
)

Definition at line 8158 of file fvstructuredsolver.cpp.

8160 {
8161 for(auto& snd : sndComm) {
8162 if(periodicExchange && skipPeriodicDirection(snd)) continue;
8163
8164 MPI_Request request{};
8165 const MInt tag = domainId() + (snd->tagHelper) * noDomains();
8166 const MInt err = MPI_Isend((void*)&snd->cellBuffer[0], snd->cellBufferSize, MPI_DOUBLE, snd->nghbrId, tag,
8167 m_StructuredComm, &request, AT_, "snd->cellBuffer");
8168 sndRequests.push_back(request);
8169 if(err) cout << "rank " << domainId() << " sending throws error " << endl;
8170 }
8171}
int MPI_Isend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request, const MString &name, const MString &varname)
same as MPI_Isend

◆ setBodyForceProperties()

template<MInt nDim>
void FvStructuredSolver< nDim >::setBodyForceProperties

Definition at line 2574 of file fvstructuredsolver.cpp.

◆ setInputOutputProperties()

template<MInt nDim>
void FvStructuredSolver< nDim >::setInputOutputProperties

Definition at line 363 of file fvstructuredsolver.cpp.

◆ setLimiterVisc()

template<MInt nDim>
void FvStructuredSolver< nDim >::setLimiterVisc

Definition at line 7069 of file fvstructuredsolver.cpp.

7069 {
7070 TRACE();
7071
7072 if(m_limiterVisc) {
7073 // NOTE: currently only implemented in 2D
7074 ASSERT(nDim == 2, "Not implemented for 3D yet!");
7075 // xsd = 0, ysd = 1
7076
7077 for(MInt cellId = 0; cellId < m_noCells; cellId++) {
7078 const MFloat metricScale =
7079 POW2(m_cells->cellMetrics[0 * 2 + 0][cellId]) + POW2(m_cells->cellMetrics[0 * 2 + 1][cellId])
7080 + POW2(m_cells->cellMetrics[1 * 2 + 0][cellId]) + POW2(m_cells->cellMetrics[1 * 2 + 1][cellId])
7081 + 2.0
7082 * (m_cells->cellMetrics[0 * 2 + 0][cellId] * m_cells->cellMetrics[1 * 2 + 0][cellId]
7083 + m_cells->cellMetrics[0 * 2 + 1][cellId] * m_cells->cellMetrics[1 * 2 + 1][cellId]);
7084 // TODO_SS labels:FV,totest with localTimeStepping m_physicalTimeStep might not be set properly
7085 // TODO_SS labels:FV in some cases if Jacobian is negative the time step can also get negative -> think if current
7086 // implementation
7087 // would also work in those cases
7088 m_cells->fq[FQ->LIMITERVISC][cellId] =
7089 m_CFLVISC * POW2(m_cells->cellJac[cellId]) / (m_physicalTimeStep * metricScale);
7090 }
7091 }
7092}
MFloat ** cellMetrics

◆ setMovingGridProperties()

template<MInt nDim>
void FvStructuredSolver< nDim >::setMovingGridProperties

Definition at line 2439 of file fvstructuredsolver.cpp.

◆ setNumericalProperties()

template<MInt nDim>
void FvStructuredSolver< nDim >::setNumericalProperties

Definition at line 2704 of file fvstructuredsolver.cpp.

◆ setPorousProperties()

template<MInt nDim>
void FvStructuredSolver< nDim >::setPorousProperties
Date
2020-03-19

Definition at line 2953 of file fvstructuredsolver.cpp.

◆ setProfileBCProperties()

template<MInt nDim>
void FvStructuredSolver< nDim >::setProfileBCProperties

Definition at line 4052 of file fvstructuredsolver.cpp.

◆ setPV()

template<MInt nDim>
void FvStructuredSolver< nDim >::setPV ( MInt  var,
MInt  cellId,
MFloat  value 
)
inline

Definition at line 238 of file fvstructuredsolver.h.

238{ m_cells->pvariables[var][cellId] = value; }

◆ setRungeKuttaProperties()

template<MInt nDim>
void FvStructuredSolver< nDim >::setRungeKuttaProperties
Author
Pascal S. Meysonnat (see FV-> Gonzalo G-B)
Date
July, 2013

Allocate and initialize Runge-Kutta coefficients:

Definition at line 3528 of file fvstructuredsolver.cpp.

◆ setSamplingProperties()

template<MInt nDim>
void FvStructuredSolver< nDim >::setSamplingProperties ( )

◆ setSTGProperties()

template<MInt nDim>
void FvStructuredSolver< nDim >::setSTGProperties

Definition at line 3635 of file fvstructuredsolver.cpp.

◆ setTestcaseProperties()

template<MInt nDim>
void FvStructuredSolver< nDim >::setTestcaseProperties
Author
Pascal Meysonnat

Definition at line 1909 of file fvstructuredsolver.cpp.

◆ setTimeStep()

template<MInt nDim>
void FvStructuredSolver< nDim >::setTimeStep
virtual

Reimplemented from Solver.

Definition at line 7051 of file fvstructuredsolver.cpp.

7051 {
7052 TRACE();
7054
7057 if(noDomains() > 1) {
7059 }
7060
7062
7064 }
7065}

◆ setVolumeForce()

template<MInt nDim>
void FvStructuredSolver< nDim >::setVolumeForce

Definition at line 4474 of file fvstructuredsolver.cpp.

4474 {
4475 TRACE();
4476
4477 switch(m_volumeForceMethod) {
4478 case 0:
4479 // default
4480 break;
4481 case 1:
4482 // To be used in combination with bc2402
4484 const MFloat relaxationFactor = 0.02;
4485 MPI_Allreduce(MPI_IN_PLACE, &m_inflowVelAvg, 1, MPI_DOUBLE, MPI_MAX, m_StructuredComm, AT_, "MPI_IN_PLACE",
4486 "inflowVelAvg");
4487 m_log << "GlobalTimeStep=" << globalTimeStep << setprecision(6)
4488 << ": inflowVelAvg(targetVelAvg)=" << m_inflowVelAvg << "(" << PV->UInfinity
4489 << "), volumeForce=" << m_volumeForce[0] << " -> ";
4490 const MFloat deltaVelAvg = PV->UInfinity - m_inflowVelAvg;
4491 m_volumeForce[0] += deltaVelAvg / (m_volumeForceUpdateInterval * m_timeStep) * relaxationFactor;
4492 m_volumeForce[0] = std::max(m_volumeForce[0], 0.0);
4493 m_log << setprecision(6) << m_volumeForce[0] << endl;
4494 m_inflowVelAvg = -1.0;
4495 }
4496 break;
4497 default:
4498 mTerm(1, "Unknown volume force method!");
4499 }
4500}

◆ setZonalProperties()

template<MInt nDim>
void FvStructuredSolver< nDim >::setZonalProperties
Date
Jan, 2015

Definition at line 4163 of file fvstructuredsolver.cpp.

◆ shiftCellValuesRestart()

template<MInt nDim>
void FvStructuredSolver< nDim >::shiftCellValuesRestart ( MBool  )

◆ skipPeriodicDirection()

template<MInt nDim>
MBool FvStructuredSolver< nDim >::skipPeriodicDirection ( std::unique_ptr< StructuredComm< nDim > > &  comm)

Definition at line 8191 of file fvstructuredsolver.cpp.

8191 {
8192 const MInt currentDirection = (comm->bcId - 4401) / 2;
8193 return ((MBool)(m_currentPeriodicDirection - currentDirection));
8194}

◆ solutionStep()

template<MInt nDim>
MBool FvStructuredSolver< nDim >::solutionStep
overridevirtual

Reimplemented from Solver.

Definition at line 8268 of file fvstructuredsolver.cpp.

8268 {
8269 RECORD_TIMER_START(m_timers[Timers::Run]);
8270 RECORD_TIMER_START(m_timers[Timers::MainLoop]);
8271 rhs();
8272
8273 rhsBnd();
8274
8275 RECORD_TIMER_START(m_timers[Timers::RungeKutta]);
8276 const MBool step = rungeKuttaStep();
8277 RECORD_TIMER_STOP(m_timers[Timers::RungeKutta]);
8278
8279 RECORD_TIMER_START(m_timers[Timers::SetTimeStep]);
8280 if(step) setTimeStep();
8281 RECORD_TIMER_STOP(m_timers[Timers::SetTimeStep]);
8282
8283 lhsBnd();
8284
8285 RECORD_TIMER_STOP(m_timers[Timers::MainLoop]);
8286 RECORD_TIMER_STOP(m_timers[Timers::Run]);
8287 return step;
8288}
virtual bool rungeKuttaStep()=0

◆ spanwiseAvgZonal()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::spanwiseAvgZonal ( std::vector< MFloat * > &  )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 199 of file fvstructuredsolver.h.

199{};

◆ spanwiseWaveReorder()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::spanwiseWaveReorder ( )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 202 of file fvstructuredsolver.h.

202{};

◆ time()

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::time ( ) const
inlineoverridevirtual

Implements Solver.

Definition at line 274 of file fvstructuredsolver.h.

274{ return m_time; }

◆ timer()

template<MInt nDim>
MInt FvStructuredSolver< nDim >::timer ( const MInt  timerId) const

Definition at line 3071 of file fvstructuredsolver.cpp.

3071 {
3072 TRACE();
3073
3074 // Abort if timers not initialized
3075 if(!m_isInitTimers) {
3076 TERMM(1, "Timers were not initialized.");
3077 }
3078
3079 return m_timers[timerId];
3080}

◆ totalEnergy_twoEqRans()

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::totalEnergy_twoEqRans ( MInt  cellId) const
inline

Definition at line 162 of file fvstructuredsolver.h.

162 {
163 return mMax(m_cells->pvariables[PV->RANS_VAR[0]][cellId], F0) * m_cells->pvariables[PV->RHO][cellId];
164 }

◆ tqli2()

template<MInt nDim>
void FvStructuredSolver< nDim >::tqli2 ( MFloat diag,
MFloat offdiag,
MInt  dim 
)

QL algorithm with implicit shifts, to determine the eigenvalues of a real symmetric matrix previously reduced by tred2. diag is a vector of length np. On input, its first n elements are the diagonal elements of the tridiagonal matrix. On output, it returns the eigenvalues. The vector offdiag inputs the subdiagonal elements of the tridiagonal matrix, with offidag(0) arbitrary. On output offdiag is destroyed.

Definition at line 6934 of file fvstructuredsolver.cpp.

6935{
6936 const MFloat eps = numeric_limits<MFloat>::epsilon();
6937 MInt m, l, iter, i, k;
6938 MFloat s, r, p, g, f, dd, c, b;
6939 MInt n = dim;
6940 for(i = 1; i < n; ++i)
6941 offdiag[i - 1] = offdiag[i];
6942 offdiag[n - 1] = 0.0;
6943 for(l = 0; l < n; ++l) {
6944 iter = 0;
6945 do {
6946 for(m = l; m < n - 1; m++) {
6947 dd = fabs(diag[m]) + fabs(diag[m + 1]);
6948 if(fabs(offdiag[m]) <= eps * dd) break;
6949 }
6950 if(m != l) {
6951 if(iter++ == 30) {
6952 for(k = 0; k < dim; ++k) {
6953 diag[k] = F0;
6954 }
6955 return;
6956 }
6957 g = (diag[l + 1] - diag[l]) / (2.0 * offdiag[l]);
6958 r = pythag(g, F1);
6959 r = abs(r);
6960 if(g < F0) r *= -F1;
6961 g = diag[m] - diag[l] + offdiag[l] / (g + r);
6962 s = c = F1;
6963 p = F0;
6964 for(i = m - 1; i >= l; i--) {
6965 f = s * offdiag[i];
6966 b = c * offdiag[i];
6967 offdiag[i + 1] = (r = pythag(f, g));
6968 if(approx(r, F0, eps)) {
6969 diag[i + 1] -= p;
6970 offdiag[m] = F0;
6971 break;
6972 }
6973 s = f / r;
6974 c = g / r;
6975 g = diag[i + 1] - p;
6976 r = (diag[i] - g) * s + 2.0 * c * b;
6977 diag[i + 1] = g + (p = s * r);
6978 g = c * r - b;
6979 }
6980 if(approx(r, F0, eps) && i >= l) continue;
6981 diag[l] -= p;
6982 offdiag[l] = g;
6983 offdiag[m] = F0;
6984 }
6985 } while(m != l);
6986 }
6987}
MFloat pythag(MFloat a, MFloat b)
constexpr std::underlying_type< FcCell >::type p(const FcCell property)
Converts property name to underlying integer value.

◆ tred2()

template<MInt nDim>
void FvStructuredSolver< nDim >::tred2 ( MFloatScratchSpace A,
MInt  dim,
MFloat diag,
MFloat offdiag 
)

Householder reduction of a real, symmetric matrix A. On output A is replaced by the orthogonla matrix Q (omitted here) diag returns the diagonla elements of the tridiagonal matrix offdiag the off-diagonal elements with offdiag[1]=0;

Definition at line 6859 of file fvstructuredsolver.cpp.

6859 {
6860 // formulation from book pp. 582
6861 MInt n = dim;
6862 MInt l = 0, k = 0, j = 0, i = 0;
6863 MFloat scale = F0, hh = F0, h = F0, g = F0, f = F0;
6864
6865 for(i = dim - 1; i > 0; i--) {
6866 l = i - 1;
6867 h = F0;
6868 scale = F0;
6869 if(l > 0) {
6870 for(k = 0; k < i; ++k) {
6871 scale += abs(A(i, k));
6872 }
6873 if(approx(scale, F0, m_eps)) {
6874 offdiag[i] = A(i, l);
6875 } else {
6876 for(k = 0; k < i; ++k) {
6877 A(i, k) /= scale;
6878 h += A(i, k) * A(i, k);
6879 }
6880 f = A(i, l);
6881 g = (f >= F0 ? -sqrt(h) : sqrt(h));
6882 offdiag[i] = scale * g;
6883 h -= f * g;
6884 A(i, l) = f - g;
6885 f = F0;
6886 for(j = 0; j < i; ++j) {
6887 g = F0;
6888 for(k = 0; k < j + 1; ++k) {
6889 g += A(j, k) * A(i, k);
6890 }
6891 for(k = j + 1; k < i; ++k) {
6892 g += A(k, j) * A(i, k);
6893 }
6894 offdiag[j] = g / h;
6895 f += offdiag[j] * A(i, j);
6896 }
6897 hh = f / (h + h);
6898 for(j = 0; j < i; j++) {
6899 f = A(i, j);
6900 g = offdiag[j] - hh * f;
6901 offdiag[j] = g;
6902 for(k = 0; k < j + 1; k++) {
6903 A(j, k) -= f * offdiag[k] + g * A(i, k);
6904 }
6905 }
6906 }
6907 } else {
6908 offdiag[i] = A(i, l);
6909 }
6910 diag[i] = h;
6911 }
6912
6913 offdiag[0] = F0;
6914 for(i = 0; i < n; ++i) {
6915 diag[i] = A(i, i);
6916 }
6917}

◆ updateSpongeLayer()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::updateSpongeLayer ( )
pure virtual

◆ viscousFlux()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::viscousFlux ( )
pure virtual

◆ waveExchange()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::waveExchange ( )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 201 of file fvstructuredsolver.h.

201{};

◆ writeHeaderAttributes()

template<MInt nDim>
void FvStructuredSolver< nDim >::writeHeaderAttributes ( ParallelIoHdf5 pio,
MString  fileType 
)
virtual

Definition at line 5007 of file fvstructuredsolver.cpp.

5007 {
5008 stringstream gridFileName;
5009 MString gridNameStr = "";
5011 gridFileName << "grid" << globalTimeStep << m_outputFormat;
5012 gridNameStr = gridFileName.str();
5013 } else {
5014 gridNameStr = "../" + m_grid->m_gridInputFileName;
5015 }
5016
5017 pio->setAttribute(gridNameStr, "gridFile", "");
5018 pio->setAttribute(m_grid->m_uID, "UID", "");
5019 pio->setAttribute(fileType, "filetype", "");
5020
5021 const MInt zonal = (MInt)m_zonal;
5022 pio->setAttribute(zonal, "zonal", "");
5023 pio->setAttribute(m_noBlocks, "noBlocks", "");
5024}

◆ writePropertiesAsAttributes()

template<MInt nDim>
void FvStructuredSolver< nDim >::writePropertiesAsAttributes ( ParallelIoHdf5 pio,
MString  path 
)
virtual

Definition at line 5033 of file fvstructuredsolver.cpp.

5033 {
5034 pio->setAttribute(m_Ma, "Ma", path);
5035 pio->setAttribute(m_Re, "Re", path);
5036 pio->setAttribute(m_Pr, "Pr", path);
5037 pio->setAttribute(m_timeStep, "timeStep", path);
5038 pio->setAttribute(m_time, "time", path);
5039 pio->setAttribute(m_physicalTimeStep, "physicalTimeStep", path);
5040 pio->setAttribute(m_physicalTime, "physicalTime", path);
5041 pio->setAttribute(globalTimeStep, "globalTimeStep", path);
5042 pio->setAttribute(m_firstMaxResidual, "firstMaxResidual", path);
5043 pio->setAttribute(m_firstAvrgResidual, "firstAvrgResidual", path);
5044
5045 // save the time(Step) at which the grid motion started
5046 // does only work safely for constant time step
5047 if(m_movingGrid) {
5048 pio->setAttribute(m_movingGridStepOffset, "movingGridStepOffset", path);
5049 pio->setAttribute(m_movingGridTimeOffset, "movingGridTimeOffset", path);
5050 // save whether or not the wave time step has been computed
5052 pio->setAttribute(m_waveTimeStepComputed, "waveTimeStepComputed", path);
5053 pio->setAttribute(m_waveNoStepsPerCell, "waveNoStepsPerCell", path);
5054 }
5055 }
5056
5057 if(m_stgIsActive) {
5058 pio->setAttribute(m_stgMaxNoEddies, "stgNRAN", path);
5059 }
5060
5061 if(m_volumeForceMethod != 0) {
5062 pio->setAttribute(m_volumeForce[0], "volumeForce", path);
5063 }
5064}
MFloat m_Re
the Reynolds number
Definition: solver.h:68

◆ writeRestartFile() [1/2]

template<MInt nDim>
void FvStructuredSolver< nDim >::writeRestartFile ( const  MBool,
const  MBool,
const  MString,
MInt  
)
inlineoverridevirtual

Reimplemented from Solver.

Definition at line 95 of file fvstructuredsolver.h.

95{};

◆ writeRestartFile() [2/2]

template<MInt nDim>
void FvStructuredSolver< nDim >::writeRestartFile ( MBool  )
inlineoverridevirtual

Reimplemented from Solver.

Definition at line 94 of file fvstructuredsolver.h.

94{};

◆ zonalExchange()

template<MInt nDim>
virtual void FvStructuredSolver< nDim >::zonalExchange ( )
inlinevirtual

Reimplemented in FvStructuredSolver3D.

Definition at line 198 of file fvstructuredsolver.h.

198{};

Friends And Related Function Documentation

◆ AccesorStructured

template<MInt nDim>
template<class SolverType >
friend class AccesorStructured
friend

Definition at line 49 of file fvstructuredsolver.h.

◆ FvStructuredSolver2DRans

template<MInt nDim>
friend class FvStructuredSolver2DRans
friend

Definition at line 47 of file fvstructuredsolver.h.

◆ FvStructuredSolver3DRans

template<MInt nDim>
friend class FvStructuredSolver3DRans
friend

Definition at line 46 of file fvstructuredsolver.h.

◆ StructuredBndryCnd

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

Definition at line 43 of file fvstructuredsolver.h.

◆ StructuredInterpolation

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

Definition at line 45 of file fvstructuredsolver.h.

Member Data Documentation

◆ CV

template<MInt nDim>
std::unique_ptr<MConservativeVariables<nDim> > FvStructuredSolver< nDim >::CV
protected

Definition at line 332 of file fvstructuredsolver.h.

◆ FQ

template<MInt nDim>
std::unique_ptr<StructuredFQVariables> FvStructuredSolver< nDim >::FQ
protected

Definition at line 469 of file fvstructuredsolver.h.

◆ m_adiabaticTemperature

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_adiabaticTemperature = nullptr
protected

Definition at line 831 of file fvstructuredsolver.h.

◆ m_airfoilCoords

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_airfoilCoords = nullptr
protected

Definition at line 865 of file fvstructuredsolver.h.

◆ m_airfoilNormalVec

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_airfoilNormalVec = nullptr
protected

Definition at line 866 of file fvstructuredsolver.h.

◆ m_airfoilNoWallPoints

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_airfoilNoWallPoints
protected

Definition at line 867 of file fvstructuredsolver.h.

◆ m_airfoilWallDist

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_airfoilWallDist = nullptr
protected

Definition at line 868 of file fvstructuredsolver.h.

◆ m_angle

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_angle = nullptr
protected

Definition at line 447 of file fvstructuredsolver.h.

◆ m_ausmScheme

template<MInt nDim>
MString FvStructuredSolver< nDim >::m_ausmScheme
protected

Definition at line 690 of file fvstructuredsolver.h.

◆ m_auxDataCoordinateLimits

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_auxDataCoordinateLimits
protected

Definition at line 489 of file fvstructuredsolver.h.

◆ m_auxDataLimits

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_auxDataLimits = nullptr
protected

Definition at line 490 of file fvstructuredsolver.h.

◆ m_auxOutputDir

template<MInt nDim>
MString FvStructuredSolver< nDim >::m_auxOutputDir
protected

Definition at line 668 of file fvstructuredsolver.h.

◆ m_avrgResidual

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_avrgResidual
protected

Definition at line 645 of file fvstructuredsolver.h.

◆ m_bc2600

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_bc2600
protected

Definition at line 780 of file fvstructuredsolver.h.

◆ m_bc2600Face

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_bc2600Face
protected

Definition at line 785 of file fvstructuredsolver.h.

◆ m_bc2600InitialStartup

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_bc2600InitialStartup
protected

Definition at line 778 of file fvstructuredsolver.h.

◆ m_bc2600IsActive

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_bc2600IsActive
protected

Definition at line 777 of file fvstructuredsolver.h.

◆ m_bc2600noActiveCells

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_bc2600noActiveCells = nullptr
protected

Definition at line 782 of file fvstructuredsolver.h.

◆ m_bc2600noCells

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_bc2600noCells = nullptr
protected

Definition at line 781 of file fvstructuredsolver.h.

◆ m_bc2600noOffsetCells

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_bc2600noOffsetCells = nullptr
protected

Definition at line 783 of file fvstructuredsolver.h.

◆ m_bc2600RootRank

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_bc2600RootRank
protected

Definition at line 784 of file fvstructuredsolver.h.

◆ m_bc2600Variables

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::m_bc2600Variables = nullptr
protected

Definition at line 779 of file fvstructuredsolver.h.

◆ m_bc2601

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_bc2601
protected

Definition at line 792 of file fvstructuredsolver.h.

◆ m_bc2601GammaEpsilon

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_bc2601GammaEpsilon
protected

Definition at line 796 of file fvstructuredsolver.h.

◆ m_bc2601InitialStartup

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_bc2601InitialStartup
protected

Definition at line 789 of file fvstructuredsolver.h.

◆ m_bc2601IsActive

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_bc2601IsActive
protected

Definition at line 788 of file fvstructuredsolver.h.

◆ m_bc2601noActiveCells

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_bc2601noActiveCells = nullptr
protected

Definition at line 794 of file fvstructuredsolver.h.

◆ m_bc2601noCells

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_bc2601noCells = nullptr
protected

Definition at line 793 of file fvstructuredsolver.h.

◆ m_bc2601noOffsetCells

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_bc2601noOffsetCells = nullptr
protected

Definition at line 795 of file fvstructuredsolver.h.

◆ m_bc2601Variables

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::m_bc2601Variables = nullptr
protected

Definition at line 790 of file fvstructuredsolver.h.

◆ m_bc2601ZerothOrderSolution

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::m_bc2601ZerothOrderSolution = nullptr
protected

Definition at line 791 of file fvstructuredsolver.h.

◆ m_betaSponge

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_betaSponge = nullptr
protected

Definition at line 623 of file fvstructuredsolver.h.

◆ m_bForce

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_bForce
protected

Definition at line 472 of file fvstructuredsolver.h.

◆ m_bForceLineAverage

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_bForceLineAverage
protected

Definition at line 476 of file fvstructuredsolver.h.

◆ m_blasius_dx0

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_blasius_dx0
protected

Definition at line 905 of file fvstructuredsolver.h.

◆ m_blasius_eta

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_blasius_eta
protected

Definition at line 899 of file fvstructuredsolver.h.

◆ m_blasius_f

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_blasius_f
protected

Definition at line 900 of file fvstructuredsolver.h.

◆ m_blasius_fp

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_blasius_fp
protected

Definition at line 901 of file fvstructuredsolver.h.

◆ m_blasius_noPoints

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_blasius_noPoints
protected

Definition at line 902 of file fvstructuredsolver.h.

◆ m_blasius_x0

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_blasius_x0
protected

Definition at line 903 of file fvstructuredsolver.h.

◆ m_blasius_y0

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_blasius_y0
protected

Definition at line 904 of file fvstructuredsolver.h.

◆ m_blockId

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_blockId
protected

Definition at line 674 of file fvstructuredsolver.h.

◆ m_blockType

template<MInt nDim>
MString FvStructuredSolver< nDim >::m_blockType
protected

Definition at line 872 of file fvstructuredsolver.h.

◆ m_bndryCnd

template<MInt nDim>
MInt** FvStructuredSolver< nDim >::m_bndryCnd = nullptr
protected

Definition at line 680 of file fvstructuredsolver.h.

◆ m_bndryCndInfo

template<MInt nDim>
MInt** FvStructuredSolver< nDim >::m_bndryCndInfo = nullptr
protected

Definition at line 679 of file fvstructuredsolver.h.

◆ m_bodyForce

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_bodyForce
protected

Definition at line 384 of file fvstructuredsolver.h.

◆ m_bodyForceMethod

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_bodyForceMethod = 0
protected

Definition at line 383 of file fvstructuredsolver.h.

◆ m_boxBlock

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_boxBlock = nullptr
protected

Definition at line 512 of file fvstructuredsolver.h.

◆ m_boxNoBoxes

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_boxNoBoxes
protected

Definition at line 510 of file fvstructuredsolver.h.

◆ m_boxOffset

template<MInt nDim>
MInt** FvStructuredSolver< nDim >::m_boxOffset = nullptr
protected

Definition at line 513 of file fvstructuredsolver.h.

◆ m_boxOutputDir

template<MInt nDim>
MString FvStructuredSolver< nDim >::m_boxOutputDir
protected

Definition at line 666 of file fvstructuredsolver.h.

◆ m_boxOutputInterval

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_boxOutputInterval
protected

Definition at line 511 of file fvstructuredsolver.h.

◆ m_boxSize

template<MInt nDim>
MInt** FvStructuredSolver< nDim >::m_boxSize = nullptr
protected

Definition at line 514 of file fvstructuredsolver.h.

◆ m_boxWriteCoordinates

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_boxWriteCoordinates
protected

Definition at line 515 of file fvstructuredsolver.h.

◆ m_bPower

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_bPower
protected

Definition at line 473 of file fvstructuredsolver.h.

◆ m_bufferCellsSndRcv

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::m_bufferCellsSndRcv = nullptr
protected

Definition at line 739 of file fvstructuredsolver.h.

◆ m_bufferPointsSendRcv

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::m_bufferPointsSendRcv = nullptr
protected

Definition at line 740 of file fvstructuredsolver.h.

◆ m_c_Dp

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_c_Dp
protected

Definition at line 875 of file fvstructuredsolver.h.

◆ m_c_Dp_eps

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_c_Dp_eps
protected

Definition at line 875 of file fvstructuredsolver.h.

◆ m_c_eps

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_c_eps
protected

Definition at line 875 of file fvstructuredsolver.h.

◆ m_c_t

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_c_t
protected

Definition at line 875 of file fvstructuredsolver.h.

◆ m_c_wd

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_c_wd
protected

Definition at line 875 of file fvstructuredsolver.h.

◆ m_cells

template<MInt nDim>
StructuredCell* FvStructuredSolver< nDim >::m_cells = nullptr
protected

Definition at line 409 of file fvstructuredsolver.h.

◆ m_cfl

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_cfl
protected

Definition at line 434 of file fvstructuredsolver.h.

◆ m_CFLVISC

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_CFLVISC
protected

Definition at line 687 of file fvstructuredsolver.h.

◆ m_changeMa

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_changeMa
protected

Definition at line 826 of file fvstructuredsolver.h.

◆ m_channelC1

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_channelC1
protected

Definition at line 762 of file fvstructuredsolver.h.

◆ m_channelC2

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_channelC2
protected

Definition at line 763 of file fvstructuredsolver.h.

◆ m_channelC3

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_channelC3
protected

Definition at line 764 of file fvstructuredsolver.h.

◆ m_channelC4

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_channelC4
protected

Definition at line 765 of file fvstructuredsolver.h.

◆ m_channelFlow

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_channelFlow
protected

Definition at line 449 of file fvstructuredsolver.h.

◆ m_channelFullyPeriodic

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_channelFullyPeriodic
protected

Definition at line 766 of file fvstructuredsolver.h.

◆ m_channelHeight

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_channelHeight
protected

Definition at line 759 of file fvstructuredsolver.h.

◆ m_channelInflowPlaneCoordinate

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_channelInflowPlaneCoordinate
protected

Definition at line 761 of file fvstructuredsolver.h.

◆ m_channelLength

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_channelLength
protected

Definition at line 758 of file fvstructuredsolver.h.

◆ m_channelPresInlet

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_channelPresInlet
protected

Definition at line 756 of file fvstructuredsolver.h.

◆ m_channelPresOutlet

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_channelPresOutlet
protected

Definition at line 757 of file fvstructuredsolver.h.

◆ m_channelRoots

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_channelRoots = nullptr
protected

Definition at line 755 of file fvstructuredsolver.h.

◆ m_channelWidth

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_channelWidth
protected

Definition at line 760 of file fvstructuredsolver.h.

◆ m_chi

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_chi
protected

Definition at line 615 of file fvstructuredsolver.h.

◆ m_commBC2600

template<MInt nDim>
MPI_Comm FvStructuredSolver< nDim >::m_commBC2600 = MPI_COMM_NULL
protected

Definition at line 705 of file fvstructuredsolver.h.

◆ m_commBC2600MyRank

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_commBC2600MyRank = -1
protected

Definition at line 708 of file fvstructuredsolver.h.

◆ m_commBC2600Root

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_commBC2600Root = -1
protected

Definition at line 706 of file fvstructuredsolver.h.

◆ m_commBC2600RootGlobal

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_commBC2600RootGlobal = -1
protected

Definition at line 707 of file fvstructuredsolver.h.

◆ m_commChannelIn

template<MInt nDim>
MPI_Comm FvStructuredSolver< nDim >::m_commChannelIn = MPI_COMM_NULL
protected

Definition at line 752 of file fvstructuredsolver.h.

◆ m_commChannelOut

template<MInt nDim>
MPI_Comm FvStructuredSolver< nDim >::m_commChannelOut = MPI_COMM_NULL
protected

Definition at line 753 of file fvstructuredsolver.h.

◆ m_commChannelWorld

template<MInt nDim>
MPI_Comm FvStructuredSolver< nDim >::m_commChannelWorld = MPI_COMM_NULL
protected

Definition at line 754 of file fvstructuredsolver.h.

◆ m_commPerRotGroup

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_commPerRotGroup = -1
protected

Definition at line 774 of file fvstructuredsolver.h.

◆ m_commPerRotOne

template<MInt nDim>
MPI_Comm FvStructuredSolver< nDim >::m_commPerRotOne = MPI_COMM_NULL
protected

Definition at line 770 of file fvstructuredsolver.h.

◆ m_commPerRotRoots

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_commPerRotRoots = nullptr
protected

Definition at line 773 of file fvstructuredsolver.h.

◆ m_commPerRotTwo

template<MInt nDim>
MPI_Comm FvStructuredSolver< nDim >::m_commPerRotTwo = MPI_COMM_NULL
protected

Definition at line 771 of file fvstructuredsolver.h.

◆ m_commPerRotWorld

template<MInt nDim>
MPI_Comm FvStructuredSolver< nDim >::m_commPerRotWorld = MPI_COMM_NULL
protected

Definition at line 772 of file fvstructuredsolver.h.

◆ m_commStg

template<MInt nDim>
MPI_Comm FvStructuredSolver< nDim >::m_commStg = MPI_COMM_NULL
protected

Definition at line 584 of file fvstructuredsolver.h.

◆ m_commStgMyRank

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_commStgMyRank = -1
protected

Definition at line 587 of file fvstructuredsolver.h.

◆ m_commStgRoot

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_commStgRoot = -1
protected

Definition at line 585 of file fvstructuredsolver.h.

◆ m_commStgRootGlobal

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_commStgRootGlobal = -1
protected

Definition at line 586 of file fvstructuredsolver.h.

◆ m_commZonal

template<MInt nDim>
MPI_Comm* FvStructuredSolver< nDim >::m_commZonal = nullptr
protected

Definition at line 710 of file fvstructuredsolver.h.

◆ m_commZonalMyRank

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_commZonalMyRank = -1
protected

Definition at line 713 of file fvstructuredsolver.h.

◆ m_commZonalRoot

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_commZonalRoot = nullptr
protected

Definition at line 711 of file fvstructuredsolver.h.

◆ m_commZonalRootGlobal

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_commZonalRootGlobal = nullptr
protected

Definition at line 712 of file fvstructuredsolver.h.

◆ m_computeLambda2

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_computeLambda2
protected

Definition at line 453 of file fvstructuredsolver.h.

◆ m_computeSpongeFactor

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_computeSpongeFactor
protected

Definition at line 626 of file fvstructuredsolver.h.

◆ m_considerVolumeForces

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_considerVolumeForces
protected

Definition at line 437 of file fvstructuredsolver.h.

◆ m_constantTimeStep

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_constantTimeStep
protected

Definition at line 575 of file fvstructuredsolver.h.

◆ m_convectiveUnitInterval

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_convectiveUnitInterval
protected

Definition at line 800 of file fvstructuredsolver.h.

◆ m_convergence

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_convergence
protected

Definition at line 655 of file fvstructuredsolver.h.

◆ m_convergenceCriterion

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_convergenceCriterion
protected

Definition at line 656 of file fvstructuredsolver.h.

◆ m_currentPeriodicDirection

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_currentPeriodicDirection
protected

Definition at line 731 of file fvstructuredsolver.h.

◆ m_debugOutput

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_debugOutput
protected

Definition at line 404 of file fvstructuredsolver.h.

◆ m_deltaP

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_deltaP
protected

Definition at line 661 of file fvstructuredsolver.h.

◆ m_detailAuxData

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_detailAuxData
protected

Definition at line 475 of file fvstructuredsolver.h.

◆ m_DInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_DInfinity
protected

Definition at line 817 of file fvstructuredsolver.h.

◆ m_dsIsComputed

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_dsIsComputed
protected

Definition at line 398 of file fvstructuredsolver.h.

◆ m_DthInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_DthInfinity
protected

Definition at line 815 of file fvstructuredsolver.h.

◆ m_dualTimeStepping

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_dualTimeStepping
protected

Definition at line 564 of file fvstructuredsolver.h.

◆ m_eps

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_eps
protected

Definition at line 336 of file fvstructuredsolver.h.

◆ m_epsScale

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_epsScale
protected

Definition at line 466 of file fvstructuredsolver.h.

◆ m_euler

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_euler
protected

Definition at line 438 of file fvstructuredsolver.h.

◆ m_fgammaMinusOne

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_fgammaMinusOne
protected

Definition at line 444 of file fvstructuredsolver.h.

◆ m_firstAvrgResidual

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_firstAvrgResidual
protected

Definition at line 647 of file fvstructuredsolver.h.

◆ m_firstMaxResidual

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_firstMaxResidual
protected

Definition at line 646 of file fvstructuredsolver.h.

◆ m_forceAsciiComputeInterval

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_forceAsciiComputeInterval
protected

Definition at line 481 of file fvstructuredsolver.h.

◆ m_forceAsciiOutputInterval

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_forceAsciiOutputInterval
protected

Definition at line 480 of file fvstructuredsolver.h.

◆ m_forceAveragingDir

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_forceAveragingDir
protected

Definition at line 478 of file fvstructuredsolver.h.

◆ m_forceCoef

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_forceCoef = nullptr
protected

Definition at line 474 of file fvstructuredsolver.h.

◆ m_forceCounter

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_forceCounter
protected

Definition at line 483 of file fvstructuredsolver.h.

◆ m_forceData

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::m_forceData = nullptr
protected

Definition at line 482 of file fvstructuredsolver.h.

◆ m_forceHeaderNames

template<MInt nDim>
std::vector<MString> FvStructuredSolver< nDim >::m_forceHeaderNames
protected

Definition at line 477 of file fvstructuredsolver.h.

◆ m_forceOutputInterval

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_forceOutputInterval
protected

Definition at line 479 of file fvstructuredsolver.h.

◆ m_forceSecondOrder

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_forceSecondOrder
protected

Definition at line 487 of file fvstructuredsolver.h.

◆ m_formationEnthalpy

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_formationEnthalpy = nullptr
protected

Definition at line 553 of file fvstructuredsolver.h.

◆ m_fsc

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_fsc
protected

Definition at line 878 of file fvstructuredsolver.h.

◆ m_fsc_dx0

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_fsc_dx0
protected

Definition at line 886 of file fvstructuredsolver.h.

◆ m_fsc_eta

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_fsc_eta
protected

Definition at line 879 of file fvstructuredsolver.h.

◆ m_fsc_f

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_fsc_f
protected

Definition at line 881 of file fvstructuredsolver.h.

◆ m_fsc_fs

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_fsc_fs
protected

Definition at line 880 of file fvstructuredsolver.h.

◆ m_fsc_g

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_fsc_g
protected

Definition at line 882 of file fvstructuredsolver.h.

◆ m_fsc_m

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_fsc_m
protected

Definition at line 887 of file fvstructuredsolver.h.

◆ m_fsc_noPoints

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_fsc_noPoints
protected

Definition at line 883 of file fvstructuredsolver.h.

◆ m_fsc_Re

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_fsc_Re
protected

Definition at line 888 of file fvstructuredsolver.h.

◆ m_fsc_x0

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_fsc_x0
protected

Definition at line 884 of file fvstructuredsolver.h.

◆ m_fsc_y0

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_fsc_y0
protected

Definition at line 885 of file fvstructuredsolver.h.

◆ m_gamma

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_gamma
protected

Definition at line 442 of file fvstructuredsolver.h.

◆ m_gammaMinusOne

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_gammaMinusOne
protected

Definition at line 443 of file fvstructuredsolver.h.

◆ m_globalDomainWidth

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_globalDomainWidth
protected

Definition at line 488 of file fvstructuredsolver.h.

◆ m_grid

template<MInt nDim>
StructuredGrid<nDim>* FvStructuredSolver< nDim >::m_grid

Definition at line 52 of file fvstructuredsolver.h.

◆ m_gridMovingMethod

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_gridMovingMethod = 0
protected

Definition at line 345 of file fvstructuredsolver.h.

◆ m_hasSingularity

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_hasSingularity
protected

Definition at line 836 of file fvstructuredsolver.h.

◆ m_hasSTG

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_hasSTG
protected

Definition at line 701 of file fvstructuredsolver.h.

◆ m_hInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_hInfinity
protected

Definition at line 457 of file fvstructuredsolver.h.

◆ m_I

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_I
protected

Definition at line 465 of file fvstructuredsolver.h.

◆ m_ignoreUID

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_ignoreUID
protected

Definition at line 417 of file fvstructuredsolver.h.

◆ m_inflowTemperatureRatio

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_inflowTemperatureRatio
protected

Definition at line 436 of file fvstructuredsolver.h.

◆ m_inflowVelAvg

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_inflowVelAvg
protected

Definition at line 767 of file fvstructuredsolver.h.

◆ m_initialCondition

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_initialCondition
protected

Definition at line 660 of file fvstructuredsolver.h.

◆ m_intpPoints

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_intpPoints
protected

Definition at line 508 of file fvstructuredsolver.h.

◆ m_intpPointsCoordinates

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::m_intpPointsCoordinates = nullptr
protected

Definition at line 503 of file fvstructuredsolver.h.

◆ m_intpPointsDelta

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::m_intpPointsDelta = nullptr
protected

Definition at line 501 of file fvstructuredsolver.h.

◆ m_intpPointsDelta2D

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::m_intpPointsDelta2D = nullptr
protected

Definition at line 502 of file fvstructuredsolver.h.

◆ m_intpPointsHasPartnerGlobal

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_intpPointsHasPartnerGlobal = nullptr
protected

Definition at line 504 of file fvstructuredsolver.h.

◆ m_intpPointsHasPartnerLocal

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_intpPointsHasPartnerLocal = nullptr
protected

Definition at line 505 of file fvstructuredsolver.h.

◆ m_intpPointsNoLines

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_intpPointsNoLines
protected

Definition at line 494 of file fvstructuredsolver.h.

◆ m_intpPointsNoLines2D

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_intpPointsNoLines2D
protected

Definition at line 495 of file fvstructuredsolver.h.

◆ m_intpPointsNoPoints

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_intpPointsNoPoints = nullptr
protected

Definition at line 497 of file fvstructuredsolver.h.

◆ m_intpPointsNoPoints2D

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_intpPointsNoPoints2D = nullptr
protected

Definition at line 498 of file fvstructuredsolver.h.

◆ m_intpPointsNoPointsTotal

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_intpPointsNoPointsTotal
protected

Definition at line 496 of file fvstructuredsolver.h.

◆ m_intpPointsOffsets

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_intpPointsOffsets = nullptr
protected

Definition at line 499 of file fvstructuredsolver.h.

◆ m_intpPointsOutputDir

template<MInt nDim>
MString FvStructuredSolver< nDim >::m_intpPointsOutputDir
protected

Definition at line 667 of file fvstructuredsolver.h.

◆ m_intpPointsOutputInterval

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_intpPointsOutputInterval
protected

Definition at line 493 of file fvstructuredsolver.h.

◆ m_intpPointsStart

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::m_intpPointsStart = nullptr
protected

Definition at line 500 of file fvstructuredsolver.h.

◆ m_intpPointsVarsGlobal

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::m_intpPointsVarsGlobal = nullptr
protected

Definition at line 506 of file fvstructuredsolver.h.

◆ m_intpPointsVarsLocal

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::m_intpPointsVarsLocal = nullptr
protected

Definition at line 507 of file fvstructuredsolver.h.

◆ m_isActive

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_isActive = false
private

Definition at line 916 of file fvstructuredsolver.h.

◆ m_isInitTimers

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_isInitTimers = false
protected

Definition at line 807 of file fvstructuredsolver.h.

◆ m_keps_nonDimType

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_keps_nonDimType
protected

Definition at line 463 of file fvstructuredsolver.h.

◆ m_kepsICMethod

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_kepsICMethod
protected

Definition at line 467 of file fvstructuredsolver.h.

◆ m_lastForceComputationTimeStep

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_lastForceComputationTimeStep
protected

Definition at line 485 of file fvstructuredsolver.h.

◆ m_lastForceOutputTimeStep

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_lastForceOutputTimeStep
protected

Definition at line 484 of file fvstructuredsolver.h.

◆ m_lastOutputTimeStep

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_lastOutputTimeStep

Definition at line 328 of file fvstructuredsolver.h.

◆ m_limiter

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_limiter
protected

Definition at line 683 of file fvstructuredsolver.h.

◆ m_limiterMethod

template<MInt nDim>
MString FvStructuredSolver< nDim >::m_limiterMethod
protected

Definition at line 684 of file fvstructuredsolver.h.

◆ m_limiterVisc

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_limiterVisc
protected

Definition at line 686 of file fvstructuredsolver.h.

◆ m_localTimeStep

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_localTimeStep
protected

Definition at line 559 of file fvstructuredsolver.h.

◆ m_maxNoVariables

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_maxNoVariables
protected

Definition at line 470 of file fvstructuredsolver.h.

◆ m_mgExchangeCoordinates

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_mgExchangeCoordinates
protected

Definition at line 344 of file fvstructuredsolver.h.

◆ m_movingGrid

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_movingGrid
protected

Definition at line 343 of file fvstructuredsolver.h.

◆ m_movingGridInitialStart

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_movingGridInitialStart
protected

Definition at line 378 of file fvstructuredsolver.h.

◆ m_movingGridSaveGrid

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_movingGridSaveGrid
protected

Definition at line 351 of file fvstructuredsolver.h.

◆ m_movingGridStepOffset

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_movingGridStepOffset
protected

Definition at line 346 of file fvstructuredsolver.h.

◆ m_movingGridTimeOffset

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_movingGridTimeOffset
protected

Definition at line 350 of file fvstructuredsolver.h.

◆ m_mpiStruct

template<MInt nDim>
MPI_Datatype FvStructuredSolver< nDim >::m_mpiStruct
protected

Definition at line 651 of file fvstructuredsolver.h.

◆ m_muInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_muInfinity
protected

Definition at line 816 of file fvstructuredsolver.h.

◆ m_musclScheme

template<MInt nDim>
MString FvStructuredSolver< nDim >::m_musclScheme
protected

Definition at line 689 of file fvstructuredsolver.h.

◆ m_mutInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_mutInfinity
protected

Definition at line 725 of file fvstructuredsolver.h.

◆ m_nActiveCells

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_nActiveCells = nullptr
protected

Definition at line 672 of file fvstructuredsolver.h.

◆ m_nActivePoints

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_nActivePoints = nullptr
protected

Definition at line 422 of file fvstructuredsolver.h.

◆ m_nCells

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_nCells = nullptr
protected

Definition at line 671 of file fvstructuredsolver.h.

◆ m_nghbrDomainId

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_nghbrDomainId = nullptr
protected

Definition at line 737 of file fvstructuredsolver.h.

◆ m_nghbrFaceId

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_nghbrFaceId = nullptr
protected

Definition at line 741 of file fvstructuredsolver.h.

◆ m_nghbrFaceInfo

template<MInt nDim>
MInt** FvStructuredSolver< nDim >::m_nghbrFaceInfo = nullptr
protected

Definition at line 742 of file fvstructuredsolver.h.

◆ m_noActiveCells

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_noActiveCells
protected

Definition at line 425 of file fvstructuredsolver.h.

◆ m_noBlocks

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_noBlocks
protected

Definition at line 675 of file fvstructuredsolver.h.

◆ m_noCells

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_noCells
protected

Definition at line 424 of file fvstructuredsolver.h.

◆ m_noConvectiveOutputs

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_noConvectiveOutputs
protected

Definition at line 801 of file fvstructuredsolver.h.

◆ m_nodalBoxBlock

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_nodalBoxBlock = nullptr
protected

Definition at line 521 of file fvstructuredsolver.h.

◆ m_nodalBoxCoordinates

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::m_nodalBoxCoordinates = nullptr
protected

Definition at line 529 of file fvstructuredsolver.h.

◆ m_nodalBoxInitialized

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_nodalBoxInitialized
protected

Definition at line 534 of file fvstructuredsolver.h.

◆ m_nodalBoxInterpolation

template<MInt nDim>
std::unique_ptr<StructuredInterpolation<nDim> > FvStructuredSolver< nDim >::m_nodalBoxInterpolation
protected

Definition at line 517 of file fvstructuredsolver.h.

◆ m_nodalBoxLocalDomainOffset

template<MInt nDim>
MInt** FvStructuredSolver< nDim >::m_nodalBoxLocalDomainOffset = nullptr
protected

Definition at line 526 of file fvstructuredsolver.h.

◆ m_nodalBoxLocalOffset

template<MInt nDim>
MInt** FvStructuredSolver< nDim >::m_nodalBoxLocalOffset = nullptr
protected

Definition at line 524 of file fvstructuredsolver.h.

◆ m_nodalBoxLocalPoints

template<MInt nDim>
MInt** FvStructuredSolver< nDim >::m_nodalBoxLocalPoints = nullptr
protected

Definition at line 525 of file fvstructuredsolver.h.

◆ m_nodalBoxLocalSize

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_nodalBoxLocalSize = nullptr
protected

Definition at line 527 of file fvstructuredsolver.h.

◆ m_nodalBoxNoBoxes

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_nodalBoxNoBoxes
protected

Definition at line 518 of file fvstructuredsolver.h.

◆ m_nodalBoxOffset

template<MInt nDim>
MInt** FvStructuredSolver< nDim >::m_nodalBoxOffset = nullptr
protected

Definition at line 522 of file fvstructuredsolver.h.

◆ m_nodalBoxOutputDir

template<MInt nDim>
MString FvStructuredSolver< nDim >::m_nodalBoxOutputDir
protected

Definition at line 519 of file fvstructuredsolver.h.

◆ m_nodalBoxOutputInterval

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_nodalBoxOutputInterval
protected

Definition at line 520 of file fvstructuredsolver.h.

◆ m_nodalBoxPartnerLocal

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_nodalBoxPartnerLocal = nullptr
protected

Definition at line 528 of file fvstructuredsolver.h.

◆ m_nodalBoxPoints

template<MInt nDim>
MInt** FvStructuredSolver< nDim >::m_nodalBoxPoints = nullptr
protected

Definition at line 523 of file fvstructuredsolver.h.

◆ m_nodalBoxTotalLocalOffset

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_nodalBoxTotalLocalOffset = nullptr
protected

Definition at line 533 of file fvstructuredsolver.h.

◆ m_nodalBoxTotalLocalSize

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_nodalBoxTotalLocalSize
protected

Definition at line 532 of file fvstructuredsolver.h.

◆ m_nodalBoxVariables

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::m_nodalBoxVariables = nullptr
protected

Definition at line 530 of file fvstructuredsolver.h.

◆ m_nodalBoxWriteCoordinates

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_nodalBoxWriteCoordinates
protected

Definition at line 531 of file fvstructuredsolver.h.

◆ m_nOffsetCells

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_nOffsetCells = nullptr
protected

Definition at line 673 of file fvstructuredsolver.h.

◆ m_nOffsetPoints

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_nOffsetPoints = nullptr
protected

Definition at line 423 of file fvstructuredsolver.h.

◆ m_noForceDataFields

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_noForceDataFields
protected

Definition at line 486 of file fvstructuredsolver.h.

◆ m_noGhostLayers

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_noGhostLayers
protected

Definition at line 420 of file fvstructuredsolver.h.

◆ m_noNghbrDomainBufferSize

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_noNghbrDomainBufferSize = nullptr
protected

Definition at line 738 of file fvstructuredsolver.h.

◆ m_noNghbrDomains

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_noNghbrDomains
protected

Definition at line 736 of file fvstructuredsolver.h.

◆ m_noPoints

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_noPoints
protected

Definition at line 426 of file fvstructuredsolver.h.

◆ m_noRansEquations

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_noRansEquations
protected

Definition at line 698 of file fvstructuredsolver.h.

◆ m_noRKSteps

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_noRKSteps
protected

Definition at line 554 of file fvstructuredsolver.h.

◆ m_noSpecies

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_noSpecies
protected

Definition at line 551 of file fvstructuredsolver.h.

◆ m_noSpongeDomainInfos

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_noSpongeDomainInfos
protected

Definition at line 618 of file fvstructuredsolver.h.

◆ m_noSurfaces

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_noSurfaces
protected

Definition at line 428 of file fvstructuredsolver.h.

◆ m_noWindows

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_noWindows = nullptr
protected

Definition at line 678 of file fvstructuredsolver.h.

◆ m_nPoints

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_nPoints = nullptr
protected

Definition at line 421 of file fvstructuredsolver.h.

◆ m_nutInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_nutInfinity
protected

Definition at line 724 of file fvstructuredsolver.h.

◆ m_orderOfReconstruction

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_orderOfReconstruction
protected

Definition at line 435 of file fvstructuredsolver.h.

◆ m_oscAmplitude

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_oscAmplitude
protected

Definition at line 391 of file fvstructuredsolver.h.

◆ m_oscFreq

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_oscFreq
protected

Definition at line 393 of file fvstructuredsolver.h.

◆ m_oscSr

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_oscSr
protected

Definition at line 392 of file fvstructuredsolver.h.

◆ m_outputFormat

template<MInt nDim>
MString FvStructuredSolver< nDim >::m_outputFormat

Definition at line 327 of file fvstructuredsolver.h.

◆ m_outputIterationNumber

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_outputIterationNumber
protected

Definition at line 405 of file fvstructuredsolver.h.

◆ m_outputOffset

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_outputOffset
protected

Definition at line 402 of file fvstructuredsolver.h.

◆ m_periodicConnection

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_periodicConnection
protected

Definition at line 448 of file fvstructuredsolver.h.

◆ m_physicalReferenceLength

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_physicalReferenceLength
protected

Definition at line 431 of file fvstructuredsolver.h.

◆ m_physicalTime

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_physicalTime
protected

Definition at line 566 of file fvstructuredsolver.h.

◆ m_physicalTimeStep

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_physicalTimeStep
protected

Definition at line 565 of file fvstructuredsolver.h.

◆ m_PInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_PInfinity
protected

Definition at line 813 of file fvstructuredsolver.h.

◆ m_plenumComm

template<MInt nDim>
MPI_Comm FvStructuredSolver< nDim >::m_plenumComm = MPI_COMM_NULL
protected

Definition at line 748 of file fvstructuredsolver.h.

◆ m_plenumRoot

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_plenumRoot = -1
protected

Definition at line 749 of file fvstructuredsolver.h.

◆ m_pointsToAsciiComputeInterval

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_pointsToAsciiComputeInterval
protected

Definition at line 536 of file fvstructuredsolver.h.

◆ m_pointsToAsciiCoordinates

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::m_pointsToAsciiCoordinates = nullptr
protected

Definition at line 541 of file fvstructuredsolver.h.

◆ m_pointsToAsciiCounter

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_pointsToAsciiCounter
protected

Definition at line 544 of file fvstructuredsolver.h.

◆ m_pointsToAsciiHasPartnerGlobal

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_pointsToAsciiHasPartnerGlobal = nullptr
protected

Definition at line 545 of file fvstructuredsolver.h.

◆ m_pointsToAsciiHasPartnerLocal

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_pointsToAsciiHasPartnerLocal = nullptr
protected

Definition at line 546 of file fvstructuredsolver.h.

◆ m_pointsToAsciiInterpolation

template<MInt nDim>
std::unique_ptr<StructuredInterpolation<nDim> > FvStructuredSolver< nDim >::m_pointsToAsciiInterpolation
protected

Definition at line 547 of file fvstructuredsolver.h.

◆ m_pointsToAsciiLastComputationStep

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_pointsToAsciiLastComputationStep
protected

Definition at line 540 of file fvstructuredsolver.h.

◆ m_pointsToAsciiLastOutputStep

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_pointsToAsciiLastOutputStep
protected

Definition at line 539 of file fvstructuredsolver.h.

◆ m_pointsToAsciiNoPoints

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_pointsToAsciiNoPoints
protected

Definition at line 538 of file fvstructuredsolver.h.

◆ m_pointsToAsciiOutputInterval

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_pointsToAsciiOutputInterval
protected

Definition at line 537 of file fvstructuredsolver.h.

◆ m_pointsToAsciiVarId

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_pointsToAsciiVarId
protected

Definition at line 543 of file fvstructuredsolver.h.

◆ m_pointsToAsciiVars

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::m_pointsToAsciiVars = nullptr
protected

Definition at line 542 of file fvstructuredsolver.h.

◆ m_porous

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_porous
protected

Definition at line 871 of file fvstructuredsolver.h.

◆ m_porousBlockIds

template<MInt nDim>
std::vector<MInt> FvStructuredSolver< nDim >::m_porousBlockIds
protected

Definition at line 874 of file fvstructuredsolver.h.

◆ m_Pr

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_Pr
protected

Definition at line 432 of file fvstructuredsolver.h.

◆ m_pvariableNames

template<MInt nDim>
MString* FvStructuredSolver< nDim >::m_pvariableNames = nullptr
protected

Definition at line 411 of file fvstructuredsolver.h.

◆ m_QLeft

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_QLeft = nullptr
protected

Definition at line 339 of file fvstructuredsolver.h.

◆ m_QRight

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_QRight = nullptr
protected

Definition at line 340 of file fvstructuredsolver.h.

◆ m_rans

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_rans
protected

Definition at line 696 of file fvstructuredsolver.h.

◆ m_rans2eq_mode

template<MInt nDim>
MString FvStructuredSolver< nDim >::m_rans2eq_mode
protected

Definition at line 461 of file fvstructuredsolver.h.

◆ m_ransMethod

template<MInt nDim>
RansMethod FvStructuredSolver< nDim >::m_ransMethod = NORANS
protected

Definition at line 697 of file fvstructuredsolver.h.

◆ m_ransTransPos

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_ransTransPos
protected

Definition at line 700 of file fvstructuredsolver.h.

◆ m_rcvComm

template<MInt nDim>
std::vector<std::unique_ptr<StructuredComm<nDim> > > FvStructuredSolver< nDim >::m_rcvComm
protected

Definition at line 729 of file fvstructuredsolver.h.

◆ m_Re0

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_Re0
protected

Definition at line 445 of file fvstructuredsolver.h.

◆ m_referenceComposition

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_referenceComposition = nullptr
protected

Definition at line 552 of file fvstructuredsolver.h.

◆ m_referenceEnthalpy

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_referenceEnthalpy
protected

Definition at line 458 of file fvstructuredsolver.h.

◆ m_referenceLength

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_referenceLength
protected

Definition at line 430 of file fvstructuredsolver.h.

◆ m_referenceTemperature

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_referenceTemperature
protected

Definition at line 550 of file fvstructuredsolver.h.

◆ m_rescalingCommGrComm

template<MInt nDim>
MPI_Comm FvStructuredSolver< nDim >::m_rescalingCommGrComm = MPI_COMM_NULL
protected

Definition at line 580 of file fvstructuredsolver.h.

◆ m_rescalingCommGrRoot

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_rescalingCommGrRoot = -1
protected

Definition at line 578 of file fvstructuredsolver.h.

◆ m_rescalingCommGrRootGlobal

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_rescalingCommGrRootGlobal = -1
protected

Definition at line 579 of file fvstructuredsolver.h.

◆ m_resFile

template<MInt nDim>
FILE* FvStructuredSolver< nDim >::m_resFile
protected

Definition at line 652 of file fvstructuredsolver.h.

◆ m_residualFileExist

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_residualFileExist
protected

Definition at line 649 of file fvstructuredsolver.h.

◆ m_residualOutputInterval

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_residualOutputInterval
protected

Definition at line 643 of file fvstructuredsolver.h.

◆ m_residualRcv

template<MInt nDim>
MRes FvStructuredSolver< nDim >::m_residualRcv
protected

Definition at line 641 of file fvstructuredsolver.h.

◆ m_residualSnd

template<MInt nDim>
MRes* FvStructuredSolver< nDim >::m_residualSnd = nullptr
protected

Definition at line 640 of file fvstructuredsolver.h.

◆ m_resOp

template<MInt nDim>
MPI_Op FvStructuredSolver< nDim >::m_resOp
protected

Definition at line 650 of file fvstructuredsolver.h.

◆ m_restart

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_restart
protected

Definition at line 659 of file fvstructuredsolver.h.

◆ m_restartBc2800

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_restartBc2800
protected

Definition at line 829 of file fvstructuredsolver.h.

◆ m_restartInterpolation

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_restartInterpolation
protected

Definition at line 662 of file fvstructuredsolver.h.

◆ m_restartTimeBc2800

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_restartTimeBc2800
protected

Definition at line 830 of file fvstructuredsolver.h.

◆ m_restartTimeStep

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_restartTimeStep

Definition at line 326 of file fvstructuredsolver.h.

◆ m_ReTau

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_ReTau
protected

Definition at line 446 of file fvstructuredsolver.h.

◆ m_rhoEInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_rhoEInfinity
protected

Definition at line 822 of file fvstructuredsolver.h.

◆ m_rhoInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_rhoInfinity
protected

Definition at line 823 of file fvstructuredsolver.h.

◆ m_rhoNuTildeInfinty

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_rhoNuTildeInfinty
protected

Definition at line 723 of file fvstructuredsolver.h.

◆ m_rhoUInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_rhoUInfinity
protected

Definition at line 819 of file fvstructuredsolver.h.

◆ m_rhoVInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_rhoVInfinity
protected

Definition at line 820 of file fvstructuredsolver.h.

◆ m_rhoVVInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_rhoVVInfinity[3]
protected

Definition at line 824 of file fvstructuredsolver.h.

◆ m_rhoWInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_rhoWInfinity
protected

Definition at line 821 of file fvstructuredsolver.h.

◆ m_rhs

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_rhs = nullptr
protected

Definition at line 396 of file fvstructuredsolver.h.

◆ m_RKalpha

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_RKalpha = nullptr
protected

Definition at line 555 of file fvstructuredsolver.h.

◆ m_RKStep

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_RKStep
protected

Definition at line 557 of file fvstructuredsolver.h.

◆ m_rPr

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_rPr
protected

Definition at line 433 of file fvstructuredsolver.h.

◆ m_rungeKuttaOrder

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_rungeKuttaOrder
protected

Definition at line 560 of file fvstructuredsolver.h.

◆ m_sampleSolutionFiles

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_sampleSolutionFiles
protected

Definition at line 406 of file fvstructuredsolver.h.

◆ m_savePartitionOutput

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_savePartitionOutput
protected

Definition at line 669 of file fvstructuredsolver.h.

◆ m_setLocalWallDistance

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_setLocalWallDistance = false
protected

Definition at line 491 of file fvstructuredsolver.h.

◆ m_sigmaSponge

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_sigmaSponge = nullptr
protected

Definition at line 622 of file fvstructuredsolver.h.

◆ m_singularity

template<MInt nDim>
SingularInformation* FvStructuredSolver< nDim >::m_singularity = nullptr
protected

Definition at line 835 of file fvstructuredsolver.h.

◆ m_sndComm

template<MInt nDim>
std::vector<std::unique_ptr<StructuredComm<nDim> > > FvStructuredSolver< nDim >::m_sndComm
protected

Definition at line 728 of file fvstructuredsolver.h.

◆ m_solutionAnomaly

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_solutionAnomaly
protected

Definition at line 464 of file fvstructuredsolver.h.

◆ m_solutionFileName

template<MInt nDim>
MString FvStructuredSolver< nDim >::m_solutionFileName
protected

Definition at line 665 of file fvstructuredsolver.h.

◆ m_spongeBcWindowInfo

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_spongeBcWindowInfo = nullptr
protected

Definition at line 619 of file fvstructuredsolver.h.

◆ m_spongeLayerThickness

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_spongeLayerThickness = nullptr
protected

Definition at line 624 of file fvstructuredsolver.h.

◆ m_spongeLayerType

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_spongeLayerType
protected

Definition at line 621 of file fvstructuredsolver.h.

◆ m_stgBLT1

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_stgBLT1
protected

Definition at line 589 of file fvstructuredsolver.h.

◆ m_stgBLT2

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_stgBLT2
protected

Definition at line 590 of file fvstructuredsolver.h.

◆ m_stgBLT3

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_stgBLT3
protected

Definition at line 591 of file fvstructuredsolver.h.

◆ m_stgBoxSize

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_stgBoxSize[3]
protected

Definition at line 600 of file fvstructuredsolver.h.

◆ m_stgCreateNewEddies

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_stgCreateNewEddies
protected

Definition at line 602 of file fvstructuredsolver.h.

◆ m_stgDelta99Inflow

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_stgDelta99Inflow
protected

Definition at line 592 of file fvstructuredsolver.h.

◆ m_stgEddieDistribution

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_stgEddieDistribution
protected

Definition at line 599 of file fvstructuredsolver.h.

◆ m_stgEddieLengthScales

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_stgEddieLengthScales
protected

Definition at line 606 of file fvstructuredsolver.h.

◆ m_stgEddies

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::m_stgEddies = nullptr
protected

Definition at line 595 of file fvstructuredsolver.h.

◆ m_stgExple

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_stgExple
protected

Definition at line 598 of file fvstructuredsolver.h.

◆ m_stgFace

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_stgFace
protected

Definition at line 609 of file fvstructuredsolver.h.

◆ m_stgInitialStartup

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_stgInitialStartup
protected

Definition at line 593 of file fvstructuredsolver.h.

◆ m_stgIsActive

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_stgIsActive
protected

Definition at line 588 of file fvstructuredsolver.h.

◆ m_stgLengthFactors

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_stgLengthFactors = nullptr
protected

Definition at line 610 of file fvstructuredsolver.h.

◆ m_stgLocal

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_stgLocal
protected

Definition at line 601 of file fvstructuredsolver.h.

◆ m_stgMaxNoEddies

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_stgMaxNoEddies
protected

Definition at line 597 of file fvstructuredsolver.h.

◆ m_stgMyRank

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_stgMyRank
protected

Definition at line 612 of file fvstructuredsolver.h.

◆ m_stgNoEddieProperties

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_stgNoEddieProperties
protected

Definition at line 594 of file fvstructuredsolver.h.

◆ m_stgNoEddies

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_stgNoEddies
protected

Definition at line 596 of file fvstructuredsolver.h.

◆ m_stgNoVariables

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_stgNoVariables
protected

Definition at line 604 of file fvstructuredsolver.h.

◆ m_stgRootRank

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_stgRootRank
protected

Definition at line 603 of file fvstructuredsolver.h.

◆ m_stgRSTFactors

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_stgRSTFactors = nullptr
protected

Definition at line 611 of file fvstructuredsolver.h.

◆ m_stgShapeFunction

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_stgShapeFunction
protected

Definition at line 605 of file fvstructuredsolver.h.

◆ m_stgSubSup

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_stgSubSup
protected

Definition at line 607 of file fvstructuredsolver.h.

◆ m_stgSupersonic

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_stgSupersonic
protected

Definition at line 608 of file fvstructuredsolver.h.

◆ m_streamwiseTravelingWave

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_streamwiseTravelingWave
protected

Definition at line 353 of file fvstructuredsolver.h.

◆ m_StructuredComm

template<MInt nDim>
MPI_Comm FvStructuredSolver< nDim >::m_StructuredComm

Definition at line 324 of file fvstructuredsolver.h.

◆ m_sutherlandConstant

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_sutherlandConstant
protected

Definition at line 450 of file fvstructuredsolver.h.

◆ m_sutherlandPlusOne

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_sutherlandPlusOne
protected

Definition at line 451 of file fvstructuredsolver.h.

◆ m_synchronizedMGOutput

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_synchronizedMGOutput
protected

Definition at line 347 of file fvstructuredsolver.h.

◆ m_targetDensityFactor

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_targetDensityFactor
protected

Definition at line 625 of file fvstructuredsolver.h.

◆ m_time

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_time
protected

Definition at line 556 of file fvstructuredsolver.h.

◆ m_timeRef

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_timeRef
protected

Definition at line 563 of file fvstructuredsolver.h.

◆ m_timerGroup

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_timerGroup = -1
protected

Definition at line 570 of file fvstructuredsolver.h.

◆ m_timers

template<MInt nDim>
std::array<MInt, Timers::_count> FvStructuredSolver< nDim >::m_timers {}
protected

Definition at line 572 of file fvstructuredsolver.h.

◆ m_timeStep

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_timeStep
protected

Definition at line 558 of file fvstructuredsolver.h.

◆ m_timeStepComputationInterval

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_timeStepComputationInterval
protected

Definition at line 562 of file fvstructuredsolver.h.

◆ m_timeStepConverged

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_timeStepConverged = false
private

Definition at line 914 of file fvstructuredsolver.h.

◆ m_timeStepMethod

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_timeStepMethod
protected

Definition at line 561 of file fvstructuredsolver.h.

◆ m_TInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_TInfinity
protected

Definition at line 814 of file fvstructuredsolver.h.

◆ m_TinfS

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_TinfS
protected

Definition at line 452 of file fvstructuredsolver.h.

◆ m_totalNoCells

template<MInt nDim>
MLong FvStructuredSolver< nDim >::m_totalNoCells
protected

Definition at line 648 of file fvstructuredsolver.h.

◆ m_travelingWave

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_travelingWave
protected

Definition at line 352 of file fvstructuredsolver.h.

◆ m_tripAirfoil

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_tripAirfoil
protected

Definition at line 863 of file fvstructuredsolver.h.

◆ m_tripCoords

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_tripCoords = nullptr
protected

Definition at line 859 of file fvstructuredsolver.h.

◆ m_tripCutoffZ

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_tripCutoffZ = nullptr
protected

Definition at line 846 of file fvstructuredsolver.h.

◆ m_tripDelta1

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_tripDelta1 = nullptr
protected

Definition at line 841 of file fvstructuredsolver.h.

◆ m_tripDeltaTime

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_tripDeltaTime = nullptr
protected

Definition at line 850 of file fvstructuredsolver.h.

◆ m_tripDomainWidth

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_tripDomainWidth
protected

Definition at line 861 of file fvstructuredsolver.h.

◆ m_tripG

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_tripG = nullptr
protected

Definition at line 853 of file fvstructuredsolver.h.

◆ m_tripH1

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_tripH1 = nullptr
protected

Definition at line 854 of file fvstructuredsolver.h.

◆ m_tripH2

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_tripH2 = nullptr
protected

Definition at line 855 of file fvstructuredsolver.h.

◆ m_tripMaxAmpFluc

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_tripMaxAmpFluc = nullptr
protected

Definition at line 848 of file fvstructuredsolver.h.

◆ m_tripMaxAmpSteady

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_tripMaxAmpSteady = nullptr
protected

Definition at line 847 of file fvstructuredsolver.h.

◆ m_tripModesG

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_tripModesG = nullptr
protected

Definition at line 856 of file fvstructuredsolver.h.

◆ m_tripModesH1

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_tripModesH1 = nullptr
protected

Definition at line 857 of file fvstructuredsolver.h.

◆ m_tripModesH2

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_tripModesH2 = nullptr
protected

Definition at line 858 of file fvstructuredsolver.h.

◆ m_tripNoCells

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_tripNoCells
protected

Definition at line 860 of file fvstructuredsolver.h.

◆ m_tripNoModes

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_tripNoModes
protected

Definition at line 849 of file fvstructuredsolver.h.

◆ m_tripNoTrips

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_tripNoTrips
protected

Definition at line 840 of file fvstructuredsolver.h.

◆ m_tripSeed

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_tripSeed
protected

Definition at line 852 of file fvstructuredsolver.h.

◆ m_tripTimeStep

template<MInt nDim>
MInt* FvStructuredSolver< nDim >::m_tripTimeStep = nullptr
protected

Definition at line 851 of file fvstructuredsolver.h.

◆ m_tripUseRestart

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_tripUseRestart
protected

Definition at line 862 of file fvstructuredsolver.h.

◆ m_tripXLength

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_tripXLength = nullptr
protected

Definition at line 843 of file fvstructuredsolver.h.

◆ m_tripXOrigin

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_tripXOrigin = nullptr
protected

Definition at line 842 of file fvstructuredsolver.h.

◆ m_tripYHeight

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_tripYHeight = nullptr
protected

Definition at line 845 of file fvstructuredsolver.h.

◆ m_tripYOrigin

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_tripYOrigin = nullptr
protected

Definition at line 844 of file fvstructuredsolver.h.

◆ m_UInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_UInfinity
protected

Definition at line 810 of file fvstructuredsolver.h.

◆ m_useAdiabaticRestartTemperature

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_useAdiabaticRestartTemperature
protected

Definition at line 832 of file fvstructuredsolver.h.

◆ m_useBlasius

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_useBlasius
protected

Definition at line 898 of file fvstructuredsolver.h.

◆ m_useConvectiveUnitWrite

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_useConvectiveUnitWrite
protected

Definition at line 799 of file fvstructuredsolver.h.

◆ m_useNonSpecifiedRestartFile

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_useNonSpecifiedRestartFile
protected

Definition at line 401 of file fvstructuredsolver.h.

◆ m_useSandpaperTrip

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_useSandpaperTrip
protected

Definition at line 839 of file fvstructuredsolver.h.

◆ m_useSponge

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_useSponge
protected

Definition at line 620 of file fvstructuredsolver.h.

◆ m_variableNames

template<MInt nDim>
MString* FvStructuredSolver< nDim >::m_variableNames = nullptr
protected

Definition at line 410 of file fvstructuredsolver.h.

◆ m_venkFactor

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_venkFactor
protected

Definition at line 685 of file fvstructuredsolver.h.

◆ m_VInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_VInfinity
protected

Definition at line 811 of file fvstructuredsolver.h.

◆ m_viscCompact

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_viscCompact
protected

Definition at line 692 of file fvstructuredsolver.h.

◆ m_volumeForce

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_volumeForce = nullptr
protected

Definition at line 439 of file fvstructuredsolver.h.

◆ m_volumeForceMethod

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_volumeForceMethod = 0
protected

Definition at line 440 of file fvstructuredsolver.h.

◆ m_volumeForceUpdateInterval

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_volumeForceUpdateInterval
protected

Definition at line 441 of file fvstructuredsolver.h.

◆ m_vorticityOutput

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_vorticityOutput
protected

Definition at line 403 of file fvstructuredsolver.h.

◆ m_VVInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_VVInfinity[3]
protected

Definition at line 818 of file fvstructuredsolver.h.

◆ m_wallVel

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_wallVel
protected

Definition at line 349 of file fvstructuredsolver.h.

◆ m_waveAmplitude

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveAmplitude
protected

Definition at line 359 of file fvstructuredsolver.h.

◆ m_waveAmplitudePlus

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveAmplitudePlus
protected

Definition at line 355 of file fvstructuredsolver.h.

◆ m_waveAmplitudePressure

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveAmplitudePressure
protected

Definition at line 361 of file fvstructuredsolver.h.

◆ m_waveAmplitudeSuction

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveAmplitudeSuction
protected

Definition at line 360 of file fvstructuredsolver.h.

◆ m_waveAngle

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveAngle
protected

Definition at line 376 of file fvstructuredsolver.h.

◆ m_waveBeginTransition

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveBeginTransition
protected

Definition at line 366 of file fvstructuredsolver.h.

◆ m_waveCellsPerWaveLength

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_waveCellsPerWaveLength
protected

Definition at line 381 of file fvstructuredsolver.h.

◆ m_waveDomainWidth

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveDomainWidth
protected

Definition at line 389 of file fvstructuredsolver.h.

◆ m_waveEndTransition

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveEndTransition
protected

Definition at line 367 of file fvstructuredsolver.h.

◆ m_waveForceField

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_waveForceField = nullptr
protected

Definition at line 385 of file fvstructuredsolver.h.

◆ m_waveForceFieldFile

template<MInt nDim>
MString FvStructuredSolver< nDim >::m_waveForceFieldFile
protected

Definition at line 388 of file fvstructuredsolver.h.

◆ m_waveForceY

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_waveForceY = nullptr
protected

Definition at line 386 of file fvstructuredsolver.h.

◆ m_waveForceZ

template<MInt nDim>
MFloat* FvStructuredSolver< nDim >::m_waveForceZ = nullptr
protected

Definition at line 387 of file fvstructuredsolver.h.

◆ m_waveGradientPressure

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveGradientPressure
protected

Definition at line 363 of file fvstructuredsolver.h.

◆ m_waveGradientSuction

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveGradientSuction
protected

Definition at line 362 of file fvstructuredsolver.h.

◆ m_waveLength

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveLength
protected

Definition at line 358 of file fvstructuredsolver.h.

◆ m_waveLengthPlus

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveLengthPlus
protected

Definition at line 354 of file fvstructuredsolver.h.

◆ m_waveNoStepsPerCell

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_waveNoStepsPerCell
protected

Definition at line 348 of file fvstructuredsolver.h.

◆ m_waveOutBeginTransition

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveOutBeginTransition
protected

Definition at line 368 of file fvstructuredsolver.h.

◆ m_waveOutEndTransition

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveOutEndTransition
protected

Definition at line 369 of file fvstructuredsolver.h.

◆ m_wavePenetrationHeight

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_wavePenetrationHeight
protected

Definition at line 382 of file fvstructuredsolver.h.

◆ m_wavePressureBeginTransition

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_wavePressureBeginTransition
protected

Definition at line 370 of file fvstructuredsolver.h.

◆ m_wavePressureEndTransition

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_wavePressureEndTransition
protected

Definition at line 371 of file fvstructuredsolver.h.

◆ m_wavePressureOutBeginTransition

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_wavePressureOutBeginTransition
protected

Definition at line 372 of file fvstructuredsolver.h.

◆ m_wavePressureOutEndTransition

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_wavePressureOutEndTransition
protected

Definition at line 373 of file fvstructuredsolver.h.

◆ m_waveRcvComm

template<MInt nDim>
std::vector<std::unique_ptr<StructuredComm<nDim> > > FvStructuredSolver< nDim >::m_waveRcvComm
protected

Definition at line 734 of file fvstructuredsolver.h.

◆ m_waveRestartFadeIn

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_waveRestartFadeIn
protected

Definition at line 379 of file fvstructuredsolver.h.

◆ m_waveSndComm

template<MInt nDim>
std::vector<std::unique_ptr<StructuredComm<nDim> > > FvStructuredSolver< nDim >::m_waveSndComm
protected

Definition at line 733 of file fvstructuredsolver.h.

◆ m_waveSpeed

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveSpeed
protected

Definition at line 364 of file fvstructuredsolver.h.

◆ m_waveSpeedPlus

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveSpeedPlus
protected

Definition at line 365 of file fvstructuredsolver.h.

◆ m_waveTemporalTransition

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveTemporalTransition
protected

Definition at line 377 of file fvstructuredsolver.h.

◆ m_waveTime

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveTime
protected

Definition at line 357 of file fvstructuredsolver.h.

◆ m_waveTimePlus

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveTimePlus
protected

Definition at line 356 of file fvstructuredsolver.h.

◆ m_waveTimeStepComputed

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_waveTimeStepComputed
protected

Definition at line 380 of file fvstructuredsolver.h.

◆ m_waveYBeginTransition

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveYBeginTransition
protected

Definition at line 374 of file fvstructuredsolver.h.

◆ m_waveYEndTransition

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_waveYEndTransition
protected

Definition at line 375 of file fvstructuredsolver.h.

◆ m_windowInfo

template<MInt nDim>
std::unique_ptr<FvStructuredSolverWindowInfo<nDim> > FvStructuredSolver< nDim >::m_windowInfo
protected

Definition at line 419 of file fvstructuredsolver.h.

◆ m_WInfinity

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_WInfinity
protected

Definition at line 812 of file fvstructuredsolver.h.

◆ m_workload

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_workload
protected

Definition at line 629 of file fvstructuredsolver.h.

◆ m_workloadIncrement

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_workloadIncrement
protected

Definition at line 630 of file fvstructuredsolver.h.

◆ m_zonal

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_zonal
protected

Definition at line 695 of file fvstructuredsolver.h.

◆ m_zonalAveragingFactor

template<MInt nDim>
MFloat FvStructuredSolver< nDim >::m_zonalAveragingFactor
protected

Definition at line 720 of file fvstructuredsolver.h.

◆ m_zonalExchangeInterval

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_zonalExchangeInterval
protected

Definition at line 702 of file fvstructuredsolver.h.

◆ m_zonalExponentialAveraging

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_zonalExponentialAveraging
protected

Definition at line 718 of file fvstructuredsolver.h.

◆ m_zonalRootRank

template<MInt nDim>
MBool FvStructuredSolver< nDim >::m_zonalRootRank = false
protected

Definition at line 714 of file fvstructuredsolver.h.

◆ m_zonalSpanwiseAvgVars

template<MInt nDim>
std::vector<MFloat*> FvStructuredSolver< nDim >::m_zonalSpanwiseAvgVars
protected

Definition at line 703 of file fvstructuredsolver.h.

◆ m_zonalStartAvgTime

template<MInt nDim>
MInt FvStructuredSolver< nDim >::m_zonalStartAvgTime
protected

Definition at line 719 of file fvstructuredsolver.h.

◆ m_zoneType

template<MInt nDim>
MString FvStructuredSolver< nDim >::m_zoneType
protected

Definition at line 699 of file fvstructuredsolver.h.

◆ mpi_rcvRequest

template<MInt nDim>
MPI_Request* FvStructuredSolver< nDim >::mpi_rcvRequest = nullptr
protected

Definition at line 744 of file fvstructuredsolver.h.

◆ mpi_sndRcvStatus

template<MInt nDim>
MPI_Status* FvStructuredSolver< nDim >::mpi_sndRcvStatus = nullptr
protected

Definition at line 745 of file fvstructuredsolver.h.

◆ mpi_sndRequest

template<MInt nDim>
MPI_Request* FvStructuredSolver< nDim >::mpi_sndRequest = nullptr
protected

Definition at line 743 of file fvstructuredsolver.h.

◆ pointProperties

template<MInt nDim>
MFloat** FvStructuredSolver< nDim >::pointProperties = nullptr
protected

Definition at line 414 of file fvstructuredsolver.h.

◆ PV

template<MInt nDim>
std::unique_ptr<MPrimitiveVariables<nDim> > FvStructuredSolver< nDim >::PV
protected

Definition at line 333 of file fvstructuredsolver.h.


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