← Back to team overview

yade-dev team mailing list archive

[Branch ~yade-dev/yade/trunk] Rev 2577: - Implement tensile plasticity and add the corresponding parameters in CohFrictPhys.

 

------------------------------------------------------------
revno: 2577
committer: Bruno Chareyre <bruno.chareyre@xxxxxxxxxxx>
branch nick: yade
timestamp: Fri 2010-11-26 16:59:45 +0100
message:
  - Implement tensile plasticity and add the corresponding parameters in CohFrictPhys.
modified:
  pkg/dem/CohFrictPhys.hpp
  pkg/dem/CohesiveFrictionalContactLaw.cpp


--
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/CohFrictPhys.hpp'
--- pkg/dem/CohFrictPhys.hpp	2010-11-12 18:44:15 +0000
+++ pkg/dem/CohFrictPhys.hpp	2010-11-26 15:59:45 +0000
@@ -16,7 +16,7 @@
 	public :
 		virtual ~CohFrictPhys();
 		void SetBreakingState ();
-	
+
 	YADE_CLASS_BASE_DOC_ATTRS_CTOR(CohFrictPhys,FrictPhys,"",
 		((bool,cohesionDisablesFriction,false,,"is shear strength the sum of friction and adhesion or only adhesion?"))
 		((bool,cohesionBroken,true,,"is cohesion active? will be set false when a fragile contact is broken"))
@@ -24,6 +24,8 @@
 		((Real,kr,0,,"rotational stiffness [N.m/rad]"))
 		((Real,normalAdhesion,0,,"tensile strength"))
 		((Real,shearAdhesion,0,,"cohesive part of the shear strength (a frictional term might be added depending on :yref:`Law2_ScGeom6D_CohFrictPhys_CohesionMoment::always_use_moment_law`)"))
+		((Real,unp,0,,"plastic normal displacement, only used for tensile behaviour and if :yref:`CohFrictPhys::fragile`=false."))
+		((Real,unpMax,0,,"maximum value of plastic normal displacement, after that the interaction breaks even if :yref:`CohFrictPhys::fragile`=false. The default value (0) means no maximum."))
 		((bool,momentRotationLaw,false,,"use bending/twisting moment at contacts. See :yref:`CohFrictPhys::cohesionDisablesFriction` for details."))
 		((Real,creep_viscosity,-1,,"creep viscosity [Pa.s/m]."))
 		// internal attributes
@@ -32,7 +34,7 @@
 		,
 		createIndex();
 	);
-/// Indexable	
+/// Indexable
 	REGISTER_CLASS_INDEX(CohFrictPhys,FrictPhys);
 
 };

=== modified file 'pkg/dem/CohesiveFrictionalContactLaw.cpp'
--- pkg/dem/CohesiveFrictionalContactLaw.cpp	2010-11-12 18:44:15 +0000
+++ pkg/dem/CohesiveFrictionalContactLaw.cpp	2010-11-26 15:59:45 +0000
@@ -42,13 +42,19 @@
 
 	if (contact->isFresh(scene)) shearForce   = Vector3r::Zero();
 	Real un     = currentContactGeometry->penetrationDepth;
-	Real Fn    = currentContactPhysics->kn*un;
-	currentContactPhysics->normalForce = Fn*currentContactGeometry->normal;
-	if (un < 0 && (currentContactPhysics->normalForce.squaredNorm() > pow(currentContactPhysics->normalAdhesion,2)
-	               || currentContactPhysics->normalAdhesion==0)) {
+	Real Fn    = currentContactPhysics->kn*(un-currentContactPhysics->unp);
+
+	if (currentContactPhysics->fragile && (-Fn)> currentContactPhysics->normalAdhesion) {
 		// BREAK due to tension
 		scene->interactions->requestErase(contact->getId1(),contact->getId2());
 	} else {
+		if ((-Fn)> currentContactPhysics->normalAdhesion) {//normal plasticity
+			Fn=-currentContactPhysics->normalAdhesion;
+			currentContactPhysics->unp = un+currentContactPhysics->normalAdhesion/currentContactPhysics->kn;
+			if (currentContactPhysics->unpMax && currentContactPhysics->unp<currentContactPhysics->unpMax)
+				scene->interactions->requestErase(contact->getId1(),contact->getId2());
+		}
+		currentContactPhysics->normalForce = Fn*currentContactGeometry->normal;
 		State* de1 = Body::byId(id1,scene)->state.get();
 		State* de2 = Body::byId(id2,scene)->state.get();
 		///////////////////////// CREEP START ///////////