Bond breaking in CpmMat

Asked by behzad

Hi,

I have the following script for two contacting spheres with CpmMat.
I have assigned a strain rate in tension to see at which force the bond between the spheres break.
The code is plotting the interaction force vs. the displacement of the upper sphere.
The problem is that the graph and the force at which the bond breaks is not a function of sigmaT.
In this case the obtained graph always has a peak at around 7.5e3 even if we change sigmaT. Changing epsCrackOnset is changing the strain at which the maximum force happens.
What's the point I'm missing here?

=====================
O.reset()
from yade import utils, plot
from yade import pack, qt

bMat=O.materials.append(CpmMat(young=24e6,frictionAngle=.8,poisson=.2,density=3800,sigmaT=1e5,relDuctility=30,epsCrackOnset=1e-4,isoPrestress=0))

id_Mat2=O.materials.append(FrictMat(young=1e10,poisson=0.3,density=1000,frictionAngle=1))
Rigid=O.materials[id_Mat2]

s1=utils.sphere([0.0,0.0,1.0],1.0,fixed=True,material=bMat)
s2=utils.sphere([0.0,0.0,3.0],1.0,fixed=True,material=bMat)

O.bodies.append(s1)
O.bodies.append(s2)

box_1 = O.bodies.append(box((0,0,0),(1,1,.001),fixed=True,material=Rigid))

O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
[Ip2_CpmMat_CpmMat_CpmPhys(), Ip2_FrictMat_CpmMat_FrictPhys()],
[Law2_ScGeom_CpmPhys_Cpm(),Law2_ScGeom_FrictPhys_CundallStrack()],
),
NewtonIntegrator(damping=0.7,gravity=[0,0,0]),
PyRunner(command='AutoData()',iterPeriod=1000)
]

O.bodies[1].state.vel=(0,0,0.000001)

qt.View()

def AutoData():
  i = O.interactions[0,1]
  plot.addData(
    d=O.bodies[1].state.pos[2]-3.0,
    F=i.phys.normalForce.norm())

plot.plots={'d':('F')}
plot.plot()
====================

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
behzad
Solved:
Last query:
Last reply:
Revision history for this message
Jan Stránský (honzik) said :
#1

Bi Behzad,
have a look at [1], sigmaT has no effect on normal direction.
Cheers
Jan

[1] http://beta.arcig.cz/~eudoxos/smilauer2010-phd-thesis.pdf
Dne 12.5.2014 17:02 "behzad" <email address hidden>
napsal(a):

> New question #248562 on Yade:
> https://answers.launchpad.net/yade/+question/248562
>
> Hi,
>
> I have the following script for two contacting spheres with CpmMat.
> I have assigned a strain rate in tension to see at which force the bond
> between the spheres break.
> The code is plotting the interaction force vs. the displacement of the
> upper sphere.
> The problem is that the graph and the force at which the bond breaks is
> not a function of sigmaT.
> In this case the obtained graph always has a peak at around 7.5e3 even if
> we change sigmaT. Changing epsCrackOnset is changing the strain at which
> the maximum force happens.
> What's the point I'm missing here?
>
> =====================
> O.reset()
> from yade import utils, plot
> from yade import pack, qt
>
>
>
> bMat=O.materials.append(CpmMat(young=24e6,frictionAngle=.8,poisson=.2,density=3800,sigmaT=1e5,relDuctility=30,epsCrackOnset=1e-4,isoPrestress=0))
>
>
>
>
> id_Mat2=O.materials.append(FrictMat(young=1e10,poisson=0.3,density=1000,frictionAngle=1))
> Rigid=O.materials[id_Mat2]
>
>
> s1=utils.sphere([0.0,0.0,1.0],1.0,fixed=True,material=bMat)
> s2=utils.sphere([0.0,0.0,3.0],1.0,fixed=True,material=bMat)
>
> O.bodies.append(s1)
> O.bodies.append(s2)
>
> box_1 = O.bodies.append(box((0,0,0),(1,1,.001),fixed=True,material=Rigid))
>
>
> O.engines=[
> ForceResetter(),
> InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
> InteractionLoop(
> [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
> [Ip2_CpmMat_CpmMat_CpmPhys(), Ip2_FrictMat_CpmMat_FrictPhys()],
> [Law2_ScGeom_CpmPhys_Cpm(),Law2_ScGeom_FrictPhys_CundallStrack()],
> ),
> NewtonIntegrator(damping=0.7,gravity=[0,0,0]),
> PyRunner(command='AutoData()',iterPeriod=1000)
> ]
>
>
> O.bodies[1].state.vel=(0,0,0.000001)
>
> qt.View()
>
>
> def AutoData():
> i = O.interactions[0,1]
> plot.addData(
> d=O.bodies[1].state.pos[2]-3.0,
> F=i.phys.normalForce.norm())
>
>
> plot.plots={'d':('F')}
> plot.plot()
> ====================
>
> --
> You received this question notification because you are a member of
> yade-users, which is an answer contact for Yade.
>
> _______________________________________________
> Mailing list: https://launchpad.net/~yade-users
> Post to : <email address hidden>
> Unsubscribe : https://launchpad.net/~yade-users
> More help : https://help.launchpad.net/ListHelp
>

Revision history for this message
behzad (behzad-majidi) said :
#2

Hi,

I'm reading the reference [1] you provided.
But, what's controlling the bond strength in this material?

Revision history for this message
Jan Stránský (honzik) said :
#3

Hi Behzad,
the bond strength is defined as young*epsCrackOnset, see eq. 3.1 and fig.
3.2 in Vaclav's thesis.
cheers
Jan

2014-05-13 22:11 GMT+02:00 behzad <email address hidden>:

> Question #248562 on Yade changed:
> https://answers.launchpad.net/yade/+question/248562
>
> behzad posted a new comment:
> Hi,
>
> I'm reading the reference [1] you provided.
> But, what's controlling the bond strength in this material?
>
> --
> You received this question notification because you are a member of
> yade-users, which is an answer contact for Yade.
>
> _______________________________________________
> Mailing list: https://launchpad.net/~yade-users
> Post to : <email address hidden>
> Unsubscribe : https://launchpad.net/~yade-users
> More help : https://help.launchpad.net/ListHelp
>

Revision history for this message
behzad (behzad-majidi) said :
#4

Great.
Thanks.
Is there a way to track if the bond is broken? apart from the contact force plotting?

O.interactions[0,1].isActive is always giving 'True'. Even when the bond is broken and the spheres are far away!

regards

Revision history for this message
Jan Stránský (honzik) said :
#5

Hi Behzad,
have a look at Interaction documentation. O.interactions[0,1].isReal is
what you want.
cheers
Jan

2014-05-14 19:36 GMT+02:00 behzad <email address hidden>:

> Question #248562 on Yade changed:
> https://answers.launchpad.net/yade/+question/248562
>
> behzad posted a new comment:
> Great.
> Thanks.
> Is there a way to track if the bond is broken? apart from the contact
> force plotting?
>
> O.interactions[0,1].isActive is always giving 'True'. Even when the bond
> is broken and the spheres are far away!
>
> regards
>
> --
> You received this question notification because you are a member of
> yade-users, which is an answer contact for Yade.
>
> _______________________________________________
> Mailing list: https://launchpad.net/~yade-users
> Post to : <email address hidden>
> Unsubscribe : https://launchpad.net/~yade-users
> More help : https://help.launchpad.net/ListHelp
>

Revision history for this message
behzad (behzad-majidi) said :
#6

Jan,

O.ineractions[0,1].isReal is also giving True even if the bond is broken, the interaction force has fallen to zero and the spheres are separated away!

Revision history for this message
Jan Stránský (honzik) said :
#7

Hi Behzad,
see [1], the value is 1.0 by default, so contacts do not break by default
even the force transmitted is almost zero.
cheers
Jan

[1]
https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.Law2_ScGeom_CpmPhys_Cpm.omegaThreshold

2014-05-23 22:16 GMT+02:00 behzad <email address hidden>:

> Question #248562 on Yade changed:
> https://answers.launchpad.net/yade/+question/248562
>
> behzad posted a new comment:
> Jan,
>
> O.ineractions[0,1].isReal is also giving True even if the bond is
> broken, the interaction force has fallen to zero and the spheres are
> separated away!
>
> --
> You received this question notification because you are a member of
> yade-users, which is an answer contact for Yade.
>
> _______________________________________________
> Mailing list: https://launchpad.net/~yade-users
> Post to : <email address hidden>
> Unsubscribe : https://launchpad.net/~yade-users
> More help : https://help.launchpad.net/ListHelp
>

Revision history for this message
behzad (behzad-majidi) said :
#8

So there's no way to track the bonds failure?

Revision history for this message
Jan Stránský (honzik) said :
#9

Hi Behzad,

have you read the link I sent in previous email?

also please be more specific on "track the bonds failure" expression. When
the bond is broken, bond.isReal is False, so it should not be a problem to
track the bond failure.

I am a bit counfused now..

cheers
Jan

2014-05-26 20:07 GMT+02:00 behzad <email address hidden>:

> Question #248562 on Yade changed:
> https://answers.launchpad.net/yade/+question/248562
>
> behzad posted a new comment:
> So there's no way to track the bonds failure?
>
> --
> You received this question notification because you are a member of
> yade-users, which is an answer contact for Yade.
>
> _______________________________________________
> Mailing list: https://launchpad.net/~yade-users
> Post to : <email address hidden>
> Unsubscribe : https://launchpad.net/~yade-users
> More help : https://help.launchpad.net/ListHelp
>

Revision history for this message
behzad (behzad-majidi) said :
#10

Yes, I did but I didn't get it. But now I tries this:

What I wrote was:

Law2_ScGeom_CpmPhys_Cpm(omegaThreshold=0.5)

instead of Law2_ScGeom_CpmPhys_Cpm()

Is that right?

Revision history for this message
Jan Stránský (honzik) said :
#11

Exactly :-)

By default, omegaThreshold=1.0. Damage (denoted by omega) can be from 0
(undamaged material) to 1.0 (fully damagd material). Whan
omega>omegaThreshold, bond is broken and deleted. So, by default the
condition is never fulfiled and the bond is never broken, even for fully
damaged bond. Formulas relating forces, stresses, strains, displacements
and damage can be found in Vaclav's thesis, so by reading it or by trial
and error you can determine optimal omegaThreshold for your purpose
cheers
Jan

2014-05-26 20:31 GMT+02:00 behzad <email address hidden>:

> Question #248562 on Yade changed:
> https://answers.launchpad.net/yade/+question/248562
>
> behzad posted a new comment:
> Yes, I did but I didn't get it. But now I tries this:
>
> What I wrote was:
>
> Law2_ScGeom_CpmPhys_Cpm(omegaThreshold=0.5)
>
> instead of Law2_ScGeom_CpmPhys_Cpm()
>
> Is that right?
>
> --
> You received this question notification because you are a member of
> yade-users, which is an answer contact for Yade.
>
> _______________________________________________
> Mailing list: https://launchpad.net/~yade-users
> Post to : <email address hidden>
> Unsubscribe : https://launchpad.net/~yade-users
> More help : https://help.launchpad.net/ListHelp
>

Revision history for this message
behzad (behzad-majidi) said :
#12

Thanks for explanation!

Cheers

Behzad