permeability - PFV

Asked by Othman Sh on 2020-02-11

Hello All,

I wrote a code that is supposed to simulate a permeability test of a saturated sphere packing in a column. The spheres packing is rigid and no deformation/change in particle positions due to fluid flow should occur. However, I'm getting errors such as:
- Vh==NULL!!,
- negative volume for an ordinary pore (temp warning, should still be safe)

Can anyone help me to make this code work? My goal is to get the average fluid velocity in the pores. The code is copied below.

Thank you,

Othman

---------------------------
# -*- coding: utf-8 -*-

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

radiuscyl=.05
heightcyl=.2

dP=1e3 #Pa
visc=1e-3 #Pa.sec
density=1000 #kg/m3

O.materials.append(FrictMat(young = 5e10, poisson = 0.15,frictionAngle = atan(.2), density=1920))

############################ spheres #############################
sp=pack.SpherePack()
sp.makeCloud((0,0,0),(.3,.3,2),rMean=0.0083,rRelFuzz=0.1)
#### cylinder extraction
pred=pack.inCylinder((.2,.2,0),(.2,.2,heightcyl),radiuscyl)
spFilter=filterSpherePack(pred,sp,Material=Material, returnSpherePack=True)
spFilter.toSimulation()
############################ facets #############################

facets=geom.facetCylinder((.2,.2,heightcyl/2),radiuscyl,heightcyl,segmentsNumber=150,wallMask=4)
cylinder=O.bodies.append(facets)
yade.qt.View()
Height=max(utils.aabbDim())

#Fix all particles in their positions. No deformation
for i in O.bodies:
 i.state.blockedDOFs='xyzXYZ'

############################ Engines #############################
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()],label="iloop"
 ),
 FlowEngine(dead=1,label="flow"),#introduced as a dead engine for the moment, see 2nd section
 GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
 NewtonIntegrator(damping=0.2)

]
O.dt=1e-5
O.run(1,1)

#B. Activate flow engine and set boundary conditions in order to get permeability
flow.dead=0
flow.useSolver=3
flow.viscosity=visc
flow.bndCondIsPressure=[0,0,0,0,1,1] #[xmin,xmax,ymin,ymax,zmin,zmax]
flow.bndCondValue=[0,0,0,0,0,dP]
flow.boundaryUseMaxMin=[0,0,0,0,1,1] #if you want wall to be boundary, set this 0. If you don't have a wall, make it 1 so that spheres will be boundary

#Permeability calculations
Q=flow.averageVelocity()
Permeability=visc*Q*Height/dP
print ("average velocity: ",Q, "Permeability: ",Permeability)

O.run()

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Othman Sh
Solved:
3 hours ago
Last query:
3 hours ago
Last reply:
12 hours ago

This question was reopened

Robert Caulk (rcaulk) said : #1

Hello,

What happens when you follow the solution provided in [1]?

[1]https://answers.launchpad.net/yade/+question/688195

Othman Sh (othman-sh) said : #2

Hi Robert,

Are you referring to reducing the time step? I did reduce the time step until 1e-7 and I still have this issue.

Also, I don't know if my code lines are in the correct order or not. Is there a problem in triangulation or is it about the time step?

Thanks,
Othman

Othman Sh (othman-sh) said : #3

I have some updates. I realized that since I'm fixing the spheres in their position and I don't want any deformation in the packing, I don't need the mechanical engine so I removed it (This was based on answer #7 in [1]). The errors are now fixed but I don't get any results. For instance, flow.averageVelocity() is nan.

Would you please help?

Thanks,
Othman

[1] https://answers.launchpad.net/yade/+question/685707

-----------------------------------------------
# -*- coding: utf-8 -*-

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

radiuscyl=.08
heightcyl=.25

dP=4e3 #Pa
visc=1e-3 #Pa.sec
density=1000 #kg/m3
g=9.81 #m/s2
O.materials.append(FrictMat(young = 5e10, poisson = 0.15,frictionAngle = atan(.2), density=1920))

############################ spheres #############################
sp=pack.SpherePack()
sp.makeCloud((0,0,0),(.4,.4,2),rMean=0.0083,rRelFuzz=0.1)
#### cylinder extraction
pred=pack.inCylinder((.3,.3,0),(.3,.3,heightcyl),radiuscyl)
spFilter=filterSpherePack(pred,sp,Material=Material, returnSpherePack=True)
spFilter.toSimulation()

yade.qt.View()
Height=max(utils.aabbDim())

#Fix all particles in their positions. No deformation
for i in O.bodies:
 i.state.blockedDOFs='xyzXYZ'

#B. Activate flow engine and set boundary conditions in order to get permeability
flow=FlowEngine()
flow.useSolver=3
flow.viscosity=visc
flow.boundaryUseMaxMin=[1,1,1,1,1,1] #if you want wall to be boundary, set this 0. If you don't have a wall, make it 1 so that spheres will be boundary
flow.bndCondIsPressure=[0,0,0,0,1,1] #[xmin,xmax,ymin,ymax,zmin,zmax]
flow.bndCondValue=[0,0,0,0,0,dP]

#Permeability calculations
Q=max(flow.averageVelocity())
Permeability=abs((density*g*Q*Height)/dP)
print ("average velocity: ",Q, "Permeability: ",Permeability)

Robert Caulk (rcaulk) said : #4

>>flow.averageVelocity() is nan

I am not surprised, averageVelocity() is apparently a dead function that is not fetching anything. Sometimes this happens when people leave extraneous code in their commits.

Robert Caulk (rcaulk) said : #6

Nevermind, upon further inspection, you should be able to use that function. Have you tried visualizing the cell values with paraview yet? This might give you some insight into why you are getting a NAN from that function.

Othman Sh (othman-sh) said : #7

Hi Robert,

I have added a line to my code to save vtk (flow.saveVtk()) and run Paraview but then I get the error (Triangulation does not exist. Sorry.). Then I noticed I didn't have flow.emulateAction() in my code so probably that's why there is no triangulation? When I add emulateAction() I get this:
negative volume for an ordinary pore (temp warning, should still be safe)
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)

Another question, can I use periodic flow engine for non-periodic packing?

Thanks,
Othman
--------------------------------------------
# -*- coding: utf-8 -*-

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

radiuscyl=.08
heightcyl=.25

dP=4e3 #Pa
visc=1e-3 #Pa.sec
density=1000 #kg/m3
g=9.81 #m/s2
O.materials.append(FrictMat(young = 5e10, poisson = 0.15,frictionAngle = atan(.2), density=1920))

############################ spheres #############################
sp=pack.SpherePack()
sp.makeCloud((0,0,0),(.4,.4,2),rMean=0.0083,rRelFuzz=0.1)
#### cylinder extraction
pred=pack.inCylinder((.3,.3,0),(.3,.3,heightcyl),radiuscyl)
spFilter=filterSpherePack(pred,sp,Material=Material, returnSpherePack=True)
spFilter.toSimulation()

yade.qt.View()
Height=max(utils.aabbDim())

#Fix all particles in their positions. No deformation
for i in O.bodies:
 i.state.blockedDOFs='xyzXYZ'

########## Activate flow engine and set boundary conditions in order to get permeability #####
flow=FlowEngine()
#flow.dead=0
flow.useSolver=3
flow.viscosity=visc
flow.boundaryUseMaxMin=[1,1,1,1,1,1]
flow.bndCondIsPressure=[0,0,0,0,1,1] #[xmin,xmax,ymin,ymax,zmin,zmax]
flow.bndCondValue=[0,0,0,0,0,dP]
flow.emulateAction()
flow.saveVtk()

#Permeability calculations
Q=max(flow.averageVelocity())
Permeability=abs((density*g*Q*Height)/dP)
print ("average velocity: ",Q, "Permeability: ",Permeability)

 [1] https://answers.launchpad.net/yade/+question/685707

Robert Caulk (rcaulk) said : #8

>> (Triangulation does not exist. Sorry.)

This is because you are asking for flow.averageVelocity() before running any iterations. You need to use O.run() before or while extracting information from flow engine. If you do not run the simulation, then there is no information for flow to give you.

emulateAction() makes a single iteration through flowengine without running a mechanical iteration.

Othman Sh (othman-sh) said : #9

That make sense to me. Yet when I added back the mechanical engine and after that I had O.run() then the flow engine, I still get this:

(Triangulation does not exist. Sorry.)
negative volume for an ordinary pore (temp warning, should still be safe)
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)

I don't know what is missing in this code to get it run.

------------------------------------------
# -*- coding: utf-8 -*-

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

radiuscyl=.08
heightcyl=.25

dP=4e3 #Pa
visc=1e-3 #Pa.sec
density=1000 #kg/m3
g=9.81 #m/s2
O.materials.append(FrictMat(young = 5e10, poisson = 0.15,frictionAngle = atan(.2), density=1920))

############################ spheres #############################
sp=pack.SpherePack()
sp.makeCloud((0,0,0),(.4,.4,2),rMean=0.0083,rRelFuzz=0.1)
#### cylinder extraction
pred=pack.inCylinder((.3,.3,0),(.3,.3,heightcyl),radiuscyl)
spFilter=filterSpherePack(pred,sp,Material=Material, returnSpherePack=True)
spFilter.toSimulation()

yade.qt.View()
Height=max(utils.aabbDim())

#Fix all particles in their positions. No deformation
for i in O.bodies:
 i.state.blockedDOFs='xyzXYZ'

########################## Engines #############################
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()],label="iloop"
 ),
 FlowEngine(dead=1,label="flow"),#introduced as a dead engine for the moment, see 2nd section
 GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
 NewtonIntegrator(damping=0.2)

]
O.dt=1e-5
O.run()

#B. Activate flow engine and set boundary conditions in order to get permeability
flow.dead=0
flow.useSolver=3
flow.viscosity=visc
flow.boundaryUseMaxMin=[1,1,1,1,1,1]
flow.bndCondIsPressure=[0,0,0,0,1,1] #[xmin,xmax,ymin,ymax,zmin,zmax]
flow.bndCondValue=[0,0,0,0,0,dP]
flow.saveVtk()

#Permeability calculations
Q=max(flow.averageVelocity())
Permeability=abs((density*g*Q*Height)/dP)
print ("average velocity: ",Q, "Permeability: ",Permeability)

Robert Caulk (rcaulk) said : #10

Your order of operations is still incorrect. Here I will describe what you posted in english:

1) You set your engine list with flow.dead=True.

2) You run the simulation, with flow.dead still True. Since it is a dead engine, it is skipped and flow never has a chance to create a triangulation. No triangulation means no flow information exists.

3) You stop running manually? (O.run() will run indefinitely without manual intervention)

4) You set flow.dead=False

5) You ask flow to give you information.

You need to set flow.dead=False, then run a timestep. During that first time step where flow.dead=False, flow will create a triangulation and then it will have information to give you.

Does it make sense?

Othman Sh (othman-sh) said : #11

It make sense to me. But when I tried it still I got errors. So I went back to the oedometer code [1] and removed the triax part and reduced the code to just permeability. I realized that it will work until I remove the walls surrounding the packing. If I remove the walls and set flow.boundaryUseMaxMin=[1,1,1,1,1,1] then it will give me this error

negative volume for an ordinary pore (temp warning, should still be safe)
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)

Any idea why?

So now the code below with the aabbWalls works fine (although the averageVelocity() results is super high!).

Do you think that having a box (6 walls) surrounding a cylindrical sphere packing will give different results than if the cylindrical sphere packing was surrounded by a cylindrical wall?

Thanks,
Othman

[1] https://github.com/yade/trunk/blob/master/examples/FluidCouplingPFV/oedometer.py
---------------------------------------------------
# -*- coding: utf-8 -*-

from __future__ import print_function
from builtins import range
from yade import pack, ymport
radiuscyl=.08
heightcyl=.25
dP=4e3 #Pa
visc=1e-3 #Pa.sec
density=1000 #kg/m3
g=9.81 #m/s2

young=1e6

mn,mx=Vector3(0.12051283763637842,0.12120598296516694,0.000018575942022891825),Vector3(0.2788652537183969,0.27855505606930653,0.24827692256149453) # corners of the box that contain the packing. Obtained from aabbExtrema

O.materials.append(FrictMat(young=young,poisson=0.2,density=1900,label='spheres'))
O.materials.append(FrictMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='walls'))
walls=aabbWalls([mn,mx],thickness=0,material='walls')
wallIds=O.bodies.append(walls)
yade.qt.View()

############################# spheres #############################
sp=pack.SpherePack()
sp.makeCloud((0,0,0),(.4,.4,2),rMean=0.0083,rRelFuzz=0.1,seed=1)
### cylinder extraction
pred=pack.inCylinder((.2,.2,0),(.2,.2,heightcyl),radiuscyl)
spFilter=filterSpherePack(pred,sp,Material=Material, returnSpherePack=True)
spFilter.toSimulation()

Height=max(utils.aabbDim())

#Fix all particles in their positions. No deformation
for i in O.bodies:
 i.state.blockedDOFs='xyzXYZ'

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()],label="iloop"
 ),
 FlowEngine(dead=1,label="flow"),#introduced as a dead engine for the moment, see 2nd section
 GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
 NewtonIntegrator(damping=0.2)
]

#B. Activate flow engine and set boundary conditions in order to get permeability
flow.dead=0
flow.useSolver=3
flow.permeabilityFactor=1
flow.viscosity=visc
flow.bndCondIsPressure=[0,0,0,0,1,1]
flow.bndCondValue=[0,0,0,0,0,dP]
flow.boundaryUseMaxMin=[0,0,0,0,1,1]
O.dt=0.1e-8
O.dynDt=False

O.run(1,1)

Q=max(flow.averageVelocity())
Permeability=abs((density*g*Q*Height)/dP)
print ("average velocity: ",Q, "Permeability m/s: ",Permeability,"Permeability in/hr: ", Permeability*141732)

Robert Caulk (rcaulk) said : #12

>Do you think that having a box (6 walls) surrounding a cylindrical sphere packing will give different results than if the cylindrical sphere packing was surrounded by a cylindrical wall?

There is no difference from the triangulation point of view if it uses the max min of the packing or the 6 walls. In both cases the triangulation uses 6 fictitious spheres to set 6 boundaries.

Hi,
Could you please post the script without walls which gives the crash?
Bruno

Othman Sh (othman-sh) said : #14

Thanks Robert for your help.

Bruno, please see the code below.

----------------
# -*- coding: utf-8 -*-

from __future__ import print_function
from builtins import range
from yade import pack, ymport
radiuscyl=.08
heightcyl=.25
dP=4e3 #Pa
visc=10 #Pa.sec
density=1000 #kg/m3
g=9.81 #m/s2
young=1e6

O.materials.append(FrictMat(young=young,poisson=0.2,density=1900,label='spheres'))
O.materials.append(FrictMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='walls'))

yade.qt.View()

############################# spheres #############################

sp=pack.SpherePack()
sp.makeCloud((0,0,0),(.4,.4,2),rMean=0.0083,rRelFuzz=0.1,seed=1)
### cylinder extraction
pred=pack.inCylinder((.2,.2,0),(.2,.2,heightcyl),radiuscyl)
spFilter=filterSpherePack(pred,sp,Material=Material, returnSpherePack=True)
spFilter.toSimulation()

Height=max(utils.aabbDim())

#Fix all particles in their positions. No deformation
for i in O.bodies:
 i.state.blockedDOFs='xyzXYZ'

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()],label="iloop"
 ),
 FlowEngine(dead=1,label="flow"),#introduced as a dead engine for the moment, see 2nd section
 GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
 NewtonIntegrator(damping=0.2)
]

#B. Activate flow engine and set boundary conditions in order to get permeability
flow.dead=0
flow.useSolver=3
flow.permeabilityFactor=1
flow.viscosity=visc
flow.bndCondIsPressure=[0,0,0,0,1,1]
flow.bndCondValue=[0,0,0,0,0,dP]
flow.boundaryUseMaxMin=[1,1,1,1,1,1]
O.dt=0.1e-8
O.dynDt=False

O.run(1,1)

Q=max(flow.averageVelocity())
Permeability=abs((density*g*Q*Height)/dP)
print ("average velocity: ",Q, "Permeability m/s: ",Permeability,"Permeability in/hr: ", Permeability*141732)

Othman Sh (othman-sh) said : #15

Bruno,
Please let me know if you find a solution for the crash in the code in #14. I will mark this question as solved. Thanks to Robert Caulk for his help.

Best,
Othman

Chareyre (bruno-chareyre-9) said : #16

I will. I tried the script and reproduced the error, thanks.
Bruno

Le jeu. 20 févr. 2020 17:58, Othman Sh <email address hidden>
a écrit :

> Question #688685 on Yade changed:
> https://answers.launchpad.net/yade/+question/688685
>
> Status: Answered => Solved
>
> Othman Sh confirmed that the question is solved:
> Bruno,
> Please let me know if you find a solution for the crash in the code in
> #14. I will mark this question as solved. Thanks to Robert Caulk for his
> help.
>
> Best,
> Othman
>
> --
> You received this question notification because your team yade-users is
> an answer contact for Yade.
>
> _______________________________________________
> Mailing list: https://launchpad.net/~yade-users
> Post to : <email address hidden>
> Unsubscribe : https://launchpad.net/~yade-users
> More help : https://help.launchpad.net/ListHelp
>
>
>

Chareyre (bruno-chareyre-9) said : #17

Note that there is an independent problem with your approach, a permeameter
on a cylinder would measure mainly the conductivity of the empty regions
left in the corners of the bounding box, probably not what you want.
Bruno

Le jeu. 20 févr. 2020 18:56, Bruno Chareyre <bruno.chareyre@3sr-grenoble.fr>
a écrit :

> I will. I tried the script and reproduced the error, thanks.
> Bruno
>
> Le jeu. 20 févr. 2020 17:58, Othman Sh <
> <email address hidden>> a écrit :
>
>> Question #688685 on Yade changed:
>> https://answers.launchpad.net/yade/+question/688685
>>
>> Status: Answered => Solved
>>
>> Othman Sh confirmed that the question is solved:
>> Bruno,
>> Please let me know if you find a solution for the crash in the code in
>> #14. I will mark this question as solved. Thanks to Robert Caulk for his
>> help.
>>
>> Best,
>> Othman
>>
>> --
>> You received this question notification because your team yade-users is
>> an answer contact for Yade.
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~yade-users
>> Post to : <email address hidden>
>> Unsubscribe : https://launchpad.net/~yade-users
>> More help : https://help.launchpad.net/ListHelp
>>
>>
>>

Othman Sh (othman-sh) said : #18

That is what I meant to ask about in #11. I was worried that the empty regions in the box will affect the permeability results. That is why I am getting very high permeability results. Do you have any suggestions on how to obtain the permeability for a cylinder packing?

Thanks,
Othman

You could filter out external elements and use local velocity to extract flux in the core. That's not straightforward but it could probably be done (either with c++/python or with paraview). You could also certainly use alpha shapes to approach proper definition of the external surface. Or you could block external cells so that they do not participate in the flow (see blockHook). None of these is out-of-the-box though.

Do you absolutely need a cylinder? Permeability is shape-independent...

Bruno

Robert Caulk (rcaulk) said : #20

>>You could filter out external elements and use local velocity to extract flux in the core. That's not straightforward but it could probably be done (either with c++/python or with paraview).

I just did this, I am pushing the tool you need to the main branch in case you want to use it. The new tool is called "getCellVelocity((x,y,z))" which will give you the velocity vector in python from the cell located at x,y,z (I've also added a getCellVolume(), which you will need). Now you can use it in python to sweep over the velocity within some bounded core inside the cylinder:

numPoints = 100

xs = np.linspace(-1,1,numPoints)
ys = np.linspace(-0.5,0.5,numPoints)
zs = np.linspace(-0.25,0.25,numPoints)

cellsHit = []
totalVolume = 0
v = np.array([0,0,0])

for x,y,z in itertools.product(xs, ys, zs):
 cellId = flow.getCell(x,y,0)
 if cellId in cellsHit: continue
 cellsHit.append(cellId)
 velocityVector = np.array(flow.getCellVelocity((x,y,z)))
 velMag = np.linalg.norm(velocityVector)
 cellVol = flow.getCellVolume((x,y,z,))
 v = v + cellVol*velocityVector
 totalVolume += cellVol

q = np.linalg.norm(v)/totalVolume
kv = q*flow.viscosity/delP
print('perm by volume', kv)

Keep in mind that these two tools are pushed to trunk as a merge request [1], so it will take a few days before it ends up in yade-daily. If you want them right after the merge request is accepted, you will need to compile from source.

[1]https://gitlab.com/yade-dev/trunk/-/merge_requests/422#c51e9e5dd84092c6d51c98a5615c755e9c18b0c0

Othman Sh (othman-sh) said : #21

Robert,

Thanks for creating this tool. Just to clarify, "sweep over" means that I will need to write a for loop to extract the cell velocity at a bounded core. right?

I will install yade-daily and try this tool.

Bruno,
Regarding your comment in #17 about the empty regions in the box that is affecting my results. I checked the vtk results in paraview [1] and it shows pressure results only in the cylinder. Does that mean that the empty regions are not accounted for in the yade PFV model?

[1] https://drive.google.com/open?id=1z6PRPQwM4BFeVgSNpbsBrvr529CqU_l-

Chareyre (bruno-chareyre-9) said : #22

The boundary cells are simply not displayed, I would say. On recent
versions of yade check the parameters of saveVtk, there is an option to
display boundaries.
Bruno

Le lun. 24 févr. 2020 20:17, Othman Sh <email address hidden>
a écrit :

> Question #688685 on Yade changed:
> https://answers.launchpad.net/yade/+question/688685
>
> Status: Answered => Open
>
> Othman Sh is still having a problem:
> Robert,
>
> Thanks for creating this tool. Just to clarify, "sweep over" means that
> I will need to write a for loop to extract the cell velocity at a
> bounded core. right?
>
> I will install yade-daily and try this tool.
>
> Bruno,
> Regarding your comment in #17 about the empty regions in the box that is
> affecting my results. I checked the vtk results in paraview [1] and it
> shows pressure results only in the cylinder. Does that mean that the empty
> regions are not accounted for in the yade PFV model?
>
>
> [1] https://drive.google.com/open?id=1z6PRPQwM4BFeVgSNpbsBrvr529CqU_l-
>
> --
> You received this question notification because your team yade-users is
> an answer contact for Yade.
>
> _______________________________________________
> Mailing list: https://launchpad.net/~yade-users
> Post to : <email address hidden>
> Unsubscribe : https://launchpad.net/~yade-users
> More help : https://help.launchpad.net/ListHelp
>
>
>

Robert Caulk (rcaulk) said : #23

>>Thanks for creating this tool. Just to clarify, "sweep over" means that I will need to write a for loop to extract the cell velocity at a bounded core. right?

Yes. That is the loop I provided for you.

saveVtk(withBoundaries=True) if you want to see the boundaries.

Othman Sh (othman-sh) said : #24

Great. Thanks Robert and Bruno.

Problem solved!.