← Back to team overview

yade-dev team mailing list archive

Re: [Bug 666246] Re: periodic boundary don't work with ViscEl classes

 

You are right, of couse.
> But how can I get shift2 in my Law* engine?
> What is prefered path?
> May be to use HertzMindlin.cpp:181 string:
>
> Vector3r shift2=scene->isPeriodic ?
> Vector3r(scene->cell->Hsize*contact->cellDist.cast<Real>()) :
> Vector3r::Zero();
>
> Or to use precomputed shearIncrement from ScGeom?
> But I need incidentVelocity too, but in ScGeom it is not cashed...
>
Yes, if you need the velocities you could get shift2 as above and then
simply use the ScGeom function getIncidentVel to get the current impact
velocity (as I am doing in HertzMindlin). We added this function on purpose
in case velocity was needed inside the contact law.
Btw, according to Vaclav, for Facet-Sphere interaction shift2 would not work
properly.


> > I see that, currently in Ig2_Facet_Sphere, avoidRatcheting is true (my
> > bad), I recommend turning it false :
> > Ig2_Facet_Sphere_ScGeom.cpp:110 :
> > scm->precompute(state1,state2,scene,c,normal,isNew,shift2,*_true_*);
>
> Why is avoidGranularRatcheting hard coded here?
> Should I turn it false and commit?
>
I think in this case it should be False, but let's wait for Bruno's answer.
For Sphere-Sphere interaction it should be True (see Bruno's comment and few
papers related to the topic if you are interested), though I guess the point
is still debated.
Btw, now for Sphere-Sphere interaction everything works fine with the pbc
(no explosions or such) even including ratcheting since Vaclav fixed the
problem there (just to let you know).

Chiara

>
>
>
> --
> Best regards,
> Sergei D.
>
> --
> periodic boundary don't work with ViscEl classes
> https://bugs.launchpad.net/bugs/666246
> You received this bug notification because you are a member of Yade
> developers, which is subscribed to Yade.
>
> Status in Yet Another Dynamic Engine: Fix Committed
>
> Bug description:
> Periodic boundary don't work with Ig2_Facet_Sphere_ScGeom and
> Ig2_Sphere_Sphere_ScGeom functors.
>
>
> #=============BEGIN SCRIPT TEST PERIODIC WITH
> Ig2_Sphere_Sphere_ScGeom==========
> # -*- coding: utf-8
>
> from yade import utils
>
> sphereRadius=0.1
> tc=0.001# collision time
> en=0.3  # normal restitution coefficient
> es=0.3  # tangential restitution coefficient
> density=2700
> frictionAngle=radians(35)#
> params=utils.getViscoelasticFromSpheresInteraction(tc,en,es)
>
> sphereMat=O.materials.append(ViscElMat(density=density,frictionAngle=frictionAngle,**params))
>
>
> # Spheres
> sphId=O.bodies.append([
>        utils.sphere( (i*0.2+0.1,0.5,0.2), 0.1, material=sphereMat) for i in
> range(5)
>        ])
> O.bodies[sphId[-1]].state.vel=(0.5,0.5,0)
>
> ## Engines
> O.engines=[
>        ForceResetter(),
>        InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Facet_Aabb()]),
>        InteractionLoop(
>                [Ig2_Sphere_Sphere_ScGeom()],
>                [Ip2_ViscElMat_ViscElMat_ViscElPhys()],
>                [Law2_ScGeom_ViscElPhys_Basic()],
>        ),
>        NewtonIntegrator(damping=0),
> ]
>
> O.periodic=True
> O.cell.refSize=Vector3(1,1,1)
>
> O.dt=.01*tc
>
> O.saveTmp()
> #==========================END======================
>
>
> #=============BEGIN SCRIPT TEST PERIODIC WITH
> Ig2_Facet_Sphere_ScGeom==========
> # -*- coding: utf-8
>
> from yade import utils
>
> sphereRadius=0.1
> tc=0.001# collision time
> en=0.3  # normal restitution coefficient
> es=0.3  # tangential restitution coefficient
> density=2700
> frictionAngle=radians(35)#
> params=utils.getViscoelasticFromSpheresInteraction(tc,en,es)
>
> facetMat=O.materials.append(ViscElMat(frictionAngle=frictionAngle,**params))
>
> sphereMat=O.materials.append(ViscElMat(density=density,frictionAngle=frictionAngle,**params))
>
> floor
> n=5.
> s=1./n
> for i in range(0,n):
>        for j in range(0,n):
>                O.bodies.append([
>                        utils.facet(
> [(i*s,j*s,0.1),(i*s,(j+1)*s,0.1),((i+1)*s,(j+1)*s,0.1)],material=facetMat),
>                        utils.facet(
> [(i*s,j*s,0.1),((i+1)*s,j*s,0.1),((i+1)*s,(j+1)*s,0.1)],material=facetMat),
>                ])
>
> # Spheres
> sphId=O.bodies.append([
>        utils.sphere( (0.5,0.5,0.2), 0.1, material=sphereMat),
>        ])
> O.bodies[sphId[-1]].state.vel=(0.5,0,0)
>
> ## Engines
> O.engines=[
>        ForceResetter(),
>        InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Facet_Aabb()]),
>        InteractionLoop(
>                [Ig2_Facet_Sphere_ScGeom()],
>                [Ip2_ViscElMat_ViscElMat_ViscElPhys()],
>                [Law2_ScGeom_ViscElPhys_Basic()],
>        ),
>        GravityEngine(gravity=[0,0,-9.81]),
>        NewtonIntegrator(damping=0),
> ]
>
> O.periodic=True
> O.cell.refSize=Vector3(1,1,1)
>
> O.dt=.01*tc
>
> O.saveTmp()
> #==========================END======================
>
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~yade-dev<https://launchpad.net/%7Eyade-dev>
> Post to     : yade-dev@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~yade-dev<https://launchpad.net/%7Eyade-dev>
> More help   : https://help.launchpad.net/ListHelp
>

Follow ups

References