woo

breach membrane elements

Asked by matthias

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.

Question information

Language:
English Edit question
Status:
Answered
For:
woo Edit question
Assignee:
No assignee Edit question
Last query:
Last reply:
Revision history for this message
Václav Šmilauer (eudoxos) said :
#1

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

Revision history for this message
matthias (matthias-frank) said :
#2

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

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

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

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

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 http://youtu.be/nFC43XupOIg .

HTH, Václav

Revision history for this message
matthias (matthias-frank) said :
#5

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

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

Rev 3512 contains both the implementation and the example. Thanks for reminding me to commit to LP. Cheers, Vaclav

Revision history for this message
matthias (matthias-frank) said :
#7

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

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

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

Can you help with this problem?

Provide an answer of your own, or ask matthias for more information if necessary.

To post a message you must log in.