commit fe8fa125a077cea7d9bcc7395728dc6297bd94c6
parent 97b96ca3dc911aa717b00e6d2bc4b742d7dc0a68
Author: Anders Damsgaard <andersd@riseup.net>
Date: Thu, 15 Feb 2018 16:05:22 -0500
Search neighboring grid cells for grains during porosity estimation
Diffstat:
M | src/grid.jl | | | 52 | +++++++++++++++++++++++++++++++++++++++++++++------- |
1 file changed, 45 insertions(+), 7 deletions(-)
diff --git a/src/grid.jl b/src/grid.jl
@@ -1048,6 +1048,9 @@ function findPorosity!(sim::Simulation, grid::Any; verbose::Bool=true)
ne = Vector{Float64}(2)
nw = Vector{Float64}(2)
cell_area = 0.0
+ p = zeros(2)
+ r = 0.0
+ A = 0.0
for ix in 1:size(grid.xh, 1)
for iy in 1:size(grid.xh, 2)
@@ -1060,22 +1063,57 @@ function findPorosity!(sim::Simulation, grid::Any; verbose::Bool=true)
# Subtract grain area from cell area
particle_area = 0.0
- #=for ix_ = -1:1
+ for ix_ = -1:1
for iy_ = -1:1
+ # Make sure cell check is within grid
if ix + ix_ < 1 || ix + ix_ > size(grid.xh, 1) ||
iy + iy_ < 1 || iy + iy_ > size(grid.xh, 2)
continue
end
- for i in grid.grain_list[ix + ix_, iy + iy_]=#
- for i in grid.grain_list[ix, iy]
- particle_area +=
- grainHorizontalSurfaceArea(sim.grains[i])
+ # Traverse grain list
+ for i in grid.grain_list[ix + ix_, iy + iy_]
+
+ # Grain geometry
+ p = sim.grains[i].lin_pos
+ r = sim.grains[i].areal_radius
+ A = grainHorizontalSurfaceArea(sim.grains[i])
+
+ if sw[1] <= p[1] - r &&
+ sw[2] <= p[2] - r &&
+ ne[1] >= p[1] + r &&
+ ne[2] >= p[2] + r
+ # If particle is entirely contained within cell,
+ # assuming a regular and orthogonal grid
+ # TODO: Adjust coordinates with conformal mapping
+ # for irregular grids.
+ particle_area += A
+
+ elseif sw[1] >= p[1] + r ||
+ sw[2] >= p[2] + r ||
+ ne[1] <= p[1] - r ||
+ ne[2] <= p[2] - r
+ # particle does not intersect with cell [ix,iy]
+ continue
+
+
+ elseif
+ # (likely) intersection between grid and grain
+
+ # 1. There is an intersection if one of the cell
+ # corners lies within the circle. This occurs if the
+ # distance between the cell center and corner is
+ # less than the radii.
+
+ # 2. There is an intersection if one of the cell
+ # edges comes to a closer distance to the cell
+ # center than the radius.
+
+ end
end
- #=end
end
- end=#
+ end
grid.porosity[ix, iy] = (cell_area - particle_area)/cell_area
end