walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T > Class Template Reference

Detailed Description

template<typename FlagField_T, template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
class walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >

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< StructuredBlockStorageblockStorage_
 
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_
 

Member Typedef Documentation

◆ ForceDistributor_T

template<typename FlagField_T , template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
using walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::ForceDistributor_T = Distributor_T<Vec3Field_T, FlagField_T>

◆ ScalarField_T

template<typename FlagField_T , template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
using walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::ScalarField_T = GhostLayerField<real_t, 1>

◆ ScalarFieldInterpolator_T

template<typename FlagField_T , template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
using walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::ScalarFieldInterpolator_T = FieldInterpolator_T<ScalarField_T, FlagField_T>

◆ Vec3Field_T

template<typename FlagField_T , template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
using walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::Vec3Field_T = GhostLayerField<Vector3<real_t>, 1>

◆ Vec3FieldInterpolator_T

template<typename FlagField_T , template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
using walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::Vec3FieldInterpolator_T = FieldInterpolator_T<Vec3Field_T, FlagField_T>

Constructor & Destructor Documentation

◆ InteractionForceEvaluator()

template<typename FlagField_T , template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::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 
)
inline

Member Function Documentation

◆ operator()()

template<typename FlagField_T , template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
void walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::operator()

Member Data Documentation

◆ blockStorage_

template<typename FlagField_T , template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
shared_ptr<StructuredBlockStorage> walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::blockStorage_
private

◆ bodyStorageID_

template<typename FlagField_T , template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
const BlockDataID walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::bodyStorageID_ {}
private

◆ dpmBodySelectorFct_

template<typename FlagField_T , template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
std::function<bool(pe::BodyID)> walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::dpmBodySelectorFct_
private

◆ dragForceCorrelationFunction_

template<typename FlagField_T , template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
std::function<Vector3<real_t> const Vector3<real_t> &, const Vector3<real_t> &, real_t, real_t, real_t, real_t )> walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::dragForceCorrelationFunction_
private

◆ fluidDynamicViscosity_

template<typename FlagField_T , template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
real_t walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::fluidDynamicViscosity_
private

◆ forceDistributorID_

template<typename FlagField_T , template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
BlockDataID walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::forceDistributorID_
private

◆ pdfFieldID_

template<typename FlagField_T , template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
const BlockDataID walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::pdfFieldID_ {}
private

◆ pressureGradientFieldInterpolatorID_

template<typename FlagField_T , template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
BlockDataID walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::pressureGradientFieldInterpolatorID_
private

◆ solidVolumeFractionFieldInterpolatorID_

template<typename FlagField_T , template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
BlockDataID walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::solidVolumeFractionFieldInterpolatorID_
private

◆ velocityFieldInterpolatorID_

template<typename FlagField_T , template< typename, typename > class FieldInterpolator_T, template< typename, typename > class Distributor_T>
BlockDataID walberla::pe_coupling::discrete_particle_methods::InteractionForceEvaluator< FlagField_T, FieldInterpolator_T, Distributor_T >::velocityFieldInterpolatorID_
private

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