yade-dev team mailing list archive
-
yade-dev team
-
Mailing list archive
-
Message #01270
[svn] r1782 - in trunk/pkg/dem: . Engine/EngineUnit
Author: richefeu
Date: 2009-05-28 11:24:36 +0200 (Thu, 28 May 2009)
New Revision: 1782
Added:
trunk/pkg/dem/Engine/EngineUnit/BasicViscoelasticRelationships.cpp
trunk/pkg/dem/Engine/EngineUnit/BasicViscoelasticRelationships.hpp
Modified:
trunk/pkg/dem/SConscript
Log:
Add BasicViscoelasticRelationships: an alternative to SimpleViscoelasticRelationships. It accounts for the effective mass of each contact and considere the parameter cn as a dimensionless ponderation of its critical value (computed for each contact). Parameter cs is set to zero for the moment.
Added: trunk/pkg/dem/Engine/EngineUnit/BasicViscoelasticRelationships.cpp
===================================================================
--- trunk/pkg/dem/Engine/EngineUnit/BasicViscoelasticRelationships.cpp 2009-05-25 06:29:19 UTC (rev 1781)
+++ trunk/pkg/dem/Engine/EngineUnit/BasicViscoelasticRelationships.cpp 2009-05-28 09:24:36 UTC (rev 1782)
@@ -0,0 +1,58 @@
+/*************************************************************************
+* Copyright (C) 2009 by Vincent Richefeu *
+* Vincent.Richefeu@xxxxxxxxxxx *
+* *
+* This program is free software; it is licensed under the terms of the *
+* GNU General Public License v2 or later. See file LICENSE for details. *
+*************************************************************************/
+
+#include"BasicViscoelasticRelationships.hpp"
+#include<yade/pkg-dem/SimpleViscoelasticBodyParameters.hpp>
+#include<yade/pkg-dem/ViscoelasticInteraction.hpp>
+#include<yade/pkg-dem/SpheresContactGeometry.hpp>
+#include<yade/core/Omega.hpp>
+#include<yade/core/MetaBody.hpp>
+
+
+BasicViscoelasticRelationships::BasicViscoelasticRelationships()
+{
+}
+
+
+void BasicViscoelasticRelationships::registerAttributes()
+{
+}
+
+
+void BasicViscoelasticRelationships::go( const shared_ptr<PhysicalParameters>& b1 // SimpleViscoelasticBodyParameters
+ , const shared_ptr<PhysicalParameters>& b2 // SimpleViscoelasticBodyParameters
+ , const shared_ptr<Interaction>& interaction)
+{
+ if( !interaction->isNew ) return;
+
+ SimpleViscoelasticBodyParameters* sdec1 = static_cast<SimpleViscoelasticBodyParameters*>(b1.get());
+ SimpleViscoelasticBodyParameters* sdec2 = static_cast<SimpleViscoelasticBodyParameters*>(b2.get());
+
+ interaction->interactionPhysics = shared_ptr<ViscoelasticInteraction>(new ViscoelasticInteraction());
+ ViscoelasticInteraction* contactPhysics = YADE_CAST<ViscoelasticInteraction*>(interaction->interactionPhysics.get());
+
+ // Check that cn is dimensionless
+ if (sdec1->cn >= 1.0) std::cout << "Warning: non dimensionless value for cn" << std::endl;
+
+ // Arbitrare ponderation...
+ contactPhysics->kn = 0.5 * (sdec1->kn + sdec2->kn);
+ contactPhysics->ks = 0.5 * (sdec1->ks + sdec2->ks);
+ contactPhysics->cn = 0.5 * (sdec1->cn + sdec2->cn);
+ contactPhysics->cs = 0.0; // not viscosity in the tangent direction
+
+ // in fact, dimensionless cn is a ponderation of the critical value cn_crit = 2sqrt(kn*meff)
+ contactPhysics->cn *= 2.0 * sqrt(contactPhysics->kn * ((sdec1->mass * sdec2->mass) / (sdec1->mass + sdec2->mass)));
+
+ contactPhysics->tangensOfFrictionAngle = std::tan(std::min(sdec1->frictionAngle, sdec2->frictionAngle));
+
+ contactPhysics->shearForce = Vector3r(0,0,0);
+ contactPhysics->prevNormal = Vector3r(0,0,0);
+
+}
+
+YADE_PLUGIN();
Added: trunk/pkg/dem/Engine/EngineUnit/BasicViscoelasticRelationships.hpp
===================================================================
--- trunk/pkg/dem/Engine/EngineUnit/BasicViscoelasticRelationships.hpp 2009-05-25 06:29:19 UTC (rev 1781)
+++ trunk/pkg/dem/Engine/EngineUnit/BasicViscoelasticRelationships.hpp 2009-05-28 09:24:36 UTC (rev 1782)
@@ -0,0 +1,36 @@
+/*************************************************************************
+* Copyright (C) 2009 by Vincent Richefeu *
+* Vincent.Richefeu@xxxxxxxxxxx *
+* *
+* This program is free software; it is licensed under the terms of the *
+* GNU General Public License v2 or later. See file LICENSE for details. *
+*************************************************************************/
+
+#pragma once
+
+#include<yade/pkg-common/InteractionPhysicsEngineUnit.hpp>
+
+/// Determine elastic stiffnesses and viscous parameters from elastic and dimensionless viscoelastic parameters
+/// of the interacting bodies
+class BasicViscoelasticRelationships : public InteractionPhysicsEngineUnit
+{
+ public :
+
+ BasicViscoelasticRelationships();
+
+ virtual void go( const shared_ptr<PhysicalParameters>& b1,
+ const shared_ptr<PhysicalParameters>& b2,
+ const shared_ptr<Interaction>& interaction);
+
+ protected :
+ virtual void registerAttributes();
+
+ FUNCTOR2D(SimpleViscoelasticBodyParameters,SimpleViscoelasticBodyParameters);
+ REGISTER_CLASS_NAME(BasicViscoelasticRelationships);
+ REGISTER_BASE_CLASS_NAME(InteractionPhysicsEngineUnit);
+
+};
+
+REGISTER_SERIALIZABLE(BasicViscoelasticRelationships);
+
+
Modified: trunk/pkg/dem/SConscript
===================================================================
--- trunk/pkg/dem/SConscript 2009-05-25 06:29:19 UTC (rev 1781)
+++ trunk/pkg/dem/SConscript 2009-05-28 09:24:36 UTC (rev 1782)
@@ -990,6 +990,13 @@
,'SpheresContactGeometry'
])
+ ,env.SharedLibrary('BasicViscoelasticRelationships'
+ ,['Engine/EngineUnit/BasicViscoelasticRelationships.cpp']
+ ,LIBS=env['LIBS']+['SimpleViscoelasticBodyParameters'
+ ,'ViscoelasticInteraction'
+ ,'SpheresContactGeometry'
+ ])
+
,env.SharedLibrary('ContactLaw1',
['Engine/StandAloneEngine/ContactLaw1.cpp'],
LIBS=env['LIBS']+['SDECLinkPhysics',