How to get the accumulated dissipation energy and the number of slipping contacts

Asked by ceguo

Hello, esys-particle developers and users!

I want to get the accumulated dissipation energy caused by frictional sliding (I only find 'e_pot' for potential energy) and the total number of the sliding contacts (or sticky contacts) at each time-step during the simulation. Is there any way (like fieldsaver) to get these quantities? I'm using the RotFriction model with no bound between particles.

Besides, is a comprehensive documentation for fieldsaver describing the usage of fieldsaver name, output file format, etc. available now?

Best regards!
Ning

Question information

Language:
English Edit question
Status:
Solved
For:
ESyS-Particle Edit question
Assignee:
No assignee Edit question
Solved by:
Vince Boros
Solved:
Last query:
Last reply:
Revision history for this message
Dion Weatherley (d-weatherley) said :
#1

Hi Ning,

Unfortunately, output of dissipated energy is not yet implemented for RotFrictionPrms but is implemented for NRotFrictionPrms. Perhaps you could try to implement it yourself by following the example of Model/FrictionInteraction.*. You should only need to modify RotFricInteraction.* to implement this. If you have difficulties, let me know and I'll arrange for it to be added to the development version of ESyS-Particle.

Regarding documentation about FieldSavers, Vince Boros has produced some tables to help with using FieldSavers but the documentation is not yet complete. The tables are at:
https://twiki.esscc.uq.edu.au/bin/view/ESSCC/DocumentationAndPresentations#Tables_of_ESyS_Particle_Interact

I hope that helps.

Cheers,

Dion.

Revision history for this message
Dion Weatherley (d-weatherley) said :
#2

Hi Ning,

Vince has just checked in changes to the ESyS-Particle trunk that includes output of dissipated energy for RotFrictionPrms. The svn revision number is 1315. Instructions on how to download and install the development version are here:
https://answers.launchpad.net/esys-particle/+faq/712

It should be relatively easy to modify model/RotFricInteraction.* to output the number of slipping contacts. Let me know if you need assistance with that.

Cheers,

Dion.

Revision history for this message
Vince Boros (v-boros) said :
#3

Good morning, Ning:

Today I will upload completed tables for Interaction Groups and Field Savers. I will also make a table listing available output file formats. These tables have been unfinished for too long. I, too, will be glad to see them completed, gladder if people find them helpful.

Best regards,

Vince

Revision history for this message
ceguo (hhh-guo) said :
#4

Hi Dion and Vince,

Thanks very much for your help and hard work! But now I'm a little confused about the formulation used to calc the dissipated energy caused by friction. In the code, it is given:

m_E_diss = m_mu_d * fabs(force * ((vp2 - vp1) * m_dt)).

 Here "force" is the normal force vector, "(vp2-vp1)*m_dt" is the relative displacement (also a vector). As far as I understand, "*" between two vectors in your code is a dot product operator. So I think m_E_diss = fabs(m_Ffric * ds) which is different from "m_mu * fabs(force * ds)", right?

Best regards!
Ning

Revision history for this message
Vince Boros (v-boros) said :
#5

Hi Ning.

My apology for this late reply, particularly as it is just an interim response. I had hoped to provide a definitive explanation by now, but we still need to examine the code more closely.

To provide some background on the new field saver, I used the nonrotational dissipated_energy code in Model/FrictionInteraction.cpp as a template in Model/RotFricInteraction.cpp. We need to ascertain whether the modified code is valid for rotational particles (I had assumed it was), and whether the original code for nonrotational particles is correct.

Hopefully Dion or I can give you a better answer soon. Meanwhile, you may find examining the original code in FrictionInteraction.cpp helpful if you have not already done so.

Thanks for your patience.

By the way, a first-draft table for field saver output file formats should be available on our TWiki page early next week.

Vince

Revision history for this message
ceguo (hhh-guo) said :
#6

Hi Vince and Dion,

Thanks for your reply. I've checked the vector algorithm in Foundation/vec3.hpp and was ensured that '*' is a dot product. So I think the formulation calculating the dissipated energy should be m_E_diss=fabs(m_Fric*((vp2-vp1)*m_dt)).

Regarding the used formulation issue, I found there is also a tiny problem in the function of getForce() const in Model/RotFricInteraction.cpp. It is written:

Vec3 CRotFrictionInteraction::getForce() const
{
  const Vec3 f=m_is_touching ? m_Ffric+m_normal_force : Vec3(0.0,0.0,0.0);
  return f;
}

While in function calcSimpleForces(), m_normal_force is applied on particle 2 (m_p2->applyForce(force,pos)), m_Ffric is applied on particle 1 (m_p1->applyForce(m_Ffric,pos)). So in getForce(), it should be "-m_Ffric+m_normal_force" to get the total force applied on particle 2 or "m_Ffric-m_normal_force" to get the total force applied on particle 1. Though this will not influence the simulation results if we pay little attention to the contact forces between particles. But if we want to get the macro stress of the sample from the contact forces using knowledge from statistical mechanics, we will get inconsistency between the results from micro (particle contacts) and macro (boundary forces) quantities. This is what I reported in Question #96394. As I changed the code, the two results are satisfactorily close.

Best regards!
Ning

Revision history for this message
Launchpad Janitor (janitor) said :
#7

This question was expired because it remained in the 'Open' state without activity for the last 15 days.

Revision history for this message
Vince Boros (v-boros) said :
#8

This question requires a solution.

Revision history for this message
Best Vince Boros (v-boros) said :
#9

Hello Ning:

You are correct on both counts.

The force vector required for the computation of dissipated energy is the shear force, which is not m_mu_d multiplied by the normal force vector, rather m_mu_d multiplied by the magnitude of the normal force vector multiplied by the frictional force unit vector, which is what m_Ffric becomes in the code. Computing the dot product of this result with the tangential displacement vector, ds, yields the correct value for m_E_diss as you stated originally: m_E_diss = fabs(m_Ffric * ds). I have made these changes as well for the nonrotational and rotational thermal calculations.

Dion decided to use m_Ffric - m_normal_force (that is, applied on particle 1) in getForce(). As it turns out, this is how getForce() is calculated in FrictionInteraction.cpp.

I have asked another developer to check all this, but the changes are now in the repository (rev. 1324). Thank you for finding these issues and for suggesting the corrections. While ideally the bugs would have been squashed much earlier, I am heartened by such close attention to the code and the mathematical models behind it. It is more evidence of the positive contributions being made by the ESyS-Particle community to this open-source software.

Vince

Revision history for this message
ceguo (hhh-guo) said :
#10

Thanks Vince Boros, that solved my question.