35#ifndef PARTICLE_CREATOR_FUNCTIONS_2D_H
36#define PARTICLE_CREATOR_FUNCTIONS_2D_H
49template<
typename T,
typename PARTICLETYPE,
bool ROTATION_IS_OPTIONAL=false>
52 std::size_t idxParticle, std::size_t idxSurface,
56 setResolvedObject<T,PARTICLETYPE,ROTATION_IS_OPTIONAL>( particleSystem, idxParticle, idxSurface, position, density,
61template<
typename T,
typename PARTICLETYPE>
64 const Vector<T,2>& position, T density=0., T angle=0.,
76template<
typename T,
typename PARTICLETYPE>
79 std::size_t idxParticle,
80 Vector<T,2> position, T radius, T epsilon, T density=0.,
83 using namespace descriptors;
87 std::unique_ptr<SIndicatorBaseType> sIndicatorPtr(
91 auto& vectorOfIndicators = particleSystem.template getAssociatedData<
92 std::vector<std::unique_ptr<SIndicatorBaseType>>>();
93 std::size_t idxSurface = vectorOfIndicators.
size();
94 vectorOfIndicators.push_back( std::move(sIndicatorPtr) );
97 if constexpr ( PARTICLETYPE::template providesNested<SURFACE,ROT_MATRIX>() ) {
99 clout <<
"WARNING: A rotation matrix is provided but is not necessary for a circle." << std::endl;
103 setResolvedObject<T,PARTICLETYPE,true>(particleSystem, idxParticle, idxSurface,
104 position, density, 0., velocity);
108template<
typename T,
typename PARTICLETYPE>
110 Vector<T,2> position, T radius, T epsilon, T density=0.,
114 std::size_t idxParticle = particleSystem.
size();
120 setResolvedCircle2D( particleSystem, idxParticle, position, radius, epsilon, density, velocity );
127template<
typename T,
typename PARTICLETYPE>
129 std::size_t idxParticle,
134 using namespace descriptors;
138 std::unique_ptr<SIndicatorBaseType> sIndicatorPtr(
142 auto& vectorOfIndicators = particleSystem.template getAssociatedData<
143 std::vector<std::unique_ptr<SIndicatorBaseType>>>();
144 std::size_t idxSurface = vectorOfIndicators.
size();
145 vectorOfIndicators.push_back( std::move(sIndicatorPtr) );
149 position, density, angle, velocity);
154template<
typename T,
typename PARTICLETYPE>
161 std::size_t idxParticle = particleSystem.
size();
168 extend, epsilon, density, angle, velocity );
175template<
typename T,
typename PARTICLETYPE>
177 std::size_t idxParticle,
178 Vector<T,2> position, T radius, T epsilon, T density=0.,
182 using namespace descriptors;
186 std::unique_ptr<SIndicatorBaseType> sIndicatorPtr(
190 auto& vectorOfIndicators = particleSystem.template getAssociatedData<
191 std::vector<std::unique_ptr<SIndicatorBaseType>>>();
192 std::size_t idxSurface = vectorOfIndicators.
size();
193 vectorOfIndicators.push_back( std::move(sIndicatorPtr) );
197 position, density, angle, velocity);
202template<
typename T,
typename PARTICLETYPE>
204 Vector<T,2> position, T radius, T epsilon, T density=0.,
209 std::size_t idxParticle = particleSystem.
size();
216 radius, epsilon, density, angle, velocity );
223template<
typename T,
typename PARTICLETYPE>
225 std::size_t idxParticle,
229 T epsilon, T density=0., T angle = 0.,
232 using namespace descriptors;
236 std::unique_ptr<SIndicatorBaseType> sIndicatorPtr(
240 auto& vectorOfIndicators = particleSystem.template getAssociatedData<
241 std::vector<std::unique_ptr<SIndicatorBaseType>>>();
242 std::size_t idxSurface = vectorOfIndicators.
size();
243 vectorOfIndicators.push_back( std::move(sIndicatorPtr) );
247 position, density, angle, velocity);
251template<
typename T,
typename PARTICLETYPE>
256 T epsilon, T density=0., T angle = 0.,
260 std::size_t idxParticle = particleSystem.
size();
267 epsilon, density, angle, velocity );
IndicatorF2D is an application from .
class for marking output with some text
implements a smooth circle in 2D with an _epsilon sector
implements a smooth cuboid in 2D with an _epsilon sector.
implements a smooth triangle in 2D with an _epsilon sector
constexpr std::size_t size()
Size of ParticleSystem.
void extend()
Extend particle system by one particle.
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))
void setResolvedArbitraryShape2D(ParticleSystem< T, PARTICLETYPE > &particleSystem, std::size_t idxParticle, Vector< T, 2 > position, T latticeSpacing, std::shared_ptr< IndicatorF2D< T > > indPtr, T epsilon, T density=0., T angle=0., Vector< T, 2 > velocity=Vector< T, 2 >(0.))
Set resolved cuboid for existing particle but new surface.
void setResolvedCuboid2D(ParticleSystem< T, PARTICLETYPE > &particleSystem, std::size_t idxParticle, Vector< T, 2 > position, Vector< T, 2 > extend, T epsilon, T density=0., T angle=0., Vector< T, 2 > velocity=Vector< T, 2 >(0.))
Set resolved cuboid for existing particle but new surface.
void addResolvedArbitraryShape2D(ParticleSystem< T, PARTICLETYPE > &particleSystem, Vector< T, 2 > position, T latticeSpacing, std::shared_ptr< IndicatorF2D< T > > indPtr, T epsilon, T density=0., T angle=0., Vector< T, 2 > velocity=Vector< T, 2 >(0.))
Add resolved arbitrary shape as new particle with new surface.
void addResolvedCuboid2D(ParticleSystem< T, PARTICLETYPE > &particleSystem, Vector< T, 2 > position, Vector< T, 2 > extend, T epsilon, T density=0., T angle=0., Vector< T, 2 > velocity=Vector< T, 2 >(0.))
Add resolved cuboid as new particle with new surface.
void setResolvedCircle2D(ParticleSystem< T, PARTICLETYPE > &particleSystem, std::size_t idxParticle, Vector< T, 2 > position, T radius, T epsilon, T density=0., Vector< T, 2 > velocity=Vector< T, 2 >(0.))
Set resolved circle for existing particle but new surface.
ParallelParticleLocator addResolvedCircle2D(SuperParticleSystem< T, PARTICLETYPE > &sParticleSystem, const Vector< T, 2 > &position, T radius, T epsilon, T density=0., const Vector< T, 2 > &velocity=Vector< T, 2 >(0.), const Vector< bool, 2 > &periodicity=Vector< bool, 2 >(false))
void addResolvedTriangle2D(ParticleSystem< T, PARTICLETYPE > &particleSystem, Vector< T, 2 > position, T radius, T epsilon, T density=0., T angle=0., Vector< T, 2 > velocity=Vector< T, 2 >(0.))
Add resolved triangle as new particle with new surface.
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)
void setResolvedTriangle2D(ParticleSystem< T, PARTICLETYPE > &particleSystem, std::size_t idxParticle, Vector< T, 2 > position, T radius, T epsilon, T density=0., T angle=0., Vector< T, 2 > velocity=Vector< T, 2 >(0.))
Set resolved cuboid for existing particle but new surface.
Top level namespace for all of OpenLB.
Converts dimensions by deriving from given cartesian dimension D.