Level determination for refinement check based on local curl.
If (scaled) vorticity magnitude is below lowerLimit in all cells of a block, that block could be coarsened. If the (scaled) vorticity value is above the upperLimit for at least one cell, that block gets marked for refinement. Else, the block remains on the current level.
The scaling originates from neglecting the actual mesh size on the block to obtain different vorticity values for different mesh sizes.
Parametes upperLimit corresponds to sigma_c, coarsenFactor to c, lowerLimit to c*sigma_c, lengthScaleWeight to r.
#include <CurlBasedLevelDetermination.h>
Public Types | |
using | VectorField_T = GhostLayerField< Vector3< real_t >, 1 > |
Public Member Functions | |
CurlBasedLevelDetermination (const ConstBlockDataID &fieldID, const StructuredBlockForest &structuredBlockForest, const Filter_T &filter, const uint_t maxLevel, const real_t upperLimit, const real_t lowerLimit, const real_t lengthScaleWeight=real_t(2)) | |
void | operator() (std::vector< std::pair< const Block *, uint_t > > &minTargetLevels, std::vector< const Block * > &blocksAlreadyMarkedForRefinement, const BlockForest &forest) |
Private Attributes | |
ConstBlockDataID | fieldID_ |
const StructuredBlockForest & | structuredBlockForest_ |
Filter_T | filter_ |
uint_t | maxLevel_ |
real_t | upperLimitSqr_ |
real_t | lowerLimitSqr_ |
real_t | lengthScaleWeight_ |
using walberla::lbm::refinement::CurlBasedLevelDetermination< Filter_T >::VectorField_T = GhostLayerField<Vector3<real_t>, 1> |
|
inline |
void walberla::lbm::refinement::CurlBasedLevelDetermination< Filter_T >::operator() | ( | std::vector< std::pair< const Block *, uint_t > > & | minTargetLevels, |
std::vector< const Block * > & | blocksAlreadyMarkedForRefinement, | ||
const BlockForest & | forest | ||
) |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |