Interaction issue with permanent force function

Asked by Akm on 2019-12-19

I am trying to apply a permanent force on a sphere with the help of a utils box(only one side as a plate). But when I apply a permanent force on the plate, the plate passes through the sphere as if there is no interaction instead of moving the sphere. Kindly help me with this issue.

Yade 20191217-2900~6d5e1cb~xenial1
Using python version: 3.5.2

Here is the Minimal working script:

from yade import pack, qt, export, ymport, plot

O.reset()

concrete_material=CpmMat(
 young = 1e10,
    density=1400,
 poisson = 0.25,
 frictionAngle = radians(40),
 epsCrackOnset = 1e-4,
 relDuctility = 10,
 sigmaT = 1e18,
     label='concrete_mat'
)
mat1=O.materials.append(concrete_material)

#O.materials.append(FrictMat(frictionAngle=0,density=0,label='walls'))

O.bodies.append([
 sphere(center=(0,0,0),radius=.5,fixed=False,material='concrete_mat'),
])

O.engines=[
    ForceResetter(),
    InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=1,label='bo1s'),Bo1_Facet_Aabb(),Bo1_Wall_Aabb(),Bo1_Box_Aabb()]),
    InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=1,label='ig2s'),Ig2_Facet_Sphere_ScGeom(),Ig2_Wall_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
  [Ip2_CpmMat_CpmMat_CpmPhys(cohesiveThresholdIter=1)],
  [Law2_ScGeom_CpmPhys_Cpm()]
 ),
    NewtonIntegrator(gravity=(0,0,0),damping=0.5),
    GlobalStiffnessTimeStepper(active=True,timeStepUpdateInterval=1,timestepSafetyCoefficient=0.8),
]

O.step()

U_box= utils.box((.5,1,-.5),(1,0,.5),fixed=False,wire=False,color=(1,0,0))
O.bodies.append(U_box)

U_box.state.mass=10

O.forces.setPermF(U_box.id,(0,-20,0))

yade.qt.View()

O.saveTmp()

####
Thanks in advance
Arun

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Jan Stránský
Solved:
2019-12-20
Last query:
2019-12-20
Last reply:
2019-12-19
Jérôme Duriez (jduriez) said : #1

Hi,

> as if there is no interaction instead of moving the sphere

This is easy to check, you just have to ask for O.interactions.has(0,1) here. Could be a first step in investigating.

Akm (arunkumarmurali) said : #2

Hi Jerome,

Thanks for the call. I checked and there are no interactions between the two. How do I solve this issue?

Best Jan Stránský (honzik) said : #3

Hi,

first, check if the **body** is there, interaction comes afterwards. E.g. by executing
O.step() # after it, the wall is not visible in GUI
print(U_box.state.ori) # full of NaNs, interaction detection does not work then..

to solve this, either block rotational degrees of freedom
U_box.state.blockedDOFs = "XYZ"
or set nonzero inertia
U_box.state.inertia = (1,1,1)

cheers
Jan

Akm (arunkumarmurali) said : #4

Thanks Jan Stránský, that solved my question.