← Back to team overview

yade-users team mailing list archive

Re: [Question #698303]: packing porosity for heat capacity scaling according to desired porosity of material

 

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.