Skip to content

Commit 88793c2

Browse files
authored
Merge pull request #132 from boutproject/griddata-features
boutdata.griddata features: Double null grids, gridcontourf plotting
2 parents 5170784 + 4bad470 commit 88793c2

File tree

1 file changed

+161
-23
lines changed

1 file changed

+161
-23
lines changed

src/boutdata/griddata.py

Lines changed: 161 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,13 @@ def regions(grid, mxg=2):
3636
j11 = grid["jyseps1_1"]
3737
j12 = grid["jyseps1_2"]
3838
j21 = grid["jyseps2_1"]
39+
40+
if j12 > j21:
41+
j12, j21 = j21, j12
42+
3943
j22 = grid["jyseps2_2"]
4044
ix1 = grid["ixseps1"]
45+
ix2 = grid["ixseps2"]
4146

4247
nx = grid["nx"]
4348
ny = grid["ny"]
@@ -46,7 +51,9 @@ def regions(grid, mxg=2):
4651
has_lower_inner_leg = j11 >= 0
4752
has_lower_outer_leg = j22 + 1 < ny
4853

49-
assert not double_null
54+
if double_null:
55+
assert ix1 == ix2
56+
# Connected double null
5057

5158
regions = {}
5259
if has_lower_inner_leg:
@@ -65,32 +72,131 @@ def regions(grid, mxg=2):
6572
"inner": "lower inner pf",
6673
"outer": None,
6774
"lower": None,
68-
"upper": "sol",
75+
"upper": "inner sol" if double_null else "sol",
6976
"xfirst": ix1,
7077
"xlast": nx - 1 - mxg,
7178
"yfirst": 0,
7279
"ylast": j11,
7380
}
74-
regions["sol"] = {
75-
"inner": "core",
76-
"outer": None,
77-
"lower": "lower inner sol" if has_lower_inner_leg else None,
78-
"upper": "lower outer sol" if has_lower_outer_leg else None,
79-
"xfirst": ix1,
80-
"xlast": nx - 1 - mxg,
81-
"yfirst": j11 + 1,
82-
"ylast": j22,
83-
}
84-
regions["core"] = {
85-
"inner": None,
86-
"outer": "sol",
87-
"lower": "core",
88-
"upper": "core",
89-
"xfirst": mxg,
90-
"xlast": ix1 - 1,
91-
"yfirst": j11 + 1,
92-
"ylast": j22,
93-
}
81+
if double_null:
82+
# Connected double null
83+
# "inner sol", "inner core", "outer sol", "outer core"
84+
# "upper inner pf", "upper inner sol", "upper outer pf", "upper outer sol"
85+
86+
ny_inner = grid["ny_inner"]
87+
88+
has_upper_inner_leg = ny_inner - 1 > j12
89+
has_upper_outer_leg = j21 > ny_inner - 1
90+
91+
regions["inner sol"] = {
92+
"inner": "inner core",
93+
"outer": None,
94+
"lower": "lower inner sol" if has_lower_inner_leg else None,
95+
"upper": "upper inner sol" if has_upper_inner_leg else None,
96+
"xfirst": ix1,
97+
"xlast": nx - 1 - mxg,
98+
"yfirst": j11 + 1,
99+
"ylast": j12,
100+
}
101+
regions["inner core"] = {
102+
"inner": None,
103+
"outer": "inner sol",
104+
"lower": "outer core",
105+
"upper": "outer core",
106+
"xfirst": mxg,
107+
"xlast": ix1 - 1,
108+
"yfirst": j11 + 1,
109+
"ylast": j12,
110+
}
111+
112+
if has_upper_inner_leg:
113+
# Upper inner leg
114+
regions["upper inner pf"] = {
115+
"inner": None,
116+
"outer": "upper inner sol",
117+
"lower": "upper outer pf" if has_upper_outer_leg else None,
118+
"upper": None,
119+
"xfirst": mxg,
120+
"xlast": ix2 - 1,
121+
"yfirst": j12 + 1,
122+
"ylast": ny_inner - 1,
123+
}
124+
regions["upper inner sol"] = {
125+
"inner": "upper inner pf",
126+
"outer": None,
127+
"lower": "inner sol",
128+
"upper": None,
129+
"xfirst": ix2,
130+
"xlast": nx - 1 - mxg,
131+
"yfirst": j12 + 1,
132+
"ylast": ny_inner - 1,
133+
}
134+
135+
if has_upper_outer_leg:
136+
# Upper outer leg
137+
regions["upper outer pf"] = {
138+
"inner": None,
139+
"outer": "upper inner sol",
140+
"lower": None,
141+
"upper": "upper inner pf" if has_upper_inner_leg else None,
142+
"xfirst": mxg,
143+
"xlast": ix2 - 1,
144+
"yfirst": ny_inner,
145+
"ylast": j21,
146+
}
147+
regions["upper outer sol"] = {
148+
"inner": "upper inner pf",
149+
"outer": None,
150+
"lower": None,
151+
"upper": "outer sol",
152+
"xfirst": ix2,
153+
"xlast": nx - 1 - mxg,
154+
"yfirst": ny_inner,
155+
"ylast": j21,
156+
}
157+
158+
regions["outer sol"] = {
159+
"inner": "outer core",
160+
"outer": None,
161+
"lower": "upper outer sol" if has_upper_outer_leg else None,
162+
"upper": "lower outer sol" if has_lower_outer_leg else None,
163+
"xfirst": ix1,
164+
"xlast": nx - 1 - mxg,
165+
"yfirst": j21 + 1,
166+
"ylast": j22,
167+
}
168+
regions["outer core"] = {
169+
"inner": None,
170+
"outer": "outer sol",
171+
"lower": "inner core",
172+
"upper": "inner core",
173+
"xfirst": mxg,
174+
"xlast": ix1 - 1,
175+
"yfirst": j21 + 1,
176+
"ylast": j22,
177+
}
178+
else:
179+
# Single null
180+
regions["sol"] = {
181+
"inner": "core",
182+
"outer": None,
183+
"lower": "lower inner sol" if has_lower_inner_leg else None,
184+
"upper": "lower outer sol" if has_lower_outer_leg else None,
185+
"xfirst": ix1,
186+
"xlast": nx - 1 - mxg,
187+
"yfirst": j11 + 1,
188+
"ylast": j22,
189+
}
190+
regions["core"] = {
191+
"inner": None,
192+
"outer": "sol",
193+
"lower": "core",
194+
"upper": "core",
195+
"xfirst": mxg,
196+
"xlast": ix1 - 1,
197+
"yfirst": j11 + 1,
198+
"ylast": j22,
199+
}
94200
if has_lower_outer_leg:
95201
# Lower outer leg
96202
regions["lower outer pf"] = {
@@ -106,7 +212,7 @@ def regions(grid, mxg=2):
106212
regions["lower outer sol"] = {
107213
"inner": "lower outer pf",
108214
"outer": None,
109-
"lower": "sol",
215+
"lower": "outer sol" if double_null else "sol",
110216
"upper": None,
111217
"xfirst": ix1,
112218
"xlast": nx - 1 - mxg,
@@ -320,6 +426,8 @@ def gridcontourf(
320426
ylabel="Height [m]",
321427
separatrix=False,
322428
log=False,
429+
alpha=1.0,
430+
antialiased=True,
323431
remove_xguards=False,
324432
):
325433
"""Plots a 2D contour plot, taking into account branch cuts
@@ -470,6 +578,8 @@ def remove_guards(arr2d):
470578
levels,
471579
cmap=cmap,
472580
norm=norm,
581+
alpha=alpha,
582+
antialiased=antialiased,
473583
)
474584

475585
yind = [j11, j22 + 1]
@@ -480,6 +590,8 @@ def remove_guards(arr2d):
480590
levels,
481591
cmap=cmap,
482592
norm=norm,
593+
alpha=alpha,
594+
antialiased=antialiased,
483595
)
484596

485597
ax.contourf(
@@ -489,6 +601,8 @@ def remove_guards(arr2d):
489601
levels,
490602
cmap=cmap,
491603
norm=norm,
604+
alpha=alpha,
605+
antialiased=antialiased,
492606
)
493607
ystart = j11 + 1
494608

@@ -500,6 +614,8 @@ def remove_guards(arr2d):
500614
levels,
501615
cmap=cmap,
502616
norm=norm,
617+
alpha=alpha,
618+
antialiased=antialiased,
503619
)
504620

505621
# Inner SOL
@@ -510,6 +626,8 @@ def remove_guards(arr2d):
510626
levels,
511627
cmap=cmap,
512628
norm=norm,
629+
alpha=alpha,
630+
antialiased=antialiased,
513631
)
514632
ystart = j21 + 1
515633

@@ -524,6 +642,8 @@ def remove_guards(arr2d):
524642
levels,
525643
cmap=cmap,
526644
norm=norm,
645+
alpha=alpha,
646+
antialiased=antialiased,
527647
)
528648
ax.contourf(
529649
R[:, ystart:nin],
@@ -532,6 +652,8 @@ def remove_guards(arr2d):
532652
levels,
533653
cmap=cmap,
534654
norm=norm,
655+
alpha=alpha,
656+
antialiased=antialiased,
535657
)
536658

537659
# Outer leg
@@ -542,6 +664,8 @@ def remove_guards(arr2d):
542664
levels,
543665
cmap=cmap,
544666
norm=norm,
667+
alpha=alpha,
668+
antialiased=antialiased,
545669
)
546670
ax.contourf(
547671
R[ix1:, j12 : (j12 + 2)],
@@ -550,6 +674,8 @@ def remove_guards(arr2d):
550674
levels,
551675
cmap=cmap,
552676
norm=norm,
677+
alpha=alpha,
678+
antialiased=antialiased,
553679
)
554680
ystart = j12 + 1
555681

@@ -561,6 +687,8 @@ def remove_guards(arr2d):
561687
levels,
562688
cmap=cmap,
563689
norm=norm,
690+
alpha=alpha,
691+
antialiased=antialiased,
564692
)
565693

566694
yind = [j21 + 1, j12]
@@ -571,6 +699,8 @@ def remove_guards(arr2d):
571699
levels,
572700
cmap=cmap,
573701
norm=norm,
702+
alpha=alpha,
703+
antialiased=antialiased,
574704
)
575705
else:
576706
ystart -= 1
@@ -582,6 +712,8 @@ def remove_guards(arr2d):
582712
levels,
583713
cmap=cmap,
584714
norm=norm,
715+
alpha=alpha,
716+
antialiased=antialiased,
585717
)
586718

587719
ystart = j22 + 1
@@ -595,6 +727,8 @@ def remove_guards(arr2d):
595727
levels,
596728
cmap=cmap,
597729
norm=norm,
730+
alpha=alpha,
731+
antialiased=antialiased,
598732
)
599733
ax.contourf(
600734
R[:, ystart:ny],
@@ -603,6 +737,8 @@ def remove_guards(arr2d):
603737
levels,
604738
cmap=cmap,
605739
norm=norm,
740+
alpha=alpha,
741+
antialiased=antialiased,
606742
)
607743

608744
# X-point
@@ -636,6 +772,8 @@ def remove_guards(arr2d):
636772
levels,
637773
cmap=cmap,
638774
norm=norm,
775+
alpha=alpha,
776+
antialiased=antialiased,
639777
)
640778

641779
if add_colorbar:

0 commit comments

Comments
 (0)