36template<
typename T,
typename PARTICLETYPE>
struct ParticleDynamics;
41template <
typename T,
typename PARTICLETYPE>
45 DATA& _dynamicFieldGroupsD;
46 std::vector<std::shared_ptr<dynamics::ParticleDynamics<T,PARTICLETYPE>>>& _dynamicsVector;
47 std::size_t _iParticle;
51 std::size_t iParticle );
57 template<bool multiOutput=PARTICLETYPE::template providesNested<descriptors::PARALLELIZATION>()>
58 void print(std::size_t iParticle);
59 template<bool multiOutput=PARTICLETYPE::template providesNested<descriptors::PARALLELIZATION>()>
63 std::size_t
getId()
const;
66 void setId( std::size_t iParticle );
75 template <
typename DYNAMICS,
typename ...Args>
79 template<
bool boundsCheck=false>
83 void process(T timeStepSize,
unsigned short iDyn=0);
88 template <
typename GROUP,
typename FIELD>
90 PARTICLETYPE::template size<
91 typename PARTICLETYPE::template derivedField<GROUP>::template derivedField<FIELD>
94 typename PARTICLETYPE::template derivedField<GROUP>::template derivedField<FIELD>>>
98 template <
typename GROUP,
typename FIELD>
100 PARTICLETYPE::template size<
101 typename PARTICLETYPE::template derivedField<GROUP>::template derivedField<FIELD>
103 typename PARTICLETYPE::template derivedField<GROUP>::template derivedField<FIELD>::template value_type<T>>
107 template <
typename GROUP,
typename FIELD>
109 PARTICLETYPE::template size<
110 typename PARTICLETYPE::template derivedField<GROUP>::template derivedField<FIELD>
114 typename PARTICLETYPE::template derivedField<GROUP>
115 ::template derivedField<FIELD>>& v);
118 template <
typename GROUP,
typename FIELD>
120 PARTICLETYPE::template size<
121 typename PARTICLETYPE::template derivedField<GROUP>::template derivedField<FIELD>
124 setField(
typename PARTICLETYPE::template derivedField<GROUP>
125 ::template derivedField<FIELD>
126 ::template value_type<T> value );
137 const std::vector<unsigned int> indices{
static_cast<unsigned int>(_iParticle)};
142 const std::vector<unsigned int> indices{
static_cast<unsigned int>(_iParticle)};
143 return Communicatable(_dynamicFieldGroupsD).serialize(indices, buffer);
147 const std::vector<unsigned int> indices{
static_cast<unsigned int>(_iParticle)};
148 return Communicatable(_dynamicFieldGroupsD).deserialize(indices, buffer);
Storage for dynamic field groups (Prototype for ParticleSystem)
std::enable_if_t<(PARTICLETYPE::template size< typename PARTICLETYPE::template derivedField< GROUP >::template derivedField< FIELD > >() > 1), void > setField(const FieldD< T, PARTICLETYPE, typename PARTICLETYPE::template derivedField< GROUP > ::template derivedField< FIELD > > &v)
Set descriptor-declared FIELD.
std::size_t getId() const
Return memory ID of the currently represented particle.
std::size_t deserialize(const std::uint8_t *buffer)
Deserialize data.
void addDynamics(std::shared_ptr< dynamics::ParticleDynamics< T, PARTICLETYPE > > &dynamicsSPtr)
Add dynamics.
std::size_t getSerialSize() const
Get serialized size.
void advanceId()
Jump to next particle in linearization sequence.
typename GroupedDataCommunicatableHelper< DATA, PARTICLETYPE >::type Communicatable
Define Communicatable.
dynamics::ParticleDynamics< T, PARTICLETYPE > * getDynamics(unsigned iDyn=0)
Get a pointer to specific dynamics.
void defineDynamics(Args &&...args)
Define dynamics (factory method)
Particle(DATA &dynamicFieldGroupsD, std::vector< std::shared_ptr< dynamics::ParticleDynamics< T, PARTICLETYPE > > > &dynamicsVector, std::size_t iParticle)
std::enable_if_t<(PARTICLETYPE::template size< typename PARTICLETYPE::template derivedField< GROUP >::template derivedField< FIELD > >() > 1), FieldD< T, PARTICLETYPE, typename PARTICLETYPE::template derivedField< GROUP >::template derivedField< FIELD > > getField()
Return copy of descriptor-declared FIELD as a vector.
std::enable_if_t<(PARTICLETYPE::templatesize< typenamePARTICLETYPE::templatederivedField< GROUP >::templatederivedField< FIELD > >()==1), typenamePARTICLETYPE::templatederivedField< GROUP >::template derivedField< FIELD >::template value_type< T > getField()
Return copy of descriptor-declared FIELD as a scalar (more specifically as value type of FIELD)
void process(T timeStepSize, unsigned short iDyn=0)
Apply processing to the particle according to dynamics at iDyn.
void setId(std::size_t iParticle)
Jump to arbitrary particle memory ID.
Communicatable getCommunicatable()
Get communicatable necessary for serialization.
std::size_t serialize(std::uint8_t *buffer) const
Serialize data.
Top level namespace for all of OpenLB.
typename DESCRIPTOR::template decompose_into< CurriedFieldGroupsCommunicatable > type