← Back to team overview

yade-users team mailing list archive

Re: [Question #654914]: convergence issue! using unbalancedForce()

 

Question #654914 on Yade changed:
https://answers.launchpad.net/yade/+question/654914

    Status: Open => Answered

Chareyre proposed the following answer:
Hi, I'm guessing you expect a heap because of the rolling moments (?). Did
you check if moments were indeed computed and non-zero?
Bruno

Le 2 août. 2017 15:53, "Seti" <question654914@xxxxxxxxxxxxxxxxxxxxx> a
écrit :

New question #654914 on Yade:
https://answers.launchpad.net/yade/+question/654914

Dear Friends,

I am not sure why my below script, does not converge, even by increasing
the micro parameters such as friction angle, the simulation  does not reach
to target and gives me flat surface of grains instead of a heap - it is a
time consuming  process . can you please advise me where is my mistake?


#!/usr/bin/python
from yade import pack,utils, qt, plot
pred = pack.inAlignedBox((0,0,0),(0.067,0.067,0.067))
#create material.
#soil1 = CohFrictMat(young=30e7,poisson=0.3,frictionAngle=
radians(30),density=2600.0,normalCohesion=10e9,
shearCohesion=80e9,alphaKr=0.15,label='soil')
soil1 = CohFrictMat(alphaKr=0.15,young=30e9,poisson=0.4,
density=2600,frictionAngle=radians(36.5),momentRotationLaw=True,
etaRoll=0.3,label='spheres')
#color=(1,0,0) ----red color
#soil1 = FrictMat(alphaKr=1.7,young=30e6,poisson=0.3,
frictionAngle=radians(30),density=2600.0,etaRoll=.4,label='soil')
O.materials.append(soil1)
O.bodies.append(utils.wall(0,axis=1,sense=1))
O.materials.append(CohFrictMat(young=30e6,poisson=0.3, frictionAngle =
radians(30) , label='wallmat'))
#O.materials.append(FrictMat(young=30e9,poisson=0.3, frictionAngle =
radians(30) , label='wallmat'))
wallmat = O.materials[-1]

spheres=SpherePack()
spheres=pack.randomDensePack(pred,radius=.0025,rRelFuzz=0,
material='soil',spheresInCell=1000,color=(1,0,0),returnSpherePack=True)
spheres.toSimulation()
#O.bodies.append(spheres)
#

#
O.engines=[
             ForceResetter(),#reset forces
             InsertionSortCollider([Bo1_Wall_Aabb(),Bo1_Sphere_Aabb()]),
             InteractionLoop(

[Ig2_Sphere_Sphere_ScGeom6D(),Ig2_Wall_Sphere_ScGeom()],
# collision geometry
                            [Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(),
Ip2_FrictMat_FrictMat_FrictPhys  ()],# collision "physics"
                            [Law2_ScGeom6D_CohFrictPhys_
CohesionMoment(),Law2_ScGeom_FrictPhys_CundallStrack()] # contact law --
apply forces
                                            ),
                      # apply gravity force to particles
                            # damping: numerical dissipation of energy
              NewtonIntegrator(damping=0.4,gravity=(0,-9.81,0)),
                            #qt.SnapshotEngine(fileBase='
3d-',iterPeriod=200,label='snapshot'),
   # this engine will be called after 20000 steps, only once

              PyRunner(command='checkUnbalanced()',realPeriod=
50,label='checker'),
              PyRunner(command='addPlotData()',iterPeriod=100)
]

print 'Number of elements: ', len(O.bodies)

print 'Box Volume: '
print '8000,unbalancedForce()<1e-1,0.0005, alphaKr=0.15,young=30e9,
poisson=0.4,density=2600,frictionAngle=radians(36.5),momentRotationLaw=True,
etaRoll=0.3,'
O.trackEnergy=True
# set timestep to a fraction of the critical timestep
# the fraction is very small, so that the simulation is not too fast
# and the motion can be observed
O.dt=2.1*utils.PWaveTimeStep()
#makeVideo(snapshot.snapshots,'3d.mpeg',fps=10,bps=10000)
# save the simulation, so that it can be reloaded later, for experimentation
#O.saveTmp()0
#checker.command='stopUnloading()'
def checkUnbalanced():
   if unbalancedForce()<1e-2:
      print('Reached target , stopping')
      O.pause()
      plot.saveDataTxt('FrictMat,e-2repose10degree,r=.5,0, damping=
0.5.txt.bz2')
      plot.saveDataTxt('FrictMat,e-2repose10degree,r=.5,0, damping=
0.5.txt')
#plot.saveDataTxt('modi.data.bz2')
      # plot.saveGnuplot('bbb') is also possible

# collect history of data which will be plotted

def addPlotData():
   # each item is given a names, by which it can be the unsed in plot.plots
   # the **O.energy converts dictionary-like O.energy to plot.addData
arguments
   plot.addData(i=O.iter,unbalanced=unbalancedForce(),**O.energy)
#O.save('Modifiedd.txt.bz2')
#while 1:
        #O.run(100,True)
        #if unbalancedForce()<1e-5:
                #break
plot.plots={'i':('unbalanced',None,O.energy.keys)}
plot.plot()

O.saveTmp()

#plot.saveDataTxt('2')
from yade import qt
qt.View()
#O.run()
#from yade import qt
#qt.View()
#O.run()
# this function is called when the simulation is finished
#def finish():
   # snapshot is label of qt.SnapshotEngine
   # the 'snapshots' attribute contains list of all saved files
   #makeVideo(snapshot.snapshots,'3d.mpeg',fps=10,bps=10000)
   #O.pause()


yade.qt.Controller();
# set parameters of the renderer, to show network chains rather than
particles
# these settings are accessible from the Controller window, on the second
tab ("Display") as well
#rr=yade.qt.Renderer()
#rr.shape=False
#rr.intrPhys=True
plot.saveDataTxt('reposefric,.2,17,17,.004mm,young=30e6,
poisson=0.3,frictionAngle=radians(30),density=2600.0')

Thanks,
Seti

--
You received this question notification because your team yade-users is
an answer contact for Yade.

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

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.