Skip to content

Commit 3df112f

Browse files
committed
Refactor
1 parent da22d68 commit 3df112f

1 file changed

Lines changed: 78 additions & 70 deletions

File tree

src/parcels/_core/utils/sgrid.py

Lines changed: 78 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import re
1616
from collections.abc import Hashable, Iterable
1717
from dataclasses import dataclass
18+
from textwrap import indent
1819
from typing import Any, Literal, Protocol, Self, cast, overload
1920

2021
import xarray as xr
@@ -571,6 +572,69 @@ def _face_node_padding_to_text(obj: DimDimPadding) -> list[str]:
571572
]
572573

573574

575+
TEXT_GRID2D_WITHOUT_Z = """
576+
Staggered grid layout (symbolic 3x3 nodes):
577+
578+
↑ Y
579+
|
580+
n --u-- n --u-- n
581+
| | |
582+
v · v · v
583+
| | |
584+
n --u-- n --u-- n
585+
| | |
586+
v · v · v
587+
| | |
588+
n --u-- n --u-- n --→ X
589+
590+
n = node ({n1}, {n2})
591+
u = x-face ({u})
592+
v = y-face ({v})
593+
· = cell centre"""
594+
595+
TEXT_GRID2D_WITH_Z = """
596+
Staggered grid layout (symbolic 3x3 nodes):
597+
598+
↑ Y ↑ Z
599+
| |
600+
n --u-- n --u-- n w
601+
| | | |
602+
v · v · v ·
603+
| | | |
604+
n --u-- n --u-- n w
605+
| | | |
606+
v · v · v ·
607+
| | | |
608+
n --u-- n --u-- n --→ X w
609+
610+
n = node ({n1}, {n2})
611+
u = x-face ({u})
612+
v = y-face ({v})
613+
w = z-node ({w})
614+
· = cell centre"""
615+
616+
TEXT_GRID3D = """
617+
Staggered grid layout (XY cross-section; Z-faces not shown):
618+
619+
↑ Y
620+
|
621+
n --u-- n --u-- n
622+
| | |
623+
v · v · v
624+
| | |
625+
n --u-- n --u-- n
626+
| | |
627+
v · v · v
628+
| | |
629+
n --u-- n --u-- n --→ X
630+
631+
n = node ({n1}, {n2}, {n3})
632+
u = x-face ({u})
633+
v = y-face ({v})
634+
w = z-face ({w}) [not shown in cross-section]
635+
· = cell centre"""
636+
637+
574638
def _grid2d_to_ascii(grid: Grid2DMetadata) -> str:
575639
fd = grid.face_dimensions
576640
nd = grid.node_dimensions
@@ -584,56 +648,15 @@ def _grid2d_to_ascii(grid: Grid2DMetadata) -> str:
584648
lines.append(f" Z-axis: face={vd.dim1!r} node={vd.dim2!r} padding={vd.padding.value}")
585649
if grid.node_coordinates:
586650
lines.append(f" Coordinates: {grid.node_coordinates[0]}, {grid.node_coordinates[1]}")
587-
if grid.vertical_dimensions:
588-
vd = grid.vertical_dimensions[0]
589651

590-
def _z(base: str, sym: str) -> str:
591-
return base.ljust(28) + sym
592-
593-
lines += [
594-
"",
595-
" Staggered grid layout (symbolic 3x3 nodes):",
596-
"",
597-
_z(" ↑ Y", "↑ Z"),
598-
_z(" |", "|"),
599-
_z(" n --u-- n --u-- n", "w"),
600-
_z(" | | |", "|"),
601-
_z(" v · v · v", "·"),
602-
_z(" | | |", "|"),
603-
_z(" n --u-- n --u-- n", "w"),
604-
_z(" | | |", "|"),
605-
_z(" v · v · v", "·"),
606-
_z(" | | |", "|"),
607-
" n --u-- n --u-- n --→ X w",
608-
"",
609-
f" n = node ({nd[0]}, {nd[1]})",
610-
f" u = x-face ({fd[0].dim1})",
611-
f" v = y-face ({fd[1].dim1})",
612-
f" w = z-node ({vd.dim2})",
613-
" · = cell centre",
614-
]
652+
format_kwargs = dict(n1=nd[0], n2=nd[1], u=fd[0].dim1, v=fd[1].dim1)
653+
654+
if grid.vertical_dimensions:
655+
format_kwargs["w"] = grid.vertical_dimensions[0].dim2
656+
lines += indent(TEXT_GRID2D_WITH_Z, " ").format(**format_kwargs).split("\n")
615657
else:
616-
lines += [
617-
"",
618-
" Staggered grid layout (symbolic 3x3 nodes):",
619-
"",
620-
" ↑ Y",
621-
" |",
622-
" n --u-- n --u-- n",
623-
" | | |",
624-
" v · v · v",
625-
" | | |",
626-
" n --u-- n --u-- n",
627-
" | | |",
628-
" v · v · v",
629-
" | | |",
630-
" n --u-- n --u-- n --→ X",
631-
"",
632-
f" n = node ({nd[0]}, {nd[1]})",
633-
f" u = x-face ({fd[0].dim1})",
634-
f" v = y-face ({fd[1].dim1})",
635-
" · = cell centre",
636-
]
658+
lines += indent(TEXT_GRID2D_WITHOUT_Z, " ").format(**format_kwargs).split("\n")
659+
637660
lines += ["", " Axis padding:", ""]
638661
lines += _indent_lines(_face_node_padding_to_text(fd[0]))
639662
lines += [""]
@@ -655,28 +678,13 @@ def _grid3d_to_ascii(grid: Grid3DMetadata) -> str:
655678
]
656679
if grid.node_coordinates:
657680
lines.append(f" Coordinates: {', '.join(grid.node_coordinates)}")
658-
lines += [
659-
"",
660-
" Staggered grid layout (XY cross-section; Z-faces not shown):",
661-
"",
662-
" ↑ Y",
663-
" |",
664-
" n --u-- n --u-- n",
665-
" | | |",
666-
" v · v · v",
667-
" | | |",
668-
" n --u-- n --u-- n",
669-
" | | |",
670-
" v · v · v",
671-
" | | |",
672-
" n --u-- n --u-- n --→ X",
673-
"",
674-
f" n = node ({nd[0]}, {nd[1]}, {nd[2]})",
675-
f" u = x-face ({vd[0].dim1})",
676-
f" v = y-face ({vd[1].dim1})",
677-
f" w = z-face ({vd[2].dim1}) [not shown in cross-section]",
678-
" · = cell centre",
679-
]
681+
682+
lines += (
683+
indent(TEXT_GRID3D, " ")
684+
.format(n1=nd[0], n2=nd[1], n3=nd[2], u=vd[0].dim1, v=vd[1].dim1, w=vd[2].dim1)
685+
.split("\n")
686+
)
687+
680688
lines += ["", " Axis padding:", ""]
681689
lines += _indent_lines(_face_node_padding_to_text(vd[0]))
682690
lines += [""]

0 commit comments

Comments
 (0)