Evaluator of the two most important interaction forces: drag and pressure gradient.
The evaluation of the drag force is based on the given drag correlation. The pressure gradient force requires a valid pressure gradient field. These two forces are evaluated for each body (requires interpolation of several quantities from the fluid fields) and then applied onto them. However, only the drag force (with negative sign) is applied (i.e. distributed) onto the fluid since it is assumed that the pressure force is already implicitly included in the formulation of the equations that describe the fluid flow.
Note that the fluid velocity, contained in the velocityField, has to be the fluid-phase velocity (and not the volume-averaged velocity).
Whether or not a body gets treated by the evaluator depends on the return value of 'dpmBodySelectorFct'.
For more infos on interpolators, see field interpolators in src/field/interpolators. For more infos on distributors, see src/field/distributors.
#include <InteractionForceEvaluator.h>
Public Types | |
using | Vec3Field_T = GhostLayerField< Vector3< real_t >, 1 > |
using | ScalarField_T = GhostLayerField< real_t, 1 > |
using | Vec3FieldInterpolator_T = FieldInterpolator_T< Vec3Field_T, FlagField_T > |
using | ScalarFieldInterpolator_T = FieldInterpolator_T< ScalarField_T, FlagField_T > |
using | ForceDistributor_T = Distributor_T< Vec3Field_T, FlagField_T > |
Public Member Functions | |
InteractionForceEvaluator (const shared_ptr< StructuredBlockStorage > &blockStorage, const BlockDataID &forceFieldID, const BlockDataID &bodyStorageID, const BlockDataID &flagFieldID, const Set< FlagUID > &domainFlags, const BlockDataID &velocityFieldID, const BlockDataID &solidVolumeFractionFieldID, const BlockDataID &pressureGradientFieldID, const std::function< Vector3< real_t >(const Vector3< real_t > &, const Vector3< real_t > &, real_t, real_t, real_t, real_t)> &dragForceCorrelationFunction, real_t fluidDynamicViscosity, const std::function< bool(pe::BodyID)> &dpmBodySelectorFct=selectRegularBodies) | |
void | operator() () |
Private Attributes | |
shared_ptr< StructuredBlockStorage > | blockStorage_ |
const BlockDataID | bodyStorageID_ {} |
const BlockDataID | pdfFieldID_ {} |
std::function< Vector3< real_t > const Vector3< real_t > &, const Vector3< real_t > &, real_t, real_t, real_t, real_t)> | dragForceCorrelationFunction_ |
real_t | fluidDynamicViscosity_ |
std::function< bool(pe::BodyID)> | dpmBodySelectorFct_ |
BlockDataID | velocityFieldInterpolatorID_ |
BlockDataID | solidVolumeFractionFieldInterpolatorID_ |
BlockDataID | pressureGradientFieldInterpolatorID_ |
BlockDataID | forceDistributorID_ |
using walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::ForceDistributor_T = Distributor_T<Vec3Field_T, FlagField_T> |
using walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::ScalarField_T = GhostLayerField<real_t, 1> |
using walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::ScalarFieldInterpolator_T = FieldInterpolator_T<ScalarField_T, FlagField_T> |
using walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::Vec3Field_T = GhostLayerField<Vector3<real_t>, 1> |
using walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::Vec3FieldInterpolator_T = FieldInterpolator_T<Vec3Field_T, FlagField_T> |
|
inline |
void walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::operator() |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |