← Back to team overview

yade-users team mailing list archive

Re: [Question #702972]: porosity control

 

Question #702972 on Yade changed:
https://answers.launchpad.net/yade/+question/702972

    Status: Answered => Open

Fedor is still having a problem:
Hello,
thank you for reply. But when I put some iterations there is another issue File "<string>", line 1, in <module>
NameError: name 'addPlotData' is not defined
Please look at my script below
##########################################################
from __future__ import print_function

import time
import datetime
import os

from yade import pack, plot, export
import numpy as np


#FIXED PARAMETERS

poisson=0.2
R=1e-3 
rate=1e-4
dimcell = 0.03
density= 1e5
young=1e9
frictionAngle=radians(30)
targetPorosity=0.43

#SETTINGS
O.periodic = True
O.cell.hSize = Matrix3(dimcell , 0, 0, 0, dimcell , 0, 0, 0, dimcell )


sp = pack.SpherePack()
sp.makeCloud((0, 0, 0), (dimcell, dimcell, dimcell), rMean=R, rRelFuzz=.1, periodic=True)


pp = O.materials.append(CohFrictMat(
	young=young,
	poisson=poisson,
	frictionAngle=frictionAngle,
	density=density,
	isCohesive=False,
	momentRotationLaw=True,
	etaRoll=.1,label='spheres'
	))


sp.toSimulation(material='spheres')

O.engines = [
        ForceResetter(
               ),
        InsertionSortCollider([Bo1_Sphere_Aabb()]),
        InteractionLoop([Ig2_Sphere_Sphere_ScGeom6D()], [Ip2_CohFrictMat_CohFrictMat_CohFrictPhys()],[Law2_ScGeom6D_CohFrictPhys_CohesionMoment(useIncrementalForm=True,always_use_moment_law=True)]),
	TriaxialStressController(
		stressMask = 7,label='triax'),
	NewtonIntegrator(damping=.2),
        PyRunner(command='addPlotData()', iterPeriod=500),
	]

O.dt = .5 * PWaveTimeStep()
print('time step',O.dt)

triax.goal1=triax.goal2=triax.goal3=-10000

while 1:
  O.run(1000, 1)
  unb=unbalancedForce()
  if abs(10000-getStress().trace() / 3.)/10000<0.1:
  	O.cell.velGrad=Matrix3(0,0,0,0,0,0,0,0,0)
	break

triax.goal1=triax.goal2=triax.goal3=-40000
while triax.porosity>targetPorosity:
	frictionAngle = 0.95*frictionAngle
	setContactFriction(radians(30))
	print (frictionAngle," porosity:",triax.porosity)
	O.run(500,1)
	
def addPlotData():
	plot.addData(
	        i=O.iter,
	        Ezz=log(O.cell.trsf[2,2]),
		Eyy=log(O.cell.trsf[1,1]),
		Exx=log(O.cell.trsf[0,0]),
		szz=utils.getStress()[2,2],
		syy=utils.getStress()[1,1],
		sxx=utils.getStress()[0,0],
	        u=utils.porosity()
	)

# define what to plot
plot.plots = {
        'i ': ('sxx', 'syy', 'szz'),
        ' i': ('Exx', 'Eyy', 'Ezz'),
	' i ':('u')
        # energy plot
        
}
# show the plot
plot.plot()

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