← Back to team overview

yade-dev team mailing list archive

[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',