yade-dev team mailing list archive
-
yade-dev team
-
Mailing list archive
-
Message #06306
[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 ///////////