Daniel, Thank you for the helpful response. To me, your code seems to work without any problem.
Thanks again, Ryan On Wed, Jan 5, 2011 at 11:05 AM, Daniel Wheeler <[email protected]> wrote: > > Hi Ryan, > > Good to see that you are finding FiPy useful. To quantify the pore > surface area I think you have a number of choices. Firstly, things are > much easier if the cut surface is a plane, aligned along one of the > axes and the mesh is a uniform Grid3D, which it appears to be. Let's > assume this for now. The following should work for you > > from fipy import * > > nx = 50 > ny = 50 > nz = 50 > dx = 1.0 > dy = 1.0 > dz = 1.0 > planeZ = 0.78 * nz * dz > > mesh = Grid3D(dx=dx,dy=dy,dz=dz,nx=nx,ny=ny,nz=nz) > x, y, z = mesh.getCellCenters() > var = CellVariable(mesh=mesh, value= (x * y * z) / (nx * ny * nz > * dx * dy * dz)) > > planeMesh = Grid2D(dx=mesh.dx, dy=mesh.dy, nx=mesh.nx, ny=mesh.ny) > planeX, planeY = planeMesh.getCellCenters() > planeZ = planeZ * numerix.ones(planeMesh.getNumberOfCells()) > planeVar = CellVariable(mesh=planeMesh, value=var((planeX, > planeY, planeZ))) > print planeVar.getCellVolumeAverage() > > The crucial code is "var((planeX, planeY, planeZ))". This allows an > extraction of > the values in var at the points defined by (planeX, planeY, planeZ)). By > default > this a first order interpolation. > > Hope this helps. > > On Tue, Jan 4, 2011 at 8:01 PM, Ryan Paul <[email protected]> wrote: >> >> Dear FiPy developers and users: >> >> I am using FiPy to simulate diffusion and reaction in a porous >> material. The reaction causes a growth in porosity, and I would like >> to quantify the pore surface area during the simulation. I am able to >> get the total volume fraction of porosity using >> "getCellVolumeAverage()", but is there a piece of code to output the >> pore surface area in FiPy?. I have included a bit of code to show how >> I am generating the pores (phase =1) versus the solid (phase = 0). >> >> Truth be told, my real interest is to somehow differentiate between >> open and closed pores (surface area and volume fraction) in FiPy. >> >> I appreciate any help, if possible. I am very grateful for the FiPy >> software. Without it, I would have a difficult time performing >> simulations. >> >> -Ryan >> >> >> In the code below, I am first randomly placing pores, then randomly >> placing "particles" over top. The resulting porous structure is the >> input for the simulation (the pore and particle sizes and numbers are >> varied). For brevity, I have not included the simulation equations. >> -------------------------------------------------------------------------------------------------- >> from fipy import * >> nx = 50 >> ny = 50 >> nz = 50 >> dx = 1.0 >> dy = 1.0 >> dz = 1.0 >> mesh = Grid3D(dx=dx,dy=dy,dz=dz,nx=nx,ny=ny,nz=nz) >> phase = CellVariable(name="Phase", mesh=mesh,hasOld=1) >> pores = 20 >> particles = 20 >> x,y,z = mesh.getCellCenters() >> for i in range(pores): >> cx = random.random()*nx*dx >> cy = random.random()*ny*dy >> cz = random.random()*nz*dz >> r = 10 >> phase[((x - cx)**2 + (y - cy)**2 + (z - cz)**2) < r**2]= 1 >> for i in range(particles): >> cx = random.random()*nx*dx >> cy = random.random()*nx*dx >> cz = random.random()*nx*dx >> r = 10 >> phase[((x - cx)**2 + (y - cy)**2 + (z - cz)**2) < r**2]= 0 >> print "pore volume fraction=",phase.getCellVolumeAverage() >> ----------------------------------------------------------------------------------------------------- >> >> > > > > -- > Daniel Wheeler > > >
