plot3d 1.7.4__tar.gz → 1.7.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {plot3d-1.7.4 → plot3d-1.7.6}/PKG-INFO +3 -2
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/glennht/export_functions.py +13 -13
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/graph.py +25 -3
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/gridpro/import_functions.py +2 -0
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/periodicity.py +1 -1
- {plot3d-1.7.4 → plot3d-1.7.6}/pyproject.toml +3 -2
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/__init__.py +0 -0
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/block.py +0 -0
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/block_merging_mixed_facepairs.py +0 -0
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/blockfunctions.py +0 -0
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/connectivity.py +0 -0
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/differencing.py +0 -0
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/face.py +0 -0
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/facefunctions.py +0 -0
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/glennht/__init__.py +0 -0
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/glennht/class_definitions.py +0 -0
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/glennht/import_functions.py +0 -0
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/gridpro/__init__.py +0 -0
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/listfunctions.py +0 -0
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/point_match.py +0 -0
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/read.py +0 -0
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/split_block.py +0 -0
- {plot3d-1.7.4 → plot3d-1.7.6}/plot3d/write.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: plot3d
|
|
3
|
-
Version: 1.7.
|
|
3
|
+
Version: 1.7.6
|
|
4
4
|
Summary: Plot3D python utilities for reading and writing and also finding connectivity between blocks
|
|
5
5
|
Author: Paht Juangphanich
|
|
6
6
|
Author-email: paht.juangphanich@nasa.gov
|
|
@@ -8,9 +8,10 @@ Requires-Python: >=3.10.12,<4.0.0
|
|
|
8
8
|
Classifier: Programming Language :: Python :: 3
|
|
9
9
|
Classifier: Programming Language :: Python :: 3.11
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.12
|
|
11
|
+
Requires-Dist: matplotlib
|
|
11
12
|
Requires-Dist: networkx
|
|
12
13
|
Requires-Dist: numpy
|
|
13
14
|
Requires-Dist: pandas
|
|
14
|
-
Requires-Dist: pymetis
|
|
15
|
+
Requires-Dist: pymetis ; platform_system != "Windows"
|
|
15
16
|
Requires-Dist: scipy
|
|
16
17
|
Requires-Dist: tqdm
|
|
@@ -161,8 +161,8 @@ def _write_bsurf_spec(w, bc):
|
|
|
161
161
|
# GIF + Volume Zone writers (dict inputs supported)
|
|
162
162
|
# ============================================================
|
|
163
163
|
def _write_gif_from_dict(w, gdict: Dict[str, Any]) -> None:
|
|
164
|
-
sid1 = int(gdict.get("
|
|
165
|
-
sid2 = int(gdict.get("
|
|
164
|
+
sid1 = int(gdict.get("a", 0))
|
|
165
|
+
sid2 = int(gdict.get("b", 0))
|
|
166
166
|
name1 = f"surface {sid1}"
|
|
167
167
|
name2 = f"surface {sid2}"
|
|
168
168
|
bctype = 4 # GIF
|
|
@@ -312,7 +312,7 @@ def export_to_boundary_condition(
|
|
|
312
312
|
file_path_to_write: str,
|
|
313
313
|
job_settings: Job,
|
|
314
314
|
bc_group: BCGroup,
|
|
315
|
-
|
|
315
|
+
gif_pairs: List[GIF] | List[Dict[str,Any]],
|
|
316
316
|
volume_zones: List[VolumeZone] | List[Dict[str,Any]],
|
|
317
317
|
):
|
|
318
318
|
file_path_to_write = ensure_extension(file_path_to_write, '.bcs')
|
|
@@ -326,10 +326,10 @@ def export_to_boundary_condition(
|
|
|
326
326
|
"slips": [_asdict_soft(x) for x in bc_group.SymmetricSlips],
|
|
327
327
|
"walls": [_asdict_soft(x) for x in bc_group.Walls],
|
|
328
328
|
"volume_zones": [x for x in volume_zones],
|
|
329
|
-
"
|
|
329
|
+
"gif_pairs": [_asdict_soft(x) for x in gif_pairs],
|
|
330
330
|
"job_settings": _asdict_soft(job_settings),
|
|
331
331
|
}
|
|
332
|
-
json_path.write_text(json.dumps(json_payload, indent=
|
|
332
|
+
json_path.write_text(json.dumps(json_payload, indent=4))
|
|
333
333
|
|
|
334
334
|
# ---- Robust reference defaults (use inlet values if missing)
|
|
335
335
|
ref = job_settings.ReferenceCondFull
|
|
@@ -383,21 +383,21 @@ def export_to_boundary_condition(
|
|
|
383
383
|
_write_bsurf_spec(w, wall)
|
|
384
384
|
|
|
385
385
|
# GIFS (dicts or dataclasses)
|
|
386
|
-
for
|
|
387
|
-
if isinstance(
|
|
388
|
-
_write_gif_from_dict(w,
|
|
386
|
+
for pair in gif_pairs:
|
|
387
|
+
if isinstance(pair, dict):
|
|
388
|
+
_write_gif_from_dict(w, pair)
|
|
389
389
|
else:
|
|
390
|
-
name1 = getattr(
|
|
391
|
-
name2 = getattr(
|
|
390
|
+
name1 = getattr(pair, "Name1", f"surface {pair.GIFSurface1}")
|
|
391
|
+
name2 = getattr(pair, "Name2", f"surface {pair.GIFSurface2}")
|
|
392
392
|
w.write(
|
|
393
|
-
f" &BSurf_Spec\nBSurfID={
|
|
393
|
+
f" &BSurf_Spec\nBSurfID={pair.GIFSurface1}, BCType={int(pair.BCType)}, "
|
|
394
394
|
f"BSurfName='{name1}'\n &END\n\n"
|
|
395
395
|
)
|
|
396
396
|
w.write(
|
|
397
|
-
f" &BSurf_Spec\nBSurfID={
|
|
397
|
+
f" &BSurf_Spec\nBSurfID={pair.GIFSurface2}, BCType={int(pair.BCType)}, "
|
|
398
398
|
f"BSurfName='{name2}'\n &END\n\n"
|
|
399
399
|
)
|
|
400
|
-
w.write(f" &GIF_Spec\nSurfID_1={
|
|
400
|
+
w.write(f" &GIF_Spec\nSurfID_1={pair.GIFSurface1}, SurfID2={pair.GIFSurface2}\n &END\n\n")
|
|
401
401
|
|
|
402
402
|
# VZConditions (dict templates)
|
|
403
403
|
volume_zone_unique = {d["contiguous_index"]: d for d in volume_zones}.values()
|
|
@@ -4,8 +4,18 @@ from __future__ import annotations
|
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
from typing import Dict, List, Sequence, Tuple, Optional
|
|
6
6
|
import inspect
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
import sys
|
|
8
|
+
|
|
9
|
+
if sys.platform != "win32":
|
|
10
|
+
try:
|
|
11
|
+
import pymetis # type: ignore
|
|
12
|
+
HAS_PYMETIS = True
|
|
13
|
+
except Exception: # pragma: no cover - optional dependency
|
|
14
|
+
pymetis = None # type: ignore
|
|
15
|
+
HAS_PYMETIS = False
|
|
16
|
+
else:
|
|
17
|
+
pymetis = None # type: ignore
|
|
18
|
+
HAS_PYMETIS = False
|
|
9
19
|
from .block import Block # <-- use your existing Block
|
|
10
20
|
|
|
11
21
|
|
|
@@ -139,7 +149,13 @@ def _metis_part_graph_compat(
|
|
|
139
149
|
Returns:
|
|
140
150
|
(edgecut, parts)
|
|
141
151
|
"""
|
|
142
|
-
|
|
152
|
+
if not HAS_PYMETIS:
|
|
153
|
+
raise RuntimeError(
|
|
154
|
+
"pymetis is not available. On Windows it is skipped during install; "
|
|
155
|
+
"use Linux/macOS to enable METIS-based partitioning."
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
sig_params = set(inspect.signature(pymetis.part_graph).parameters.keys()) # type: ignore[attr-defined]
|
|
143
159
|
|
|
144
160
|
# Prefer keyword args when supported
|
|
145
161
|
if {"xadj", "adjncy"}.issubset(sig_params):
|
|
@@ -194,6 +210,12 @@ def partition_from_face_matches(
|
|
|
194
210
|
edge_w : Dict[int, Dict[int, int]]
|
|
195
211
|
Edge weights.
|
|
196
212
|
"""
|
|
213
|
+
if not HAS_PYMETIS:
|
|
214
|
+
raise RuntimeError(
|
|
215
|
+
"METIS partitioning is disabled because pymetis is unavailable. "
|
|
216
|
+
"Install pymetis (Linux/macOS) or run on a platform where it is supported."
|
|
217
|
+
)
|
|
218
|
+
|
|
197
219
|
n_blocks = len(blocks)
|
|
198
220
|
adj_list, edge_w = build_weighted_graph_from_face_matches(
|
|
199
221
|
face_matches, n_blocks,
|
|
@@ -234,6 +234,8 @@ def read_gridpro_connectivity(
|
|
|
234
234
|
# GIF faces grouped by sf1 for pty in 12..21 or == 1000
|
|
235
235
|
gif_faces: List[Dict[str, int]] = []
|
|
236
236
|
for p in patches:
|
|
237
|
+
#? This is how we identify gifs inside of a grid pro connectivity file.
|
|
238
|
+
#? If the PTY is between 12 and 21 these are gifs
|
|
237
239
|
if (12 <= p["pty"] <= 21) or (p["pty"] == 1000): # type: ignore
|
|
238
240
|
face_temp = face_dict(p["sb1"], p["L1i"], p["L1j"], p["L1k"], p["H1i"], p["H1j"], p["H1k"]) # type: ignore
|
|
239
241
|
face_temp["id"] = p["pty"] # type: ignore
|
|
@@ -365,7 +365,7 @@ def rotated_periodicity(blocks:List[Block], matched_faces:List[Dict[str,int]], o
|
|
|
365
365
|
"""
|
|
366
366
|
gcd_array = list()
|
|
367
367
|
# Find the gcd of all the blocks
|
|
368
|
-
if ReduceMesh
|
|
368
|
+
if ReduceMesh:
|
|
369
369
|
for block_indx in range(len(blocks)):
|
|
370
370
|
block = blocks[block_indx]
|
|
371
371
|
gcd_array.append(math.gcd(block.IMAX-1, math.gcd(block.JMAX-1, block.KMAX-1)))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "plot3d"
|
|
3
|
-
version = "1.7.
|
|
3
|
+
version = "1.7.6"
|
|
4
4
|
description = "Plot3D python utilities for reading and writing and also finding connectivity between blocks"
|
|
5
5
|
authors = ["Paht Juangphanich <paht.juangphanich@nasa.gov>"]
|
|
6
6
|
|
|
@@ -11,7 +11,8 @@ scipy = "*"
|
|
|
11
11
|
pandas = "*"
|
|
12
12
|
tqdm = "*"
|
|
13
13
|
networkx = "*"
|
|
14
|
-
pymetis = "*"
|
|
14
|
+
pymetis = { version = "*", markers = "platform_system != 'Windows'" }
|
|
15
|
+
matplotlib = "*"
|
|
15
16
|
|
|
16
17
|
[tool.poetry.group.deve.dependencies]
|
|
17
18
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|