← Back to team overview

yade-users team mailing list archive

[Question #700957]: How to simulate the cyclic loading during the biaxial test?

 

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

I took the triaxial compression code (3d) and modified it to end up with the biaxial compression simulation (2d), but now I want to go a step further and get cyclic loading while doing biaxial compression (which means to allow the sigmaIsoCompaction and sigmaLateralConfinement are not constantly).

Here is the code (The code works fine and completes the biaxial compression test, but it doesn't load the loop, so I'd like to know what the problem is.):

from yade import pack

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

## box between mn and mx, avg radius ± ½(20%), 2k spheres
sp.makeCloud(minCorner=mn,maxCorner=mx,rRelFuzz=0,num=2000)

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


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

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],
	internalCompaction=True,
	## 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=-5e4,
	sigmaLateralConfinement=-5e4,
	max_vel=10,
	strainRate=0.01,
	label="triax"
)

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='Stresses(d.id).txt'),
	NewtonIntegrator(damping=.4),
	PyRunner(command='checkUnbalanced()',realPeriod=1,label='checker'),
]

O.dt=.5*PWaveTimeStep()


def checkUnbalanced():
	
	if O.iter < 5000:
		return
	
	if unbalancedForce() > .1:
		return
	checker.command ='unload'


def unload():

	if triax.stress(2)[1] > 6e4:
		sigmaIsoCompaction /= 2
		sigmaLateralConfinement /= 2
		checker.command = 'load'

def load():

	if triax.stress(2)[1]  < 3e4:
		sigmaIsoCompaction *= 2
		sigmaLateralConfinement *= 2

from yade import plot



O.engines=O.engines[0:5]+[PyRunner(iterPeriod=20,command='history()',label='recorder')]+O.engines[5:7]
def history():
	plot.addData(e11=triax.strain[0], 
	        e22=-triax.strain[1], 
		s11=-triax.stress(0)[0],
		s22=-triax.stress(2)[1],
		
		i=O.iter)

plot.plots={'e11': ('s11',),'e22': ('s22',)}

O.saveTmp()
plot.plot()


#########################
Many thanks for your help.


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