------------------------------------------------------------ revno: 1811 committer: Sergei D. <s...@think> branch nick: clumps timestamp: Mon 2009-11-23 18:36:10 +0300 message: Adaptation NewtonDampedLaw to material/state classes modified: pkg/dem/Engine/StandAloneEngine/NewtonsDampedLaw.cpp pkg/dem/Engine/StandAloneEngine/NewtonsDampedLaw.hpp
-- lp:yade https://code.launchpad.net/~yade-dev/yade/trunk Your team Yade developers is subscribed to branch lp:yade. To unsubscribe from this branch go to https://code.launchpad.net/~yade-dev/yade/trunk/+edit-subscription.
=== modified file 'pkg/dem/Engine/StandAloneEngine/NewtonsDampedLaw.cpp' --- pkg/dem/Engine/StandAloneEngine/NewtonsDampedLaw.cpp 2009-11-21 16:46:58 +0000 +++ pkg/dem/Engine/StandAloneEngine/NewtonsDampedLaw.cpp 2009-11-23 15:36:10 +0000 @@ -10,8 +10,8 @@ #include<yade/core/MetaBody.hpp> #ifdef YADE_PHYSPAR #include<yade/pkg-common/RigidBodyParameters.hpp> - #include<yade/pkg-dem/Clump.hpp> #endif +#include<yade/pkg-dem/Clump.hpp> #include<yade/pkg-common/VelocityBins.hpp> #include<yade/lib-base/yadeWm3Extra.hpp> @@ -22,28 +22,26 @@ acceleration [i]*= 1 - damping*Mathr::Sign ( f[i]*(velocity [i] + (Real) 0.5 *dt*acceleration [i]) ); } } -#ifdef YADE_PHYSPAR -void NewtonsDampedLaw::handleClumpMember(MetaBody* ncb, const body_id_t memberId, RigidBodyParameters* clumpRBP){ +void NewtonsDampedLaw::handleClumpMember(MetaBody* ncb, const body_id_t memberId, State* clumpRBP){ const shared_ptr<Body>& b=Body::byId(memberId,ncb); assert(b->isClumpMember()); - RigidBodyParameters* rb=YADE_CAST<RigidBodyParameters*>(b->physicalParameters.get()); + State* rb=b->state.get(); const Vector3r& m=ncb->bex.getTorque(memberId); const Vector3r& f=ncb->bex.getForce(memberId); Vector3r diffClumpAccel=f/clumpRBP->mass; // angular acceleration from: normal torque + torque generated by the force WRT particle centroid on the clump centroid - Vector3r diffClumpAngularAccel=diagDiv(m,clumpRBP->inertia)+diagDiv((rb->se3.position-clumpRBP->se3.position).Cross(f),clumpRBP->inertia); + Vector3r diffClumpAngularAccel=diagDiv(m,clumpRBP->inertia)+diagDiv((rb->pos-clumpRBP->pos).Cross(f),clumpRBP->inertia); // damp increment of accels on the clump, using velocities of the clump MEMBER - cundallDamp(ncb->dt,f,rb->velocity,diffClumpAccel,m,rb->angularVelocity,diffClumpAngularAccel); + cundallDamp(ncb->dt,f,rb->vel,diffClumpAccel,m,rb->angVel,diffClumpAngularAccel); // clumpRBP->{acceleration,angularAcceleration} are reset byt Clump::moveMembers, it is ok to just increment here - clumpRBP->acceleration+=diffClumpAccel; - clumpRBP->angularAcceleration+=diffClumpAngularAccel; + clumpRBP->accel+=diffClumpAccel; + clumpRBP->angAccel+=diffClumpAngularAccel; if(haveBins) velocityBins->binVelSqUse(memberId,VelocityBins::getBodyVelSq(rb)); #ifdef YADE_OPENMP - Real& thrMaxVSq=threadMaxVelocitySq[omp_get_thread_num()]; thrMaxVSq=max(thrMaxVSq,rb->velocity.SquaredLength()); + Real& thrMaxVSq=threadMaxVelocitySq[omp_get_thread_num()]; thrMaxVSq=max(thrMaxVSq,rb->vel.SquaredLength()); #else - maxVelocitySq=max(maxVelocitySq,rb->velocity.SquaredLength()); + maxVelocitySq=max(maxVelocitySq,rb->vel.SquaredLength()); #endif } -#endif void NewtonsDampedLaw::action(MetaBody * ncb) { @@ -85,7 +83,6 @@ cundallDamp(dt,f,state->vel,state->accel,m,state->angVel,state->angAccel); } else if (b->isClump()){ - #ifdef YADE_PHYSPAR state->accel=state->angAccel=Vector3r::ZERO; // to make sure; should be reset in Clump::moveMembers // sum force on clump memebrs, add them to the clump itself FOREACH(Clump::memberMap::value_type mm, static_cast<Clump*>(b.get())->members){ @@ -96,7 +93,6 @@ cundallDamp(dt,f,state->vel,dLinAccel,m,state->angVel,dAngAccel); state->accel+=dLinAccel; state->angAccel+=dAngAccel; - #endif } // blocking DOFs @@ -133,9 +129,7 @@ state->pos += state->vel*dt + ncb->bex.getMove(id); - #ifdef YADE_PHYSPAR - if(b->isClump()) static_cast<Clump*>(b.get())->moveMembers(); - #endif + if(b->isClump()) static_cast<Clump*>(b.get())->moveMembers(); } #ifdef YADE_OPENMP FOREACH(const Real& thrMaxVSq, threadMaxVelocitySq) { maxVelocitySq=max(maxVelocitySq,thrMaxVSq); } === modified file 'pkg/dem/Engine/StandAloneEngine/NewtonsDampedLaw.hpp' --- pkg/dem/Engine/StandAloneEngine/NewtonsDampedLaw.hpp 2009-07-14 20:03:51 +0000 +++ pkg/dem/Engine/StandAloneEngine/NewtonsDampedLaw.hpp 2009-11-23 15:36:10 +0000 @@ -34,12 +34,12 @@ NOTE: Cundall damping affected dynamic simulation! See examples/dynamic_simulation_tests */ -class RigidBodyParameters; +class State; class VelocityBins; class NewtonsDampedLaw : public StandAloneEngine{ inline void cundallDamp(const Real& dt, const Vector3r& f, const Vector3r& velocity, Vector3r& acceleration, const Vector3r& m, const Vector3r& angularVelocity, Vector3r& angularAcceleration); - void handleClumpMember(MetaBody* ncb, const body_id_t memberId, RigidBodyParameters* clumpRBP); + void handleClumpMember(MetaBody* ncb, const body_id_t memberId, State* clumpRBP); bool haveBins; public: ///damping coefficient for Cundall's non viscous damping
_______________________________________________ Mailing list: https://launchpad.net/~yade-dev Post to : yade-dev@lists.launchpad.net Unsubscribe : https://launchpad.net/~yade-dev More help : https://help.launchpad.net/ListHelp