@@ -385,6 +385,34 @@ def split_f_z(mesh):
385
385
if not all (item is None for item in value )
386
386
}
387
387
388
+ # Right now, the zsets contain indices into the corresponding cell block.
389
+ # FLAC3D expects _global_ indices. Update.
390
+ cell_block_sizes = [len (cb ) for cb in zcells ]
391
+ for key , data in zsets .items ():
392
+ gid = 0
393
+ for n , block in zip (cell_block_sizes , data ):
394
+ block += gid
395
+ gid += n
396
+
397
+ # TODO not sure if fcells and zcells share a common global index
398
+ cell_block_sizes = [len (cb ) for cb in fcells ]
399
+ for key , data in fsets .items ():
400
+ gid = 0
401
+ for n , block in zip (cell_block_sizes , data ):
402
+ block += gid
403
+ gid += n
404
+
405
+ for label , values in zsets .items ():
406
+ zsets [label ] = np .concatenate (values )
407
+ for label , values in fsets .items ():
408
+ fsets [label ] = np .concatenate (values )
409
+
410
+ # flac3d indices start at 1
411
+ for label , values in zsets .items ():
412
+ zsets [label ] += 1
413
+ for label , values in fsets .items ():
414
+ fsets [label ] += 1
415
+
388
416
return zcells , fcells , zsets , fsets
389
417
390
418
@@ -397,28 +425,6 @@ def write(filename, mesh: Mesh, float_fmt: str = ".16e", binary: bool = False):
397
425
# split into face/zone data
398
426
zcells , fcells , zsets , fsets = split_f_z (mesh )
399
427
400
- # elif mesh.cell_data:
401
- # print(mesh)
402
- # # TODO convert cell_data to cell_sets
403
- # exit(1)
404
- # key, other = _pick_first_int_data(mesh.cell_data)
405
- # if key:
406
- # materials = np.concatenate(mesh.cell_data[key])
407
- # if other:
408
- # warn(
409
- # "FLAC3D can only write one cell data array. "
410
- # f'Picking {key}, skipping {", ".join(other)}.'
411
- # )
412
-
413
- # Translate the material array from meshio.cell_set data to a
414
- # dictionary with labels as keys.
415
- if zsets is not None :
416
- for label , values in zsets .items ():
417
- zsets [label ] = np .concatenate (values )
418
- if fsets is not None :
419
- for label , values in fsets .items ():
420
- fsets [label ] = np .concatenate (values )
421
-
422
428
mode = "wb" if binary else "w"
423
429
with open_file (filename , mode ) as f :
424
430
if binary :
0 commit comments