← 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

Description changed to:
Hello,

I'm a new user to YADE and I'm in the process of learning about the
JCFpm model. I'm currently trying to break a bond between two particles
using the ForceEngine. As described in the code bit below, I'm trying to
apply and increasing force until a break occurs between the two
particles. The bottom particle is fixed.

If I got the documentation right, the force when the breakage should happen is:
FnMax  = tensileStrength * pi*Rmin^2 [1],[2] -> FnMax = 1e6 * np.pi * pow(0.005,2) =  78.539 N

First question - 
For the first trials, I tried using addF manually, using the code below (after running the script). I found that the bond breaks around O.forces.addF(1,(0,0,700)). (I first assumed that addF uses Newtons, but now I'm not so sure...). So, did I calculate FnMax correctly or not?

Second question - 
After that, I tried using the ForceEngine (same code, just uncomment #ForceEngine & #PyRunner), increasing the force on the particle, but I can't get it to break. Am I using the engine correctly?

Third question - 
I also looked at the InterpolatingDirectedForceEngine [3], where there is a magnitude for the force, but what is the difference between force and magnitudes in the engine (Again, I tried playing with it, with increasing magnitudes, but I still couldn't get it to break)

I would like your help. Sorry if this is too long or if my understanding
of vector physics is a bit lacking :)

### Forces Test 1, YADE ###

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,0,2*r),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,0,-9.81),
        damping=0.2),

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

#PyRunner(command='fEngine.force[2]+=100',realPeriod=1,initRun=True),

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

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

def recorder():
    plot.addData({
        'i':O.iter,
        'F':O.forces.f(1).norm(),
        'T':O.forces.t(1).norm()})

plot.plots={'i':('F','T')}
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()



[1] https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.JCFpmMat.tensileStrength
[2] https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.JCFpmPhys.crossSection
[3] https://yade-dem.org/doc/yade.wrapper.html?highlight=interpolatingdirectedforceengine#yade.wrapper.InterpolatingDirectedForceEngine

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