← Back to team overview

yade-dev team mailing list archive

[svn] r1839 - in trunk/pkg: common/Engine/MetaEngine dem/Engine/StandAloneEngine

 

Author: eudoxos
Date: 2009-07-04 02:50:21 +0200 (Sat, 04 Jul 2009)
New Revision: 1839

Modified:
   trunk/pkg/common/Engine/MetaEngine/InteractionDispatchers.cpp
   trunk/pkg/common/Engine/MetaEngine/InteractionPhysicsMetaEngine.cpp
   trunk/pkg/dem/Engine/StandAloneEngine/ElasticContactLaw.cpp
Log:
1. Fix STUPID (my fault, sorry!!) mistake in setting Interaction::iterMadeReal, which cause ElasticContactLaw to function wrong. It concerns a few other contact laws calling isFresh, which would return true as well. Sorry again.


Modified: trunk/pkg/common/Engine/MetaEngine/InteractionDispatchers.cpp
===================================================================
--- trunk/pkg/common/Engine/MetaEngine/InteractionDispatchers.cpp	2009-07-03 08:41:08 UTC (rev 1838)
+++ trunk/pkg/common/Engine/MetaEngine/InteractionDispatchers.cpp	2009-07-04 00:50:21 UTC (rev 1839)
@@ -71,9 +71,10 @@
 			assert(I->functorCache.phys);
 			I->functorCache.phys->go(b1->physicalParameters,b2->physicalParameters,I);
 			assert(I->interactionPhysics);
-			I->iterMadeReal=rootBody->currentIteration; // mark the interaction as created right now
 
+			if(!wasReal) I->iterMadeReal=rootBody->currentIteration; // mark the interaction as created right now
 
+
 			// ConstitutiveLawDispatcher
 			// populating constLaw cache must be done after geom and physics dispatchers have been called, since otherwise the interaction
 			// would not have interactionGeometry and interactionPhysics yet.

Modified: trunk/pkg/common/Engine/MetaEngine/InteractionPhysicsMetaEngine.cpp
===================================================================
--- trunk/pkg/common/Engine/MetaEngine/InteractionPhysicsMetaEngine.cpp	2009-07-03 08:41:08 UTC (rev 1838)
+++ trunk/pkg/common/Engine/MetaEngine/InteractionPhysicsMetaEngine.cpp	2009-07-04 00:50:21 UTC (rev 1839)
@@ -35,9 +35,10 @@
 			if(interaction->interactionGeometry){
 				shared_ptr<Body>& b1 = (*bodies)[interaction->getId1()];
 				shared_ptr<Body>& b2 = (*bodies)[interaction->getId2()];
+				bool hadPhys=interaction->interactionPhysics;
 				operator()(b1->physicalParameters, b2->physicalParameters, interaction);
 				assert(interaction->interactionPhysics);
-				interaction->iterMadeReal=ncb->currentIteration;
+				if(!hadPhys) interaction->iterMadeReal=ncb->currentIteration;
 			}
 		}
 }

Modified: trunk/pkg/dem/Engine/StandAloneEngine/ElasticContactLaw.cpp
===================================================================
--- trunk/pkg/dem/Engine/StandAloneEngine/ElasticContactLaw.cpp	2009-07-03 08:41:08 UTC (rev 1838)
+++ trunk/pkg/dem/Engine/StandAloneEngine/ElasticContactLaw.cpp	2009-07-04 00:50:21 UTC (rev 1839)
@@ -77,7 +77,8 @@
 
 			Vector3r& shearForce 			= currentContactPhysics->shearForce;
 	
-			if (contact->isFresh(ncb)) shearForce=Vector3r(0,0,0);
+			// no need for this, initialized to Vector3r::ZERO in NormalShearInteraction ctor
+			// if (contact->isFresh(ncb)) shearForce=Vector3r(0,0,0);
 					
 			Real un=currentContactGeometry->penetrationDepth;
 			TRVAR3(currentContactGeometry->penetrationDepth,de1->se3.position,de2->se3.position);
@@ -93,6 +94,7 @@
 			#ifdef SCG_SHEAR
 				}
 			#endif
+
 			
 			// PFC3d SlipModel, is using friction angle. CoulombCriterion
 			Real maxFs = currentContactPhysics->normalForce.SquaredLength() * std::pow(currentContactPhysics->tangensOfFrictionAngle,2);
@@ -105,7 +107,6 @@
 					if(useShear) currentContactGeometry->shear*=ratio;
 				#endif
 			}
-			////////// PFC3d SlipModel
 	
 			applyForceAtContactPoint(-currentContactPhysics->normalForce-shearForce , currentContactGeometry->contactPoint , id1 , de1->se3.position , id2 , de2->se3.position , ncb);
 			currentContactPhysics->prevNormal = currentContactGeometry->normal;