mirror of
https://github.com/PhasicFlow/phasicFlow.git
synced 2025-06-22 16:28:30 +00:00
227 lines
4.5 KiB
C++
227 lines
4.5 KiB
C++
/*------------------------------- phasicFlow
|
|
--------------------------------- O C enter of O O E
|
|
ngineering and O O M ultiscale modeling of OOOOOOO F luid
|
|
flow
|
|
------------------------------------------------------------------------------
|
|
Copyright (C): www.cemf.ir
|
|
email: hamid.r.norouzi AT gmail.com
|
|
------------------------------------------------------------------------------
|
|
Licence:
|
|
This file is part of phasicFlow code. It is a free software for
|
|
simulating granular and multiphase flows. You can redistribute it
|
|
and/or modify it under the terms of GNU General Public License v3 or
|
|
any other later versions.
|
|
|
|
phasicFlow is distributed to help others in their research in the
|
|
field of granular and multiphase flows, but WITHOUT ANY WARRANTY;
|
|
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
PARTICULAR PURPOSE.
|
|
|
|
-----------------------------------------------------------------------------*/
|
|
|
|
#ifndef __particles_hpp__
|
|
#define __particles_hpp__
|
|
|
|
#include "demComponent.hpp"
|
|
#include "dynamicPointStructure.hpp"
|
|
#include "particleIdHandler.hpp"
|
|
//#include "shape.hpp"
|
|
|
|
namespace pFlow
|
|
{
|
|
|
|
|
|
class shape;
|
|
|
|
class particles
|
|
: public observer
|
|
, public demComponent
|
|
{
|
|
private:
|
|
|
|
/// dynamic point structure for particles center mass
|
|
dynamicPointStructure dynPointStruct_;
|
|
|
|
/// shape index of each particle
|
|
uint32PointField_D shapeIndex_;
|
|
|
|
/// contact force field
|
|
realx3PointField_D contactForce_;
|
|
|
|
/// contact torque field
|
|
realx3PointField_D contactTorque_;
|
|
|
|
/// handling new ids for new particles
|
|
uniquePtr<particleIdHandler> idHandler_ = nullptr;
|
|
|
|
Timer baseFieldBoundaryUpdateTimer_;
|
|
|
|
/// messages for this objects
|
|
static inline const message defaultMessage_= message::Empty();
|
|
|
|
protected:
|
|
|
|
void zeroForce()
|
|
{
|
|
contactForce_.fill(zero3);
|
|
}
|
|
|
|
void zeroTorque()
|
|
{
|
|
contactTorque_.fill(zero3);
|
|
}
|
|
|
|
inline auto& dynPointStruct()
|
|
{
|
|
return dynPointStruct_;
|
|
}
|
|
|
|
inline auto& pointPosition()
|
|
{
|
|
return dynPointStruct_.pointPosition();
|
|
}
|
|
|
|
inline auto& idHandler()
|
|
{
|
|
return idHandler_();
|
|
}
|
|
|
|
inline auto& shapeIndex()
|
|
{
|
|
return shapeIndex_;
|
|
}
|
|
|
|
public:
|
|
|
|
// type info
|
|
TypeInfo("particles");
|
|
|
|
explicit particles(systemControl& control, const shape& shapes);
|
|
|
|
inline const auto& dynPointStruct() const
|
|
{
|
|
return dynPointStruct_;
|
|
}
|
|
|
|
inline const pointStructure& pStruct() const
|
|
{
|
|
return dynPointStruct_;
|
|
}
|
|
|
|
inline const auto& simDomain() const
|
|
{
|
|
return dynPointStruct_.simDomain();
|
|
}
|
|
|
|
inline const auto& thisDomain() const
|
|
{
|
|
return dynPointStruct_.thisDomain();
|
|
}
|
|
|
|
inline const auto& extendedDomain() const
|
|
{
|
|
return dynPointStruct_.extendedDomain();
|
|
}
|
|
|
|
inline auto size() const
|
|
{
|
|
return dynPointStruct_.size();
|
|
}
|
|
|
|
inline auto capacity() const
|
|
{
|
|
return dynPointStruct_.capacity();
|
|
}
|
|
|
|
inline auto numActive() const
|
|
{
|
|
return dynPointStruct_.numActive();
|
|
}
|
|
|
|
inline bool isAllActive() const
|
|
{
|
|
return dynPointStruct_.isAllActive();
|
|
}
|
|
|
|
inline const auto& pointPosition() const
|
|
{
|
|
return dynPointStruct_.pointPosition();
|
|
}
|
|
|
|
inline const auto& velocity() const
|
|
{
|
|
return dynPointStruct_.velocity();
|
|
}
|
|
|
|
inline const auto& acceleration() const
|
|
{
|
|
return dynPointStruct_.acceleration();
|
|
}
|
|
|
|
inline auto& acceleration()
|
|
{
|
|
return dynPointStruct_.acceleration();
|
|
}
|
|
|
|
inline auto& contactForce()
|
|
{
|
|
return contactForce_;
|
|
}
|
|
|
|
inline const auto& contactForce() const
|
|
{
|
|
return contactForce_;
|
|
}
|
|
|
|
inline auto& contactTorque()
|
|
{
|
|
return contactTorque_;
|
|
}
|
|
|
|
inline const auto& contactTorque() const
|
|
{
|
|
return contactTorque_;
|
|
}
|
|
|
|
inline
|
|
uint maxId()const
|
|
{
|
|
return idHandler_().maxId();
|
|
}
|
|
|
|
bool beforeIteration() override;
|
|
|
|
bool iterate() override;
|
|
|
|
bool afterIteration() override;
|
|
|
|
virtual bool insertParticles(
|
|
const realx3Vector& position,
|
|
const wordVector& shapesNames,
|
|
const anyList& setVarList
|
|
) = 0;
|
|
|
|
virtual const uint32PointField_D& propertyId() const = 0;
|
|
|
|
virtual const realPointField_D& diameter() const = 0;
|
|
|
|
virtual const realPointField_D& mass() const = 0;
|
|
|
|
virtual realx3PointField_D& rAcceleration() = 0;
|
|
|
|
virtual const realx3PointField_D& rAcceleration() const = 0;
|
|
|
|
virtual const realPointField_D& boundingSphere() const = 0;
|
|
|
|
virtual word shapeTypeName() const = 0;
|
|
|
|
virtual const shape& getShapes() const = 0;
|
|
|
|
virtual void boundingSphereMinMax(real& minDiam, real& maxDiam) const = 0;
|
|
|
|
}; // particles
|
|
|
|
} // namespace pFlow
|
|
|
|
#endif //__particles_hpp__
|