Experiment state
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import json
|
||||
import sys
|
||||
|
||||
from functools import reduce
|
||||
from operator import mul
|
||||
from pathlib import Path
|
||||
|
||||
percent_filled = float(sys.argv[1])
|
||||
template_path = Path("templates/varied-fillings.json")
|
||||
|
||||
initial_cell_size = 4200
|
||||
|
||||
with template_path.open(encoding="utf-8") as template_file:
|
||||
config = json.load(template_file)
|
||||
|
||||
dims = [
|
||||
size * count
|
||||
for size, count
|
||||
in zip(config["Geometry"]["blocksize"], config["Geometry"]["blockcount"])
|
||||
]
|
||||
total_volume = reduce(mul, dims, 1)
|
||||
target_volume = total_volume * percent_filled / 100
|
||||
n_cells = int(target_volume // initial_cell_size)
|
||||
# If n_cells is odd, second type gets one more cell
|
||||
n_cells_first_type = n_cells // 2
|
||||
n_cells_second_type = n_cells - n_cells_first_type
|
||||
edge_length = int(target_volume ** (1 / 3))
|
||||
offsets = [
|
||||
(dims[0] - edge_length) // 2,
|
||||
(dims[1] - edge_length) // 2,
|
||||
(dims[2] - edge_length) // 2
|
||||
]
|
||||
|
||||
print(f"Target volume: {target_volume} ({percent_filled}%, edge length: {edge_length}), # of cells: {n_cells}", file=sys.stderr)
|
||||
|
||||
if target_volume > 0:
|
||||
config["Filling"]["cells"].append({
|
||||
"shape": "cube",
|
||||
"pattern": "voronoi",
|
||||
"box": [
|
||||
offsets,
|
||||
[
|
||||
min(offsets[0] + edge_length, dims[0] - 1),
|
||||
min(offsets[1] + edge_length, dims[1] - 1),
|
||||
min(offsets[2] + edge_length, dims[2] - 1)
|
||||
]
|
||||
],
|
||||
"count": n_cells,
|
||||
"celltype": [0, 0, n_cells_first_type, n_cells_second_type]
|
||||
})
|
||||
|
||||
json.dump(config, sys.stdout, indent=2)
|
||||
Reference in New Issue
Block a user