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.

_______________________________________________
Mailing list: https://launchpad.net/~yade-users
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to