← Back to team overview

yade-dev team mailing list archive

Re: triaxial test with clumps: wm3 vs. eigen

 

About 2000 spheres. Each clump is about 4 or 6 spheres. See attached
files. The .py files aren't in fact the "just run it" scripts :/
Becasue the Triaxial test from Filegenerator works for me best. When
run from triax-basic.py - something is different. And I didn't bother
to find out what. So I just used bodies generated from
triax-basic-with-clups.py and pasted them into .xml file generated
from FileGenerator. So the .xml files are "just run it". But remember
to update to HEAD.

Be careful to run with single job. With multiple cores results are
different on each run. In fact the picture that I've sentbefore  was
with jobs=3 and I had different result on another try. And now I did
the calculation again, and it is the same everytime, with jobs=1. See
the new attached picture. Two plots are overlapping each other.

here are the .xml files:

  wget http://geo.hmg.inpg.fr/~janek/clumps.xml
  wget http://geo.hmg.inpg.fr/~janek/spheres.xml

best regards
Janek Kozicki

Bruno Chareyre said:     (by the date of Thu, 03 Jun 2010 09:58:34 +0200)

> Good to see!
> clumps+wm3 is initially collapsing... who many clumps?
> 
> Bruno
> 
> Janek Kozicki a écrit :
> > I committed small fix, that was necessary for running triaxial test
> > with clumps.
> >
> > Then I was able to do a comparison between wm3 and clumps. It uses
> > the "default" settings from triaxial FileGenerator. For clumps I did
> > a loop in python that generated them and I mixed it engines from
> > "default" one.
> >
> > We can observe some subtle differences between the two.
> >
> >   
> >
> > ------------------------------------------------------------------------
> >
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Mailing list: https://launchpad.net/~yade-dev
> > Post to     : yade-dev@xxxxxxxxxxxxxxxxxxx
> > Unsubscribe : https://launchpad.net/~yade-dev
> > More help   : https://help.launchpad.net/ListHelp
> >   
> 
> 
> -- 
> _______________
> Bruno Chareyre
> Associate Professor
> Grenoble INP
> Lab. 3SR
> BP 53 - 38041, Grenoble cedex 9 - France
> Tél : 33 4 56 52 86 21
> Fax : 33 4 76 82 70 43
> ________________
> 
> 
> _______________________________________________
> Mailing list: https://launchpad.net/~yade-dev
> Post to     : yade-dev@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~yade-dev
> More help   : https://help.launchpad.net/ListHelp
> 


-- 
Janek Kozicki                               http://janek.kozicki.pl/  |
# encoding: utf-8
from yade import pack
from numpy import arange
import itertools
import random
import yade.plot

## corners of the initial packing
mn,mx=Vector3(0,0,0),Vector3(10,10,10)

## create material #0, which will be used as default
O.materials.append(FrictMat(young=150e6,poisson=.4,frictionAngle=.4,density=2600))
O.materials.append(FrictMat(young=150e6,poisson=.4,frictionAngle=.2,density=2600,label='frictionless'))

d=8

# clumps
for xyz in itertools.product(arange(0,d),arange(0,d),arange(0,d)):
	ids_spheres=O.bodies.appendClumped(pack.regularHexa(pack.inEllipsoid((mn[0]+xyz[0]*(mx[0]-mn[0])/d,mn[0]+xyz[1]*(mx[1]-mn[1])/d,mn[2]+xyz[2]*(mx[2]-mn[2])/d),(0.45+random.random()*0.1,0.45+random.random()*0.1,0.45+random.random()*0.1)),radius=0.15+random.random()*0.05,gap=0,color=[random.random(),random.random(),random.random()]))

## create walls around the packing
walls=utils.aabbWalls(thickness=.1,material='frictionless')
wallIds=O.bodies.append(walls)

## hope that we got the ids right?!
triax=TriaxialCompressionEngine(
	wall_bottom_id=wallIds[2],
	wall_top_id=wallIds[3],
	wall_left_id=wallIds[0],
	wall_right_id=wallIds[1],
	wall_back_id=wallIds[4],
	wall_front_id=wallIds[5],
	## important! (otherwise it sets inertia to infinity and crashes??)
	internalCompaction=False,
	## define the rest of triax params here
	## see in pkg/dem/PreProcessor/TriaxialTest.cpp:524 etc
	## which are assigned in the c++ preprocessor actually
	sigmaIsoCompaction=50e3,
	sigmaLateralConfinement=50e3,
	max_vel=10,
)

recorder=TriaxialStateRecorder(
	label="",
	virtPeriod=0,
	realPeriod=0,
	iterPeriod=20,
	nDo=-1,
	initRun=1,
	virtLast=0,
	realLast=1274347485.300895,
	iterLast=0,
	nDone=0,
	file="./WallStresses_clumps",
	truncate=0,
	porosity=1,
)
	

O.engines=[
	ForceResetter(),
	BoundDispatcher([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
	#SpatialQuickSortCollider(),
	InsertionSortCollider(nBins=5,sweepLength=.05),
	InteractionDispatchers(
		[Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
		[Ip2_FrictMat_FrictMat_FrictPhys()],
		[Law2_ScGeom_FrictPhys_Basic()]
	),
	GlobalStiffnessTimeStepper(),
	triax,
	recorder,
	# you can add TriaxialStateRecorder and such here…
	NewtonIntegrator(damping=.4)
]

O.dt=.5*utils.PWaveTimeStep() # initial timestep, to not explode right away

#yade.plot.plots={'eps':('sigma',)}

#O.saveTmp('initial');
#def addPlotData():
#	yade.plot.addData({'t':O.time,'i':O.iter,'eps':strainer.strain,'sigma':strainer.avgStress})

# encoding: utf-8
from yade import pack

sp=pack.SpherePack()
## corners of the initial packing
mn,mx=Vector3(0,0,0),Vector3(10,10,10)

# makeCloud parameters "documented" only by the argument names in the c++ signature now:
# http://beta.arcig.cz/~eudoxos/yade/epydoc/yade._packSpheres.SpherePack-class.html#makeCloud
## box between mn and mx, avg radius .5 ± ½(.5*.2), 10k spheres (will be less, obviously), not periodic
sp.makeCloud(mn,mx,.2,.1,2000,False)

## create material #0, which will be used as default
O.materials.append(FrictMat(young=150e6,poisson=.4,frictionAngle=.4,density=2600))
O.materials.append(FrictMat(young=150e6,poisson=.4,frictionAngle=.2,density=2600,label='frictionless'))


## copy spheres from the packing into the scene
## use default material, don't care about that for now
O.bodies.append([utils.sphere(center,rad) for center,rad in sp])
## create walls around the packing
walls=utils.aabbWalls(thickness=.1,material='frictionless')
wallIds=O.bodies.append(walls)

## hope that we got the ids right?!
triax=TriaxialCompressionEngine(
	wall_bottom_id=wallIds[2],
	wall_top_id=wallIds[3],
	wall_left_id=wallIds[0],
	wall_right_id=wallIds[1],
	wall_back_id=wallIds[4],
	wall_front_id=wallIds[5],
	## important! (otherwise it sets inertia to infinity and crashes??)
	internalCompaction=False,
	## define the rest of triax params here
	## see in pkg/dem/PreProcessor/TriaxialTest.cpp:524 etc
	## which are assigned in the c++ preprocessor actually
	sigmaIsoCompaction=50e3,
	sigmaLateralConfinement=50e3,
	max_vel=10,
)

recorder=TriaxialStateRecorder(
	label="",
	virtPeriod=0,
	realPeriod=0,
	iterPeriod=20,
	nDo=-1,
	initRun=1,
	virtLast=0,
	realLast=1274347485.300895,
	iterLast=0,
	nDone=0,
	file="./WallStresses_basic",
	truncate=0,
	porosity=1,
)
	

O.engines=[
	ForceResetter(),
	BoundDispatcher([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
	InsertionSortCollider(nBins=5,sweepLength=.05),
	InteractionDispatchers(
		[Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
		[Ip2_FrictMat_FrictMat_FrictPhys()],
		[Law2_ScGeom_FrictPhys_Basic()]
	),
	GlobalStiffnessTimeStepper(),
	triax,
	recorder,
	# you can add TriaxialStateRecorder and such here…
	NewtonIntegrator(damping=.4)
]

O.dt=.5*utils.PWaveTimeStep() # initial timestep, to not explode right away

O.saveTmp()

Attachment: wm3-eigen-clump.png
Description: PNG image


Follow ups

References