Welcome to ask.woodem.org. You may post when you login through your GitHub account.

breach membrane elements

0 votes
64 views
asked Jul 17, 2014 by matthias-frank
(Imported automatically from https://www.launchpad.net/woo/+question/251790)

i play around with the new membrane elements, which are very nice.
i tried to breach some membrane elements to model  an highly strained element. is there a method to kill a element from the mesh? i tried to empty the parRef list of a node  but this operation is not permitted. than i tried to set young modulus of one fecet particle to null. but also don't work.

8 Answers

0 votes
answered Jul 21, 2014 by eudoxos (49,070 points)
selected Jun 8, 2015 by eudoxos
 
Best answer
Hi Mattias, I added the DemField.splitNode function. You can check the examples/membrane-split.py script, which shows how to use it. Basically you create the mesh as usual, and the call splitNode on nodes where there is discontinuous displacement/rotation. giving it particles which you want to aplit off from the original node. There is a movie at .

HTH, Václav
0 votes
answered Jul 17, 2014 by eudoxos (49,070 points)
Hi mattias, thanks.

There is the ParticleContainer.disappear and ParticleContainer.reappear function (http://woodem.eu/doc/woo.dem.html#woo.dem.ParticleContainer.disappear) which will hide particle (makes invisible, deletes contacts, avoids all further interactions). I looked at the now and it will not prevent the internal force from being computed and applied, so there would have to be a flag saying that internal forces can be disregarded.

Another approach would be to remove the particle, simply by using ParticleContainer.remove (http://woodem.eu/doc/woo.dem.html#woo.dem.ParticleContainer.remove), as in S.dem.par.remove(id) or S.dem.par.remove([id1,id2,...]). I now see the documentation of that function is lacking. It will internally correctly remove the particle also from DemData.parRef, and will remove the node from S.dem.nodes if it no longer belongs to any particle.

Damaging material model (using something like the isotropic damage model - http://www.oofem.org/resources/doc/matlibmanual/html/node32.html) for membrane is something I would like to implement at some point as well. But let's keep it simple for now. Just remove the particle, that will work. Let me know if not.

Cheers, Václav
0 votes
answered Jul 18, 2014 by matthias-frank
hi Václav,

removing the particle wroks so far. this method removes the facet and leads to an hole in the membrane.  It is possible to remove only the conncetion between particles/nodes? this should lead to somewhat like a crack, right?

matthias
0 votes
answered Jul 19, 2014 by eudoxos (49,070 points)
Yes, it is possible, I put something together here, but there is one piece missing: DemData does not let you remove particle reference from python (and I also found out that there is no way to remove node from S.dem.nodes from python). I will fix that at the beginning of the next week and post and example.

Basically the idea is to clone (using node.deepcopy()) the old node and re-assign some particles to the new one, and keep some with the old one. I will probably write some c++ helper function to do that, because it is quite low-level python (perhaps 10 lines) which is quite ugly. You can try it for yourself, of course, but there is that piece missing.

execfile('examples/membrane2.py')
# find the corner node by its position
for node in S.dem.nodes:
    if node.pos==(1,1,0): break
pp=node.dem.parRef
clone=node.deepcopy() # copy the node
S.dem.nodesAppend(clone) # add the copy to nodes so that it moves
for n in (node,clone):
    n.dem.mass*=.5 # each new node takes half of the mass
    n.dem.inertia*=.5 # this is not geometrically correct, but whatever works here...
for p in pp[1:]: # first particle keeps the original node, other gets the copy
    # find where the original node was
    # convert to list first since boost::python::vector_indexing_suite apparently does not support index as in p.shape.nodes.index(node)
    ni=list(p.shape.nodes).index(node)
    p.shape.nodes=[clone if i==ni else p.shape.nodes[i] for i in range(len(p.shape.nodes))]
    clone.dem.addParRef(p)
    # FIXME: remove p from parRef of the old node
    # FIXME: otherwise p is still referenced by the original node
    # FIXME: there is currently no way to do that from python

# run this to make sure you got all the particle references etc right!
S.selfTest()

I keep you updated.

Cheers, Václav
0 votes
answered Jul 21, 2014 by matthias-frank
Hi Václav,

yes that looks like the expected behaviour. can you commit the example. at the actual rev 3508 it's not included

Matthias
0 votes
answered Jul 21, 2014 by eudoxos (49,070 points)
Rev 3512 contains both the implementation and the example. Thanks for reminding me to commit to LP. Cheers, Vaclav
0 votes
answered Jul 29, 2014 by matthias-frank
hi Václav,

i played around with the membrane elements, and this is my result:
http://wwwpub.zih.tu-dresden.de/~s0710408/closeBag.avi

this example addresses some features around packaging and transport of granular materials with its package, often tubular bags.

do you plan, to implement the collision between  flexfacet and other nonspherical  particle/nodes?

matthias
0 votes
answered Feb 26, 2015 by eudoxos (49,070 points)
Hi Matthias, I think I did not see your reply here back then -- sorry.

Wow, what a nice movie, really. There are collisions of membrane with all other shapes (including membranes), if that helps. Are you based at TU Dresden? I sometimes go there, visit people at Bodenmechanik & Grundbau; perhaps we could meet, I would like to see your research!

Cheers, Václav
...