7 nIndicesInRefLvl = list()
8 for refLvl
in np.arange(1,10):
9 nIndicesInRefLvl.append(gridSize * 2 ** ((refLvl - 1) * 3))
11 for i
in np.arange(len(nIndicesInRefLvl)):
12 if id <= sum(nIndicesInRefLvl[:i+1]):
17 print(
"cell {:3d}".format(id)+
" does not have a parent")
22 id2 = id - sum(nIndicesInRefLvl[:refLvl])
23 ix = (id2 - 1) % (xdim * 2 ** refLvl) + 1
24 iy = (id2 - 1) / (xdim * 2 ** refLvl) % (ydim * 2 ** refLvl) + 1
25 iz = (id2 - 1) / (xdim * 2 ** refLvl * ydim * 2 ** refLvl) + 1
26 parentId = (
int(np.ceil(iz / 2.0) - 1) * xdim * 2 ** (refLvl - 1) * ydim * 2 ** (refLvl - 1) +
27 int(np.ceil(iy / 2.0) - 1) * xdim * 2 ** (refLvl - 1) +
28 int(np.ceil(ix / 2.0)) +
29 sum(nIndicesInRefLvl[:refLvl-1]))
31 print(
"id = {:3d}".format(id)+
", id2 = {:3d}".format(id2)+
32 ", col = {:2d}".format(ix)+
", row = {:2d}".format(iy)+
33 ", plane = {:2d}".format(iz)+
", parentId = {:2d}".format(parentId)+
34 ", refLvl = {:1d}".format(refLvl))
36 print(
"cell {:3d}".format(id)+
" is the child of cell {:2d}".format(parentId))
39 return parentId, refLvl
41def getChildren(children, parentId, dimension = 0, up = True, left = True):
103 if parentId
in children.keys():
104 myChildren.extend(children[parentId][i1::N])
105 myChildren.extend(children[parentId][i2::N])
108 myChildren.extend(parentId)
113def buildPencils(pencils,initialPencil,idsIn,dimension = 0,path = list()):
128 ids = copy.copy(idsIn)
131 idsOut = copy.copy(initialPencil)
134 for i,id
in enumerate(ids):
138 if isRefined[id] > 0:
142 if len(path) > refLvls[id]:
146 path[refLvls[id]][0],path[refLvls[id]][1])
149 ids[i1:i1] = myChildren
154 for up
in [
True,
False]:
155 for left
in [
True,
False]:
158 myPath = copy.copy(path)
159 myPath.append((up,left))
162 myChildren =
getChildren(children,id,dimension,up,left)
166 if not up
and not left:
170 ids[i1:i1] = myChildren
180 myChildren.extend(myIds)
182 buildPencils(pencils,idsOut,myChildren,dimension,myPath)
191 pencils.append(idsOut)
199parser = argparse.ArgumentParser(description=
'Create pencils on a refined grid.')
200parser.add_argument(
'--dimension', metavar =
'N', type=int, nargs=1,
201 default=[0], help=
'Dimension (x = 0, y = 1, z = 2)')
202parser.add_argument(
'--filename', metavar =
'fn', type=str, nargs=1,
203 default=[
'test.vtk'], help=
'Input vtk file name')
204parser.add_argument(
'--debug', metavar =
'd', type=int, nargs=1,
205 default=[0], help=
'Debug printouts (no = 0, yes = 1)')
206args = parser.parse_args()
208if args.dimension[0] > 0
and args.dimension[0] <= 2:
209 dimension = args.dimension[0]
213debug = bool(args.debug[0])
216filename = args.filename[0]
218lines = fh.readlines()
226for i,line
in enumerate(lines):
227 if 'DATASET UNSTRUCTURED_GRID' in line:
228 n =
int(lines[i+1].split()[1])
229 for j
in np.arange(n):
230 xyz = lines[i+j+2].split()
231 xdim =
max(xdim,float(xyz[0]))
232 ydim =
max(ydim,float(xyz[1]))
233 zdim =
max(zdim,float(xyz[2]))
234 if 'SCALARS id int' in line:
235 n =
int(lines[i-1].split()[1])
236 for j
in np.arange(n):
237 ids.append(
int(lines[i+j+2]))
243print(
'grid dimensions are {:2d} x {:2d} x {:2d}'.format(xdim,ydim,zdim))
244gridSize = xdim*ydim*zdim
260 parents[id] = parentId
265 if not parentId
in ids
and parentId > 0:
270 if not parentId
in hasChildren:
271 children[parentId] = list()
272 hasChildren.append(parentId)
275 children[parentId].append(id)
279for key
in children.keys():
288 parentId = parents[id]
289 while parentId
is not 0:
290 isRefined[parentId] = refLvls[id] - refLvls[parentId]
291 parentId = parents[parentId]
297print(
'Building pencils along dimension {:1d}'.format(dimension))
306 dims = (zdim, ydim, xdim)
312 dims = (zdim, xdim, ydim)
314 x_index = (id-1) % xdim
315 y_index = ((id-1) / xdim) % ydim
316 idMapped = id - (x_index + y_index * xdim) + y_index + x_index * ydim
320 dims = (ydim, xdim, zdim)
322 x_index = (id-1) % xdim
323 y_index = ((id-1) / xdim) % ydim
324 z_index = ((id-1) / (xdim * ydim))
325 idMapped = 1 + z_index + y_index * zdim + x_index * ydim * zdim
328 mapping[idMapped] = id
331unrefinedPencils = list()
332for i
in np.arange(dims[0]):
333 for j
in np.arange(dims[1]):
334 ibeg = 1 + i * dims[2] * dims[1] + j * dims[2]
335 iend = 1 + i * dims[2] * dims[1] + (j + 1) * dims[2]
338 for k
in np.arange(ibeg,iend):
339 myIds.append(mapping[k])
340 myIsRefined.append(isRefined[mapping[k]])
341 unrefinedPencils.append({
'ids' : myIds,
342 'refLvl' : myIsRefined})
349for unrefinedPencil
in unrefinedPencils:
351 pencils =
buildPencils(pencils,[],unrefinedPencil[
'ids'],dimension)
355print(
'I have created the following pencils:')
357for pencil
in pencils:
361print(
'Execution time was {:.4f} seconds'.format(t2-t1))
getChildren(children, parentId, dimension=0, up=True, left=True)
findParent(id, gridSize, debug)
buildPencils(pencils, initialPencil, idsIn, dimension=0, path=list())
static ARCH_HOSTDEV VecSimple< T > max(VecSimple< T > const &l, VecSimple< T > const &r)