← Back to team overview

yade-dev team mailing list archive

[Branch ~yade-pkg/yade/git-trunk] Rev 3835: Small changes in JCFpm IP logic : it is now possible to have new contacts that are always cohesiv...

 

------------------------------------------------------------
revno: 3835
committer: Jerome Duriez <jerome.duriez@xxxxxxxxxxxxxxx>
timestamp: Tue 2014-03-11 19:36:24 +0100
message:
  Small changes in JCFpm IP logic : it is now possible to have new contacts that are always cohesive, and "poisson"=0 is possible (=> ks = 0 rather than infinity...)
modified:
  pkg/dem/JointedCohesiveFrictionalPM.cpp
  pkg/dem/JointedCohesiveFrictionalPM.hpp


--
lp:yade
https://code.launchpad.net/~yade-pkg/yade/git-trunk

Your team Yade developers is subscribed to branch lp:yade.
To unsubscribe from this branch go to https://code.launchpad.net/~yade-pkg/yade/git-trunk/+edit-subscription
=== modified file 'pkg/dem/JointedCohesiveFrictionalPM.cpp'
--- pkg/dem/JointedCohesiveFrictionalPM.cpp	2014-01-29 11:27:31 +0000
+++ pkg/dem/JointedCohesiveFrictionalPM.cpp	2014-03-11 18:36:24 +0000
@@ -106,12 +106,15 @@
 	  
 	}
 	
-	/* Morh-Coulomb criterion */
+	/* Mohr-Coulomb criterion */
 	Real maxFs = phys->FsMax + Fn*phys->tanFrictionAngle;
 	Real scalarShearForce = shearForce.norm();
 	  
 	if (scalarShearForce > maxFs) {
-	  shearForce*=maxFs/scalarShearForce;
+	  if (scalarShearForce != 0)
+	    shearForce*=maxFs/scalarShearForce;
+	  else
+	    shearForce=Vector3r::Zero();
 	  if ((smoothJoint) && (phys->isOnJoint)) {phys->dilation=phys->jointCumulativeSliding*phys->tanDilationAngle-D; phys->initD+=(jointSliding*phys->tanDilationAngle);}
 	  // take into account shear cracking -> are those lines critical? -> TODO testing with and without
 	  if ( phys->isCohesive ) { 
@@ -202,12 +205,15 @@
 	
 	// frictional properties
 	contactPhysics->kn = 2.*E1*R1*E2*R2/(E1*R1+E2*R2);
-	contactPhysics->ks = 2.*E1*R1*v1*E2*R2*v2/(E1*R1*v1+E2*R2*v2);//alpha*contactPhysics->kn;
+	if ( (v1==0)&&(v2==0) )
+	  contactPhysics->ks = 0;
+	else
+	  contactPhysics->ks = 2.*E1*R1*v1*E2*R2*v2/(E1*R1*v1+E2*R2*v2);
 	contactPhysics->tanFrictionAngle = std::tan(std::min(f1,f2));
 	
 	// cohesive properties
 	///to set if the contact is cohesive or not
-	if ((scene->iter < cohesiveTresholdIteration) && (std::min(SigT1,SigT2)>0 || std::min(Coh1,Coh2)>0) && (yade1->type == yade2->type)){ 
+	if ( ((cohesiveTresholdIteration < 0) || (scene->iter < cohesiveTresholdIteration)) && (std::min(SigT1,SigT2)>0 || std::min(Coh1,Coh2)>0) && (yade1->type == yade2->type)){ 
 	  contactPhysics->isCohesive=true;
 	  st1->noIniLinks++;
 	  st2->noIniLinks++;
@@ -267,7 +273,7 @@
 			contactPhysics->tanDilationAngle = std::tan(std::min(jdil1,jdil2));
 		  
 			///to set if the contact is cohesive or not
-			if ((scene->iter < cohesiveTresholdIteration) && (std::min(jcoh1,jcoh2)>0 || std::min(jSigT1,jSigT2)/2.0>0)) {
+			if ( ((cohesiveTresholdIteration < 0) || (scene->iter < cohesiveTresholdIteration)) && (std::min(jcoh1,jcoh2)>0 || std::min(jSigT1,jSigT2)>0) ) {
 			  contactPhysics->isCohesive=true;
 			  st1->noIniLinks++;
 			  st2->noIniLinks++;

=== modified file 'pkg/dem/JointedCohesiveFrictionalPM.hpp'
--- pkg/dem/JointedCohesiveFrictionalPM.hpp	2013-12-05 11:49:29 +0000
+++ pkg/dem/JointedCohesiveFrictionalPM.hpp	2014-03-11 18:36:24 +0000
@@ -86,7 +86,7 @@
 		DECLARE_LOGGER;
 		
 		YADE_CLASS_BASE_DOC_ATTRS(Ip2_JCFpmMat_JCFpmMat_JCFpmPhys,IPhysFunctor,"Converts 2 :yref:`JCFpmMat` instances to one :yref:`JCFpmPhys` instance, with corresponding parameters.",
-			((int,cohesiveTresholdIteration,1,,"should new contacts be cohesive? They will before this iter, they won't afterward."))
+			((int,cohesiveTresholdIteration,1,,"should new contacts be cohesive? If strictly negativ, they will in any case. If positiv, they will before this iter, they won't afterward."))
 		);
 		
 };