← Back to team overview

yade-users team mailing list archive

Re: Applying constant force on a wall and snapshot engine

 

I'll try to read replies first, next time, to avoid replying when Mr. Vaçlav already did.

Again Marco, you need to be more precise when commenting what happens in the simulations.
By doing so, you will find the cause of most problems on your own, actually.

Why is the box falling? What is the total force on it? Is it an upward force? So you discovered a terrible bug in Yade. Is it a downward force? So there is nothing wrong here, you need to look elsewhere.

About this :

"if you
want strain-controlled test; it is suitable for sphere packings. For
stress-control, you are on your own probably. Vaclav"

I think Mohammad Islam is working on this at the moment and should be quite advanced on this point (just browse the mailing list archives). So you are perhaps not totally alone on the matter.

Bruno


MarcoDottor a écrit :
Hello,

I followed the advices that Mr Vaclav gave me and the code is below, but
my box is still falling with spheres, there is again something wrong? It
seems that only gravity is affecting bodyes.
Another point is that if I activate the snapshot engine it results in
blank images, there's a reason or a wrong setting?

Thank you


#!/usr/local/bin/yade-trunk -x
# -*- encoding=utf-8 -*-

from yade import utils
from math import *
from numpy import arange
import random

## Paametri fisici geometrie importate
Young = 15e6
Poisson = 0.2

#Parametri cilindro
rCyl=40   ##Raggio superiore tronco cono
rCyl2=40  ##Raggio inferiore tronco cono
hCyl=39   ##altezza base inferiore cono
hCyl2=10 ##altezza base superiore cono
nPoly=20  ##Poligoni di cui è composto il contenitore
hBox=hCyl/5
phiStep=2*pi/nPoly

#tolleranza contatti
toll = 0.005

## Omega
o=Omega()

## Importa geometria testa
head =
utils.import_stl_geometry('TC3T4.stl',young=Young,poisson=Poisson,
color=[0,1,0],wire=True)

for n in range(nPoly):
        phi1,phi2=n*phiStep,(n+1)*phiStep
        def pt(angle,radius,z):
                return radius*sin(angle),radius*cos(angle),z
a,b,c,d=pt(phi1,rCyl,hCyl2),pt(phi2,rCyl,hCyl2),pt(phi1,rCyl2,hCyl),pt(phi2,rCyl2,hCyl)
        o.bodies.append([
                utils.facet([a,b,c]),
                utils.facet([b,c,d])])

for b in o.bodies: b['isDynamic']=False

box =
utils.box([0,0,hCyl+hBox/2],[rCyl,rCyl,hBox/2],density=200,wire=True)
boxId=o.bodies.append(box)

#for b in o.bodies: b['isDynamic']=False

## Sfere
sphereRadius = 0.6
nbSpheres = (10,10,3)
for i in xrange(nbSpheres[0]):
   for j in xrange(nbSpheres[1]):
        for k in xrange(nbSpheres[2]):
            x = (i*2 - nbSpheres[0])*sphereRadius*1.2
            y = (j*2 - nbSpheres[1])*sphereRadius*1.2
            z = 31 + (k*2 - nbSpheres[2])*sphereRadius*1.2
o.bodies.append(utils.sphere([x,y,z],sphereRadius*(1-.3*(random.random())),young=Young,poisson=Poisson,density=2400))
utils.randomizeColors(onlyDynamic=True)

## Timestep
o.dt=utils.PWaveTimeStep()

## Initializers
o.initializers=[
        ## Create and reset to zero container of all PhysicalActions
that will be used
        StandAloneEngine('PhysicalActionContainerInitializer'),
        ## Create bounding boxes. They are needed to zoom the 3d view
properly before we start the simulation.
MetaEngine('BoundingVolumeMetaEngine',[EngineUnit('InteractingSphere2AABB'),EngineUnit('InteractingFacet2AABB'),EngineUnit('InteractingBox2AABB'),EngineUnit('MetaInteractingGeometry2AABB')])
]


## Engines
o.engines=[

        ## Resets forces and momenta the act on bodies
        StandAloneEngine('PhysicalActionContainerReseter'),

        ## Associates bounding volume to each body.
        MetaEngine('BoundingVolumeMetaEngine',[
                EngineUnit('InteractingSphere2AABB'),
                EngineUnit('InteractingFacet2AABB'),
                EngineUnit('InteractingBox2AABB'),
                EngineUnit('MetaInteractingGeometry2AABB')
        ]),
        ## Using bounding boxes find possible body collisions.
        ##StandAloneEngine('SpatialQuickSortCollider'),
        StandAloneEngine('SAPCollider'),
        ## Create geometry information about each potential collision.
        MetaEngine('InteractionGeometryMetaEngine',[
EngineUnit('InteractingSphere2InteractingSphere4SpheresContactGeometry'),
EngineUnit('InteractingFacet2InteractingSphere4SpheresContactGeometry',{'shrinkFactor':toll}),
EngineUnit('InteractingBox2InteractingSphere4SpheresContactGeometry')
        ]),
        ## Crea informazioni fisiche sui contatti.
MetaEngine('InteractionPhysicsMetaEngine',[EngineUnit('MacroMicroElasticRelationships')]),
        ## "Solver" of the contact
        StandAloneEngine('ElasticContactLaw'),

        ## Applica forza alla base
        DeusExMachina('ForceEngine',{'subscribedBodies':[boxId],
'force':[0,0,-100]}),
        ## Sostituisce i motori di applicazione forze ai corpi,
smorzamento ed integrazione temporale
        DeusExMachina('NewtonsDampedLaw',{'damping':0.3}),


        ## Applica rotazione alla testa 1 giro/min = 0,1047 rad/s
        DeusExMachina('RotationEngine',{'subscribedBodies':head,
'rotationAxis':[0,0,1],'rotateAroundZero':True,'angularVelocity':0.1047}),

#StandAloneEngine('SnapshotEngine',{'virtPeriod':1,'fileBase':'aaa','viewNo':0,'ignoreErrors':True})

]

## Salva la scena da simulare
o.save('/tmp/a.xml');


--

_______________
Chareyre Bruno
Maitre de conference

Grenoble INP
Laboratoire 3SR - bureau E145
BP 53 - 38041, Grenoble cedex 9 - France
Tél : 33 4 56 52 86 21
Fax : 33 4 76 82 70 43
________________




References