Build remote interaction for WireMat

Asked by Hongyang Cheng

Hi,

In the example wiretensiltest.py, if I am not mistaken, the purpose of setting enlarge interaction radius is to build remote contact between wire spheres. I want to know which functor in the interaction loop is doing that. If it is the Ig2 functor, will it also work for the spheres of the non-WireMat material types while creating links?

what is the attribute linkThresholdInteraction doing in Ip2 and Law2 functors?
What will happen if its value is not one as default?

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Jérôme Duriez
Solved:
Last query:
Last reply:

This question was reopened

Revision history for this message
Klaus Thoeni (klaus.thoeni) said :
#1

Hi Alex,

you are right. The interactionDetectionFactor is used to initialise the remote interactions for the WireMat. Nevertheless, it is a general option of the Ig2 functor and is independent of the material since it just enlarges the bounding box for the interaction detection. Note that you have to set the aabbEnlargeFactor for the bounding box as well (see [1] or WireMat examples). You can use it to initialise interactions as done for the WireMat or to define distant interactions, i.e. particle which are not in contact but in within the specified range will interact. In the first case you have to reset the interactionDetectionFactor after the links have been created.

linkThresholdIteration is material specific and in case of the WireMat it defines a threshold until when links can be created. I don't think it is implemented for any other material. For the WireMat, this means that interactions can only be created by default in the first iteration.

HTH
Klaus

[1] https://yade-dem.org/doc/user.html?highlight=interactiondetectionfactor#creating-interactions

Revision history for this message
Hongyang Cheng (alex-cheng) said :
#2

Hi Klaus
Thank you for your detailed explanation. I have some other questions.

In your example wirecontacttest.py, I notice that there are two Ip2 functor and two Law2 functors defined for the WireMat and the FrictMat (which obeys Cundall’s constitutive law) respectively. Is that correct that the Ip2 and Law2 functors of FrictMat also work for the interaction between the dropping sphere block and the wire net?

Revision history for this message
Klaus Thoeni (klaus.thoeni) said :
#3

Hi Alex,

you are correct. WireMat is derived from FrictMat (as most of the material classes in Yade, see [1]) and, hence, you can have interactions between WireMat and FrictMat where the WireMat is basically treated as a FrictMat. So you need Ip2_FrictMat_FrictMat_FrictPhys and Law2_ScGeom_FrictPhys_CundallStrack for contact between the block and the mesh.

HTH
Klaus

[1] https://yade-dem.org/doc/yade.wrapper.html#material

Revision history for this message
Hongyang Cheng (alex-cheng) said :
#4

Thank you Klaus.

Looking forward to seeing your recent progress on Yade-DEM development in the upcoming Yade seminar.

Regards,

Alex

Revision history for this message
Hongyang Cheng (alex-cheng) said :
#5

Hi Klaus,

I still have some questions about WireMat-FrictMat interaction.

I understand WireMat inherits FrictMat so that CundallStrack law can work for the interactions between WireMat and FrictMat. What if I want to use Hertz-Mindlin law instead?

I tried to do that by simply replacing the lp2 and law2 functors by Ip2_FrictMat_FrictMat_MindlinPhys and Law2_ScGeom_MindlinPhys_Mindlin, but it didn't work and gave me the following error report:

FATAL FATAL /home/alexcheng/myYade/trunk/pkg/common/InteractionLoop.cpp:142 action: None of given Law2 functors can handle interaction #19133+19132, types geom:ScGeom=1 and phys:FrictPhys=3 (LawDispatcher::getFunctor2D returned empty functor)

Could you please give some advices on this?

btw, what do geom:ScGeom=1 and phys:FrictPhys=3 mean?

Regards,

Alex

Revision history for this message
Best Jérôme Duriez (jduriez) said :
#6

Hi,

Two remarks that may help you :

Do not draw direct links between Law2 and Material types. There is only a direct link between Law2 and phys types (FrictPhys, WirePhys, MindlinPhys...) - and geom types. An indirect link with material types comes from the direct link between material types and phys types, through the Ip2 functor.

Your error message seems to be rather clear : the interaction between your bodies 19133 and 19132 is apparently of FrictPhys type (it is easy to check), and your LawFunctor (Law2_ScGeom_MindlinPhys_Mindlin ? your script may help here) could not handle it. I confess I'm a bit lost about the exact way functor can handle inherited classes, but apparently you are in a case that does not work...
Note that if your only Ip2 functor is Ip2_FrictMat_FrictMat_MindlinPhys, it is quite surprising that you still have FrictPhys interactions... Did you re-launch your script from the beginning ?

Revision history for this message
Hongyang Cheng (alex-cheng) said :
#7

Hi, jduriez

Thanks for the remarks. I am simulating uniaxial compression on a woven textile sand bag. I choose WireMat for modeling the bag and FrictMat for the soil inside the bag. Here is my script for the engine parts (sorry for not pasting the whole script, it's too long).

My script worked this time. Problem seems to be that I built remote links before defining the interaction loop. Anyway, thank you very much.

##################################
## Defining engines ##
##################################

O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb(label='Sphaabb'),Bo1_Box_Aabb(label='Wallaabb')]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom(label='Ig2ssGeom'),Ig2_Box_Sphere_ScGeom(label='wall')],
  [Ip2_WireMat_WireMat_WirePhys(label='wovenbag'),
   Ip2_FrictMat_FrictMat_MindlinPhys(
   krot=kr,
   ktwist=kr,
    label='soilsphere')],
  [Law2_ScGeom_WirePhys_WirePM(label='Law_wvbg'),
    Law2_ScGeom_MindlinPhys_Mindlin(
    includeMoment=True,
   label='Law_ssph')]
 ),
 NewtonIntegrator(damping=0.2,gravity=[0,0,-9.81],label='newton'),
 GlobalStiffnessTimeStepper(timeStepUpdateInterval=100)
]

Revision history for this message
Hongyang Cheng (alex-cheng) said :
#8

Thanks Jérôme Duriez, that solved my question.