yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #29078
Re: [Question #705744]: Divide numerical periodic microstructure box into smaller grided cubes or boxes
Question #705744 on Yade changed:
https://answers.launchpad.net/yade/+question/705744
Status: Open => Answered
Jan Stránský proposed the following answer:
> I need please help regarding this matter by guides or links or
documentations.
I don't think you will find this specific problem as is in the documentation or there is an existing script.
You can however build your script from "building blocks" found in the documentation.
As a start, below is a 2D example.
Please let us know if this is in principle what you are looking for.
Cheers
Jan
###
import random
tileSize = (2, 3)
tiling = (7, 6)
# dummy sample
########################################
colors = {
0.5: (0,1,1),
0.2: (1,0,0),
}
tileParticles = (
((0.0, 0.0), 0.5),
((1.0, 0.4), 0.5),
((0.5, 1.3), 0.5),
((1.5, 1.6), 0.5),
((0.9, 2.4), 0.5),
((0.3, 0.7), 0.2),
((1.7, 0.6), 0.2),
((1.8, 1.0), 0.2),
((1.6, 2.4), 0.2),
((0.1, 2.4), 0.2),
((0.0, 2.0), 0.2),
)
for ix in range(tiling[0]):
x0 = ix * tileSize[0]
for iy in range(tiling[1]):
y0 = iy * tileSize[1]
for center, radius in tileParticles:
x = x0 + center[0]
y = y0 + center[1]
O.bodies.append(sphere((x,y,0), radius, color=colors[radius]))
########################################
def isInTile(tile,xy):
x, y = xy
sizeX, sizeY = tileSize
x0 = tile[0] * sizeX
y0 = tile[1] * sizeY
x1 = x0 + sizeX
y1 = y0 + sizeY
return x >= x0 and x < x1 and y >= y0 and y < y1
def eliminate():
nTiles = tiling[0] * tiling[1]
tiles = set()
while len(tiles) < 0.5 * nTiles:
x = random.randint(0,tiling[0]-1)
y = random.randint(0,tiling[1]-1)
tiles.add((x,y))
for b in O.bodies:
if b.shape.radius > 0.4: # do nothing for "large" particles
continue
x,y,z = b.state.pos
if any(isInTile(tile,(x,y)) for tile in tiles): # small particles in selected tiles
O.bodies.erase(b.id)
# see with or without eliminating
#eliminate()
#yade.qt.View()
###
--
You received this question notification because your team yade-users is
an answer contact for Yade.