48 std::size_t idxParticle, std::size_t idxSurface,
54 particles::creators::checkForErrors<PARTICLETYPE,ROTATION_IS_OPTIONAL>();
56 using namespace descriptors;
57 constexpr unsigned D = PARTICLETYPE::d;
61 auto& vectorOfIndicators = particleSystem.template getAssociatedData<
62 std::vector<std::unique_ptr<SIndicatorBaseType>>>();
63 auto sIndicatorPtr = vectorOfIndicators.at( idxSurface ).
get();
66 dynamics::initializeParticle<T,PARTICLETYPE>(particleSystem.
get().data(), idxParticle);
71 for (
unsigned iD=0; iD<D; ++iD) {
72 momentOfInertia[iD] = sIndicatorPtr->calcMofiAndMass(density)[iD];
76 momentOfInertia[0] = sIndicatorPtr->calcMofiAndMass(density)[0];
80 auto particle = particleSystem.
get( idxParticle );
81 particle.template setField<GENERAL,POSITION>( position );
82 particle.template setField<SURFACE,SINDICATOR>( sIndicatorPtr );
84 particle.template setField<MOBILITY,VELOCITY>( velocity );
89 if constexpr ( PARTICLETYPE::template providesNested<SURFACE,ROT_MATRIX>() ) {
92 particle.template setField<SURFACE,ROT_MATRIX>( rotationMatrix );
127 std::size_t idxParticle,
131 T shapeFactor = T{1})
133 using namespace descriptors;
134 using namespace access;
135 constexpr unsigned D = PARTICLETYPE::d;
139 particles::dynamics::initializeParticle<T,PARTICLETYPE>(
140 particleSystem.
get().data(), idxParticle);
143 auto particle = particleSystem.
get( idxParticle );
144 particle.template setField<GENERAL,POSITION>( position );
145 particle.template setField<MOBILITY,VELOCITY>( velocity );
146 particle.template setField<PHYSPROPERTIES,RADIUS>( radius );
157 momentOfInertia[0] = 0.5*mass*radius*radius;
160 particle.template setField<PHYSPROPERTIES,MOFI>( utilities::dimensions::convert<D>::serialize_rotation(momentOfInertia) );
constexpr std::size_t size()
Size of ParticleSystem.
void extend()
Extend particle system by one particle.
void setDensity(Particle< T, PARTICLETYPE > particle, T density, T shapeFactor=T{1})
T getMass(Particle< T, PARTICLETYPE > particle, T shapeFactor=T{1})
ParallelParticleLocator addResolvedObject(SuperParticleSystem< T, PARTICLETYPE > &sParticleSystem, std::size_t idxSurface, const Vector< T, PARTICLETYPE::d > &position, T density=0., const Vector< T, utilities::dimensions::convert< PARTICLETYPE::d >::rotation > &angleInDegree=Vector< T, utilities::dimensions::convert< PARTICLETYPE::d >::rotation >(0.), const Vector< T, PARTICLETYPE::d > &velocity=Vector< T, PARTICLETYPE::d >(0.), const Vector< bool, PARTICLETYPE::d > &periodicity=Vector< T, PARTICLETYPE::d >(false))
Particle< T, PARTICLETYPE > setSubgridObject(ParticleSystem< T, PARTICLETYPE > &particleSystem, std::size_t idxParticle, const Vector< T, PARTICLETYPE::d > &position, T radius, T density, const Vector< T, PARTICLETYPE::d > &velocity, T shapeFactor=T{1})
Set new particle (and return particle object)
void setResolvedObject(ParticleSystem< T, PARTICLETYPE > &particleSystem, std::size_t idxParticle, std::size_t idxSurface, const Vector< T, 2 > &position, T density, T angle, const Vector< T, 2 > &velocity)
Particle< T, PARTICLETYPE > addSubgridObject(ParticleSystem< T, PARTICLETYPE > &particleSystem, const Vector< T, PARTICLETYPE::d > &position, T radius, T density=0., const Vector< T, PARTICLETYPE::d > &velocity=Vector< T, PARTICLETYPE::d >(0.))
Add subgrid object as new particle (and return particle object)
std::conditional_t< D==2, SmoothIndicatorF2D< T, T, PARTICLE >, SmoothIndicatorF3D< T, T, PARTICLE > > SmoothIndicatorF