Skip to content

Commit 306adcc

Browse files
Merge pull request #79 from ProjectTorreyPines/compathelper/new_version/2025-03-30-03-49-20-793-03778698867
CompatHelper: bump compat for IMASdd to 5, (keep existing compat) Also fixed issue of interp function getting stuck during runtime due to very large union in vector element type. Changed function get_subset_space to get_subset_space_objects Some functions to not need space argument anymore as that can now be inferrred from grid_ggd or subset.
2 parents 52f4fb9 + ea31a61 commit 306adcc

File tree

7 files changed

+164
-70
lines changed

7 files changed

+164
-70
lines changed

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "IMASggd"
22
uuid = "b7b5e640-9b39-4803-84eb-376048795def"
33
authors = ["Anchal Gupta <guptaa@fusion.gat.com>"]
4-
version = "3.1.0"
4+
version = "3.1.1"
55

66
[deps]
77
ArgParse = "c7e460c6-2fb9-53a9-8c5b-16f535851c63"
@@ -17,7 +17,7 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
1717
[compat]
1818
ArgParse = "1"
1919
ColorSchemes = "3"
20-
IMASdd = "2, 3, 4"
20+
IMASdd = "2, 3, 4, 5"
2121
Interpolations = "0.15"
2222
NearestNeighbors = "0.4"
2323
RecipesBase = "1"

docs/src/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ get_kdtree
3131

3232
```@docs
3333
add_subset_element!
34-
get_subset_space
34+
get_subset_space_objects
3535
get_grid_subset
3636
get_subset_boundary_inds
3737
get_subset_boundary

src/interpolations.jl

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ function interp(
6363
values = [prop_values[ii] for ii nearest_indices]
6464
weights = weighing.(distances)
6565
if any(isinf.(weights))
66-
return values[distances.==0][1]
66+
return values[distances .== 0][1]
6767
end
6868
return sum(weights .* values) / sum(weights)
6969
end
@@ -186,7 +186,7 @@ end
186186
"""
187187
interp(
188188
prop_values::Vector{T},
189-
space::all__space
189+
space::all__space,
190190
) where {T <: Real}
191191
192192
If the whole space is provided instead of a kdtree, calculate the kdtree for whole
@@ -211,7 +211,7 @@ end
211211
interp(
212212
prop_values::Vector{Real},
213213
space::all__space,
214-
subset::all__grid_subset
214+
subset::all__grid_subset,
215215
)
216216
217217
If a subset of the space is provided, calculate the kdtree for the subset. In this case
@@ -229,7 +229,7 @@ end
229229
interp(
230230
prop::all__grid_subset_prop,
231231
grid_ggd::all__grid_ggd,
232-
value_field::Symbol=:values
232+
value_field::Symbol=:values,
233233
)
234234
235235
Example:
@@ -252,11 +252,11 @@ end
252252

253253
"""
254254
interp(
255-
prop_arr::AbstractVector{T},
255+
prop_arr::AbstractVector,
256256
space::all__space,
257257
subset::all__grid_subset,
258-
value_field::Symbol=:values
259-
) where {T <: all__grid_subset_prop}
258+
value_field::Symbol=:values,
259+
)
260260
261261
Example:
262262
@@ -266,22 +266,22 @@ get_electron_density = interp(dd.edge_profiles.ggd[1].electrons.density, space,
266266
```
267267
"""
268268
function interp(
269-
prop_arr::AbstractVector{T},
269+
prop_arr::AbstractVector,
270270
space::all__space,
271271
subset::all__grid_subset,
272272
value_field::Symbol=:values,
273-
) where {T <: all__grid_subset_prop}
273+
)
274274
prop = get_prop_with_grid_subset_index(prop_arr, subset.identifier.index)
275275
return interp(getfield(prop, value_field), space, subset)
276276
end
277277

278278
"""
279279
interp(
280-
prop_arr::AbstractVector{T},
280+
prop_arr::AbstractVector,
281281
grid_ggd::all__grid_ggd,
282282
grid_subset_index::Int,
283-
value_field::Symbol=:values
284-
) where {T <: all__grid_subset_prop}
283+
value_field::Symbol=:values,
284+
)
285285
286286
Example:
287287
@@ -290,11 +290,11 @@ get_n_e_sep = interp(dd.edge_profiles.ggd[1].electrons.density, grid_ggd, 16)
290290
```
291291
"""
292292
function interp(
293-
prop_arr::AbstractVector{T},
293+
prop_arr::AbstractVector,
294294
grid_ggd::all__grid_ggd,
295295
grid_subset_index::Int,
296296
value_field::Symbol=:values,
297-
) where {T <: all__grid_subset_prop}
297+
)
298298
prop = get_prop_with_grid_subset_index(prop_arr, grid_subset_index)
299299
subset = get_grid_subset(grid_ggd, grid_subset_index)
300300
space = grid_ggd.space[subset.element[1].object[1].space]
@@ -309,11 +309,11 @@ end
309309

310310
"""
311311
interp(
312-
prop_arr::AbstractVector{T},
312+
prop_arr::AbstractVector,
313313
TPS_mats::Tuple{Matrix{U}, Matrix{U}, Matrix{U}, Vector{Tuple{U, U}}},
314314
grid_subset_index::Int,
315-
value_field::Val{V}=Val(:values),
316-
) where {T <: all__grid_subset_prop, U <: Real, V}
315+
value_field::Symbol=:values,
316+
) where {U <: Real, V}
317317
318318
Same use case as above but allows one to reuse previously calculated TPS matrices.
319319
@@ -331,13 +331,13 @@ end
331331
This will run faster as heavy matrix calculations will happen only once.
332332
"""
333333
function interp(
334-
prop_arr::AbstractVector{T},
334+
prop_arr::AbstractVector,
335335
TPS_mats::Tuple{Matrix{U}, Matrix{U}, Matrix{U}, Vector{Tuple{U, U}}},
336336
grid_subset_index::Int,
337-
value_field::Val{V}=Val(:values),
338-
) where {T <: all__grid_subset_prop, U <: Real, V}
337+
value_field::Symbol=:values,
338+
) where {U <: Real}
339339
prop = get_prop_with_grid_subset_index(prop_arr, grid_subset_index)
340-
field = getfield(prop, V)
340+
field = getfield(prop, value_field)
341341
return interp(field, TPS_mats)
342342
end
343343

src/recipes.jl

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ using ColorSchemes: ColorSchemes
33
import Statistics: norm, dot
44

55
"""
6-
plot(space::all__space)
6+
plot(space::all__space))
77
88
Plot the grid_ggd space object. Defaults to size of [600, 900] and linecolor of :black,
99
linewidth of 0.2, and no legend.
@@ -40,7 +40,7 @@ linewidth of 0.2, and no legend.
4040
end
4141

4242
"""
43-
plot(space::all__space, subset::all__grid_subset)
43+
plot(space::all__space, subset::all__grid_subset))
4444
4545
Plot the a subset of a space. Defaults to size of [600, 900] and linecolor of :black,
4646
linewidth of 0.2, and no legend.
@@ -137,7 +137,7 @@ is the heatmap and b is the colorbar.
137137
val_min = minimum(prop.values)
138138
val_max = maximum(prop.values)
139139
function get_color(prop_value)
140-
return color_grad[(log10(prop_value / val_min)/log10(val_max / val_min))]
140+
return color_grad[(log10(prop_value/val_min)/log10(val_max/val_min))]
141141
end
142142

143143
if :colorbar_title in keys(plotattributes)
@@ -178,7 +178,10 @@ is the heatmap and b is the colorbar.
178178
end
179179

180180
"""
181-
plot(grid_ggd_arr::AbstractVector{<:all__grid_ggd}, prop::all__grid_subset_prop)
181+
plot(
182+
grid_ggd_arr::AbstractVector{<:all__grid_ggd},
183+
prop::all__grid_subset_prop,
184+
)
182185
183186
Plot 2D heatmap of edge_profiles_ggd property on a grid_ggd space object. Defaults to
184187
size of [635, 900], xaxis of "R / m", yaxis of "Z / m", and no legend. If :seriescolor

src/subset_tools.jl

Lines changed: 56 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export add_subset_element!
2-
export get_subset_space
2+
export get_subset_space_objects
33
export get_grid_subset
44
export get_subset_boundary_inds
55
export get_subset_boundary
@@ -76,17 +76,28 @@ function add_subset_element!(
7676
end
7777

7878
"""
79-
get_subset_space(space::all__space, subset::all__grid_subset)
79+
get_subset_space_objects(space::all__space, subset::all__grid_subset)
8080
8181
Returns an array of space object indices corresponding to the correct
8282
objects_per_dimension (nodes, edges or cells) for the subset elements.
8383
"""
84-
function get_subset_space(space::all__space, subset::all__grid_subset)
84+
function get_subset_space_objects(space::all__space, subset::all__grid_subset)
8585
nD = subset.element[1].object[1].dimension
8686
nD_objects = space.objects_per_dimension[nD].object
8787
return [nD_objects[ele.object[1].index] for ele subset.element]
8888
end
8989

90+
"""
91+
get_subset_space_objects(subset::all__grid_subset)
92+
93+
Returns an array of space object indices corresponding to the correct
94+
objects_per_dimension (nodes, edges or cells) for the subset elements.
95+
"""
96+
function get_subset_space_objects(subset::all__grid_subset)
97+
space = get_space(subset)
98+
return get_subset_space_objects(space, subset)
99+
end
100+
90101
"""
91102
get_grid_subset(grid_ggd::all__grid_ggd, grid_subset_index::Int)
92103
@@ -102,11 +113,17 @@ function get_grid_subset(grid_ggd::all__grid_ggd, grid_subset_index::Int)
102113
end
103114

104115
"""
105-
get_grid_subset(grid_ggd::all__grid_ggd, grid_subset_name::String)
116+
get_grid_subset(
117+
grid_ggd::all__grid_ggd,
118+
grid_subset_name::String,
119+
)
106120
107121
Returns the grid_subset in a grid_ggd with the matching grid_subset_name
108122
"""
109-
function get_grid_subset(grid_ggd::all__grid_ggd, grid_subset_name::String)
123+
function get_grid_subset(
124+
grid_ggd::all__grid_ggd,
125+
grid_subset_name::String,
126+
)
110127
for subset grid_ggd.grid_subset
111128
if subset.identifier.name == grid_subset_name
112129
return subset
@@ -174,7 +191,7 @@ function get_grid_ggd(subset::Union{all__grid_subset, all__space})::all__grid_gg
174191
end
175192

176193
"""
177-
get_space_from_subset(subset::all__grid_subset)::all__space
194+
get_space(subset::all__grid_subset)::all__space
178195
179196
Get the corresponding space in parent grid_ggd for a grid_subset object.
180197
"""
@@ -185,10 +202,11 @@ end
185202

186203
"""
187204
subset_do(
188-
set_operator,
189-
itrs::Vararg{all__grid_subset};
190-
use_nodes=false,
191-
)::all__grid_subset
205+
set_operator,
206+
itrs::Vararg{all__grid_subset};
207+
use_nodes=false,
208+
209+
)::all__grid_subset
192210
193211
Function to perform any set operation (intersect, union, setdiff etc.) on
194212
subset.element to generate a list of elements to go to subset object. If use_nodes is
@@ -204,8 +222,8 @@ function subset_do(
204222
ele_inds = set_operator(
205223
[
206224
union([
207-
obj.nodes for obj get_subset_space(space, subset)
208-
]...
225+
obj.nodes for obj get_subset_space_objects(space, subset)
226+
]...
209227
) for subset itrs
210228
]...,
211229
)
@@ -229,7 +247,7 @@ Returns an array of tuples corresponding to (r,z) coordinates of the center of
229247
cells or the center of edges in the subset space.
230248
"""
231249
function get_subset_centers(space::all__space, subset::all__grid_subset)
232-
subset_space = get_subset_space(space, subset)
250+
subset_space = get_subset_space_objects(space, subset)
233251
if subset.element[1].object[1].dimension == 1
234252
return [Tuple(obj.geometry) for obj subset_space]
235253
end
@@ -240,13 +258,24 @@ function get_subset_centers(space::all__space, subset::all__grid_subset)
240258
]
241259
end
242260

261+
"""
262+
get_subset_centers(subset::all__grid_subset)
263+
264+
Returns an array of tuples corresponding to (r,z) coordinates of the center of
265+
cells or the center of edges in the subset space.
266+
"""
267+
function get_subset_centers(subset::all__grid_subset)
268+
space = get_space(subset)
269+
return get_subset_centers(space, subset)
270+
end
271+
243272
"""
244273
project_prop_on_subset!(
245-
prop_arr::AbstractVector{<:all__grid_subset_prop},
246-
from_subset::all__grid_subset,
247-
to_subset::all__grid_subset,
274+
prop_arr::AbstractVector{<:all__grid_subset_prop}),
275+
from_subset::all__grid_subset),
276+
to_subset::all__grid_subset),
248277
space::all__space,
249-
value_field::Symbol=:values;
278+
value_field::Symbol=:values,
250279
TPS_mats::Union{
251280
Nothing,
252281
Tuple{Matrix{U}, Matrix{U}, Matrix{U}, Vector{Tuple{U, U}}},
@@ -291,19 +320,19 @@ to_prop_values: The projected values of the properties added to prop object in a
291320
instance
292321
"""
293322
function project_prop_on_subset!(
294-
prop_arr::AbstractVector{<:all__grid_subset_prop},
323+
prop_arr::IMASdd.IDSvector{<:all__grid_subset_prop},
295324
from_subset::all__grid_subset,
296325
to_subset::all__grid_subset,
297326
space::all__space,
298-
value_field::Symbol=:values;
327+
value_field::Symbol=:values,
299328
TPS_mats::Union{
300329
Nothing,
301330
Tuple{Matrix{U}, Matrix{U}, Matrix{U}, Vector{Tuple{U, U}}},
302331
}=nothing,
303332
) where {U <: Real}
304333
if from_subset.element[1].object[1].dimension ==
305334
to_subset.element[1].object[1].dimension
306-
return project_prop_on_subset!(prop, from_subset, to_subset)
335+
return project_prop_on_subset!(prop_arr, from_subset, to_subset, value_field)
307336
elseif from_subset.element[1].object[1].dimension >
308337
to_subset.element[1].object[1].dimension
309338
if length(prop_arr) < 1
@@ -346,9 +375,9 @@ end
346375

347376
"""
348377
project_prop_on_subset!(
349-
prop_arr::AbstractVector{<:all__grid_subset_prop},
350-
from_subset::all__grid_subset,
351-
to_subset::all__grid_subset,
378+
prop_arr::AbstractVector{<:all__grid_subset_prop}),
379+
from_subset::all__grid_subset),
380+
to_subset::all__grid_subset),
352381
value_field::Symbol=:values,
353382
)
354383
@@ -358,7 +387,7 @@ any interpolation or use of space object. The function returns a tuple of indice
358387
elements of to_subset and the values of the property in to_subset.
359388
"""
360389
function project_prop_on_subset!(
361-
prop_arr::AbstractVector{<:all__grid_subset_prop},
390+
prop_arr::IMASdd.IDSvector{<:all__grid_subset_prop},
362391
from_subset::all__grid_subset,
363392
to_subset::all__grid_subset,
364393
value_field::Symbol=:values,
@@ -566,18 +595,18 @@ end
566595

567596
"""
568597
get_prop_with_grid_subset_index(
569-
prop::AbstractVector{<:all__grid_subset_prop},
598+
prop_arr::AbstractVector{<:all__grid_subset_prop}),
570599
grid_subset_index::Int,
571600
)
572601
573602
Find the property instance in an array of properties that corresponds to
574603
the grid_subset_index provided.
575604
"""
576605
function get_prop_with_grid_subset_index(
577-
prop::AbstractVector{<:all__grid_subset_prop},
606+
prop_arr::AbstractVector{<:all__grid_subset_prop},
578607
grid_subset_index::Int,
579608
)
580-
for p prop
609+
for p prop_arr
581610
if p.grid_subset_index == grid_subset_index
582611
return p
583612
end

0 commit comments

Comments
 (0)