← Back to team overview

yade-users team mailing list archive

[Question #700617]: core dumped after replacing boundary walls

 

New question #700617 on Yade:
https://answers.launchpad.net/yade/+question/700617

Hi,

I'd like to ask that if is it possible to replace (or enlarge) the boundary walls after the sample is made?

The reason why I want to replace or enlarge the boundary walls is that, I simulated triaxial compression tests before, in this case the boundary walls work well. Now I want to simulate triaxial extension tests on the same samples, and I found that the size of the wall is not enough when the axial strain reaches to a certain value, please see one example at [1].

The problem in [1] I think is that the size of walls are small because I didn't adjust oversizeFactors in [2]. The way I came up with is to erase the old walls and add new walls into it at the begining of deviatoric loading. But then I had the core dumped problem when I started the deviatoric loading after replacing the walls.

The MWE below can show this problem. Please click run to start the deviatoric loading and the core domped will occur.

from yade import pack

nRead=readParamsFromTable(
 num_spheres=1000,# number of spheres
 compFricDegree = 30, # contact friction during the confining phase
 key='_triax_base_', # put you simulation's name here
 unknownOk=True
)
from yade.params import table

num_spheres=table.num_spheres# number of spheres
key=table.key
targetPorosity = 0.43 #the porosity we want for the packing
compFricDegree = table.compFricDegree # initial contact friction during the confining phase (will be decreased during the REFD compaction process)
finalFricDegree = 30 # contact friction during the deviatoric loading
rate=-0.1 # loading rate (strain rate)
damp=0.2 # damping coefficient
stabilityThreshold=0.01 # we test unbalancedForce against this value in different loops (see below)
young=5e6 # contact stiffness
mn,mx=Vector3(0,0,0),Vector3(1,1,1) # corners of the initial packing

O.materials.append(FrictMat(young=young,poisson=0.5,frictionAngle=radians(compFricDegree),density=2600,label='spheres'))
O.materials.append(FrictMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='walls'))

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) #"seed" make the "random" generation always the same
O.bodies.append([sphere(center,rad,material='spheres') for center,rad in sp])

triax=TriaxialStressController(
 maxMultiplier=1.+2e4/young, # spheres growing factor (fast growth)
 finalMaxMultiplier=1.+2e3/young, # spheres growing factor (slow growth)
 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(),Bo1_Box_Aabb()]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
  [Ip2_FrictMat_FrictMat_FrictPhys()],
  [Law2_ScGeom_FrictPhys_CundallStrack()]
 ),
 GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
 triax,
 TriaxialStateRecorder(iterPeriod=100,file='WallStresses'+table.key),
 newton,
]

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

triax.goal1=triax.goal2=triax.goal3=-100000

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

print "### Isotropic state saved ###"

import sys #this is only for the flush() below
while triax.porosity>targetPorosity:
 # we decrease friction value and apply it to all the bodies and contacts
 compFricDegree = 0.95*compFricDegree
 setContactFriction(radians(compFricDegree))
 print "\r Friction: ",compFricDegree," porosity:",triax.porosity,
 sys.stdout.flush()
 O.run(500,1)

O.save('compactedState'+key+'.yade.gz')
print "### Compacted state saved ###"

triax.internalCompaction=False

setContactFriction(radians(finalFricDegree))

triax.stressMask = 5
triax.goal2=rate
triax.goal1=-100000
triax.goal3=-100000
newton.damping=0.1

print "click run to start deviatoric loading"
####################################  replacing walls
print "Here I'd like to enlarge the size of the boundary walls"

newWalls=aabbWalls(thickness=0,oversizeFactor=5,material='walls')
newWalls=O.bodies.append(newWalls)

for i in range(6):
  O.bodies.erase(i)
#########################################

def stop():
 if -triax.strain[1]>0.15:
  O.pause()
  print "deviatoric loading finished"

O.engines=O.engines+[PyRunner(iterPeriod=1,command='stop()',label='stop')]


If it is not possible to replace the walls, do you have any other idea to enlarge the walls? As my target is to simulate the triaxial extension test to a large strain level.

Thanks
Leonard


[1]https://we.tl/t-OMx1y0hzgN
[2]https://yade-dev.gitlab.io/trunk/yade.utils.html?highlight=aabbwalls#yade.utils.aabbWalls

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