← Back to team overview

yade-users team mailing list archive

Re: [Question #683787]: Using ForceEngine to break a single JCFpm bond

 

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

    Status: Answered => Open

Yaniv Fogel is still having a problem:
Hi Jan and Jérôme,

Thanks for the remarks. I understand what you mean about the dynamic
state of the system.

I tried investigating how the forceEngine and interaction forces are
related. I would expect that as the forceEngine force increases, the
interaction force will decrease (as they are opposite), but like before,
there is no reaction between the forceEngine and interaction forces
between the particles...

As you will see while you run the script provided below ( I tried to see
how I can minimize it anymore, but I think this is the most minimal
way...), the force acting on top particle (F1) is increasing gradually,
while the force acting on the bottom particle (F0) is the gravity force,
and is logically equal to the interaction force between the particles.
The engineForce has no effect on the system... :/

(There are some "steps" sometimes in the plot of F1 between interactions
0 and 0.2e7, when the force reaches around 70-120, which does correlates
to a certain degree with the FnMax value I calculated ... but again,
other than that, there is no effect...)

#### Updated forceEngine Code ####

 from yade import pack, plot
import numpy as np

yade.qt.Controller()

# Define geometry
r = 0.005
intR = 1.0

# Define material
idRockTest = O.materials.append(JCFpmMat(type=1,
                                         young=30e9,
                                         density=2500.0,
                                         poisson=0.1,
                                         frictionAngle=np.radians(18.0),
                                         tensileStrength=1e6,
                                         cohesion=1e6,
                                         label='Rock'))

# add spheres
O.bodies.append([
    sphere((0,0,0),r,material='Rock',color=(0.019, 0.529, 1),fixed=True),
    sphere((0,2*r,0),r,material='Rock',color=(1, 0, 0))
    ])

# Simulation loop
O.engines=[
 ForceResetter(),

InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=intR,label='Saabb')]),

    InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=intR,label='SSgeom')],
  [Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=1,label='interactionPhys')],
  [Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(label='interactionLaw')]
 ),

    # Apply gravity force to particles.
    NewtonIntegrator(
        gravity=(0,-9.81,0),
        damping=0.2),

    # Apply force on top particle
    ForceEngine(ids=[1],force=Vector3(0,0,0),label='fEngine'),

    PyRunner(command='fEngine.force[1]+=10',realPeriod=1,initRun=True),
# apply gradual increasing force on top particle

    PyRunner(command='recorder()',realPeriod=1,initRun=True),
]

# plot forces and position
def recorder():
    plot.addData({
        'i':O.iter,
        'F1':O.forces.f(1).norm(), # force acting on top particle
        'Pos[z]':O.bodies[1].state.pos[1], # position (y) of top particle
        'F0':O.forces.f(0).norm(), # force acting on bottom particle
        'nInter[0,1]':O.interactions[0,1].phys.normalForce[1]}) # normal interaction force between particles

plot.plots={'i':('F1'),'i ':('F0'),'i  ':('Pos[z]'),'i   ':('nInter[0,1]')}
plot.plot()

O.dt=0.

#### manage interaction detection factor during the first timestep and then set default interaction range
O.step();
### initializes the interaction detection factor
SSgeom.interactionDetectionFactor=-1.
Saabb.aabbEnlargeFactor=-1.

# Define time step
O.dt = 0.5*utils.PWaveTimeStep()

O.run()

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