Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
124 commits
Select commit Hold shift + click to select a range
27dadcb
Rebase to clean up commits
unalmis Dec 16, 2025
e34bcff
Merge branch 'master' into integrate_on_boundary2
unalmis Dec 16, 2025
7f2c9d5
Merge branch 'master' into integrate_on_boundary2
unalmis Feb 27, 2026
44bd040
Merge branch 'master' into integrate_on_boundary2
unalmis Apr 1, 2026
b56a804
Merge branch 'master' into integrate_on_boundary2
unalmis Apr 8, 2026
8fb2b38
Add fft grid and raz grid to test against master
unalmis Apr 10, 2026
25164d0
remove noise by tighten tolerance
unalmis Apr 10, 2026
0d23c66
final attempt
unalmis Apr 10, 2026
5e70567
rory comment
unalmis Apr 10, 2026
945f1af
fix last commit
unalmis Apr 10, 2026
c2ecc4b
Increase correlation in discretization error for optimization
unalmis Apr 12, 2026
bb8ac6a
Merge branch 'master' into ku/test
unalmis Apr 12, 2026
7489317
.
unalmis Apr 12, 2026
e240249
increase tol for test
unalmis Apr 12, 2026
be41c58
remove not implemented todo
unalmis Apr 12, 2026
a55b170
.
unalmis Apr 12, 2026
2cff860
add back short-circuit
unalmis Apr 12, 2026
1727fba
collect redundant docs
unalmis Apr 13, 2026
339643b
Fix if statements
unalmis Apr 13, 2026
bda562a
Merge branch 'master' into ku/test
f0uriest Apr 13, 2026
ff53f80
Resolves #2162
unalmis Apr 14, 2026
83ffee6
loosen tol on test
unalmis Apr 14, 2026
ccf228f
flake8
unalmis Apr 14, 2026
f8a3515
flake8 blank line space
unalmis Apr 14, 2026
d05bda1
future proof
unalmis Apr 15, 2026
c06687d
daniel comments
unalmis Apr 15, 2026
d5a682f
fix render
unalmis Apr 16, 2026
f325bbf
Apply suggestions from code review
unalmis Apr 16, 2026
1792e91
Apply suggestions from code review
unalmis Apr 16, 2026
89479dc
Apply suggestions from code review
unalmis Apr 16, 2026
947641b
dan comment v2
unalmis Apr 16, 2026
13b6870
dan v2
unalmis Apr 16, 2026
a58c075
more dan
unalmis Apr 16, 2026
ad86912
last dan
unalmis Apr 16, 2026
f4faed4
last commit to desc
unalmis Apr 16, 2026
c42a92b
flake
unalmis Apr 16, 2026
2a5d6c2
Merge branch 'master' into ku/test
unalmis Apr 17, 2026
585d59a
Merge branch 'master' into ku/test
unalmis Apr 18, 2026
fcea971
Merge branch 'master' into ku/test
dpanici Apr 19, 2026
86f21f7
Resolves #2168
unalmis Apr 20, 2026
2c93334
remove comment
unalmis Apr 20, 2026
1b79b3e
.
unalmis Apr 21, 2026
1decd5e
clean up internal api
unalmis Apr 21, 2026
6df2ca9
clean
unalmis Apr 21, 2026
eef7938
use none
unalmis Apr 21, 2026
7fc978a
remove kwargs over closure conversion
unalmis Apr 21, 2026
8b33ca1
reduce duplicate code
unalmis Apr 22, 2026
5de9a9e
add missing todo
unalmis Apr 22, 2026
ae984ca
Remove bounce1d
unalmis Apr 22, 2026
ee71551
ad note
unalmis Apr 22, 2026
4da7446
.
unalmis Apr 22, 2026
f34abe2
missing exception
unalmis Apr 22, 2026
55155ed
missing label
unalmis Apr 22, 2026
b32bc40
Remove kwargs that are not needed anymore
unalmis Apr 22, 2026
1953444
clarify boolean
unalmis Apr 22, 2026
906b26a
.
unalmis Apr 22, 2026
f00647c
.
unalmis Apr 22, 2026
cd42371
.
unalmis Apr 22, 2026
088d5a2
clarify documentation
unalmis Apr 22, 2026
3fc45c2
fix closure conversion
unalmis Apr 22, 2026
98c9f1b
safer condition for compelx objs
unalmis Apr 22, 2026
566d464
fix pitch_batch_size subtlety
unalmis Apr 23, 2026
cdb9bf1
.
unalmis Apr 23, 2026
d8ec4c5
.
unalmis Apr 23, 2026
571c7d5
Merge branch 'master' into ku/test
unalmis Apr 23, 2026
c5fe484
.
unalmis Apr 23, 2026
7c721b8
Merge branch 'ku/test' into ku/sparse_pullback
unalmis Apr 23, 2026
adf73b5
fix comment
unalmis Apr 23, 2026
346938d
Switch resolution to per field period to simplify use and analysis (#…
unalmis Apr 25, 2026
e18dfe8
add missing default value
unalmis Apr 26, 2026
8748442
Resolves the fixme comment so that gradients are consistent (#2185)
unalmis Apr 26, 2026
d8868fe
push file into zip
unalmis Apr 27, 2026
8676dbd
Resolve remaining comments in #2147
unalmis Apr 28, 2026
ac79068
fix param
unalmis Apr 28, 2026
fdf80fe
Merge branch 'master' into ku/test
f0uriest Apr 29, 2026
3fe1120
Merge branch 'master' into ku/test
f0uriest Apr 29, 2026
bf95c79
Merge branch 'ku/test' into ku/sparse_pullback
unalmis Apr 29, 2026
18234f8
rory stuff
unalmis Apr 29, 2026
b1f5da7
rory stuff 2
unalmis Apr 29, 2026
06e22a6
.
unalmis Apr 29, 2026
f921c72
rory stuff 3
unalmis Apr 29, 2026
6af9f0f
reuse yb in comment to avoid confusion with nufft eps
unalmis Apr 29, 2026
788d621
Use backward stable algorithm with correction for infinite condition …
unalmis Apr 30, 2026
2de27b0
Merge branch 'master' into ku/test
unalmis Apr 30, 2026
9a365e0
Merge branch 'ku/test' into ku/sparse_pullback
unalmis Apr 30, 2026
2078288
Merge branch 'ku/sparse_pullback' into ku/condition_number
unalmis Apr 30, 2026
892699a
Add back analytical formulae because much faster
unalmis Apr 30, 2026
158203f
Fix typo in comment for root multiplicity check
unalmis May 1, 2026
10c78ed
.
unalmis May 1, 2026
342856e
simplify formulae
unalmis May 1, 2026
26463f9
make sure types remain real
unalmis May 1, 2026
e3bd373
better documentation
unalmis May 1, 2026
bf939bb
.
unalmis May 1, 2026
c9a2469
.
unalmis May 1, 2026
61a41f9
.
unalmis May 1, 2026
9b9d666
Merge branch 'master' into ku/test
unalmis May 1, 2026
1002c49
Merge branch 'ku/test' into ku/sparse_pullback
unalmis May 1, 2026
28ec657
Merge branch 'ku/sparse_pullback' into ku/condition_number
unalmis May 1, 2026
c9cbff1
better filtering
unalmis May 2, 2026
95f11fa
.
unalmis May 2, 2026
205b1b4
.
unalmis May 2, 2026
8d301ff
.
unalmis May 2, 2026
f729192
Merge branch 'master' into ku/sparse_pullback
unalmis May 4, 2026
97bf192
Merge branch 'ku/sparse_pullback' into ku/condition_number
unalmis May 4, 2026
b39ab31
Merge branch 'master' into ku/sparse_pullback
unalmis May 4, 2026
74895a1
Merge branch 'ku/sparse_pullback' into ku/condition_number
unalmis May 4, 2026
1fd2258
Merge branch 'master' into ku/sparse_pullback
unalmis May 11, 2026
b2426ad
Merge branch 'ku/sparse_pullback' into ku/condition_number
unalmis May 11, 2026
593a8a5
.
unalmis May 15, 2026
2b091dc
Merge branch 'master' into integrate_on_boundary2
unalmis May 15, 2026
5032ad9
Merge branch 'ku/condition_number' into integrate_on_boundary2
unalmis May 15, 2026
11e0edc
increase tolerance
unalmis May 15, 2026
81cb1a9
address rory
unalmis May 18, 2026
68b0f26
Merge branch 'ku/sparse_pullback' into ku/condition_number
unalmis May 18, 2026
ca9e170
Merge branch 'ku/condition_number' into integrate_on_boundary2
unalmis May 18, 2026
eaaaff7
Merge branch 'master' into ku/sparse_pullback
unalmis May 19, 2026
54a204d
Merge branch 'ku/sparse_pullback' into ku/condition_number
unalmis May 19, 2026
0c8ecb1
Merge branch 'ku/condition_number' into integrate_on_boundary2
unalmis May 19, 2026
4955144
Merge branch 'master' into ku/sparse_pullback
unalmis May 19, 2026
7fa245e
Merge branch 'ku/sparse_pullback' into ku/condition_number
unalmis May 19, 2026
0eca851
Merge branch 'ku/condition_number' into integrate_on_boundary2
unalmis May 19, 2026
16b833d
Merge branch 'master' into condition_number
unalmis May 28, 2026
a3a0aff
Merge branch 'condition_number' into integrate_on_boundary
unalmis May 29, 2026
f264b7e
Merge branch 'master' into integrate_on_boundary
unalmis May 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 21 additions & 44 deletions desc/compute/_geometry.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ def _compute_A_of_z(grid, data, extrap=False, mean=False, expand_out=False):
return jnp.mean(grid.compress(data["A(z)"], surface_label="zeta"))

max_rho = jnp.max(data["rho"])
if isinstance(grid, QuadratureGrid) or "n_rho" not in data: # TODO(#1761)
if isinstance(grid, QuadratureGrid):
assert extrap
A = surface_integrals(
grid,
Expand All @@ -179,17 +179,16 @@ def _compute_A_of_z(grid, data, extrap=False, mean=False, expand_out=False):
# on constant ζ surface is 1. Then choose v = (w - w^ζ).
# OR make sure that integration contour is along constant ϕ surface
# using source_grid_requirement="rtp" and use e_rho|t,p and e_theta|r,p.
n = data["n_rho"]
n = n.at[:, 1].set(0)
n = n / jnp.linalg.norm(n, axis=-1)[:, jnp.newaxis]
A = jnp.abs(
line_integrals(
grid,
data["Z"] * n[:, 2] * safenorm(data["e_theta"], axis=-1),
line_label="theta",
fix_surface=("rho", max_rho),
expand_out=False,
)
dl = jnp.sqrt(data["g_tt"])
t = data["e_theta"] / dl[:, jnp.newaxis]
n = -data["e_theta_t"] + dot(data["e_theta_t"], t)[:, jnp.newaxis] * t
n = n[:, 2] / jnp.linalg.norm(n, axis=-1)
A = line_integrals(
grid,
dl * n * data["Z"],
line_label="theta",
fix_surface=("rho", max_rho),
expand_out=False,
)
if extrap:
# To approximate area at ρ ~ 1, we scale by ρ⁻², assuming the integrand
Expand All @@ -216,8 +215,11 @@ def _compute_A_of_z(grid, data, extrap=False, mean=False, expand_out=False):
transforms={"grid": []},
profiles=[],
coordinates="z",
data=["Z", "n_rho", "e_theta", "rho", "|e_rho x e_theta|"],
parameterization=["desc.equilibrium.equilibrium.Equilibrium"],
data=["rho", "Z", "e_theta", "e_theta_t", "g_tt", "|e_rho x e_theta|"],
parameterization=[
"desc.equilibrium.equilibrium.Equilibrium",
"desc.geometry.surface.ZernikeRZToroidalSection",
],
resolution_requirement="t",
grid_requirement={"sym": False},
)
Expand All @@ -241,7 +243,7 @@ def _A_of_z(params, transforms, profiles, data, **kwargs):
transforms={"grid": []},
profiles=[],
coordinates="",
data=["Z", "n_rho", "e_theta", "rho", "|e_rho x e_theta|"],
data=["rho", "Z", "e_theta", "e_theta_t", "g_tt", "|e_rho x e_theta|"],
parameterization=["desc.equilibrium.equilibrium.Equilibrium"],
resolution_requirement="tz",
)
Expand All @@ -251,31 +253,6 @@ def _A(params, transforms, profiles, data, **kwargs):
return data


@register_compute_fun(
name="A(z)",
label="A(\\zeta)",
units="m^{2}",
units_long="square meters",
description="Area of enclosed cross-section (enclosed constant zeta surface), "
"extrapolated to last closed flux surface",
dim=1,
params=[],
transforms={"grid": []},
profiles=[],
coordinates="z",
data=["rho", "|e_rho x e_theta|"],
parameterization=["desc.geometry.surface.ZernikeRZToroidalSection"],
resolution_requirement="rt",
grid_requirement={"sym": False},
)
def _A_of_z_cross_section_surface(params, transforms, profiles, data, **kwargs):
# noqa: unused dependency
data["A(z)"] = _compute_A_of_z(
transforms["grid"], data, extrap=True, expand_out=True
)
return data


@register_compute_fun(
name="A",
label="A",
Expand All @@ -288,9 +265,9 @@ def _A_of_z_cross_section_surface(params, transforms, profiles, data, **kwargs):
transforms={"grid": []},
profiles=[],
coordinates="",
data=["rho", "|e_rho x e_theta|"],
data=["rho", "Z", "e_theta", "e_theta_t", "g_tt", "|e_rho x e_theta|"],
parameterization=["desc.geometry.surface.ZernikeRZToroidalSection"],
resolution_requirement="rt",
resolution_requirement="t",
# Needs to be False since resolution requirement lacks toroidal resolution.
grid_requirement={"sym": False},
)
Expand All @@ -311,7 +288,7 @@ def _A_cross_section_surface(params, transforms, profiles, data, **kwargs):
transforms={"grid": []},
profiles=[],
coordinates="z",
data=["Z", "n_rho", "e_theta", "rho"],
data=["rho", "Z", "e_theta", "e_theta_t", "g_tt"],
parameterization=["desc.geometry.surface.FourierRZToroidalSurface"],
resolution_requirement="t",
grid_requirement={"sym": False},
Expand All @@ -335,7 +312,7 @@ def _A_of_z_flux_surface(params, transforms, profiles, data, **kwargs):
transforms={"grid": []},
profiles=[],
coordinates="",
data=["Z", "n_rho", "e_theta", "rho"],
data=["rho", "Z", "e_theta", "e_theta_t", "g_tt"],
parameterization=["desc.geometry.surface.FourierRZToroidalSurface"],
resolution_requirement="tz",
)
Expand Down
Binary file modified tests/inputs/master_compute_data_rpz.pkl
Binary file not shown.
2 changes: 1 addition & 1 deletion tests/test_objective_funs.py
Original file line number Diff line number Diff line change
Expand Up @@ -2113,7 +2113,7 @@ def test_objective_against_compute_bounce(self):
obj.build()
assert obj._hyperparam["num_well"] == opts["num_well"]
np.testing.assert_allclose(
obj.compute(eq.params_dict), grid.compress(data[names[0]])
obj.compute(eq.params_dict), grid.compress(data[names[0]]), atol=1e-4
)
obj = GammaC(eq, grid=obj_grid, nufft_eps=1e-7, X=X, Y=Y, **opts)
obj.build()
Expand Down
Loading