← Back to team overview

yade-users team mailing list archive

[Question #690752]: How to know the force applied to each particle when Flowengine is activited

 

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

Hi, I  just begin to learn the Flowengine. My code is as followed:

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

#define the material(Fontainebleau Sand)
SteelMat = PolyhedraMat(young=2.06e11,poisson=.3,density=7890,frictionAngle=0.3)
SoilMat=FrictMat(young=1e7,poisson=0.2,density=2650,frictionAngle=0.273)
O.materials.append((SteelMat,SoilMat))

#define the chamber
O.bodies.append(geom.facetBox((0,0,2),(0.4,0.4,2),wallMask=31))

#create foundation by making spheres in the cylinder.
sp=pack.SpherePack()
sp.makeCloud((-.4,-.4,0),(.4,.4,4),rMean=.04,rRelFuzz=.5)
sp.toSimulation(material=SoilMat)

#Engine of the simulation
O.engines=[
	ForceResetter(),
	InsertionSortCollider([Bo1_Polyhedra_Aabb(),Bo1_Sphere_Aabb(),Bo1_Facet_Aabb(),Bo1_Wall_Aabb()]),
	InteractionLoop(
		[Ig2_Sphere_Polyhedra_ScGeom(),Ig2_Sphere_Sphere_ScGeom(),Ig2_Facet_Sphere_ScGeom(),Ig2_Wall_Sphere_ScGeom()],
		[Ip2_FrictMat_FrictMat_FrictPhys(),Ip2_FrictMat_PolyhedraMat_FrictPhys()],
		[Law2_ScGeom_FrictPhys_CundallStrack()]
	),
	NewtonIntegrator(gravity=(0,0,-9.81),damping=0.2),
	#introduced as a dead engine for the moment
	FlowEngine(dead=1,label="flow"),
	#Run the specific controlled motion.
	PyRunner(command='start()',realPeriod=2,label='checker'),
]

#Time step
O.dt=PWaveTimeStep()

def start():
	print('\n##### Simulation begins #####')
	print('Stage: Gravitity desposition.')
	print('Time step is %ss.' % O.dt)
	checker.command='checkUnbalanced()'


def checkUnbalanced():	
	print('%s:UnbalancedForce=%s' % (O.iter,unbalancedForce()))
	if max([b.state.pos[2]+b.shape.radius for b in O.bodies if isinstance(b.shape,Sphere)])>2: return
	if unbalancedForce()>0.01: return
	checker.command='Active_Flowengine()'

#Compress the soil to achieve a certain dry density of 1.5g/cm^3.
def Active_Flowengine():
	flow.dead=0
	flow.meshUpdateInterval=200
	flow.useSolver=3
	flow.permeabilityFactor=1
	flow.viscosity=10
	flow.bndCondIsPressure=[0,0,0,0,0,1]
	flow.bndCondValue=[0,0,0,0,0,0]
	flow.boundaryUseMaxMin=[1,1,1,1,1,1]
	newton.damping=0
	checker.command='Create_Ball()'

def Create_Ball():
	#Ball=sphere((0,0,1.6),0.1243186,material=SteelMat)
	Cube=polyhedra_utils.polyhedra(SteelMat,(.1,.1,.1),v=((0.05,0.05,1.6),(-0.05,0.05,1.6),(0.05,-0.05,1.6),(-0.05,-0.05,1.6),(0.05,0.05,1.7),(-0.05,0.05,1.7),(0.05,-0.05,1.7),(-0.05,-0.05,1.7)))
	O.bodies.append(Cube)
	global Cube
	#flow.ignoredBody=Cube.id
	checker.command='Fall()'

def Fall():
	print(O.forces.f(Cube.id)[2])
	
Here's my question. After  the gravity deposition completed and the FlowEngine activated, it shows that the force of the cube element is always zero. Even if the cube element has a direct contact with other balls. There must be something wrong.
Can anyone help me out?
Thanks in advance.

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