Young modulus computation

Asked by mohsen

In the name of god
hello all
during an script i make contact between two spheres of Cpm material but the different parameters. There are two bouncing spheres. Then i checked O.interactions two see the contact parameters. I do not know how the young modulus of contact has been computed?
 any idea?

Thanks every one
#####
mat2=CpmMat(young=1e6,neverDamage=True,density=2500,poisson=0.2,epsCrackOnset=1e20,relDuctility=10,frictionAngle=0.5,label='mat2')
O.materials.append(mat2)
O.materials.append(CpmMat(young=1e12,neverDamage=True,poisson=0.3,frictionAngle=radians(30),sigmaT=4e100,epsCrackOnset=1e20,density=2600,relDuctility=10,label='mat1'))

O.bodies.append([

sphere(center=(0,0,0),radius=.5,fixed=True, material='mat1'),

sphere((0,0,2),.5, material='mat2')
])

intRadius = 1
O.engines = [
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=intRadius,label='is2aabb'),Bo1_Facet_Aabb(),Bo1_Wall_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=intRadius,label='ss2d3dg'),Ig2_Facet_Sphere_ScGeom(),Ig2_Wall_Sphere_ScGeom()],
[Ip2_CpmMat_CpmMat_CpmPhys()],
[Law2_ScGeom_CpmPhys_Cpm()]
),
NewtonIntegrator(gravity=(0,0,-10),damping=0.2),
]
O.dt = .2*PWaveTimeStep()
#########

The interaction specifications:

{'E': 500000500000.0,
 'G': 175000175000.0,
 'crossSection': 0.7853981633974483,
 'damLaw': 1,
 'dmgOverstress': 0.0,
 'dmgRateExp': 0.0,
 'dmgStrain': 0.0,
 'dmgTau': -1.0,
 'epsCrackOnset': 1e+20,
 'epsFracture': 1e+21,
 'isCohesive': False,
 'isoPrestress': 0.0,
 'kn': 392699474749.80115,
 'ks': 137444816162.43042,
 'neverDamage': True,
 'normalForce': Vector3(0,0,-7853.981599551652),
 'plRateExp': 0.0,
 'plTau': -1.0,
 'refLength': 0.9999999991036522,
 'refPD': 8.963477737822245e-10,
 'relDuctility': 10.0,
 'shearForce': Vector3(-0,-0,-7.623695394542987e-13),
 'tanFrictionAngle': 0.9538822108108043,
 'undamagedCohesion': 2e+100}

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Jan Stránský
Solved:
Last query:
Last reply:

This question was reopened

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

Hi Mohsen,

see the links below. For the same radius R:
E = .5*(young1+young2)
kn = pi*r^2*E/distance

cheers
Jan

[1] https://yade-dem.org/doc/formulation.html#normal-stiffness
[2]
http://bazaar.launchpad.net/~yade-pkg/yade/git-trunk/view/head:/pkg/dem/ConcretePM.cpp#L77
[3]
http://bazaar.launchpad.net/~yade-pkg/yade/git-trunk/view/head:/pkg/dem/ConcretePM.cpp#L321

2016-04-10 14:52 GMT+02:00 mohsen <email address hidden>:

> New question #290372 on Yade:
> https://answers.launchpad.net/yade/+question/290372
>
> In the name of god
> hello all
> during an script i make contact between two spheres of Cpm material but
> the different parameters. There are two bouncing spheres. Then i checked
> O.interactions two see the contact parameters. I do not know how the young
> modulus of contact has been computed?
> any idea?
>
> Thanks every one
> #####
>
> mat2=CpmMat(young=1e6,neverDamage=True,density=2500,poisson=0.2,epsCrackOnset=1e20,relDuctility=10,frictionAngle=0.5,label='mat2')
> O.materials.append(mat2)
>
> O.materials.append(CpmMat(young=1e12,neverDamage=True,poisson=0.3,frictionAngle=radians(30),sigmaT=4e100,epsCrackOnset=1e20,density=2600,relDuctility=10,label='mat1'))
>
> O.bodies.append([
>
> sphere(center=(0,0,0),radius=.5,fixed=True, material='mat1'),
>
> sphere((0,0,2),.5, material='mat2')
> ])
>
> intRadius = 1
> O.engines = [
> ForceResetter(),
>
> InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=intRadius,label='is2aabb'),Bo1_Facet_Aabb(),Bo1_Wall_Aabb()]),
> InteractionLoop(
>
> [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=intRadius,label='ss2d3dg'),Ig2_Facet_Sphere_ScGeom(),Ig2_Wall_Sphere_ScGeom()],
> [Ip2_CpmMat_CpmMat_CpmPhys()],
> [Law2_ScGeom_CpmPhys_Cpm()]
> ),
> NewtonIntegrator(gravity=(0,0,-10),damping=0.2),
> ]
> O.dt = .2*PWaveTimeStep()
> #########
>
> The interaction specifications:
>
> {'E': 500000500000.0,
> 'G': 175000175000.0,
> 'crossSection': 0.7853981633974483,
> 'damLaw': 1,
> 'dmgOverstress': 0.0,
> 'dmgRateExp': 0.0,
> 'dmgStrain': 0.0,
> 'dmgTau': -1.0,
> 'epsCrackOnset': 1e+20,
> 'epsFracture': 1e+21,
> 'isCohesive': False,
> 'isoPrestress': 0.0,
> 'kn': 392699474749.80115,
> 'ks': 137444816162.43042,
> 'neverDamage': True,
> 'normalForce': Vector3(0,0,-7853.981599551652),
> 'plRateExp': 0.0,
> 'plTau': -1.0,
> 'refLength': 0.9999999991036522,
> 'refPD': 8.963477737822245e-10,
> 'relDuctility': 10.0,
> 'shearForce': Vector3(-0,-0,-7.623695394542987e-13),
> 'tanFrictionAngle': 0.9538822108108043,
> 'undamagedCohesion': 2e+100}
>
>
> --
> You received this question notification because your team yade-users 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
mohsen (agha-mohsena) said :
#2

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

Revision history for this message
mohsen (agha-mohsena) said :
#3

Thank you very much Jan!!
But according to your opinion is it logic to compute an average for E!! specially when there is a great deference between tow young modulus? for example in my practice, the interaction young modulus is very close to 'E' of mat1 and very far from 'E' of mat2.
Is there any other suggestion or experience of computation of 'E' of interaction?
'average' may be a good approach for computation of 'friction angle' of interaction; but may be bad for 'E'

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

>
>
> But according to your opinion is it logic to compute an average for E!!
> specially when there is a great deference between tow young modulus? for
> example in my practice, the interaction young modulus is very close to 'E'
> of mat1 and very far from 'E' of mat2.
> Is there any other suggestion or experience of computation of 'E' of
> interaction?
> 'average' may be a good approach for computation of 'friction angle' of
> interaction; but may be bad for 'E'
>

well, it is not my opinion, it is actual implementation :-) Of course you
are free to implement your own formula, or change material parameters of
the interaction as you want:

#######################################
for i in O.interactions:
  mat1 = O.bodies[i.id1].mat
  mat2 = O.bodies[i.id2].mat
  E1,E2 = mat1.young, mat2.young
  i.phys.E = whatever(E1,E2)
  i.phys.kn = pi*pow(i.crossSection,2)*i.phys.E / i.phys.refLength
  # similarly for other parameters
#######################################

cheers
Jan

Revision history for this message
mohsen (agha-mohsena) said :
#5

in the case of larg number of particles, i think for each new interaction, computation follows Cpmphys functor; i.e. computing 'average' E. Therefore i should change 'E' by above formula in each iteration an for every interaction. So in my script where should i put the above 'for' loop?! For example for 1000 iterations is the following script true?

#after defining scene and engines#
 ii=1000
while O.iter<ii
  O.step()
  for i in O.interactions:
    mat1 = O.bodies[i.id1].mat
    mat2 = O.bodies[i.id2].mat
    E1,E2 = mat1.young, mat2.young
    i.phys.E = whatever(E1,E2)
    i.phys.kn = pi*pow(i.crossSection,2)*i.phys.E / i.phys.refLength
######

i think all forces first are computed according to Cpmphys functor and then the interaction parameters changed. So changing interaction parameters does affects?!

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

Hi Mohsen,
you are correct, the approach I proposed works only for existing
interactions but does not make sense in simulations with new interactions.
I think the easiest way is to change how E is computed (or make some
option). How should your formula look like? Harmonic mean like [1]? Then in
your case would E=(2*1e6*1e12)/(1e6+1e12)=2e6.
I will do the changes and commit in a few days
cheers
Jan
[1] https://yade-dem.org/doc/formulation.html#normal-stiffness

2016-04-12 7:52 GMT+02:00 mohsen <email address hidden>:

> Question #290372 on Yade changed:
> https://answers.launchpad.net/yade/+question/290372
>
> mohsen posted a new comment:
> in the case of larg number of particles, i think for each new
> interaction, computation follows Cpmphys functor; i.e. computing
> 'average' E. Therefore i should change 'E' by above formula in each
> iteration an for every interaction. So in my script where should i put
> the above 'for' loop?! For example for 1000 iterations is the following
> script true?
>
> #after defining scene and engines#
> ii=1000
> while O.iter<ii
> O.step()
> for i in O.interactions:
> mat1 = O.bodies[i.id1].mat
> mat2 = O.bodies[i.id2].mat
> E1,E2 = mat1.young, mat2.young
> i.phys.E = whatever(E1,E2)
> i.phys.kn = pi*pow(i.crossSection,2)*i.phys.E / i.phys.refLength
> ######
>
> i think all forces first are computed according to Cpmphys functor and
> then the interaction parameters changed. So changing interaction parameters
> does affects?!
>
> --
> You received this question notification because your team yade-users 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
mohsen (agha-mohsena) said :
#7

Thanks Jan so much
>How should your formula look like? Harmonic mean like [1]? Then in
>your case would E=(2*1e6*1e12)/(1e6+1e12)=2e6.

Hmm... . That is the main job!!! to find a proper answer we need calibration and may be experimental data; it is the first step. The SECOND is to apply new formula in YADE and this is my question. although any information about the first step is appreciated.

Thanks again Jan for your consideration!

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

Well, in such big difference you can do the "extreme analysis" neglecting
the higher stiffness (considering it is rigid) and if you consider all
deformation comes from the lower stiffness, the harmonic mean gives you
that answer. So I would say it should be like that :-)

to apply the formula is easy, I will write you soon that it is available
and you can use it. What version of Yade do you use? Yade from package
(installed by sudo apt-get install yade), Yadedaily, or compiled from
source?

Jan

2016-04-12 9:22 GMT+02:00 mohsen <email address hidden>:

> Question #290372 on Yade changed:
> https://answers.launchpad.net/yade/+question/290372
>
> mohsen posted a new comment:
> Thanks Jan so much
> >How should your formula look like? Harmonic mean like [1]? Then in
> >your case would E=(2*1e6*1e12)/(1e6+1e12)=2e6.
>
> Hmm... . That is the main job!!! to find a proper answer we need
> calibration and may be experimental data; it is the first step. The
> SECOND is to apply new formula in YADE and this is my question. although
> any information about the first step is appreciated.
>
> Thanks again Jan for your consideration!
>
> --
> You received this question notification because your team yade-users 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
mohsen (agha-mohsena) said :
#9

I installed it from packages
(But when i want to run i write in terminal 'yadedaily')
Yade 1.20.0-43-efeac28~trusty

Revision history for this message
mohsen (agha-mohsena) said :
#10

Hi Jan
I am seeking your help!!

Revision history for this message
Anton Gladky (gladky-anton) said :
#11

Hi,

this yade vesion is relatively old. You should update and get
yadedaily_1.20.0-119-4269284

Best regards

Anton

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

Hi Mohsen,
sorry, totally forgot to this topic, thanks for reminder :-) it is
committed to the trunk version, so it should be available soon in yadedaily.

MWE (if not available, it will give error):
##########################################################
mat1 = CpmMat(young=1e6)
mat2 = CpmMat(young=1e12)
O.engines = [
InsertionSortCollider([Bo1_Sphere_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom()],
[Ip2_CpmMat_CpmMat_CpmPhys(E=MatchMaker(algo='harmAvg'))],
[Law2_ScGeom_CpmPhys_Cpm()],
)
]
b1 = sphere((0,0,0),1,material=mat1)
b2 = sphere((1,0,0),1,material=mat2)
O.bodies.append((b1,b2))
i = createInteraction(b1.id,b2.id)
print i.phys.E
##########################################################

cheers
Jan

2016-04-22 15:32 GMT+02:00 mohsen <email address hidden>:

> Question #290372 on Yade changed:
> https://answers.launchpad.net/yade/+question/290372
>
> Status: Answered => Open
>
> mohsen is still having a problem:
> Hi Jan
> I am seeking your help!!
>
> --
> You received this question notification because your team yade-users 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
mohsen (agha-mohsena) said :
#13

Hi Anton and Jan
thanks so much
So therefore i should wait to an update of yadedaily that contains this option

Revision history for this message
mohsen (agha-mohsena) said :
#14

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