tadjust grid with knowledge if boundaries are periodic - Granular.jl - Julia package for granular dynamics simulation
(HTM) git clone git://src.adamsgaard.dk/Granular.jl
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 03b7b12c6918a843374e24d2eb745744f2d84826
(DIR) parent 15c86420fd81e35bbdfd44c7f7a6c9b3767137ee
(HTM) Author: Anders Damsgaard <andersd@riseup.net>
Date: Thu, 16 Nov 2017 09:46:25 -0800
adjust grid with knowledge if boundaries are periodic
Diffstat:
M src/grid.jl | 46 ++++++++++++++++++++++++-------
1 file changed, 36 insertions(+), 10 deletions(-)
---
(DIR) diff --git a/src/grid.jl b/src/grid.jl
t@@ -890,26 +890,52 @@ function fitGridToGrains!(simulation::Simulation, grid::Any;
error("Grains need to be initialized before calling fitGridToGrains")
end
+ r = 0.
for grain in simulation.grains
+ r = grain.contact_radius
- if grain.lin_pos[1] - grain.contact_radius < min_x
- min_x = grain.lin_pos[1] - grain.contact_radius
+ if grid.bc_west == grid_bc_flags["periodic"]
+ if grain.lin_pos[1] < min_x
+ min_x = grain.lin_pos[1] - r
+ end
+ else
+ if grain.lin_pos[1] - r < min_x
+ min_x = grain.lin_pos[1] - r
+ end
end
- if grain.lin_pos[1] + grain.contact_radius > max_x
- max_x = grain.lin_pos[1] + grain.contact_radius
+ if grid.bc_east == grid_bc_flags["periodic"]
+ if grain.lin_pos[1] > max_x
+ max_x = grain.lin_pos[1] + grain.contact_radius
+ end
+ else
+ if grain.lin_pos[1] + r > max_x
+ max_x = grain.lin_pos[1] + grain.contact_radius
+ end
end
- if grain.lin_pos[2] - grain.contact_radius < min_y
- min_y = grain.lin_pos[2] - grain.contact_radius
+ if grid.bc_south == grid_bc_flags["periodic"]
+ if grain.lin_pos[2] < min_y
+ min_y = grain.lin_pos[2] - grain.contact_radius
+ end
+ else
+ if grain.lin_pos[2] - r < min_y
+ min_y = grain.lin_pos[2] - grain.contact_radius
+ end
end
- if grain.lin_pos[2] + grain.contact_radius > max_y
- max_y = grain.lin_pos[2] + grain.contact_radius
+ if grid.bc_north == grid_bc_flags["periodic"]
+ if grain.lin_pos[2] > max_y
+ max_y = grain.lin_pos[2] + grain.contact_radius
+ end
+ else
+ if grain.lin_pos[2] + r > max_y
+ max_y = grain.lin_pos[2] + grain.contact_radius
+ end
end
- if grain.contact_radius > max_radius
- max_radius = grain.contact_radius
+ if r > max_radius
+ max_radius = r
end
end
min_x -= padding