Manage Overlap of Particles

Submitted by NTT1508 on Mon, 02/23/2015 - 09:09

Hi all,

Is that possible to allow a certain level of overlap between particles without generating interaction force? Suppose I have two particles with radius R1 and R2 positioned in a distance of d

ckloss's picture

ckloss | Mon, 02/23/2015 - 12:39

Sure,

you just have to create a new contact model. See normal_model_hertz.h - you just have to copy, rename and modify this file

Best wishes
Christoph

NTT1508 | Tue, 02/24/2015 - 01:34

Hi Christoph,

Thank for your suggestion. It is really interesting to hear about that. To simplify that, I would introduce a factor (for example named fr) which reduces the effective radius reff. So I can define to which level of overlap, the contac force will be generated. What do you think about this? What else I need to regardless modifying normal_model_hertz.h file? Make a new file name, add to style_normal_model.h then re-compile LIGGGHTS. Sorry I am not good at coding.

Second, how about tangential_model_history? Do I need to care about it? Shear force should not be generated if 2 particles slides to each other at a certain overlap. Is that the cdata.touch determine whether contact occurs or not?

Third, where can I find and access to cdata which manages collision properties mentioned in normal_model_Hertz?

Finally, can you have a look and advice on my modification for Hertz model below ?
---------------------------------------------------------------
#ifdef NORMAL_MODEL
NORMAL_MODEL(NEWHERTZ,newhertz,3) // change name HERTZ to NEWHERTZ
#else
#ifndef NORMAL_MODEL_NEWHERTZ_H_
#define NORMAL_MODEL_NEWHERTZ_H_
#include "global_properties.h"
#include "math.h"
…..

template<>
class NormalModel : protected Pointers
{
public:
….
void connectToProperties(PropertyRegistry & registry) {
registry.registerProperty("Yeff", &MODEL_PARAMS::createYeff,"model newhertz");
registry.registerProperty("Geff", &MODEL_PARAMS::createGeff,"model newhertz");
registry.registerProperty("betaeff", &MODEL_PARAMS::createBetaEff,"model newhertz");

registry.connect("Yeff", Yeff,"model newhertz");
registry.connect("Geff", Geff,"model newhertz");
registry.connect("betaeff", betaeff,"model newhertz");
….
inline void collision(CollisionData & cdata, ForceData & i_forces, ForceData & j_forces)
{
const double fr=0.8 // Introduce factor fr, 0 < fr < 1
const int itype = cdata.itype;
const int jtype = cdata.jtype;
double ri = fr*cdata.radi; // modify radius
double rj = fr*cdata.radj;
double reff=cdata.is_wall ? cdata.radi : (ri*rj/(ri+rj));
double meff=cdata.meff; // Do I need to modify mass to equivalent new radius?

const double Fn_damping = -gamman*cdata.vn;
const double Fn_contact = kn*(fr*cdata.radsum-cdata.r); //add fr to reduce contact force
double Fn = Fn_damping + Fn_contact;

-------------------------------------
Thank you,

Best regards,

Nathan,

JoshuaP | Tue, 02/24/2015 - 10:20

Hey;

I would just change the normal force:

double overlap = ...;
const double Fn_contact = kn*(cdata.radsum-cdata.r-overlap);

I cannot promise the validity of this, you have to test it.

regards

NTT1508 | Tue, 02/24/2015 - 23:16

Thank Joshua,

I actually edited the original Hertz in which Fn_contact = kn*(cdata.radsum-cdata.r)
with (cdata.radsum-cdata.r)=overlap. No doubt about this. What I did is just adding factor fr to reduce effective radius. I will test it soon.

Christoph, If you cross here, dont forget to give me your advices on my questions above.

Thanks,

Regards,

NTT1508 | Sat, 02/28/2015 - 03:00

Hi Christoph,

I have tested the newhertz model, it works well. I will define a factor as an input parameter in script to make it more flexible to use.

Thanks,

Regards,