← Back to team overview

yade-users team mailing list archive

Re: [Question #235934]: Reference for coeff of restitution in Hertz-Mindlin with non-linear damping

 

Question #235934 on Yade changed:
https://answers.launchpad.net/yade/+question/235934

Chiara Modenese posted a new comment:
Hey Guys,

I am still here! Sorry for not replying earlier but I have recently been
very busy and the good news is that I have successfully completed my PhD
:-) (finally!). I take this occasion to say a Big Thanks to all of you
for your friendship and support during this long journey which I greatly
enjoyed, with all the lessons and gratifications that have come with it.

Now here is my reply to Vaclav (thanks for pointing this matter out).
You have spotted the problem since the normal force can become negative when viscous damping is applied. This should obviously be avoided as it is unphysical and below is the code that I have replaced in my local version of Yade that I have missed to commit (sorry about that).  When adhesion is included, the code takes also care of this by limiting the normal force with the maximum adhesion force. 

This issue can potentially affect all contact laws so ideally an option
like this should be available even for the linear contact law when
combined with some form of viscous damping.

Can somebody (Anton?) please replace the code below with what is
currently in trunk in HertzMindlin.cpp, lines 344 to 345? Many thanks
for this.

Let me know if there is any further question.

Cheers,
Chiara


	/**************************************/
	/* VISCOUS DAMPING (Normal direction) */
	/**************************************/
		// normal force must be updated here before we apply the Mohr-Coulomb criterion
	if (useDamping){ // get normal viscous component 
		phys->normalViscous = cn*incidentVn;
		Vector3r normTemp = phys->normalForce - phys->normalViscous; // temporary normal force
		// viscous force should not exceed the value of current normal force, i.e. no attraction force should be permitted if particles are non-adhesive
		// if particles are adhesive, then fixed the viscous force at maximum equal to the adhesion force
		// *** enforce normal force to zero if no adhesion is permitted ***
		if (phys->adhesionForce==0.0 || !includeAdhesion){ 
			if (normTemp.dot(scg->normal)<0.0){
				phys->normalForce = Vector3r::Zero();
				phys->normalViscous = phys->normalViscous + normTemp; // normal viscous force is such that the total applied force is null - it is necessary to compute energy correctly!
			}
			else{phys->normalForce -= phys->normalViscous;}				
		}	
		else if (includeAdhesion && phys->adhesionForce!=0.0){			
			// *** limit viscous component to the max adhesive force ***
			if (normTemp.dot(scg->normal)<0.0 && (phys->normalViscous.norm() > phys->adhesionForce) ){ 
				Real normVisc = phys->normalViscous.norm(); Vector3r normViscVector = phys->normalViscous/normVisc;
				phys->normalViscous = phys->adhesionForce*normViscVector;
				phys->normalForce -= phys->normalViscous;
			}
			// *** apply viscous component - in the presence of adhesion ***
			else {phys->normalForce -= phys->normalViscous;}
		}
		if (calcEnergy) {normDampDissip += phys->normalViscous.dot(incidentVn*dt);} // calc dissipation of energy due to normal damping
	}

-- 
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.