packing porosity for heat capacity scaling according to desired porosity of material

Asked by ibraheem khan

Hi all
 I am facing a problem while getting porosity for my packing by " triax.porosity " and " utils.porosity ".
I am using JCFpm model of dimension 1 cubic meter randomly packed 2000 spheres. it shows a porosity of 0.4372 , when i used density scaling it scaled heat capacity too much low.
e.g unscaled heat capacity * desired porosity of material = scaled heat capacity * DEM porosity of material.
if heat capacity is 1090 after scaling it would be 330.
Need expert suggestion and guidance
Thanks in advance

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Robert Caulk
Solved:
Last query:
Last reply:
Revision history for this message
Robert Caulk (rcaulk) said :
#1

Hello Ibraheem,

I don’t quite understand the question. Is there an issue with
triax.porosity?

Are you asking “how to scale the heat capacity of thermalengine to simulate
a material with a lower porosity than the dem packing”

If yes, you can scale it by multiplying by the ratio of porosities:

Cp_scaled=Cp*triax.porosity/desired_porosity

Cheers,

Robert

Le mar. 10 août 2021 à 01:11, ibraheem khan <
<email address hidden>> a écrit :

> Question #698303 on Yade changed:
> https://answers.launchpad.net/yade/+question/698303
>
> Description changed to:
> Hi all
> I am facing a problem while getting porosity for my packing by "
> triax.porosity " and " utils.porosity ".
> I am using JCFpm model of dimension 1 cubic meter randomly packed 2000
> spheres. it shows a porosity of 0.4372 , when i used density scaling it
> scaled heat capacity too much low.
> e.g unscaled heat capacity * desired porosity of material = scaled heat
> capacity * DEM porosity of material.
> if heat capacity is 1090 after scaling it would be 330.
> Need expert suggestion and guidance
> Thanks in advance
>
> --
> 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
ibraheem khan (ibraheem-22) said :
#2

my main concern is as real granite porosity is some what 0.015 and my DEM porosity is 0.4372 , so is it correct to scale heat capacity with this mush high porosity or can i get a low porosity for my DEM somewhat 0.15 0r 0.20

Revision history for this message
Robert Caulk (rcaulk) said :
#3

I don’t see the difference between scaling from 0.47 and 0.15 down to
0.015. Either way you are scaling around an order of magnitude.

That said, from a DEM perspective i am surprised your porosity is 0.47 for
a random dense packing that is compressed. I have no way of checking if you
are looking at porosity correctly because you did not share a script.

Cheers,

Robert

Le mar. 10 août 2021 à 11:52, ibraheem khan <
<email address hidden>> a écrit :

> Question #698303 on Yade changed:
> https://answers.launchpad.net/yade/+question/698303
>
> ibraheem khan posted a new comment:
> my main concern is as real granite porosity is some what 0.015 and my
> DEM porosity is 0.4372 , so is it correct to scale heat capacity with
> this mush high porosity or can i get a low porosity for my DEM somewhat
> 0.15 0r 0.20
>
> --
> 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
ibraheem khan (ibraheem-22) said :
#4

sorry Robert....

my script is here .

from yade import pack, export, ymport

nRead=readParamsFromTable(
 num_spheres=1000,
 compFricDegree = 25,
 key='_triax_base_'
 unknownOk=True
)
from yade.params import table

num_spheres=table.num_spheres
key=table.key
targetPorosity = 0.45
compFricDegree = table.compFricDegree
finalFricDegree =25
rate=-0.02
damp=0.2
stabilityThreshold=0.01
young=150e9
mn,mx=Vector3(0,0,0),Vector3(1,1,1)
cohesion=50e6
sigmaT=40e6
density=2650
poisson=0.25
confiningP=-1e6

O.materials.append(JCFpmMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='walls',cohesion=0,tensileStrength=0))
O.materials.append(JCFpmMat(young=young, cohesion=cohesion, density=density, frictionAngle=radians(finalFricDegree), tensileStrength=sigmaT, poisson=poisson, label='spheres'))

walls=aabbWalls([mn,mx],thickness=0,material='walls')
wallIds=O.bodies.append(walls)

sp=pack.SpherePack()
sp.makeCloud(mn,mx,-1,0.3333,num_spheres,False, 0.95,seed=1)
O.bodies.append([sphere(center,rad,material='spheres') for center,rad in sp])

### DEFINING ENGINES ###

triax=TriaxialStressController(
 thickness = 0,
 stressMask = 7,
 internalCompaction=True,
)

newton=NewtonIntegrator(damping=damp)

O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
  [Ip2_FrictMat_FrictMat_FrictPhys(),Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=0, label='JCFpm')],
  [Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(smoothJoint=False,neverErase=True, recordCracks=True ),Law2_ScGeom_FrictPhys_CundallStrack()]
 ),
 GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.6,defaultDt=0.5*utils.PWaveTimeStep()),
 triax,

 newton,
]

Gl1_Sphere.stripes=0
if nRead==0: yade.qt.Controller(), yade.qt.View()

### APPLYING CONFINING PRESSURE ###

triax.goal1=triax.goal2=triax.goal3=confiningP

while 1:
  O.run(2000, True)
  unb=unbalancedForce()
  print ('unbalanced force:',unb,' mean stress: ',triax.meanStress)
  if unb<stabilityThreshold and abs((confiningP-triax.meanStress)/(-confiningP))<0.001:
    break

### REACHING A SPECIFIED POROSITY PRECISELY ###

import sys

while triax.porosity>targetPorosity:
 compFricDegree = 0.95*compFricDegree
 setContactFriction(radians(compFricDegree))
 print ("\r Friction: ",compFricDegree," porosity:",triax.porosity,)
 sys.stdout.flush()

 O.run(500,1)
export.textExt('densepacking.spheres','x_y_z_r')

 for JCFpm cohesion , i run it directly in the below script that every new contact should be cohesive

from yade import pack, export, ymport
import numpy as np

nRead=readParamsFromTable(
 num_spheres=1000,# number of spheres
 compFricDegree = 25,
 key='_triax_base_'
 unknownOk=True
)
from yade.params import table

num_spheres=table.num_spheres
key=table.key
targetPorosity = 0.46
compFricDegree = table.compFricDegree
finalFricDegree = 25
rate=-0.02 # loading rate (strain rate)
damp=0.2 # damping coefficient
stabilityThreshold=0.01
young=150e9
mn,mx=Vector3(0,0,0),Vector3(1,1,1)
confiningP=-10e6
cohesion=50e6
poisson=0.2
sigmaT=40e6
density=2650
intRadius=1.25

O.materials.append(JCFpmMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='walls',cohesion=0,tensileStrength=0))
O.materials.append(JCFpmMat(young=young, cohesion=cohesion, density=density, frictionAngle=radians(finalFricDegree), tensileStrength=sigmaT, poisson=poisson, label='spheres'))

walls=aabbWalls([mn,mx],thickness=0,material='walls')
wallIds=O.bodies.append(walls)

pack = O.bodies.append(ymport.textExt('densepacking.spheres', 'x_y_z_r',color=(0,0.2,0.7), material='spheres'))

### DEFINING ENGINES ###

triax=TriaxialStressController(

 thickness = 0,

 stressMask = 7,
 internalCompaction=True, # If true the confining pressure is generated by growing particles
)

newton=NewtonIntegrator(damping=damp)
O.engines=[
        ForceResetter(),
        InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=intRadius),Bo1_Box_Aabb()]),
        InteractionLoop(
            [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=intRadius),Ig2_Box_Sphere_ScGeom()],
            [Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=-1, label='JCFPm')],
            [Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(recordCracks=True,smoothJoint=False,neverErase=True, recordMoments=True,Key=identifier+'/output.txt',label='interactionLaw'),Law2_ScGeom_FrictPhys_CundallStrack()]
 ),
 GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.6,defaultDt=0.5*utils.PWaveTimeStep()),
 triax,

 newton,

]

Gl1_Sphere.stripes=0
if nRead==0: yade.qt.Controller(), yade.qt.View()

### APPLYING CONFINING PRESSURE ###

triax.goal1=triax.goal2=triax.goal3=confiningP

while 1:
  O.run(2000, True)

  unb=unbalancedForce()
  print ('unbalanced force:',unb,' mean stress: ',triax.meanStress)
  if unb<stabilityThreshold and abs(confiningP-triax.meanStress)/(-confiningP)<0.001:
    break

### REACHING A SPECIFIED POROSITY PRECISELY ###

import sys
while triax.porosity>targetPorosity:

 compFricDegree = 0.95*compFricDegree
 setContactFriction(radians(compFricDegree))
 print ("\r Friction: ",compFricDegree," porosity:",triax.porosity,)
 sys.stdout.flush()
 O.run(500,1)

Revision history for this message
Robert Caulk (rcaulk) said :
#5

Have you tried decreasing your target porosity?

Le mar. 10 août 2021 à 13:46, ibraheem khan <
<email address hidden>> a écrit :

> Question #698303 on Yade changed:
> https://answers.launchpad.net/yade/+question/698303
>
> ibraheem khan posted a new comment:
>
> sorry Robert....
>
> my script is here .
>
> from yade import pack, export, ymport
>
> nRead=readParamsFromTable(
> num_spheres=1000,
> compFricDegree = 25,
> key='_triax_base_'
> unknownOk=True
> )
> from yade.params import table
>
> num_spheres=table.num_spheres
> key=table.key
> targetPorosity = 0.45
> compFricDegree = table.compFricDegree
> finalFricDegree =25
> rate=-0.02
> damp=0.2
> stabilityThreshold=0.01
> young=150e9
> mn,mx=Vector3(0,0,0),Vector3(1,1,1)
> cohesion=50e6
> sigmaT=40e6
> density=2650
> poisson=0.25
> confiningP=-1e6
>
>
>
> O.materials.append(JCFpmMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='walls',cohesion=0,tensileStrength=0))
> O.materials.append(JCFpmMat(young=young, cohesion=cohesion,
> density=density, frictionAngle=radians(finalFricDegree),
> tensileStrength=sigmaT, poisson=poisson, label='spheres'))
>
> walls=aabbWalls([mn,mx],thickness=0,material='walls')
> wallIds=O.bodies.append(walls)
>
> sp=pack.SpherePack()
> sp.makeCloud(mn,mx,-1,0.3333,num_spheres,False, 0.95,seed=1)
> O.bodies.append([sphere(center,rad,material='spheres') for center,rad in
> sp])
>
>
> ### DEFINING ENGINES ###
>
>
> triax=TriaxialStressController(
> thickness = 0,
> stressMask = 7,
> internalCompaction=True,
> )
>
> newton=NewtonIntegrator(damping=damp)
>
> O.engines=[
> ForceResetter(),
> InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
> InteractionLoop(
> [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
>
> [Ip2_FrictMat_FrictMat_FrictPhys(),Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=0,
> label='JCFpm')],
>
> [Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(smoothJoint=False,neverErase=True,
> recordCracks=True ),Law2_ScGeom_FrictPhys_CundallStrack()]
> ),
>
> GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.6,defaultDt=0.5*utils.PWaveTimeStep()),
> triax,
>
> newton,
> ]
>
> Gl1_Sphere.stripes=0
> if nRead==0: yade.qt.Controller(), yade.qt.View()
>
>
> ### APPLYING CONFINING PRESSURE ###
>
>
> triax.goal1=triax.goal2=triax.goal3=confiningP
>
> while 1:
> O.run(2000, True)
> unb=unbalancedForce()
> print ('unbalanced force:',unb,' mean stress: ',triax.meanStress)
> if unb<stabilityThreshold and
> abs((confiningP-triax.meanStress)/(-confiningP))<0.001:
> break
>
>
> ### REACHING A SPECIFIED POROSITY PRECISELY ###
>
>
> import sys
>
> while triax.porosity>targetPorosity:
> compFricDegree = 0.95*compFricDegree
> setContactFriction(radians(compFricDegree))
> print ("\r Friction: ",compFricDegree," porosity:",triax.porosity,)
> sys.stdout.flush()
>
> O.run(500,1)
> export.textExt('densepacking.spheres','x_y_z_r')
>
> for JCFpm cohesion , i run it directly in the below script that every new
> contact should be cohesive
>
> from yade import pack, export, ymport
> import numpy as np
>
>
>
> nRead=readParamsFromTable(
> num_spheres=1000,# number of spheres
> compFricDegree = 25,
> key='_triax_base_'
> unknownOk=True
> )
> from yade.params import table
>
> num_spheres=table.num_spheres
> key=table.key
> targetPorosity = 0.46
> compFricDegree = table.compFricDegree
> finalFricDegree = 25
> rate=-0.02 # loading rate (strain rate)
> damp=0.2 # damping coefficient
> stabilityThreshold=0.01
> young=150e9
> mn,mx=Vector3(0,0,0),Vector3(1,1,1)
> confiningP=-10e6
> cohesion=50e6
> poisson=0.2
> sigmaT=40e6
> density=2650
> intRadius=1.25
>
>
>
> O.materials.append(JCFpmMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='walls',cohesion=0,tensileStrength=0))
> O.materials.append(JCFpmMat(young=young, cohesion=cohesion,
> density=density, frictionAngle=radians(finalFricDegree),
> tensileStrength=sigmaT, poisson=poisson, label='spheres'))
>
> walls=aabbWalls([mn,mx],thickness=0,material='walls')
> wallIds=O.bodies.append(walls)
>
> pack = O.bodies.append(ymport.textExt('densepacking.spheres',
> 'x_y_z_r',color=(0,0.2,0.7), material='spheres'))
>
>
> ### DEFINING ENGINES ###
>
>
> triax=TriaxialStressController(
>
> thickness = 0,
>
> stressMask = 7,
> internalCompaction=True, # If true the confining pressure is
> generated by growing particles
> )
>
> newton=NewtonIntegrator(damping=damp)
> O.engines=[
> ForceResetter(),
>
> InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=intRadius),Bo1_Box_Aabb()]),
> InteractionLoop(
>
> [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=intRadius),Ig2_Box_Sphere_ScGeom()],
> [Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=-1,
> label='JCFPm')],
>
> [Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(recordCracks=True,smoothJoint=False,neverErase=True,
> recordMoments=True,Key=identifier+'/output.txt',label='interactionLaw'),Law2_ScGeom_FrictPhys_CundallStrack()]
> ),
>
> GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.6,defaultDt=0.5*utils.PWaveTimeStep()),
> triax,
>
> newton,
>
>
>
> ]
>
>
> Gl1_Sphere.stripes=0
> if nRead==0: yade.qt.Controller(), yade.qt.View()
>
> ### APPLYING CONFINING PRESSURE ###
>
> triax.goal1=triax.goal2=triax.goal3=confiningP
>
> while 1:
> O.run(2000, True)
>
> unb=unbalancedForce()
> print ('unbalanced force:',unb,' mean stress: ',triax.meanStress)
> if unb<stabilityThreshold and
> abs(confiningP-triax.meanStress)/(-confiningP)<0.001:
> break
>
>
> ### REACHING A SPECIFIED POROSITY PRECISELY ###
>
> import sys
> while triax.porosity>targetPorosity:
>
> compFricDegree = 0.95*compFricDegree
> setContactFriction(radians(compFricDegree))
> print ("\r Friction: ",compFricDegree," porosity:",triax.porosity,)
> sys.stdout.flush()
> O.run(500,1)
>
> --
> 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
ibraheem khan (ibraheem-22) said :
#6

Hi Robert
Yes I tried , even with very low friction value like 5 ,but it didn't work.

On Tue, Aug 10, 2021, 7:45 PM Robert Caulk <
<email address hidden>> wrote:

> Your question #698303 on Yade changed:
> https://answers.launchpad.net/yade/+question/698303
>
> Robert Caulk proposed the following answer:
> Have you tried decreasing your target porosity?
>
> Le mar. 10 août 2021 à 13:46, ibraheem khan <
> <email address hidden>> a écrit :
>
> > Question #698303 on Yade changed:
> > https://answers.launchpad.net/yade/+question/698303
> >
> > ibraheem khan posted a new comment:
> >
> > sorry Robert....
> >
> > my script is here .
> >
> > from yade import pack, export, ymport
> >
> > nRead=readParamsFromTable(
> > num_spheres=1000,
> > compFricDegree = 25,
> > key='_triax_base_'
> > unknownOk=True
> > )
> > from yade.params import table
> >
> > num_spheres=table.num_spheres
> > key=table.key
> > targetPorosity = 0.45
> > compFricDegree = table.compFricDegree
> > finalFricDegree =25
> > rate=-0.02
> > damp=0.2
> > stabilityThreshold=0.01
> > young=150e9
> > mn,mx=Vector3(0,0,0),Vector3(1,1,1)
> > cohesion=50e6
> > sigmaT=40e6
> > density=2650
> > poisson=0.25
> > confiningP=-1e6
> >
> >
> >
> >
> O.materials.append(JCFpmMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='walls',cohesion=0,tensileStrength=0))
> > O.materials.append(JCFpmMat(young=young, cohesion=cohesion,
> > density=density, frictionAngle=radians(finalFricDegree),
> > tensileStrength=sigmaT, poisson=poisson, label='spheres'))
> >
> > walls=aabbWalls([mn,mx],thickness=0,material='walls')
> > wallIds=O.bodies.append(walls)
> >
> > sp=pack.SpherePack()
> > sp.makeCloud(mn,mx,-1,0.3333,num_spheres,False, 0.95,seed=1)
> > O.bodies.append([sphere(center,rad,material='spheres') for center,rad in
> > sp])
> >
> >
> > ### DEFINING ENGINES ###
> >
> >
> > triax=TriaxialStressController(
> > thickness = 0,
> > stressMask = 7,
> > internalCompaction=True,
> > )
> >
> > newton=NewtonIntegrator(damping=damp)
> >
> > O.engines=[
> > ForceResetter(),
> > InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
> > InteractionLoop(
> > [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
> >
> >
> [Ip2_FrictMat_FrictMat_FrictPhys(),Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=0,
> > label='JCFpm')],
> >
> >
> [Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(smoothJoint=False,neverErase=True,
> > recordCracks=True ),Law2_ScGeom_FrictPhys_CundallStrack()]
> > ),
> >
> >
> GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.6,defaultDt=0.5*utils.PWaveTimeStep()),
> > triax,
> >
> > newton,
> > ]
> >
> > Gl1_Sphere.stripes=0
> > if nRead==0: yade.qt.Controller(), yade.qt.View()
> >
> >
> > ### APPLYING CONFINING PRESSURE ###
> >
> >
> > triax.goal1=triax.goal2=triax.goal3=confiningP
> >
> > while 1:
> > O.run(2000, True)
> > unb=unbalancedForce()
> > print ('unbalanced force:',unb,' mean stress: ',triax.meanStress)
> > if unb<stabilityThreshold and
> > abs((confiningP-triax.meanStress)/(-confiningP))<0.001:
> > break
> >
> >
> > ### REACHING A SPECIFIED POROSITY PRECISELY ###
> >
> >
> > import sys
> >
> > while triax.porosity>targetPorosity:
> > compFricDegree = 0.95*compFricDegree
> > setContactFriction(radians(compFricDegree))
> > print ("\r Friction: ",compFricDegree,"
> porosity:",triax.porosity,)
> > sys.stdout.flush()
> >
> > O.run(500,1)
> > export.textExt('densepacking.spheres','x_y_z_r')
> >
> > for JCFpm cohesion , i run it directly in the below script that every
> new
> > contact should be cohesive
> >
> > from yade import pack, export, ymport
> > import numpy as np
> >
> >
> >
> > nRead=readParamsFromTable(
> > num_spheres=1000,# number of spheres
> > compFricDegree = 25,
> > key='_triax_base_'
> > unknownOk=True
> > )
> > from yade.params import table
> >
> > num_spheres=table.num_spheres
> > key=table.key
> > targetPorosity = 0.46
> > compFricDegree = table.compFricDegree
> > finalFricDegree = 25
> > rate=-0.02 # loading rate (strain rate)
> > damp=0.2 # damping coefficient
> > stabilityThreshold=0.01
> > young=150e9
> > mn,mx=Vector3(0,0,0),Vector3(1,1,1)
> > confiningP=-10e6
> > cohesion=50e6
> > poisson=0.2
> > sigmaT=40e6
> > density=2650
> > intRadius=1.25
> >
> >
> >
> >
> O.materials.append(JCFpmMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='walls',cohesion=0,tensileStrength=0))
> > O.materials.append(JCFpmMat(young=young, cohesion=cohesion,
> > density=density, frictionAngle=radians(finalFricDegree),
> > tensileStrength=sigmaT, poisson=poisson, label='spheres'))
> >
> > walls=aabbWalls([mn,mx],thickness=0,material='walls')
> > wallIds=O.bodies.append(walls)
> >
> > pack = O.bodies.append(ymport.textExt('densepacking.spheres',
> > 'x_y_z_r',color=(0,0.2,0.7), material='spheres'))
> >
> >
> > ### DEFINING ENGINES ###
> >
> >
> > triax=TriaxialStressController(
> >
> > thickness = 0,
> >
> > stressMask = 7,
> > internalCompaction=True, # If true the confining pressure is
> > generated by growing particles
> > )
> >
> > newton=NewtonIntegrator(damping=damp)
> > O.engines=[
> > ForceResetter(),
> >
> >
> InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=intRadius),Bo1_Box_Aabb()]),
> > InteractionLoop(
> >
> >
> [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=intRadius),Ig2_Box_Sphere_ScGeom()],
> >
> [Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=-1,
> > label='JCFPm')],
> >
> >
> [Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(recordCracks=True,smoothJoint=False,neverErase=True,
> >
> recordMoments=True,Key=identifier+'/output.txt',label='interactionLaw'),Law2_ScGeom_FrictPhys_CundallStrack()]
> > ),
> >
> >
> GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.6,defaultDt=0.5*utils.PWaveTimeStep()),
> > triax,
> >
> > newton,
> >
> >
> >
> > ]
> >
> >
> > Gl1_Sphere.stripes=0
> > if nRead==0: yade.qt.Controller(), yade.qt.View()
> >
> > ### APPLYING CONFINING PRESSURE ###
> >
> > triax.goal1=triax.goal2=triax.goal3=confiningP
> >
> > while 1:
> > O.run(2000, True)
> >
> > unb=unbalancedForce()
> > print ('unbalanced force:',unb,' mean stress: ',triax.meanStress)
> > if unb<stabilityThreshold and
> > abs(confiningP-triax.meanStress)/(-confiningP)<0.001:
> > break
> >
> >
> > ### REACHING A SPECIFIED POROSITY PRECISELY ###
> >
> > import sys
> > while triax.porosity>targetPorosity:
> >
> > compFricDegree = 0.95*compFricDegree
> > setContactFriction(radians(compFricDegree))
> > print ("\r Friction: ",compFricDegree,"
> porosity:",triax.porosity,)
> > sys.stdout.flush()
> > O.run(500,1)
> >
> > --
> > 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
> >
>
> --
> If this answers your question, please go to the following page to let us
> know that it is solved:
> https://answers.launchpad.net/yade/+question/698303/+confirm?answer_id=4
>
> If you still need help, you can reply to this email or go to the
> following page to enter your feedback:
> https://answers.launchpad.net/yade/+question/698303
>
> You received this question notification because you asked the question.
>

Revision history for this message
Best Robert Caulk (rcaulk) said :
#7

Hey Ibraheem,

What does “didn’t work” mean? The porosity doesn’t decrease from an initial
state?

Cheers,

Robert

Le mar. 10 août 2021 à 20:02, ibraheem khan <
<email address hidden>> a écrit :

> Question #698303 on Yade changed:
> https://answers.launchpad.net/yade/+question/698303
>
> Status: Answered => Open
>
> ibraheem khan is still having a problem:
> Hi Robert
> Yes I tried , even with very low friction value like 5 ,but it didn't work.
>
> On Tue, Aug 10, 2021, 7:45 PM Robert Caulk <
> <email address hidden>> wrote:
>
> > Your question #698303 on Yade changed:
> > https://answers.launchpad.net/yade/+question/698303
> >
> > Robert Caulk proposed the following answer:
> > Have you tried decreasing your target porosity?
> >
> > Le mar. 10 août 2021 à 13:46, ibraheem khan <
> > <email address hidden>> a écrit :
> >
> > > Question #698303 on Yade changed:
> > > https://answers.launchpad.net/yade/+question/698303
> > >
> > > ibraheem khan posted a new comment:
> > >
> > > sorry Robert....
> > >
> > > my script is here .
> > >
> > > from yade import pack, export, ymport
> > >
> > > nRead=readParamsFromTable(
> > > num_spheres=1000,
> > > compFricDegree = 25,
> > > key='_triax_base_'
> > > unknownOk=True
> > > )
> > > from yade.params import table
> > >
> > > num_spheres=table.num_spheres
> > > key=table.key
> > > targetPorosity = 0.45
> > > compFricDegree = table.compFricDegree
> > > finalFricDegree =25
> > > rate=-0.02
> > > damp=0.2
> > > stabilityThreshold=0.01
> > > young=150e9
> > > mn,mx=Vector3(0,0,0),Vector3(1,1,1)
> > > cohesion=50e6
> > > sigmaT=40e6
> > > density=2650
> > > poisson=0.25
> > > confiningP=-1e6
> > >
> > >
> > >
> > >
> >
> O.materials.append(JCFpmMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='walls',cohesion=0,tensileStrength=0))
> > > O.materials.append(JCFpmMat(young=young, cohesion=cohesion,
> > > density=density, frictionAngle=radians(finalFricDegree),
> > > tensileStrength=sigmaT, poisson=poisson, label='spheres'))
> > >
> > > walls=aabbWalls([mn,mx],thickness=0,material='walls')
> > > wallIds=O.bodies.append(walls)
> > >
> > > sp=pack.SpherePack()
> > > sp.makeCloud(mn,mx,-1,0.3333,num_spheres,False, 0.95,seed=1)
> > > O.bodies.append([sphere(center,rad,material='spheres') for center,rad
> in
> > > sp])
> > >
> > >
> > > ### DEFINING ENGINES ###
> > >
> > >
> > > triax=TriaxialStressController(
> > > thickness = 0,
> > > stressMask = 7,
> > > internalCompaction=True,
> > > )
> > >
> > > newton=NewtonIntegrator(damping=damp)
> > >
> > > O.engines=[
> > > ForceResetter(),
> > > InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
> > > InteractionLoop(
> > > [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
> > >
> > >
> >
> [Ip2_FrictMat_FrictMat_FrictPhys(),Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=0,
> > > label='JCFpm')],
> > >
> > >
> >
> [Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(smoothJoint=False,neverErase=True,
> > > recordCracks=True ),Law2_ScGeom_FrictPhys_CundallStrack()]
> > > ),
> > >
> > >
> >
> GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.6,defaultDt=0.5*utils.PWaveTimeStep()),
> > > triax,
> > >
> > > newton,
> > > ]
> > >
> > > Gl1_Sphere.stripes=0
> > > if nRead==0: yade.qt.Controller(), yade.qt.View()
> > >
> > >
> > > ### APPLYING CONFINING PRESSURE ###
> > >
> > >
> > > triax.goal1=triax.goal2=triax.goal3=confiningP
> > >
> > > while 1:
> > > O.run(2000, True)
> > > unb=unbalancedForce()
> > > print ('unbalanced force:',unb,' mean stress: ',triax.meanStress)
> > > if unb<stabilityThreshold and
> > > abs((confiningP-triax.meanStress)/(-confiningP))<0.001:
> > > break
> > >
> > >
> > > ### REACHING A SPECIFIED POROSITY PRECISELY ###
> > >
> > >
> > > import sys
> > >
> > > while triax.porosity>targetPorosity:
> > > compFricDegree = 0.95*compFricDegree
> > > setContactFriction(radians(compFricDegree))
> > > print ("\r Friction: ",compFricDegree,"
> > porosity:",triax.porosity,)
> > > sys.stdout.flush()
> > >
> > > O.run(500,1)
> > > export.textExt('densepacking.spheres','x_y_z_r')
> > >
> > > for JCFpm cohesion , i run it directly in the below script that every
> > new
> > > contact should be cohesive
> > >
> > > from yade import pack, export, ymport
> > > import numpy as np
> > >
> > >
> > >
> > > nRead=readParamsFromTable(
> > > num_spheres=1000,# number of spheres
> > > compFricDegree = 25,
> > > key='_triax_base_'
> > > unknownOk=True
> > > )
> > > from yade.params import table
> > >
> > > num_spheres=table.num_spheres
> > > key=table.key
> > > targetPorosity = 0.46
> > > compFricDegree = table.compFricDegree
> > > finalFricDegree = 25
> > > rate=-0.02 # loading rate (strain rate)
> > > damp=0.2 # damping coefficient
> > > stabilityThreshold=0.01
> > > young=150e9
> > > mn,mx=Vector3(0,0,0),Vector3(1,1,1)
> > > confiningP=-10e6
> > > cohesion=50e6
> > > poisson=0.2
> > > sigmaT=40e6
> > > density=2650
> > > intRadius=1.25
> > >
> > >
> > >
> > >
> >
> O.materials.append(JCFpmMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='walls',cohesion=0,tensileStrength=0))
> > > O.materials.append(JCFpmMat(young=young, cohesion=cohesion,
> > > density=density, frictionAngle=radians(finalFricDegree),
> > > tensileStrength=sigmaT, poisson=poisson, label='spheres'))
> > >
> > > walls=aabbWalls([mn,mx],thickness=0,material='walls')
> > > wallIds=O.bodies.append(walls)
> > >
> > > pack = O.bodies.append(ymport.textExt('densepacking.spheres',
> > > 'x_y_z_r',color=(0,0.2,0.7), material='spheres'))
> > >
> > >
> > > ### DEFINING ENGINES ###
> > >
> > >
> > > triax=TriaxialStressController(
> > >
> > > thickness = 0,
> > >
> > > stressMask = 7,
> > > internalCompaction=True, # If true the confining pressure is
> > > generated by growing particles
> > > )
> > >
> > > newton=NewtonIntegrator(damping=damp)
> > > O.engines=[
> > > ForceResetter(),
> > >
> > >
> >
> InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=intRadius),Bo1_Box_Aabb()]),
> > > InteractionLoop(
> > >
> > >
> >
> [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=intRadius),Ig2_Box_Sphere_ScGeom()],
> > >
> > [Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=-1,
> > > label='JCFPm')],
> > >
> > >
> >
> [Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(recordCracks=True,smoothJoint=False,neverErase=True,
> > >
> >
> recordMoments=True,Key=identifier+'/output.txt',label='interactionLaw'),Law2_ScGeom_FrictPhys_CundallStrack()]
> > > ),
> > >
> > >
> >
> GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.6,defaultDt=0.5*utils.PWaveTimeStep()),
> > > triax,
> > >
> > > newton,
> > >
> > >
> > >
> > > ]
> > >
> > >
> > > Gl1_Sphere.stripes=0
> > > if nRead==0: yade.qt.Controller(), yade.qt.View()
> > >
> > > ### APPLYING CONFINING PRESSURE ###
> > >
> > > triax.goal1=triax.goal2=triax.goal3=confiningP
> > >
> > > while 1:
> > > O.run(2000, True)
> > >
> > > unb=unbalancedForce()
> > > print ('unbalanced force:',unb,' mean stress: ',triax.meanStress)
> > > if unb<stabilityThreshold and
> > > abs(confiningP-triax.meanStress)/(-confiningP)<0.001:
> > > break
> > >
> > >
> > > ### REACHING A SPECIFIED POROSITY PRECISELY ###
> > >
> > > import sys
> > > while triax.porosity>targetPorosity:
> > >
> > > compFricDegree = 0.95*compFricDegree
> > > setContactFriction(radians(compFricDegree))
> > > print ("\r Friction: ",compFricDegree,"
> > porosity:",triax.porosity,)
> > > sys.stdout.flush()
> > > O.run(500,1)
> > >
> > > --
> > > 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
> > >
> >
> > --
> > If this answers your question, please go to the following page to let us
> > know that it is solved:
> > https://answers.launchpad.net/yade/+question/698303/+confirm?answer_id=4
> >
> > If you still need help, you can reply to this email or go to the
> > following page to enter your feedback:
> > https://answers.launchpad.net/yade/+question/698303
> >
> > You received this question notification because you asked the question.
> >
>
> --
> 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
ibraheem khan (ibraheem-22) said :
#8

Hi Robert
Yes , porosity is not decreasing from initial values

Revision history for this message
Robert Caulk (rcaulk) said :
#9

Does the script enter the porosity while loop?

Le mar. 10 août 2021 à 22:51, ibraheem khan <
<email address hidden>> a écrit :

> Question #698303 on Yade changed:
> https://answers.launchpad.net/yade/+question/698303
>
> Status: Answered => Solved
>
> ibraheem khan confirmed that the question is solved:
> Hi Robert
> Yes , porosity is not decreasing from initial values
>
> --
> 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
Robert Caulk (rcaulk) said :
#10

Ibraheem,

I ran your script and I see that triax.porosity is 0.44 before the porosity while-loop is started. Thus, this line:

while triax.porosity>targetPorosity:

is never satisified, since your targetPorosity is 0.45. This is why I asked you if you have tried decreasing your targetPorosity. When I decrease the targetPorosity, the while loop logic is satisifed and the script enters the porosity loop. This is demonstrated by the print statement inside the while-loop.

However, you still have an issue with the bonds being cohesive *before* you have done your confining pressure and porosity loops. Cohesive bonds hold the particles in place, which means you cannot decrease porosity of the packing. We solved this before by running the confining pressure and porosity loops without cohesion to reach a desired confining pressure and porosity, we then exported the sphere packing to text file. That text file can then be reused and imported into other scripts where you can set the cohesion on the first iteration and then run the confining pressure loop yet again to reach your desired confining pressure. This second file does not need the porosity while-loop since your packing should already have the targetPorosity achieved from the first file.

Cheers,

Robert

Revision history for this message
ibraheem khan (ibraheem-22) said (last edit ):
#11

Hi robert ...
 I set "cohesiveTresholdIterarion=0 in the first script to be non cohesive .I ran the script it enter the while loop and took 8 hours but did reached the desired porosity of 0.25 even frictionla forces were reached 10 e-46.
then after that i put desired porosity 0.45
 I am using the same procedure done before .
but still it is not decreasing porosity.

Revision history for this message
Robert Caulk (rcaulk) said :
#12

Hello Ibraheem,

I do not understand. It reached the desired porosity of 0.25? Then you change desired porosity to 0.45, and then it is not decreasing? What is the issue? It is either reaching the desired porosity or it is not?

-rc

Revision history for this message
ibraheem khan (ibraheem-22) said (last edit ):
#13

Hi Robert ...
sorry for my bad English phrasing.

 0.25 was the my desired porosity , I ran the simulation it enter the porosity while loop after 8 hours of running still it was printing porosity of 0.44.
so porosity is not decreasing from 0.44.
it is not reaching the desired porosity and stuck at porosity of 0.44
for the case of cohesion in 1st script I have set the attribute "cohesiveTresholdIterration=0" to be non cohesive.

Revision history for this message
Robert Caulk (rcaulk) said :
#14

Hey Ibraheem,

Ok, so in comparison to [1] what have you changed? (this is typically the first thing that should be reported when asking questions , please review point 2 of [2]). I see the youngs modulus is 5 orders of magnitude higher in your script compared to [1]. However, you hold the same confining pressure - so I am unsurprised that the equilibrium is found at a higher porosity. If you desire a lower porosity, you need to decrease the youngs modulus or increase your confining pressure.

This goes back to my original post - I see no difference scaling heat porosity from DEM porosity of 0.44 to a "true" porosity of 0.015 or DEM 0.25 to "true" 0.015. In both cases, you are discretizing space (i.e. the DEM particles do not directly represent grains) which means packing porosity is just a numerical by product.

Cheers,

Robert

[1]https://gitlab.com/yade-dev/trunk/-/blob/master/examples/triax-tutorial/script-session1.py
[2]https://gitlab.com/yade-dev/trunk/-/blob/master/examples/triax-tutorial/script-session1.py