Thanks, I could reproduce the crash with this script.

Solution
********

The change [1] should fix your problems. Obviously you need to update
your yade version to enjoy this change.

In terms of package versions, I do not know when this change will be
reflected in yadedaily, considering in particular we currently have
compiling problems. [2]

If you use a local source code version, the best is for you to apply
locally the same change as [1] (and to recompile.. :-) )


Reason
******

As told by Jan in the Launchpad question thread, the bug came from
growParticles() where interactions operations were performed before
checking whether the interaction actually is real. Because these soon-
to-be-erased interactions (involving deleted bodies) were accessed,
deleted bodies, were tried to be accessed as well, leading to the crash.


Advice
******

The MWE below was enough to trigger the exact same bug:
-------------
O.bodies.append(sphere(Vector3(0,0,0),1))
O.bodies.append(sphere(Vector3(0,0,2),1))
O.step()
O.bodies.erase(1)
growParticles(1.5)
-------------
and would have maybe (??) led to a faster bug resolution, enticing more people 
to look faster at the issue.

I understand showing real MWE may require some YADE practice..
Nevertheless, it's worth trying it, and here you had some elements from
Jan narrowing down the problem to Shop::growParticles()

This being said, I just hope this will motivate you to dig into the
source code, happy YADE-ing ! ;-)


[1] 
https://github.com/yade/trunk/commit/bd1089e77eae83c41c4ce0c60873e1e234ba9c89
[2] https://yade-dem.org/buildbot/one_line_per_build

** Changed in: yade
       Status: Incomplete => Fix Released

-- 
You received this bug notification because you are a member of Yade
developers, which is subscribed to Yade.
https://bugs.launchpad.net/bugs/1767601

Title:
  segmentation fault after erasing some particles

Status in Yade:
  Fix Released

Bug description:
  Dear all,
  I built a simple script according to script-session1.py (B.Chareyre). I tried 
to erase some particles, it was done without any problem. but after finishing 
the simulation, as soon as  I tried to run more iterations, it showed 
segmentation fault and quit  yade.
  The length of O.bodies is similar to The one before erasing.(Does not change 
after erasing)
  you can see my question in:
  https://answers.launchpad.net/yade/+question/668274
  I'm using Ubuntu 14.04 LTS and yadedaily version: 2018.02b-85-f861843~trusty

  And here is my script:

  
  # -*- coding: utf-8 -*-
  from yade import pack, plot
  young=1e8
  compFricDegree = 5
  finalFricDegree = 35
  mn,mx=Vector3(0,0,0),Vector3(.005,.005,.005)

  
O.materials.append(FrictMat(young=young,poisson=0.5,frictionAngle=radians(compFricDegree),density=2600,label='spheres'))
  
O.materials.append(FrictMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='walls'))
  walls=aabbWalls([mn,mx],thickness=0,material='walls')
  wallIds=O.bodies.append(walls)
  psdSizes=[.00001,.00006,.00008,.0002,.0004,.0005,.0008,.001]
  psdCumm=[0,.0175,.025,.4,.5,.7,.85,1]
  sp=pack.SpherePack()
  
sp.makeCloud(mn,mx,psdSizes=psdSizes,psdCumm=psdCumm,distributeMass=True,num=500)
  sp.toSimulation(material='spheres')
  triax=TriaxialStressController(
        maxMultiplier=1.001,
        finalMaxMultiplier=1.0001,
        thickness = 0,
        stressMask = 7,
        internalCompaction=True,
  )

  newton=NewtonIntegrator(damping=0.2)
  O.engines=[
        ForceResetter(),
        InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
        InteractionLoop(
                [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
                [Ip2_FrictMat_FrictMat_FrictPhys()],
                [Law2_ScGeom_FrictPhys_CundallStrack()],label="iloop"
        ),
        triax,
        newton,
  ]
  O.dt=PWaveTimeStep()
  triax.goal1=triax.goal2=triax.goal3=-10000

  while 1:
    O.run(1000,True)
    unb=unbalancedForce()
    print 'porosity', triax.porosity
    if unb<0.01 and abs(-10000-triax.meanStress)/10000<.01:
      break

  bodiesToBeDeleted=[]
  for b in O.bodies:
        if b.id in range(6):
                continue
        else:
                if b.state.pos[0]<.002:
                        bodiesToBeDeleted.append(b)

  for b in bodiesToBeDeleted:
        O.bodies.erase(b.id)

To manage notifications about this bug go to:
https://bugs.launchpad.net/yade/+bug/1767601/+subscriptions

_______________________________________________
Mailing list: https://launchpad.net/~yade-dev
Post to     : yade-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp

Reply via email to