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

Detailed Description

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

Evaluator of the solid volume fraction field.

Updates the solid volume fraction field. Includes firstly removing all old entries from the field, then remapping the local bodies' volumes to the cells. Potentially writes to the ghost layer of the solid volume fraction field which thus requires a special PullReducion communication afterwards.

Depending on the used Distributor_T, the resulting solid volume fraction field will vary:

  • NearestNeighborDistributor: Corresponds to simply assigning the total body volume to the cell containing the body center.
  • KernelDistributor: The body's volume is not directly assigned to one cell only but spread over the neighboring cells as well. See Finn, Li, Apte - "Particle based modelling and simulation of natural sand dynamics in the wave bottom boundary layer" (2016) for the application, even though different kernel was used there.

Whether or not a body gets treated by the evaluator depends on the return value of 'dpmBodySelectorFct'.

For more infos on distributors, see src/field/distributors.

#include <SolidVolumeFractionFieldEvaluator.h>

Public Types

using ScalarField_T = GhostLayerField< real_t, 1 >
 
using ScalarDistributor_T = Distributor_T< ScalarField_T, FlagField_T >
 

Public Member Functions

 SolidVolumeFractionFieldEvaluator (const shared_ptr< StructuredBlockStorage > &blockStorage, const BlockDataID &solidVolumeFractionFieldID, const BlockDataID &bodyStorageID, const BlockDataID &flagFieldID, const Set< FlagUID > &domainFlags, const std::function< bool(pe::BodyID)> &dpmBodySelectorFct=selectRegularBodies)
 
void operator() (IBlock *const block)
 

Private Attributes

shared_ptr< StructuredBlockStorageblockStorage_
 
BlockDataID solidVolumeFractionFieldID_
 
BlockDataID bodyStorageID_
 
std::function< bool(pe::BodyID)> dpmBodySelectorFct_
 
BlockDataID scalarDistributorID_
 

Member Typedef Documentation

◆ ScalarDistributor_T

template<typename FlagField_T , template< typename, typename > class Distributor_T>
using walberla::pe_coupling::discrete_particle_methods::SolidVolumeFractionFieldEvaluator< FlagField_T, Distributor_T >::ScalarDistributor_T = Distributor_T<ScalarField_T, FlagField_T>

◆ ScalarField_T

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

Constructor & Destructor Documentation

◆ SolidVolumeFractionFieldEvaluator()

template<typename FlagField_T , template< typename, typename > class Distributor_T>
walberla::pe_coupling::discrete_particle_methods::SolidVolumeFractionFieldEvaluator< FlagField_T, Distributor_T >::SolidVolumeFractionFieldEvaluator ( const shared_ptr< StructuredBlockStorage > &  blockStorage,
const BlockDataID solidVolumeFractionFieldID,
const BlockDataID bodyStorageID,
const BlockDataID flagFieldID,
const Set< FlagUID > &  domainFlags,
const std::function< bool(pe::BodyID)> &  dpmBodySelectorFct = selectRegularBodies 
)
inline

Member Function Documentation

◆ operator()()

template<typename FlagField_T , template< typename, typename > class Distributor_T>
void walberla::pe_coupling::discrete_particle_methods::SolidVolumeFractionFieldEvaluator< FlagField_T, Distributor_T >::operator() ( IBlock *const  block)
inline

Member Data Documentation

◆ blockStorage_

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

◆ bodyStorageID_

template<typename FlagField_T , template< typename, typename > class Distributor_T>
BlockDataID walberla::pe_coupling::discrete_particle_methods::SolidVolumeFractionFieldEvaluator< FlagField_T, Distributor_T >::bodyStorageID_
private

◆ dpmBodySelectorFct_

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

◆ scalarDistributorID_

template<typename FlagField_T , template< typename, typename > class Distributor_T>
BlockDataID walberla::pe_coupling::discrete_particle_methods::SolidVolumeFractionFieldEvaluator< FlagField_T, Distributor_T >::scalarDistributorID_
private

◆ solidVolumeFractionFieldID_

template<typename FlagField_T , template< typename, typename > class Distributor_T>
BlockDataID walberla::pe_coupling::discrete_particle_methods::SolidVolumeFractionFieldEvaluator< FlagField_T, Distributor_T >::solidVolumeFractionFieldID_
private

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