Representing beams, wires, grids, with connected cylinders

Asked by David Zhang

Hello everyone,

I am new to Yade. I have been working on FEM for quite a while but have little knowledge of DEM.

There are a few nice videos of representing beams, wires, grids, with connected cylinders in the Yade/wiki/examples. I am very interested in those simulations and would like to know more, such as the physical meaning and mechanical formulation behind them. I have searched the Yade website and couldn't find too much relevant messages. I guess my question is probably too general and let me make them more specific as below.

1) If I am correct, a wire or beam is created by connecting a series of cylinders and particles. Apart from geometry, what is the difference between a cylinder and a particle? What are the interactions defined between a particle and a cylinder for a wire or a beam model in Yade?

2) What is the typical length scales for a cylinder and a particle in a wire or beam model?

3) I guess a wire or beam model has much less elements than a solid model. Is the computation time much less as well? Is a fast desktop good enough to perform the simulations shown in the examples?

Can anyone shed me some light on these questions?

Many thanks and best wishes,

David

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 David,

let me try to answer your questions:

@ 1) you can connect cylinders or spheres in order to represent a beam or wire. In addition we have a remote interaction model to represent wires. The following papers give more details:

http://dx.doi.org/10.1016/j.ecoleng.2013.05.002
http://dx.doi.org/10.1016/j.compgeo.2012.10.014

@ 2) the user defines length and size

@ 3) depends on what you want to simulate. E.g. for a wire mesh it is the same

And finally a question to you:
What kind of problems are you trying to simulate?

Cheers
Klaus

Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#2

Hello David,

Some details are given in [1].
For your questions:
1) It is actually a series of cylinders without particles. No difference
appart from shape.
2) I have no general answer to this.
3) Even a desktop from the previous century can easily compute a
simulation like [2]
Bruno

[1] http://www.sciencedirect.com/science/article/pii/S0925857413001936
[2] http://www.youtube.com/watch?v=KKVk3YK0nu0

Revision history for this message
David Zhang (david-zhang) said :
#3

Hi Klaus,

Thanks for your quick response. Your answers are very helpful. I will read those two papers and see how it works.

I am trying to find a good method to model coilable masts and deployable membrane, which are highly flexible, and undergo large displacements and deformation. There are also self contacts between structural elements. I think your remote interaction model is very efficient to model the rockfall protection problem. Do you think if it can deal with the self contact problem of wires?

Do you or anyone else know where I can find relevant materials about the softSpring and net breaking simulations in the Yade/wiki/examples? In addition, are the results of those two simulations validated?

Cheers,

David

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

Hi,

you can find example script in the example folder, e.g. for the rockfall mesh examples/WireMatPM/wirecontacttest.py. Bruno's spring is in examples/chained-cylinder/chained-cylinder-spring.py.

The remote interaction model can indeed be used to model a membrane. You have to calibrate it against your material. The remote interactions are based on stress-strain curves. Not sure what you mean by self contact problem. If you mean wire-wire contacts, such are only defined via remote interactions at the moment.

Cheers
Klaus

Revision history for this message
David Zhang (david-zhang) said :
#5

Hi Klaus,

Thank you for the link.

Yes, what I meant for the self contact problem is the wire-wire contacts. I am very glad to learn that it has been defined via remote interactions.

Cheers,

David

Revision history for this message
David Zhang (david-zhang) said :
#6

Thanks Klaus Thoeni, that solved my question.

Revision history for this message
David Zhang (david-zhang) said :
#7

Hello Bruno, Thank you for the clarification and links. Regards, David

Revision history for this message
David Zhang (david-zhang) said :
#8

Hello Klaus and Bruno,

I have read the suggested papers and now have a better understanding of the chained cylinders and remote interactions.

I think previously I misunderstood Klaus' message (#4) on wire-wire contacts. The self contacts of wires I meant are not the remote interaction between two adjacent wire nodes. Actually they are the contacts between two arbitrary wires. This could occur when a flexible structure undergoes large deformation, e.g.
1) folding a soft net from an spread state to a folded state;
2) axially compressing a soft spring to its shortest length.

It seems that this types of self-contacts have not been included by Yade yet. So is there a straightforward way to consider the self-contacts of wires in Yade?

Many thanks,

David

Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#9

> >this types of self-contacts have not been included by Yade
>
It has been introduced at least for wires (chained cylinders) and grids,
and it is currently being implemented for membranes.
I'm not sure if example scripts are showing this feature at the moment,
but it can be done.

Bruno

Revision history for this message
David Zhang (david-zhang) said :
#10

Thanks Bruno Chareyre, that solved my question.

Revision history for this message
David Zhang (david-zhang) said :
#11

Hello Bruno, Thank you for your answer. This is really good news. I look forward to seeing examples or publications showing this feature in the future. Best wishes, David

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

Hi David,

self-contact for the WireMat is not included yet but should be straight
forward to implement. It's on my very long todo list.

One other think I should mention that the remote interaction can only have
tensile forces, i.e. stiffness in compression is equal to zero.

An other option of simulating a membrane with self-contacting spheres is with
Luc's JCFpmMat, see example below.

Cheers
Klaus

# -*- coding: utf-8 -*-
from yade import utils, pack

R=1.

#### materials
blocMat =
O.materials.append(JCFpmMat(young=1e6,poisson=0.3,frictionAngle=radians(30),density=2600))
netMat =
O.materials.append(JCFpmMat(young=1e6,poisson=0.3,frictionAngle=radians(30),density=2600,tensileStrength=1e8,cohesion=1e5))

#### create membrane
O.bodies.append(pack.regularOrtho(pack.inAlignedBox((-5*R,0,-R),
(5*R,R/4,R)),radius=R/10.,gap=0,material=netMat))

#### create non dynamic body
O.bodies.append(utils.facetCylinder([0,-2*R,0.0],radius=R,height=2*R,dynamic=False,wire=False,color=[0,0,1],material=blocMat))

#### for viewing it
from yade import qt
qt.Controller()
qt.View()

#### simulation
## to define interaction range for which cohesive links will be created
interactionRadiusFactor=1.1
## engines definition
O.engines=[
 ForceResetter(),

InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=interactionRadiusFactor,label='aabb'),Bo1_Facet_Aabb()]),
 InteractionLoop(

[Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=interactionRadiusFactor,label='Ig2ssGeom'),Ig2_Facet_Sphere_ScGeom()],

[Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=1,label='interactionPhys')],

[Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(label='interactionLaw')]
 ),
 NewtonIntegrator(gravity=[0.,-9.81,0.],damping=.2)
]

## time step definition
O.dt=0.1*utils.PWaveTimeStep()

#### run first time step to create cohesive link (cohesiveTresholdIteration=1)
O.step()

#### initialize the interaction detection factor for subsequent time steps
(negative factor means deactivation)
aabb.aabbEnlargeFactor=-1.
Ig2ssGeom.interactionDetectionFactor=-1.

On Monday 17 February 2014 05:36:02 David Zhang wrote:
> Question #243909 on Yade changed:
> https://answers.launchpad.net/yade/+question/243909
>
> Status: Solved => Open
>
> David Zhang is still having a problem:
> Hello Klaus and Bruno,
>
> I have read the suggested papers and now have a better understanding of
> the chained cylinders and remote interactions.
>
> I think previously I misunderstood Klaus' message (#4) on wire-wire
> contacts. The self contacts of wires I meant are not the remote interaction
> between two adjacent wire nodes. Actually they are the contacts between two
> arbitrary wires. This could occur when a flexible structure undergoes large
> deformation, e.g. 1) folding a soft net from an spread state to a folded
> state;
> 2) axially compressing a soft spring to its shortest length.
>
> It seems that this types of self-contacts have not been included by Yade
> yet. So is there a straightforward way to consider the self-contacts of
> wires in Yade?
>
> Many thanks,
>
> David
>
> --
> 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 address hidden>
> Unsubscribe : https://launchpad.net/~yade-users
> More help : https://help.launchpad.net/ListHelp

Revision history for this message
David Zhang (david-zhang) said :
#13

Hi Klaus,

Thanks for your thought and the example. By reading the script, I cannot have an intuition of the example. I would appreciate it if you explain a bit more on that.

Cheers,

David

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

Hi David,

> Thanks for your thought and the example. By reading the script, I cannot
> have an intuition of the example. I would appreciate it if you explain a

The easiest way is if you run the script with yade. Do you have yade
installed? If so, copy the script I posted into a file (e.g. example.py) and
save it. Then run: yade example.py.

The script shows some linked particles (could be your membrane) falling on a
cylinder where the particle self-interact.

Cheers
Klaus

Revision history for this message
David Zhang (david-zhang) said :
#15

Hi Klaus,

I installed Ubuntu 13.10 and Yade 0.97 by using sudo apt-get install yade on my computer. Following your suggestion, I created a file (membrane.py) by copying the script you posted. However, I got the following error

$ yade membrane.py
Welcome to Yade 0.97.0
TCP python prompt on localhost:9000, auth cookie `sscayd'
XMLRPC info provider on http://localhost:21000
Running script membrane.py
Traceback (most recent call last):
  File "/usr/bin/yade", line 168, in runScript
    execfile(script,globals())
  File "membrane.py", line 7, in <module>
    blocMat = O.materials.append(JCFpmMat(young=1e6,poisson=0.3,frictionAngle=radians(30),density=2600))
NameError: name 'JCFpmMat' is not defined

I suspect that I need Yadedaily to include JCFpmMat. I then try to install Yadedaily by the following steps
1) sudo bash -c 'echo "deb http://www.yade-dem.org/packages/ saucy/" >> /etc/apt/sources.list'
2) wget -O - http://www.yade-dem.org/packages/yadedev_pub.gpg | sudo apt-key add -
3) sudo apt-get install yadedaily

It seems that 1) and 2) work well, but 3) give me an error below:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package yadedaily

Any idea about the errors?

Cheers
David

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

Hi,

We're moving slightly away from initial subject, but anyway, your two errors are "normal" :

- if "JCFpmMat is not defined" yade 0.97.0 does not contain this model and is indeed too old for you.

- for yadedaily, you won't be more lucky because of this bug I guess : https://bugs.launchpad.net/yade/+bug/1275851.

The solution for you if you want to use JCFpmMat is to use the "source installation" (download and compile : https://www.yade-dem.org/doc/installation.html#source-code)

Or you could also pick a release newer than 0.97.0 that could contain JCFpmMat (>= 1.00.0 : http://<email address hidden>/msg07102.html).
But I can not tell you how to do this...

Jérôme

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

And in fact, if you want to use Klaus's script, better use the same yade version than him.

I made some changes in JCFpm model, probably after 1.00.0.

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

Try to install yade from source as suggested by Jérôme. The latest version
available on launchpad is 1.07.0 [1] or use the latest version from the git
repository. I am working with the latest trunk version but you don't need it
for this script.

Klaus

[1] https://launchpad.net/yade/trunk/yade-1.00.0/+download/yade-1.07.0.tar.gz

On Tuesday 18 February 2014 09:01:59 David Zhang wrote:
> Question #243909 on Yade changed:
> https://answers.launchpad.net/yade/+question/243909
>
> Status: Solved => Open
>
> David Zhang is still having a problem:
> Hi Klaus,
>
> I installed Ubuntu 13.10 and Yade 0.97 by using sudo apt-get install
> yade on my computer. Following your suggestion, I created a file
> (membrane.py) by copying the script you posted. However, I got the
> following error
>
> $ yade membrane.py
> Welcome to Yade 0.97.0
> TCP python prompt on localhost:9000, auth cookie `sscayd'
> XMLRPC info provider on http://localhost:21000
> Running script membrane.py
> Traceback (most recent call last):
> File "/usr/bin/yade", line 168, in runScript
> execfile(script,globals())
> File "membrane.py", line 7, in <module>
> blocMat =
> O.materials.append(JCFpmMat(young=1e6,poisson=0.3,frictionAngle=radians(30)
> ,density=2600)) NameError: name 'JCFpmMat' is not defined
>
> I suspect that I need Yadedaily to include JCFpmMat. I then try to install
> Yadedaily by the following steps 1) sudo bash -c 'echo "deb
> http://www.yade-dem.org/packages/ saucy/" >> /etc/apt/sources.list' 2) wget
> -O - http://www.yade-dem.org/packages/yadedev_pub.gpg | sudo apt-key add -
> 3) sudo apt-get install yadedaily
>
> It seems that 1) and 2) work well, but 3) give me an error below:
> Reading package lists... Done
> Building dependency tree
> Reading state information... Done
> E: Unable to locate package yadedaily
>
> Any idea about the errors?
>
> Cheers
> David
>
> --
> 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 address hidden>
> Unsubscribe : https://launchpad.net/~yade-users
> More help : https://help.launchpad.net/ListHelp

Revision history for this message
David Zhang (david-zhang) said :
#19

Thanks jduriez, that solved my question.

Revision history for this message
Václav Šmilauer (eudoxos) said :
#20

Hi David, just a comment: you may have a look at membrane elements in Woo, those could be perhaps integrated into Yade -- http://woodem.eu/doc/theory/membrane-element.html. Cheers, v.

Revision history for this message
David Zhang (david-zhang) said :
#21

Václav, thank you for the link. David