← Back to team overview

yade-dev team mailing list archive

trying triaxial with clumps..

 

I tried to modify triax-basic, to use clumps. And it crashed,
apparently in TriaxialStressController.cpp:105

Looks like it expects everything to be spheres. So I added a line 

if((*bi)->isClump()) continue;

to skip clumps. Seems to work so I committed that in 2202 ;) How do you think?

Attached is a small script that generates clumps in triaxial test.

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

## 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=7

# 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.5,0.45,0.55)),radius=0.15,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,
)

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,
	# you can add TriaxialStateRecorder and such here…
	NewtonIntegrator(damping=.4)
]

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

O.saveTmp()

Follow ups