Commit c19e0ad7 authored by Sebastian Eibl's avatar Sebastian Eibl
Browse files

[UPDATE] thermal extension fully supports linear expansion

parent 95121137
Pipeline #24470 passed with stages
in 272 minutes and 1 second
......@@ -32,30 +32,13 @@
namespace walberla {
namespace mesa_pd {
class ContactDetection
class ContactDetection : public collision_detection::AnalyticContactDetection
{
public:
size_t& getIdx1() {return idx1_;}
size_t& getIdx2() {return idx2_;}
Vec3& getContactPoint() {return contactPoint_;}
Vec3& getContactNormal() {return contactNormal_;}
real_t& getPenetrationDepth() {return penetrationDepth_;}
const size_t& getIdx1() const {return idx1_;}
const size_t& getIdx2() const {return idx2_;}
const Vec3& getContactPoint() const {return contactPoint_;}
const Vec3& getContactNormal() const {return contactNormal_;}
const real_t& getPenetrationDepth() const {return penetrationDepth_;}
real_t& getContactThreshold() {return contactThreshold_;}
template <typename GEO1_T, typename GEO2_T, typename Accessor>
bool operator()( const size_t idx1,
const size_t idx2,
const GEO1_T& geo1,
const GEO2_T& geo2,
Accessor& ac);
///import all collision detection functions from AnalyticContactDetection
using AnalyticContactDetection::operator();
///overwrite functions that should be different
template <typename Accessor>
bool operator()( const size_t idx1,
const size_t idx2,
......@@ -69,34 +52,8 @@ public:
const data::Sphere& s,
const data::HalfSpace& p,
Accessor& ac );
template <typename Accessor>
bool operator()( const size_t idx1,
const size_t idx2,
const data::HalfSpace& p,
const data::Sphere& s,
Accessor& ac);
private:
size_t idx1_;
size_t idx2_;
Vec3 contactPoint_;
Vec3 contactNormal_;
real_t penetrationDepth_;
real_t contactThreshold_ = real_t(0.0);
};
template <typename GEO1_T, typename GEO2_T, typename Accessor>
inline bool ContactDetection::operator()( const size_t /*idx1*/,
const size_t /*idx2*/,
const GEO1_T& /*geo1*/,
const GEO2_T& /*geo2*/,
Accessor& /*ac*/)
{
WALBERLA_ABORT("Collision not implemented!")
}
template <typename Accessor>
inline bool ContactDetection::operator()( const size_t idx1,
const size_t idx2,
......@@ -114,9 +71,9 @@ inline bool ContactDetection::operator()( const size_t idx1,
getIdx1() = idx1;
getIdx2() = idx2;
return detectSphereSphereCollision(ac.getPosition(getIdx1()),
ac.getRadius(getIdx1()),
ac.getRadiusAtTemperature(getIdx1()),
ac.getPosition(getIdx2()),
ac.getRadius(getIdx2()),
ac.getRadiusAtTemperature(getIdx2()),
getContactPoint(),
getContactNormal(),
getPenetrationDepth(),
......@@ -136,7 +93,7 @@ inline bool ContactDetection::operator()( const size_t idx1,
getIdx1() = idx1;
getIdx2() = idx2;
return detectSphereHalfSpaceCollision(ac.getPosition(getIdx1()),
ac.getRadius(getIdx1()),
ac.getRadiusAtTemperature(getIdx1()),
ac.getPosition(getIdx2()),
p.getNormal(),
getContactPoint(),
......@@ -145,26 +102,5 @@ inline bool ContactDetection::operator()( const size_t idx1,
getContactThreshold());
}
template <typename Accessor>
inline bool ContactDetection::operator()( const size_t idx1,
const size_t idx2,
const data::HalfSpace& p,
const data::Sphere& s,
Accessor& ac)
{
return operator()(idx2, idx1, s, p, ac);
}
inline
std::ostream& operator<<( std::ostream& os, const ContactDetection& ac )
{
os << "idx1: " << ac.getIdx1() << "\n" <<
"idx2: " << ac.getIdx2() << "\n" <<
"contact point: " << ac.getContactPoint() << "\n" <<
"contact normal: " << ac.getContactNormal() << "\n" <<
"penetration depth: " << ac.getPenetrationDepth() << std::endl;
return os;
}
} //namespace mesa_pd
} //namespace walberla
......@@ -18,6 +18,17 @@
//
//======================================================================================================================
//======================================================================================================================
// This showcase combines a classic spring-dashpot interaction model with heat conduction and linear thermal expansion.
//
// First, a set of spheres is dropped onto a plate. The setup is periodic in horizontal directions. The plate as well
// as the spheres shares the same initial temperature. After the spheres have settled, the plate is heated and cooled
// down in a sinus wave. Through thermal conduction the heat is transported through the pile of spheres. At the same
// time a linear thermal expansion model makes the spheres grow and shrink. The parameters are chosen for a visual
// effect and are far to large for a realistic physical simulation. The evolution of the simulation is written to disk
// as vtk files which can be visualized with paraview.
//======================================================================================================================
#include <mesa_pd/vtk/ParticleVtkOutput.h>
#include <mesa_pd/collision_detection/BroadPhase.h>
......@@ -179,7 +190,7 @@ int main( int argc, char ** argv )
p->getOwnerRef() = walberla::mpi::MPIManager::instance()->rank();
p->getTypeRef() = 0;
p->setTemperature( 273 );
p->setRadius(radius);
p->setRadiusAtTemperature(radius);
}
}
int64_t numParticles = int64_c(ps->size());
......@@ -197,7 +208,7 @@ int main( int argc, char ** argv )
auto vtkWriter = walberla::vtk::createVTKOutput_PointData(vtkOutput, "particles", 1, "vtk", "simulation_step", false, false);
vtkOutput->addOutput<data::SelectParticleOwner>("owner");
vtkOutput->addOutput<data::SelectParticleTemperature>("temperature");
vtkOutput->addOutput<data::SelectParticleRadius>("radius");
vtkOutput->addOutput<data::SelectParticleRadiusAtTemperature>("radius");
vtkOutput->addOutput<data::SelectParticleLinearVelocity>("linVel");
vtkOutput->setParticleSelector([smallSphere](const data::ParticleStorage::iterator& pIt){ return pIt->getShapeID() == smallSphere;});
vtkDomainOutput->write();
......
......@@ -30,20 +30,53 @@ namespace kernel {
class ThermalExpansion
{
public:
ThermalExpansion() = default;
ThermalExpansion(const uint_t numParticleTypes);
ThermalExpansion(const ThermalExpansion& other) = default;
ThermalExpansion(ThermalExpansion&& other) = default;
ThermalExpansion& operator=(const ThermalExpansion& other) = default;
ThermalExpansion& operator=(ThermalExpansion&& other) = default;
void setLinearExpansionCoefficient(const size_t type, const real_t& val);
real_t getLinearExpansionCoefficient(const size_t type) const;
template <typename Accessor>
void operator()(const size_t i, Accessor& ac) const;
void operator()(const size_t p_idx, Accessor& ac) const;
private:
uint_t numParticleTypes_;
std::vector<real_t> linearExpansionCoefficient_ {};
};
ThermalExpansion::ThermalExpansion(const uint_t numParticleTypes)
{
numParticleTypes_ = numParticleTypes;
linearExpansionCoefficient_.resize(numParticleTypes, real_t(0));
}
inline void ThermalExpansion::setLinearExpansionCoefficient(const size_t type, const real_t& val)
{
WALBERLA_ASSERT_LESS( type, numParticleTypes_ );
linearExpansionCoefficient_[type] = val;
}
inline real_t ThermalExpansion::getLinearExpansionCoefficient(const size_t type) const
{
WALBERLA_ASSERT_LESS( type, numParticleTypes_ );
return linearExpansionCoefficient_[type];
}
template <typename Accessor>
inline void ThermalExpansion::operator()(const size_t idx,
inline void ThermalExpansion::operator()(const size_t p_idx,
Accessor& ac) const
{
static_assert(std::is_base_of<data::IAccessor, Accessor>::value, "please provide a valid accessor");
ac.setRadius(idx, real_t(0.004) + (ac.getTemperature(idx)-real_t(273)) * real_t(0.002) * real_t(0.001));
ac.setInteractionRadius(idx, ac.getRadius(idx));
const auto Tc = ac.getTemperature(p_idx)-real_t(273);
ac.setRadiusAtTemperature(p_idx, ac.getRadius273K(p_idx) * (real_t(1) + Tc * getLinearExpansionCoefficient(ac.getType(p_idx))));
ac.setInteractionRadius(p_idx, ac.getRadiusAtTemperature(p_idx));
}
} //namespace kernel
......
......@@ -28,7 +28,7 @@ if __name__ == '__main__':
ps.add_property("torque", "walberla::mesa_pd::Vec3", defValue="real_t(0)", syncMode="NEVER")
ps.add_property("oldTorque", "walberla::mesa_pd::Vec3", defValue="real_t(0)", syncMode="ON_OWNERSHIP_CHANGE")
ps.add_property("radius", "walberla::real_t", defValue="real_t(0)", syncMode="ALWAYS")
ps.add_property("radiusAtTemperature", "walberla::real_t", defValue="real_t(0)", syncMode="ALWAYS")
ps.add_include("blockforest/BlockForest.h")
ps.add_property("currentBlock", "blockforest::BlockID", defValue="", syncMode="NEVER")
......
......@@ -108,9 +108,9 @@ public:
walberla::mesa_pd::Vec3& getOldTorqueRef(const size_t p_idx) {return ps_->getOldTorqueRef(p_idx);}
void setOldTorque(const size_t p_idx, walberla::mesa_pd::Vec3 const & v) { ps_->setOldTorque(p_idx, v);}
walberla::real_t const & getRadius(const size_t p_idx) const {return ps_->getRadius(p_idx);}
walberla::real_t& getRadiusRef(const size_t p_idx) {return ps_->getRadiusRef(p_idx);}
void setRadius(const size_t p_idx, walberla::real_t const & v) { ps_->setRadius(p_idx, v);}
walberla::real_t const & getRadiusAtTemperature(const size_t p_idx) const {return ps_->getRadiusAtTemperature(p_idx);}
walberla::real_t& getRadiusAtTemperatureRef(const size_t p_idx) {return ps_->getRadiusAtTemperatureRef(p_idx);}
void setRadiusAtTemperature(const size_t p_idx, walberla::real_t const & v) { ps_->setRadiusAtTemperature(p_idx, v);}
blockforest::BlockID const & getCurrentBlock(const size_t p_idx) const {return ps_->getCurrentBlock(p_idx);}
blockforest::BlockID& getCurrentBlockRef(const size_t p_idx) {return ps_->getCurrentBlockRef(p_idx);}
......@@ -273,9 +273,9 @@ public:
void setOldTorque(const size_t /*p_idx*/, walberla::mesa_pd::Vec3 const & v) { oldTorque_ = v;}
walberla::mesa_pd::Vec3& getOldTorqueRef(const size_t /*p_idx*/) {return oldTorque_;}
walberla::real_t const & getRadius(const size_t /*p_idx*/) const {return radius_;}
void setRadius(const size_t /*p_idx*/, walberla::real_t const & v) { radius_ = v;}
walberla::real_t& getRadiusRef(const size_t /*p_idx*/) {return radius_;}
walberla::real_t const & getRadiusAtTemperature(const size_t /*p_idx*/) const {return radiusAtTemperature_;}
void setRadiusAtTemperature(const size_t /*p_idx*/, walberla::real_t const & v) { radiusAtTemperature_ = v;}
walberla::real_t& getRadiusAtTemperatureRef(const size_t /*p_idx*/) {return radiusAtTemperature_;}
blockforest::BlockID const & getCurrentBlock(const size_t /*p_idx*/) const {return currentBlock_;}
void setCurrentBlock(const size_t /*p_idx*/, blockforest::BlockID const & v) { currentBlock_ = v;}
......@@ -359,7 +359,7 @@ private:
walberla::mesa_pd::Vec3 angularVelocity_;
walberla::mesa_pd::Vec3 torque_;
walberla::mesa_pd::Vec3 oldTorque_;
walberla::real_t radius_;
walberla::real_t radiusAtTemperature_;
blockforest::BlockID currentBlock_;
uint_t type_;
int nextParticle_;
......
......@@ -86,7 +86,7 @@ public:
using angularVelocity_type = walberla::mesa_pd::Vec3;
using torque_type = walberla::mesa_pd::Vec3;
using oldTorque_type = walberla::mesa_pd::Vec3;
using radius_type = walberla::real_t;
using radiusAtTemperature_type = walberla::real_t;
using currentBlock_type = blockforest::BlockID;
using type_type = uint_t;
using nextParticle_type = int;
......@@ -163,9 +163,9 @@ public:
oldTorque_type& getOldTorqueRef() {return storage_.getOldTorqueRef(i_);}
void setOldTorque(oldTorque_type const & v) { storage_.setOldTorque(i_, v);}
radius_type const & getRadius() const {return storage_.getRadius(i_);}
radius_type& getRadiusRef() {return storage_.getRadiusRef(i_);}
void setRadius(radius_type const & v) { storage_.setRadius(i_, v);}
radiusAtTemperature_type const & getRadiusAtTemperature() const {return storage_.getRadiusAtTemperature(i_);}
radiusAtTemperature_type& getRadiusAtTemperatureRef() {return storage_.getRadiusAtTemperatureRef(i_);}
void setRadiusAtTemperature(radiusAtTemperature_type const & v) { storage_.setRadiusAtTemperature(i_, v);}
currentBlock_type const & getCurrentBlock() const {return storage_.getCurrentBlock(i_);}
currentBlock_type& getCurrentBlockRef() {return storage_.getCurrentBlockRef(i_);}
......@@ -298,7 +298,7 @@ public:
using angularVelocity_type = walberla::mesa_pd::Vec3;
using torque_type = walberla::mesa_pd::Vec3;
using oldTorque_type = walberla::mesa_pd::Vec3;
using radius_type = walberla::real_t;
using radiusAtTemperature_type = walberla::real_t;
using currentBlock_type = blockforest::BlockID;
using type_type = uint_t;
using nextParticle_type = int;
......@@ -375,9 +375,9 @@ public:
oldTorque_type& getOldTorqueRef(const size_t idx) {return oldTorque_[idx];}
void setOldTorque(const size_t idx, oldTorque_type const & v) { oldTorque_[idx] = v; }
radius_type const & getRadius(const size_t idx) const {return radius_[idx];}
radius_type& getRadiusRef(const size_t idx) {return radius_[idx];}
void setRadius(const size_t idx, radius_type const & v) { radius_[idx] = v; }
radiusAtTemperature_type const & getRadiusAtTemperature(const size_t idx) const {return radiusAtTemperature_[idx];}
radiusAtTemperature_type& getRadiusAtTemperatureRef(const size_t idx) {return radiusAtTemperature_[idx];}
void setRadiusAtTemperature(const size_t idx, radiusAtTemperature_type const & v) { radiusAtTemperature_[idx] = v; }
currentBlock_type const & getCurrentBlock(const size_t idx) const {return currentBlock_[idx];}
currentBlock_type& getCurrentBlockRef(const size_t idx) {return currentBlock_[idx];}
......@@ -541,7 +541,7 @@ public:
std::vector<angularVelocity_type> angularVelocity_ {};
std::vector<torque_type> torque_ {};
std::vector<oldTorque_type> oldTorque_ {};
std::vector<radius_type> radius_ {};
std::vector<radiusAtTemperature_type> radiusAtTemperature_ {};
std::vector<currentBlock_type> currentBlock_ {};
std::vector<type_type> type_ {};
std::vector<nextParticle_type> nextParticle_ {};
......@@ -580,7 +580,7 @@ ParticleStorage::Particle& ParticleStorage::Particle::operator=(const ParticleSt
getAngularVelocityRef() = rhs.getAngularVelocity();
getTorqueRef() = rhs.getTorque();
getOldTorqueRef() = rhs.getOldTorque();
getRadiusRef() = rhs.getRadius();
getRadiusAtTemperatureRef() = rhs.getRadiusAtTemperature();
getCurrentBlockRef() = rhs.getCurrentBlock();
getTypeRef() = rhs.getType();
getNextParticleRef() = rhs.getNextParticle();
......@@ -616,7 +616,7 @@ ParticleStorage::Particle& ParticleStorage::Particle::operator=(ParticleStorage:
getAngularVelocityRef() = std::move(rhs.getAngularVelocityRef());
getTorqueRef() = std::move(rhs.getTorqueRef());
getOldTorqueRef() = std::move(rhs.getOldTorqueRef());
getRadiusRef() = std::move(rhs.getRadiusRef());
getRadiusAtTemperatureRef() = std::move(rhs.getRadiusAtTemperatureRef());
getCurrentBlockRef() = std::move(rhs.getCurrentBlockRef());
getTypeRef() = std::move(rhs.getTypeRef());
getNextParticleRef() = std::move(rhs.getNextParticleRef());
......@@ -653,7 +653,7 @@ void swap(ParticleStorage::Particle lhs, ParticleStorage::Particle rhs)
std::swap(lhs.getAngularVelocityRef(), rhs.getAngularVelocityRef());
std::swap(lhs.getTorqueRef(), rhs.getTorqueRef());
std::swap(lhs.getOldTorqueRef(), rhs.getOldTorqueRef());
std::swap(lhs.getRadiusRef(), rhs.getRadiusRef());
std::swap(lhs.getRadiusAtTemperatureRef(), rhs.getRadiusAtTemperatureRef());
std::swap(lhs.getCurrentBlockRef(), rhs.getCurrentBlockRef());
std::swap(lhs.getTypeRef(), rhs.getTypeRef());
std::swap(lhs.getNextParticleRef(), rhs.getNextParticleRef());
......@@ -690,7 +690,7 @@ std::ostream& operator<<( std::ostream& os, const ParticleStorage::Particle& p )
"angularVelocity : " << p.getAngularVelocity() << "\n" <<
"torque : " << p.getTorque() << "\n" <<
"oldTorque : " << p.getOldTorque() << "\n" <<
"radius : " << p.getRadius() << "\n" <<
"radiusAtTemperature : " << p.getRadiusAtTemperature() << "\n" <<
"currentBlock : " << p.getCurrentBlock() << "\n" <<
"type : " << p.getType() << "\n" <<
"nextParticle : " << p.getNextParticle() << "\n" <<
......@@ -797,7 +797,7 @@ inline ParticleStorage::iterator ParticleStorage::create(const id_t& uid)
angularVelocity_.emplace_back(real_t(0));
torque_.emplace_back(real_t(0));
oldTorque_.emplace_back(real_t(0));
radius_.emplace_back(real_t(0));
radiusAtTemperature_.emplace_back(real_t(0));
currentBlock_.emplace_back();
type_.emplace_back(0);
nextParticle_.emplace_back(-1);
......@@ -859,7 +859,7 @@ inline ParticleStorage::iterator ParticleStorage::erase(iterator& it)
angularVelocity_.pop_back();
torque_.pop_back();
oldTorque_.pop_back();
radius_.pop_back();
radiusAtTemperature_.pop_back();
currentBlock_.pop_back();
type_.pop_back();
nextParticle_.pop_back();
......@@ -908,7 +908,7 @@ inline void ParticleStorage::reserve(const size_t size)
angularVelocity_.reserve(size);
torque_.reserve(size);
oldTorque_.reserve(size);
radius_.reserve(size);
radiusAtTemperature_.reserve(size);
currentBlock_.reserve(size);
type_.reserve(size);
nextParticle_.reserve(size);
......@@ -942,7 +942,7 @@ inline void ParticleStorage::clear()
angularVelocity_.clear();
torque_.clear();
oldTorque_.clear();
radius_.clear();
radiusAtTemperature_.clear();
currentBlock_.clear();
type_.clear();
nextParticle_.clear();
......@@ -977,7 +977,7 @@ inline size_t ParticleStorage::size() const
//WALBERLA_ASSERT_EQUAL( uid_.size(), angularVelocity.size() );
//WALBERLA_ASSERT_EQUAL( uid_.size(), torque.size() );
//WALBERLA_ASSERT_EQUAL( uid_.size(), oldTorque.size() );
//WALBERLA_ASSERT_EQUAL( uid_.size(), radius.size() );
//WALBERLA_ASSERT_EQUAL( uid_.size(), radiusAtTemperature.size() );
//WALBERLA_ASSERT_EQUAL( uid_.size(), currentBlock.size() );
//WALBERLA_ASSERT_EQUAL( uid_.size(), type.size() );
//WALBERLA_ASSERT_EQUAL( uid_.size(), nextParticle.size() );
......@@ -1311,13 +1311,13 @@ public:
walberla::mesa_pd::Vec3 const & operator()(const data::Particle& p) const {return p.getOldTorque();}
};
///Predicate that selects a certain property from a Particle
class SelectParticleRadius
class SelectParticleRadiusAtTemperature
{
public:
using return_type = walberla::real_t;
walberla::real_t& operator()(data::Particle& p) const {return p.getRadiusRef();}
walberla::real_t& operator()(data::Particle&& p) const {return p.getRadiusRef();}
walberla::real_t const & operator()(const data::Particle& p) const {return p.getRadius();}
walberla::real_t& operator()(data::Particle& p) const {return p.getRadiusAtTemperatureRef();}
walberla::real_t& operator()(data::Particle&& p) const {return p.getRadiusAtTemperatureRef();}
walberla::real_t const & operator()(const data::Particle& p) const {return p.getRadiusAtTemperature();}
};
///Predicate that selects a certain property from a Particle
class SelectParticleCurrentBlock
......
......@@ -117,7 +117,7 @@ void ParseMessage::operator()(int sender,
pIt->setLinearVelocity(objparam.linearVelocity);
pIt->setRotation(objparam.rotation);
pIt->setAngularVelocity(objparam.angularVelocity);
pIt->setRadius(objparam.radius);
pIt->setRadiusAtTemperature(objparam.radiusAtTemperature);
pIt->setOldContactHistory(objparam.oldContactHistory);
pIt->setTemperature(objparam.temperature);
......
......@@ -61,7 +61,7 @@ public:
walberla::mesa_pd::Rot3 rotation {};
walberla::mesa_pd::Vec3 angularVelocity {real_t(0)};
walberla::mesa_pd::Vec3 oldTorque {real_t(0)};
walberla::real_t radius {real_t(0)};
walberla::real_t radiusAtTemperature {real_t(0)};
uint_t type {0};
std::map<walberla::id_t, walberla::mesa_pd::data::ContactHistory> oldContactHistory {};
walberla::real_t temperature {real_t(0)};
......@@ -93,7 +93,7 @@ inline data::ParticleStorage::iterator createNewParticle(data::ParticleStorage&
pIt->setRotation(data.rotation);
pIt->setAngularVelocity(data.angularVelocity);
pIt->setOldTorque(data.oldTorque);
pIt->setRadius(data.radius);
pIt->setRadiusAtTemperature(data.radiusAtTemperature);
pIt->setType(data.type);
pIt->setOldContactHistory(data.oldContactHistory);
pIt->setTemperature(data.temperature);
......@@ -140,7 +140,7 @@ mpi::GenericSendBuffer<T,G>& operator<<( mpi::GenericSendBuffer<T,G> & buf, cons
buf << obj.particle_.getRotation();
buf << obj.particle_.getAngularVelocity();
buf << obj.particle_.getOldTorque();
buf << obj.particle_.getRadius();
buf << obj.particle_.getRadiusAtTemperature();
buf << obj.particle_.getType();
buf << obj.particle_.getOldContactHistory();
buf << obj.particle_.getTemperature();
......@@ -168,7 +168,7 @@ mpi::GenericRecvBuffer<T>& operator>>( mpi::GenericRecvBuffer<T> & buf, mesa_pd:
buf >> objparam.rotation;
buf >> objparam.angularVelocity;
buf >> objparam.oldTorque;
buf >> objparam.radius;
buf >> objparam.radiusAtTemperature;
buf >> objparam.type;
buf >> objparam.oldContactHistory;
buf >> objparam.temperature;
......
......@@ -58,7 +58,7 @@ public:
size_t shapeID {};
walberla::mesa_pd::Rot3 rotation {};
walberla::mesa_pd::Vec3 angularVelocity {real_t(0)};
walberla::real_t radius {real_t(0)};
walberla::real_t radiusAtTemperature {real_t(0)};
uint_t type {0};
std::map<walberla::id_t, walberla::mesa_pd::data::ContactHistory> oldContactHistory {};
walberla::real_t temperature {real_t(0)};
......@@ -83,7 +83,7 @@ inline data::ParticleStorage::iterator createNewParticle(data::ParticleStorage&
pIt->setShapeID(data.shapeID);
pIt->setRotation(data.rotation);
pIt->setAngularVelocity(data.angularVelocity);
pIt->setRadius(data.radius);
pIt->setRadiusAtTemperature(data.radiusAtTemperature);
pIt->setType(data.type);
pIt->setOldContactHistory(data.oldContactHistory);
pIt->setTemperature(data.temperature);
......@@ -123,7 +123,7 @@ mpi::GenericSendBuffer<T,G>& operator<<( mpi::GenericSendBuffer<T,G> & buf, cons
buf << obj.particle_.getShapeID();
buf << obj.particle_.getRotation();
buf << obj.particle_.getAngularVelocity();
buf << obj.particle_.getRadius();
buf << obj.particle_.getRadiusAtTemperature();
buf << obj.particle_.getType();
buf << obj.particle_.getOldContactHistory();
buf << obj.particle_.getTemperature();
......@@ -144,7 +144,7 @@ mpi::GenericRecvBuffer<T>& operator>>( mpi::GenericRecvBuffer<T> & buf, mesa_pd:
buf >> objparam.shapeID;
buf >> objparam.rotation;
buf >> objparam.angularVelocity;
buf >> objparam.radius;
buf >> objparam.radiusAtTemperature;
buf >> objparam.type;
buf >> objparam.oldContactHistory;
buf >> objparam.temperature;
......
......@@ -50,7 +50,7 @@ public:
walberla::mesa_pd::Vec3 linearVelocity {real_t(0)};
walberla::mesa_pd::Rot3 rotation {};
walberla::mesa_pd::Vec3 angularVelocity {real_t(0)};
walberla::real_t radius {real_t(0)};
walberla::real_t radiusAtTemperature {real_t(0)};
std::map<walberla::id_t, walberla::mesa_pd::data::ContactHistory> oldContactHistory {};
walberla::real_t temperature {real_t(0)};
};
......@@ -87,7 +87,7 @@ mpi::GenericSendBuffer<T,G>& operator<<( mpi::GenericSendBuffer<T,G> & buf, cons
buf << obj.particle_.getLinearVelocity();
buf << obj.particle_.getRotation();
buf << obj.particle_.getAngularVelocity();
buf << obj.particle_.getRadius();
buf << obj.particle_.getRadiusAtTemperature();
buf << obj.particle_.getOldContactHistory();
buf << obj.particle_.getTemperature();
return buf;
......@@ -102,7 +102,7 @@ mpi::GenericRecvBuffer<T>& operator>>( mpi::GenericRecvBuffer<T> & buf, mesa_pd:
buf >> objparam.linearVelocity;
buf >> objparam.rotation;
buf >> objparam.angularVelocity;
buf >> objparam.radius;
buf >> objparam.radiusAtTemperature;
buf >> objparam.oldContactHistory;
buf >> objparam.temperature;
return buf;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment