← Back to team overview

yade-users team mailing list archive

[Question #692131]: acoustic emission(JCFmat)recordCrack=true

 

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

Hi everyone,
I am a beginner in YADE. I don't know if my next question is stupid. But I really don't know what I should do next. 
I tried to use recordCracks=True to record the cracks generated in the model. However, it seems that something went wrong. Because my result produced .vtu file, but there was no .txt file. I guess it is because my model does not produce cracks? Below is my script,
from __future__ import print_function
from yade import plot,pack
"""
A simple script of a Brazilian splitting test.
A cylinder with x axis form 0 to specimenLength.
Load in z direction by z-perpendicular walls.

Code strongly inspired by uniax.py and  brazilian.py
"""

# default parameters or from table
readParamsFromTable(noTableOk=True, # unknownOk=True,
	young = 1e9,
	cohesion = 0,
    poisson = .25,
    density = 1000,
    iterper=100,
	frictionAngle = 0.5,
    
    xSectionScale=1,
    xSectionShape=0.,
    weibullCutOffMin=0,
    weibullCutOffMax=10,

	intRadius =1.5,
	dtSafety = .8,
	strainRate =1,

	specimenRadius = .05,
	sphereRadius = 5e-3
)
from yade.params.table import *

# material
concreteId  = O.materials.append(JCFpmMat(young=young, cohesion=cohesion,
               density=density, frictionAngle = frictionAngle,
               tensileStrength= 0, poisson=poisson, label='JCFpmMat',
               jointNormalStiffness=0,jointShearStiffness=0,jointCohesion=0))
# spheres
sp=pack.randomDensePack(
	pack.inSphere((0,0,0),specimenRadius),
	radius = sphereRadius,
	returnSpherePack = True
)
sp.toSimulation()

# walls
idConcrete=O.materials.append(FrictMat(young=30e9,poisson=.2,frictionAngle=.6,label='FrictMat'))
zMin,zMax=[pt[2] for pt in aabbExtrema()]
wallIDs = O.bodies.append([wall((0,0,z),2) for z in (zMin,zMax)])
walls = wallMin,wallMax = [O.bodies[i] for i in wallIDs]
v = strainRate * 2*specimenRadius
wallMin.state.vel = (0,0,+v)
wallMax.state.vel = (0,0,-v)

# engines
O.engines=[
                       ForceResetter(),
                       InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=intRadius,label='is2aabb'),Bo1_Wall_Aabb()]),
                       InteractionLoop(
                           	[Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=intRadius,label='ss2sc'),Ig2_Wall_Sphere_ScGeom()],
                             [Ip2_FrictMat_FrictMat_FrictPhys(),Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=1, label='jcf')],
                             [Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(cracksFileExist = True,smoothJoint=True,label='interactionLaw', neverErase=True,recordCracks=True,recordMoments=True ),
                             Law2_ScGeom_FrictPhys_CundallStrack()],
    ),
                         
           GlobalStiffnessTimeStepper(),
           VTKRecorder(iterPeriod=iterper,initRun=True,recorders=['jcfpm','cracks','facets','moments'],label='vtk'),
                       NewtonIntegrator(damping=0.4),
                       PyRunner(iterPeriod=100,command='addPlotData()',initRun=True),
                       PyRunner(iterPeriod=100,command='stopIfDamaged()'),
]
# stop condition
def stopIfDamaged():
	if O.iter < 10000: # do nothing at the beginning
		return
	fMax = max(plot.data["f"])
	f = plot.data["f"][-1]
	if f/fMax < .1:
		print("Damaged, stopping.")
		print("ft = ",max(plot.data["stress"]))
		O.pause()

# plot stuff
def addPlotData():
	# forces of walls. f1 is "down", f2 is "up" (f1 needs to be negated for evlauation)
	f1,f2 = [O.forces.f(i)[2] for i in wallIDs]
	f1 *= -1
	# average force
	f = .5*(f1+f2)
	# displacement (2 times each wall)
	wall = O.bodies[wallIDs[0]]
	dspl = 2*wall.state.displ()[2]
	# stress (according to standard brazilian test evaluation formula)
	stress = f/(pi*specimenRadius*specimenRadius)
	# store values
	yade.plot.addData(
		t = O.time,
		i = O.iter,
		dspl = dspl,
		f1 = f1,
		f2 = f2,
		f = f,
		stress = stress,
	)
# plot dspl on x axis, stress on y1 axis and f,f1,f2 in y2 axis
plot.plots={'dspl':('stress',None,'f1','f2','f')}

O.dt = 0.
O.step(); # to create initial contacts
# now reset the interaction radius and go ahead
ss2sc.interactionDetectionFactor=1.
is2aabb.aabbEnlargeFactor=1.

# time step
O.dt = dtSafety*PWaveTimeStep()

# run simulation
plot.plot()
#O.run()


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