From 27a6fcbb86b3041553d378824bbd7a0f3244cc71 Mon Sep 17 00:00:00 2001 From: unalmis Date: Wed, 3 Jul 2024 23:26:48 -0500 Subject: [PATCH 01/20] Update master compute data with follog differences: These differences are because, prior to the changes in this PR, these length scale quantities would get computed on a full resolution quadrature grid in test_compute_everything. Now thare computed on the same low resolution used in the test that is used for everything else. Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: A. Mismatched elements: 1 / 1 (100%) Max absolute difference: 1.63995582e-05 Max relative difference: 2.03987171e-05 x: array(0.803967) y: array(0.80395) Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: S. Mismatched elements: 1 / 1 (100%) Max absolute difference: 0.16850603 Max relative difference: 0.00125191 x: array(134.767312) y: array(134.598806) Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: A(z). Mismatched elements: 660 / 660 (100%) Max absolute difference: 0.63797977 Max relative difference: 0.80369303 x: array([0.763363, 0.763363, 0.763363, 0.763363, 0.763363, 0.763363, 0.763363, 0.763363, 0.763363, 0.763363, 0.763363, 0.763363, 0.763363, 0.763363, 0.763363, 0.763363, 0.763363, 0.763363,... y: array([0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978,... Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: R0. Mismatched elements: 1 / 1 (100%) Max absolute difference: 0.00011245 Max relative difference: 2.0398301e-05 x: array(5.51284) y: array(5.512953) Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: A(r). Mismatched elements: 594 / 660 (90%) Max absolute difference: 1.63995582e-05 Max relative difference: 2.03987171e-05 x: array([0. , 0. , 0. , 0. , 0. , 0. , 0.010291, 0.010291, 0.010291, 0.010291, 0.010291, 0.010291, 0.041077, 0.041077, 0.041077, 0.041077, 0.041077, 0.041077,... y: array([0. , 0. , 0. , 0. , 0. , 0. , 0.010291, 0.010291, 0.010291, 0.010291, 0.010291, 0.010291, 0.041077, 0.041077, 0.041077, 0.041077, 0.041077, 0.041077,... Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: a. Mismatched elements: 1 / 1 (100%) Max absolute difference: 5.15953253e-06 Max relative difference: 1.01993065e-05 x: array(0.505876) y: array(0.505871) Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: R0/a. Mismatched elements: 1 / 1 (100%) Max absolute difference: 0.00033345 Max relative difference: 3.05972954e-05 x: array(10.89761) y: array(10.897944) Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: a_major/a_minor. Mismatched elements: 660 / 660 (100%) Max absolute difference: 10.92082022 Max relative difference: 4.88235767 x: array([ 4.007305, 4.007305, 4.007305, 4.007305, 4.007305, 4.007305, 4.007305, 4.007305, 4.007305, 4.007305, 4.007305, 4.007305, 4.007305, 4.007305, 4.007305, 4.007305, 4.007305, 4.007305,... y: array([4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882,... --- desc/compute/_basis_vectors.py | 2 -- desc/compute/_geometry.py | 4 ++++ tests/inputs/master_compute_data.pkl | Bin 7794246 -> 7773302 bytes 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/desc/compute/_basis_vectors.py b/desc/compute/_basis_vectors.py index 6aa81d2876..d8f45a1280 100644 --- a/desc/compute/_basis_vectors.py +++ b/desc/compute/_basis_vectors.py @@ -1515,7 +1515,6 @@ def _e_sup_zeta_zz(params, transforms, profiles, data, **kwargs): "desc.equilibrium.equilibrium.Equilibrium", "desc.geometry.surface.FourierRZToroidalSurface", "desc.geometry.surface.ZernikeRZToroidalSection", - "desc.geometry.core.Surface", ], basis="basis", ) @@ -3547,7 +3546,6 @@ def _n_zeta(params, transforms, profiles, data, **kwargs): "desc.equilibrium.equilibrium.Equilibrium", "desc.geometry.surface.FourierRZToroidalSurface", "desc.geometry.surface.ZernikeRZToroidalSection", - "desc.geometry.core.Surface", ], ) def _e_sub_theta_rp(params, transforms, profiles, data, **kwargs): diff --git a/desc/compute/_geometry.py b/desc/compute/_geometry.py index dc25c48e91..084b3b0f9c 100644 --- a/desc/compute/_geometry.py +++ b/desc/compute/_geometry.py @@ -293,6 +293,10 @@ def _S(params, transforms, profiles, data, **kwargs): profiles=[], coordinates="r", data=["|e_theta x e_zeta|"], + parameterization=[ + "desc.equilibrium.equilibrium.Equilibrium", + "desc.geometry.surface.FourierRZToroidalSurface", + ], resolution_requirement="tz", ) def _S_of_r(params, transforms, profiles, data, **kwargs): diff --git a/tests/inputs/master_compute_data.pkl b/tests/inputs/master_compute_data.pkl index b356ddfceb21875df5431807cc19782caa6b0141..fc0fc55b01e0c32c7ff894c7f51839510da7faa6 100644 GIT binary patch delta 60540 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 M1~;0-{bUXOADq?1c>n+a delta 55102 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 Date: Wed, 3 Jul 2024 23:42:52 -0500 Subject: [PATCH 02/20] Add scaling by max(rho) information to description --- desc/compute/_geometry.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/desc/compute/_geometry.py b/desc/compute/_geometry.py index 084b3b0f9c..4e5f6290af 100644 --- a/desc/compute/_geometry.py +++ b/desc/compute/_geometry.py @@ -45,7 +45,7 @@ def _V(params, transforms, profiles, data, **kwargs): label="V", units="m^{3}", units_long="cubic meters", - description="Volume enclosed by surface, scaled by max(ρ)⁻², as function of zeta", + description="Volume enclosed by surface, scaled by max(ρ)⁻²", dim=1, params=[], transforms={"grid": []}, @@ -218,7 +218,7 @@ def _A_of_z(params, transforms, profiles, data, **kwargs): label="A", units="m^{2}", units_long="square meters", - description="Average cross-sectional area", + description="Average enclosed cross-sectional area, scaled by max(ρ)⁻²", dim=0, params=[], transforms={"grid": []}, From 2694e8c60e74e0c97b04f6fbebb20e104d8956c2 Mon Sep 17 00:00:00 2001 From: unalmis Date: Fri, 5 Jul 2024 12:42:25 -0500 Subject: [PATCH 03/20] Update master_compute_data from master --- desc/compute/_geometry.py | 29 ++++++++++----------------- tests/inputs/master_compute_data.pkl | Bin 7773302 -> 7794246 bytes tests/test_compute_funs.py | 17 +++++++++------- 3 files changed, 21 insertions(+), 25 deletions(-) diff --git a/desc/compute/_geometry.py b/desc/compute/_geometry.py index 4e5f6290af..7a9b4431f3 100644 --- a/desc/compute/_geometry.py +++ b/desc/compute/_geometry.py @@ -51,25 +51,14 @@ def _V(params, transforms, profiles, data, **kwargs): transforms={"grid": []}, profiles=[], coordinates="", - data=["e_theta", "e_zeta", "x", "rho"], + data=["V(r)", "rho"], parameterization="desc.geometry.surface.FourierRZToroidalSurface", - resolution_requirement="rtz", + resolution_requirement="r", ) def _V_FourierRZToroidalSurface(params, transforms, profiles, data, **kwargs): - # divergence theorem: integral(dV div [0, 0, Z]) = integral(dS dot [0, 0, Z]) - data["V"] = ( - jnp.max( - jnp.abs( - surface_integrals( - transforms["grid"], - cross(data["e_theta"], data["e_zeta"])[:, 2] * data["x"][:, 2], - ) - ) - ) - # To approximate volume at ρ ~ 1, we scale by ρ⁻², assuming the integrand - # varies little from ρ = max_rho to ρ = 1 and a roughly circular cross-section. - / jnp.max(data["rho"]) ** 2 - ) + # To approximate volume at ρ ~ 1, we scale by ρ⁻², assuming the integrand + # varies little from ρ = max_rho to ρ = 1 and a roughly circular cross-section. + data["V"] = jnp.max(data["V(r)"]) / jnp.max(data["rho"]) ** 2 return data @@ -85,6 +74,10 @@ def _V_FourierRZToroidalSurface(params, transforms, profiles, data, **kwargs): profiles=[], coordinates="r", data=["e_theta", "e_zeta", "Z"], + parameterization=[ + "desc.equilibrium.equilibrium.Equilibrium", + "desc.geometry.surface.FourierRZToroidalSurface", + ], resolution_requirement="tz", ) def _V_of_r(params, transforms, profiles, data, **kwargs): @@ -178,7 +171,7 @@ def _V_rrr_of_r(params, transforms, profiles, data, **kwargs): "desc.geometry.surface.ZernikeRZToroidalSection", "desc.geometry.surface.FourierRZToroidalSurface", ], - resolution_requirement="rt", + resolution_requirement="t", # FIXME: Add source grid requirement once omega is nonzero. ) def _A_of_z(params, transforms, profiles, data, **kwargs): @@ -428,7 +421,7 @@ def _R0_over_a(params, transforms, profiles, data, **kwargs): "desc.equilibrium.equilibrium.Equilibrium", "desc.geometry.core.Surface", ], - resolution_requirement="rt", + resolution_requirement="t", ) def _perimeter_of_z(params, transforms, profiles, data, **kwargs): max_rho = jnp.max(data["rho"]) diff --git a/tests/inputs/master_compute_data.pkl b/tests/inputs/master_compute_data.pkl index fc0fc55b01e0c32c7ff894c7f51839510da7faa6..b356ddfceb21875df5431807cc19782caa6b0141 100644 GIT binary patch delta 55102 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 M1~;0-{bUXOADq?1c>n+a diff --git a/tests/test_compute_funs.py b/tests/test_compute_funs.py index 0f89d27799..5f8d8e7cc7 100644 --- a/tests/test_compute_funs.py +++ b/tests/test_compute_funs.py @@ -176,6 +176,12 @@ def test_surface_areas_2(): @pytest.mark.unit def test_elongation(): """Test that elongation approximation is correct.""" + surf1 = FourierRZToroidalSurface( + R_lmn=[10, 1, 0.2], + Z_lmn=[-1, -0.2], + modes_R=[[0, 0], [1, 0], [0, 1]], + modes_Z=[[-1, 0], [0, -1]], + ) surf2 = FourierRZToroidalSurface( R_lmn=[10, 1, 0.2], Z_lmn=[-2, -0.2], @@ -188,13 +194,10 @@ def test_elongation(): modes_R=[[0, 0], [1, 0], [0, 1]], modes_Z=[[-1, 0], [0, -1]], ) - eq1 = Equilibrium() # elongation = 1 - eq2 = Equilibrium(surface=surf2) # elongation = 2 - eq3 = Equilibrium(surface=surf3) # elongation = 3 - grid = LinearGrid(L=5, M=2 * eq3.M_grid, N=eq3.N_grid, NFP=eq3.NFP, sym=eq3.sym) - data1 = eq1.compute(["a_major/a_minor"], grid=grid) - data2 = eq2.compute(["a_major/a_minor"], grid=grid) - data3 = eq3.compute(["a_major/a_minor"], grid=grid) + grid = LinearGrid(rho=1, M=2 * surf3.M, N=surf3.N, NFP=surf3.NFP, sym=surf3.sym) + data1 = surf1.compute(["a_major/a_minor", "A"], grid=grid) + data2 = surf2.compute(["a_major/a_minor", "A"], grid=grid) + data3 = surf3.compute(["a_major/a_minor", "A"], grid=grid) # elongation approximation is less accurate as elongation increases np.testing.assert_allclose(1.0, data1["a_major/a_minor"]) np.testing.assert_allclose(2.0, data2["a_major/a_minor"], rtol=1e-3) From 93c710b55daea14f859e888be6573013183ad5d0 Mon Sep 17 00:00:00 2001 From: unalmis Date: Fri, 5 Jul 2024 12:57:20 -0500 Subject: [PATCH 04/20] Remove unneeded resolution requirement from divergence theorems compute funs --- desc/compute/_geometry.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/desc/compute/_geometry.py b/desc/compute/_geometry.py index 7a9b4431f3..3fd612629a 100644 --- a/desc/compute/_geometry.py +++ b/desc/compute/_geometry.py @@ -53,7 +53,6 @@ def _V(params, transforms, profiles, data, **kwargs): coordinates="", data=["V(r)", "rho"], parameterization="desc.geometry.surface.FourierRZToroidalSurface", - resolution_requirement="r", ) def _V_FourierRZToroidalSurface(params, transforms, profiles, data, **kwargs): # To approximate volume at ρ ~ 1, we scale by ρ⁻², assuming the integrand @@ -190,6 +189,8 @@ def _A_of_z(params, transforms, profiles, data, **kwargs): data["A(z)"] = jnp.abs( line_integrals( transforms["grid"], + # FIXME: Integrand is not symmetric function, so this will fail + # on symmetric grids. data["Z"] * n[:, 2] * safenorm(data["e_theta|r,p"], axis=-1), # FIXME: Works currently for omega = zero, but for nonzero omega # we need to integrate over theta at constant phi. @@ -265,7 +266,6 @@ def _A_of_r(params, transforms, profiles, data, **kwargs): "desc.equilibrium.equilibrium.Equilibrium", "desc.geometry.surface.FourierRZToroidalSurface", ], - resolution_requirement="r", ) def _S(params, transforms, profiles, data, **kwargs): # To approximate surface are at ρ ~ 1, we scale by ρ⁻¹, assuming the integrand From be1101524a11f49d293b1661c44b2b67a5efd747 Mon Sep 17 00:00:00 2001 From: unalmis Date: Thu, 11 Jul 2024 16:11:24 -0400 Subject: [PATCH 05/20] Make changes in light of https://github.com/PlasmaControl/DESC/issues/1101#issuecomment-2223352058... Some of the master compute data changes with this commit. The changes which are not due to floating point differences or simply grid resolution differences (recall the grid used in test_compute_everything has L = 9, M=N=5 which is less than required for convergence to true integral quantities on that equilbrium) are given below: Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: A(z). Mismatched elements: 660 / 660 (100%) Max absolute difference: 0.6494644 Max relative difference: 0.81816076 x: array([0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591,... y: array([0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978,... Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: a_major/a_minor. Mismatched elements: 660 / 660 (100%) Max absolute difference: 11.33931768 Max relative difference: 4.99527722 x: array([ 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152,... y: array([4.057173, 4.057173, 4.057173, 4.057173, 4.057173, 4.057173, 4.057173, 4.057173, 4.057173, 4.057173, 4.057173, 4.057173, 4.057173, 4.057173, 4.057173, 4.057173, 4.057173, 4.057173,... NOTE that both quanties are incorrect, because in general we cannot compute these quantities accuratly on grids that do not sample the full poloidal domain. --- desc/backend.py | 16 ++++++++++ desc/compute/_basis_vectors.py | 4 +-- desc/compute/_geometry.py | 43 ++++++++++++++++++++------- desc/compute/geom_utils.py | 29 ++++++++++++++++++ desc/compute/utils.py | 2 +- desc/grid.py | 36 +++++++++++++++------- desc/objectives/_geometry.py | 5 ++++ docs/adding_compute_funs.rst | 40 +++++++++++++++++++++++++ tests/inputs/master_compute_data.pkl | Bin 7794246 -> 7778885 bytes tests/test_compute_funs.py | 21 +++++++------ 10 files changed, 163 insertions(+), 33 deletions(-) diff --git a/desc/backend.py b/desc/backend.py index 6e123f49e9..4fda28545f 100644 --- a/desc/backend.py +++ b/desc/backend.py @@ -371,6 +371,14 @@ def tangent_solve(g, y): ) return x, (jnp.linalg.norm(res), niter) + def trapezoid(y, x=None, dx=1.0, axis=-1): + """Integrate along the given axis using the composite trapezoidal rule.""" + if hasattr(jnp, "trapezoid"): + # https://github.com/google/jax/issues/20410 + return jnp.trapezoid(y, x, dx, axis) + else: + return jax.scipy.integrate.trapezoid(y, x, dx, axis) + # we can't really test the numpy backend stuff in automated testing, so we ignore it # for coverage purposes @@ -644,6 +652,14 @@ def repeat(a, repeats, axis=None, total_repeat_length=None): out = out[:total_repeat_length] return out + def trapezoid(y, x=None, dx=1.0, axis=-1): + """Integrate along the given axis using the composite trapezoidal rule.""" + if hasattr(np, "trapezoid"): + # https://github.com/numpy/numpy/issues/25586 + return np.trapezoid(y, x, dx, axis) + else: + return np.trapz(y, x, dx, axis) + def custom_jvp(fun, *args, **kwargs): """Dummy function for custom_jvp without JAX.""" fun.defjvp = lambda *args, **kwargs: None diff --git a/desc/compute/_basis_vectors.py b/desc/compute/_basis_vectors.py index d8f45a1280..44433252cb 100644 --- a/desc/compute/_basis_vectors.py +++ b/desc/compute/_basis_vectors.py @@ -1514,7 +1514,7 @@ def _e_sup_zeta_zz(params, transforms, profiles, data, **kwargs): parameterization=[ "desc.equilibrium.equilibrium.Equilibrium", "desc.geometry.surface.FourierRZToroidalSurface", - "desc.geometry.surface.ZernikeRZToroidalSection", + "desc.geometry.core.Surface", ], basis="basis", ) @@ -3545,7 +3545,7 @@ def _n_zeta(params, transforms, profiles, data, **kwargs): parameterization=[ "desc.equilibrium.equilibrium.Equilibrium", "desc.geometry.surface.FourierRZToroidalSurface", - "desc.geometry.surface.ZernikeRZToroidalSection", + "desc.geometry.core.Surface", ], ) def _e_sub_theta_rp(params, transforms, profiles, data, **kwargs): diff --git a/desc/compute/_geometry.py b/desc/compute/_geometry.py index 3fd612629a..1b7de579c0 100644 --- a/desc/compute/_geometry.py +++ b/desc/compute/_geometry.py @@ -9,10 +9,11 @@ expensive computations. """ -from desc.backend import jnp +from desc.backend import jnp, trapezoid from ..grid import QuadratureGrid from .data_index import register_compute_fun +from .geom_utils import warnif_sym from .utils import cross, dot, line_integrals, safenorm, surface_integrals @@ -171,9 +172,8 @@ def _V_rrr_of_r(params, transforms, profiles, data, **kwargs): "desc.geometry.surface.FourierRZToroidalSurface", ], resolution_requirement="t", - # FIXME: Add source grid requirement once omega is nonzero. ) -def _A_of_z(params, transforms, profiles, data, **kwargs): +def _A_of_z_FourierRZToroidalSurface(params, transforms, profiles, data, **kwargs): # Denote any vector v = [vᴿ, v^ϕ, vᶻ] with a tuple of its contravariant components. # We use a 2D divergence theorem over constant ϕ toroidal surface (i.e. R, Z plane). # In this geometry, the divergence operator on a polar basis vector is @@ -182,6 +182,7 @@ def _A_of_z(params, transforms, profiles, data, **kwargs): # where n is the unit normal such that n dot e_θ|ρ,ϕ = 0 and n dot e_ϕ|R,Z = 0, # and the labels following | denote those coordinates are fixed. # Now choose v = [0, 0, Z], and n in the direction (e_θ|ρ,ζ × e_ζ|ρ,θ) ⊗ [1, 0, 1]. + warnif_sym(transforms["grid"], "A(z)") n = data["n_rho"] n = n.at[:, 1].set(0) n = n / jnp.linalg.norm(n, axis=-1)[:, jnp.newaxis] @@ -189,8 +190,6 @@ def _A_of_z(params, transforms, profiles, data, **kwargs): data["A(z)"] = jnp.abs( line_integrals( transforms["grid"], - # FIXME: Integrand is not symmetric function, so this will fail - # on symmetric grids. data["Z"] * n[:, 2] * safenorm(data["e_theta|r,p"], axis=-1), # FIXME: Works currently for omega = zero, but for nonzero omega # we need to integrate over theta at constant phi. @@ -218,17 +217,40 @@ def _A_of_z(params, transforms, profiles, data, **kwargs): transforms={"grid": []}, profiles=[], coordinates="", - data=["A(z)"], + data=["Z", "n_rho", "e_theta|r,p", "rho", "phi"], parameterization=[ - "desc.equilibrium.equilibrium.Equilibrium", "desc.geometry.core.Surface", + "desc.equilibrium.equilibrium.Equilibrium", ], - resolution_requirement="z", + resolution_requirement="tz", ) def _A(params, transforms, profiles, data, **kwargs): - data["A"] = jnp.mean( - transforms["grid"].compress(data["A(z)"], surface_label="zeta") + # Denote any vector v = [vᴿ, v^ϕ, vᶻ] with a tuple of its contravariant components. + # We use a 2D divergence theorem over constant ϕ toroidal surface (i.e. R, Z plane). + # In this geometry, the divergence operator on a polar basis vector is + # div = ([∂_R, ∂_ϕ, ∂_Z] ⊗ [1, 0, 1]) dot . + # ∫ dA div v = ∫ dℓ n dot v + # where n is the unit normal such that n dot e_θ|ρ,ϕ = 0 and n dot e_ϕ|R,Z = 0, + # and the labels following | denote those coordinates are fixed. + # Now choose v = [0, 0, Z], and n in the direction (e_θ|ρ,ζ × e_ζ|ρ,θ) ⊗ [1, 0, 1]. + n = data["n_rho"] + n = n.at[:, 1].set(0) + n = n / jnp.linalg.norm(n, axis=-1)[:, jnp.newaxis] + max_rho = jnp.max(data["rho"]) + A = jnp.abs( + line_integrals( + transforms["grid"], + data["Z"] * n[:, 2] * safenorm(data["e_theta|r,p"], axis=-1), + line_label="theta", + fix_surface=("rho", max_rho), + expand_out=False, + ) + # To approximate area at ρ ~ 1, we scale by ρ⁻², assuming the integrand + # varies little from ρ = max_rho to ρ = 1 and a roughly circular cross-section. + / max_rho**2 ) + phi = transforms["grid"].compress(data["phi"], "zeta") + data["A"] = jnp.squeeze(trapezoid(A, phi) / jnp.ptp(phi) if A.size > 1 else A) return data @@ -424,6 +446,7 @@ def _R0_over_a(params, transforms, profiles, data, **kwargs): resolution_requirement="t", ) def _perimeter_of_z(params, transforms, profiles, data, **kwargs): + warnif_sym(transforms["grid"], "perimeter(z)") max_rho = jnp.max(data["rho"]) data["perimeter(z)"] = ( line_integrals( diff --git a/desc/compute/geom_utils.py b/desc/compute/geom_utils.py index fc5e1dab83..8618a74410 100644 --- a/desc/compute/geom_utils.py +++ b/desc/compute/geom_utils.py @@ -2,11 +2,40 @@ import functools +from termcolor import colored + from desc.backend import jnp +from ..utils import ResolutionWarning, errorif, warnif from .utils import safenorm, safenormalize +def warnif_sym(grid, name): + """Warn if grid has truncated poloidal domain to [0, π] ⊂ [0, 2π).""" + warnif( + grid.sym, + ResolutionWarning, + msg=colored( + "This grid only samples the poloidal domain θ ∈ [0, π], " + f"but, in general, the full domain [0, 2π) is required to compute {name}.", + "yellow", + ), + ) + + +def errorif_sym(grid, name): + """Warn if grid has truncated poloidal domain to [0, π] ⊂ [0, 2π).""" + errorif( + grid.sym, + ResolutionWarning, + msg=colored( + "This grid only samples the poloidal domain θ ∈ [0, π], " + f"but, in general, the full domain [0, 2π) is required to compute {name}.", + "yellow", + ), + ) + + def reflection_matrix(normal): """Matrix to reflect points across plane through origin with specified normal. diff --git a/desc/compute/utils.py b/desc/compute/utils.py index d5176bc40d..c0d5cecba0 100644 --- a/desc/compute/utils.py +++ b/desc/compute/utils.py @@ -903,7 +903,7 @@ def line_integrals( The coordinate curve to compute the integration over. To clarify, a theta (poloidal) curve is the intersection of a rho surface (flux surface) and zeta (toroidal) surface. - fix_surface : str, float + fix_surface : (str, float) A tuple of the form: label, value. ``fix_surface`` label should differ from ``line_label``. By default, ``fix_surface`` is chosen to be the flux surface at rho=1. diff --git a/desc/grid.py b/desc/grid.py index aad2c86f33..225cb15c7c 100644 --- a/desc/grid.py +++ b/desc/grid.py @@ -66,19 +66,19 @@ def _set_up(self): del self._unique_theta_idx def _enforce_symmetry(self): - """Enforce stellarator symmetry. + """Remove unnecessary nodes assuming poloidal symmetry. - 1. Remove nodes with theta > pi. - 2. Rescale theta spacing to preserve dtheta weight. - Need to rescale on each theta coordinate curve by a different factor. - dtheta should = 2π / number of nodes remaining on that theta curve. - Nodes on the symmetry line should not be rescaled. + 1. Remove nodes with θ > π. + 2. Rescale θ spacing to preserve dθ weight. + Need to rescale on each θ coordinate curve by a different factor. + dθ = 2π / number of nodes remaining on that θ curve. + Nodes on the symmetry line should not be rescaled. """ if not self.sym: return # indices where poloidal coordinate is off the symmetry line of - # poloidal coord=0 or pi + # poloidal coord=0 or π off_sym_line_idx = self.nodes[:, 1] % np.pi != 0 __, inverse, off_sym_line_per_rho_surf_count = np.unique( self.nodes[off_sym_line_idx, 0], return_inverse=True, return_counts=True @@ -109,7 +109,7 @@ def _enforce_symmetry(self): # The first two assumptions let _per_poloidal_curve = _per_rho_surf. # The third assumption lets the scale factor be constant over a # particular theta curve, so that each node in the open interval - # (0, pi) has its spacing scaled up by the same factor. + # (0, π) has its spacing scaled up by the same factor. # Nodes at endpoints 0, π should not be scaled. scale = off_sym_line_per_rho_surf_count / ( off_sym_line_per_rho_surf_count - to_delete_per_rho_surf_count @@ -206,7 +206,13 @@ def NFP(self): @property def sym(self): - """bool: True for stellarator symmetry, False otherwise.""" + """bool: True for poloidal symmetry, False otherwise. + + If true, the poloidal domain of this grid is [0, π] ⊂ [0, 2π). + Note that this is distinct from stellarator symmetry. + Still, when stellarator symmetry exists, flux surface integrals and + volume integrals are invariant to this truncation. + """ return self.__dict__.setdefault("_sym", False) @property @@ -865,7 +871,11 @@ class LinearGrid(_Grid): NFP : int Number of field periods (Default = 1). sym : bool - True for stellarator symmetry, False otherwise (Default = False). + Whether to truncate the poloidal domain to [0, π] ⊂ [0, 2π). + Note that this is distinct from stellarator symmetry. + Still, when stellarator symmetry exists, flux surface integrals and + volume integrals are invariant to this truncation, so setting this flag + to true will reduce memory consumption. (Default = False). axis : bool True to include a point at rho=0 (default), False for rho[0] = rho[1]/2. endpoint : bool @@ -1318,7 +1328,11 @@ class ConcentricGrid(_Grid): NFP : int number of field periods (Default = 1) sym : bool - True for stellarator symmetry, False otherwise (Default = False) + Whether to truncate the poloidal domain to [0, π] ⊂ [0, 2π). + Note that this is distinct from stellarator symmetry. + Still, when stellarator symmetry exists, flux surface integrals and + volume integrals are invariant to this truncation, so setting this flag + to true will reduce memory consumption. (Default = False). axis : bool True to include the magnetic axis, False otherwise (Default = False) node_pattern : {``'cheb1'``, ``'cheb2'``, ``'jacobi'``, ``linear``} diff --git a/desc/objectives/_geometry.py b/desc/objectives/_geometry.py index 664f80ff27..9b2fc1a3d7 100644 --- a/desc/objectives/_geometry.py +++ b/desc/objectives/_geometry.py @@ -9,6 +9,7 @@ from desc.grid import LinearGrid, QuadratureGrid from desc.utils import Timer, warnif +from ..compute.geom_utils import errorif_sym from .normalization import compute_scaling_factors from .objective_funs import _Objective from .utils import softmin @@ -118,6 +119,7 @@ def build(self, use_jit=True, verbose=1): M=eq.M * 2, N=eq.N * 2, NFP=eq.NFP, + sym=False, ) else: grid = self._grid @@ -238,6 +240,8 @@ def __init__( ): if target is None and bounds is None: target = 1 + if grid is not None: + errorif_sym(grid, name) self._grid = grid super().__init__( things=eq, @@ -280,6 +284,7 @@ def build(self, use_jit=True, verbose=1): M=eq.M * 2, N=eq.N * 2, NFP=eq.NFP, + sym=False, ) else: grid = self._grid diff --git a/docs/adding_compute_funs.rst b/docs/adding_compute_funs.rst index 66e3c2c047..efe9f708d6 100644 --- a/docs/adding_compute_funs.rst +++ b/docs/adding_compute_funs.rst @@ -124,6 +124,46 @@ dependencies specified by the decorator. The function itself should do any calcu needed using these dependencies and then add the output to the ``data`` dictionary and return it. The key in the ``data`` dictionary should match the ``name`` of the quantity. +Here is another example. +:: + + @register_compute_fun( + name="perimeter(z)", + label="P(\\zeta)", + units="m", + units_long="meters", + description="Perimeter of enclosed cross-section (enclosed constant phi surface), " + "scaled by max(ρ)⁻¹, as function of zeta", + dim=1, + params=[], + transforms={"grid": []}, + profiles=[], + coordinates="z", + data=["rho", "e_theta|r,p"], + parameterization=[ + "desc.equilibrium.equilibrium.Equilibrium", + "desc.geometry.core.Surface", + ], + # Document that the grid should have resolution in theta for an accurate + # computation, as required for integration over theta. + resolution_requirement="t", + ) + def _perimeter_of_z(params, transforms, profiles, data, **kwargs): + warnif_sym(transforms["grid"], "perimeter(z)") + max_rho = jnp.max(data["rho"]) + data["perimeter(z)"] = ( + line_integrals( + transforms["grid"], + safenorm(data["e_theta|r,p"], axis=-1), + line_label="theta", + fix_surface=("rho", max_rho), + ) + # To approximate perimeter at ρ ~ 1, we scale by ρ⁻¹, assuming the integrand + # varies little from ρ = max_rho to ρ = 1. + / max_rho + ) + return data + Once a new quantity is added to the ``desc.compute`` module, there are two final steps involving the testing suite which must be checked. The first step is implementing the correct axis limit, or marking it as not finite or not implemented. We can check whether the axis limit currently evaluates as finite by computing the quantity on a grid with nodes at the axis. diff --git a/tests/inputs/master_compute_data.pkl b/tests/inputs/master_compute_data.pkl index b356ddfceb21875df5431807cc19782caa6b0141..3452586309de33fcb1d360db904b9963d78956ec 100644 GIT binary patch delta 72059 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 besq3Be3<|gABAop<052m9ZCF8&WQg3OQq7V delta 61133 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 J Date: Fri, 12 Jul 2024 01:11:14 -0400 Subject: [PATCH 06/20] Fix math error in comment --- desc/compute/_geometry.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/desc/compute/_geometry.py b/desc/compute/_geometry.py index 1b7de579c0..2017666d8c 100644 --- a/desc/compute/_geometry.py +++ b/desc/compute/_geometry.py @@ -174,9 +174,10 @@ def _V_rrr_of_r(params, transforms, profiles, data, **kwargs): resolution_requirement="t", ) def _A_of_z_FourierRZToroidalSurface(params, transforms, profiles, data, **kwargs): - # Denote any vector v = [vᴿ, v^ϕ, vᶻ] with a tuple of its contravariant components. + # Denote any vector v = v¹ R̂ + v² ϕ̂ + v³ Ẑ by v = [v¹, v², v³] where R̂, ϕ̂, Ẑ + # are the normalized basis vectors of the cylindrical coordinates R, ϕ, Z. # We use a 2D divergence theorem over constant ϕ toroidal surface (i.e. R, Z plane). - # In this geometry, the divergence operator on a polar basis vector is + # In this geometry, the divergence operator in this coordinate system is # div = ([∂_R, ∂_ϕ, ∂_Z] ⊗ [1, 0, 1]) dot . # ∫ dA div v = ∫ dℓ n dot v # where n is the unit normal such that n dot e_θ|ρ,ϕ = 0 and n dot e_ϕ|R,Z = 0, @@ -225,9 +226,10 @@ def _A_of_z_FourierRZToroidalSurface(params, transforms, profiles, data, **kwarg resolution_requirement="tz", ) def _A(params, transforms, profiles, data, **kwargs): - # Denote any vector v = [vᴿ, v^ϕ, vᶻ] with a tuple of its contravariant components. + # Denote any vector v = v¹ R̂ + v² ϕ̂ + v³ Ẑ by v = [v¹, v², v³] where R̂, ϕ̂, Ẑ + # are the normalized basis vectors of the cylindrical coordinates R, ϕ, Z. # We use a 2D divergence theorem over constant ϕ toroidal surface (i.e. R, Z plane). - # In this geometry, the divergence operator on a polar basis vector is + # In this geometry, the divergence operator in this coordinate system is # div = ([∂_R, ∂_ϕ, ∂_Z] ⊗ [1, 0, 1]) dot . # ∫ dA div v = ∫ dℓ n dot v # where n is the unit normal such that n dot e_θ|ρ,ϕ = 0 and n dot e_ϕ|R,Z = 0, @@ -240,6 +242,7 @@ def _A(params, transforms, profiles, data, **kwargs): A = jnp.abs( line_integrals( transforms["grid"], + # FIXME: integrate over constant phi when omega is nonzero. data["Z"] * n[:, 2] * safenorm(data["e_theta|r,p"], axis=-1), line_label="theta", fix_surface=("rho", max_rho), From acf04868504b92d0d700ce9bbb8c93057e6a0f89 Mon Sep 17 00:00:00 2001 From: unalmis Date: Sat, 13 Jul 2024 16:52:30 -0400 Subject: [PATCH 07/20] Update master compute data xyz: following changes Again, the new values are wrong, but I don't see an issue because in general you can't compute these on symmetric grids (A(z), perimeter(z)). (It just happened that for the test surface in this test, the method we used to compute A(z) and perimter(z) before was correct on symmetric grids. It will not be correct for more general surfaces on symmetric grids, just like the new method that this PR defaults to for equilibrium.compute(A(z)). Some small differences in the others values are just becaues the grid in this test doesn't have sufficient resolution for convergence as mentioned in previous commit. Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: A. Mismatched elements: 1 / 1 (100%) Max absolute difference: 0.00127829 Max relative difference: 0.00159001 x: array(0.805229) y: array(0.80395) Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: A(z). Mismatched elements: 660 / 660 (100%) Max absolute difference: 0.6494644 Max relative difference: 0.81816076 x: array([0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591, 0.792591,... y: array([0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978, 0.762978,... Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: R0. Mismatched elements: 1 / 1 (100%) Max absolute difference: 0.00875172 Max relative difference: 0.00158748 x: array(5.504201) y: array(5.512953) Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: A(r). Mismatched elements: 594 / 660 (90%) Max absolute difference: 0.00127829 Max relative difference: 0.00159001 x: array([0. , 0. , 0. , 0. , 0. , 0. , 0.010307, 0.010307, 0.010307, 0.010307, 0.010307, 0.010307, 0.041142, 0.041142, 0.041142, 0.041142, 0.041142, 0.041142,... y: array([0. , 0. , 0. , 0. , 0. , 0. , 0.010291, 0.010291, 0.010291, 0.010291, 0.010291, 0.010291, 0.041077, 0.041077, 0.041077, 0.041077, 0.041077, 0.041077,... Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: S. Mismatched elements: 1 / 1 (100%) Max absolute difference: 0.17114453 Max relative difference: 0.00127152 x: array(134.76995) y: array(134.598806) Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: a. Mismatched elements: 1 / 1 (100%) Max absolute difference: 0.00040201 Max relative difference: 0.00079469 x: array(0.506273) y: array(0.505871) Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: R0/a. Mismatched elements: 1 / 1 (100%) Max absolute difference: 0.02594014 Max relative difference: 0.00238028 x: array(10.872004) y: array(10.897944) Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: perimeter(z). Mismatched elements: 660 / 660 (100%) Max absolute difference: 0.05135033 Max relative difference: 0.01242666 x: array([4.250749, 4.250749, 4.250749, 4.250749, 4.250749, 4.250749, 4.250749, 4.250749, 4.250749, 4.250749, 4.250749, 4.250749, 4.250749, 4.250749, 4.250749, 4.250749, 4.250749, 4.250749,... y: array([4.231189, 4.231189, 4.231189, 4.231189, 4.231189, 4.231189, 4.231189, 4.231189, 4.231189, 4.231189, 4.231189, 4.231189, 4.231189, 4.231189, 4.231189, 4.231189, 4.231189, 4.231189,... Not equal to tolerance rtol=1e-10, atol=1e-10 Parameterization: desc.equilibrium.equilibrium.Equilibrium. Name: a_major/a_minor. Mismatched elements: 660 / 660 (100%) Max absolute difference: 11.37253303 Max relative difference: 5.08430436 x: array([ 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152, 3.864152,... y: array([4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882, 4.009882,... --- desc/compute/_geometry.py | 8 ++++++-- desc/compute/utils.py | 13 ++++++++++--- tests/inputs/master_compute_data_xyz.pkl | Bin 7718930 -> 7703614 bytes 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/desc/compute/_geometry.py b/desc/compute/_geometry.py index 2017666d8c..e8c57b6824 100644 --- a/desc/compute/_geometry.py +++ b/desc/compute/_geometry.py @@ -173,7 +173,7 @@ def _V_rrr_of_r(params, transforms, profiles, data, **kwargs): ], resolution_requirement="t", ) -def _A_of_z_FourierRZToroidalSurface(params, transforms, profiles, data, **kwargs): +def _A_of_z(params, transforms, profiles, data, **kwargs): # Denote any vector v = v¹ R̂ + v² ϕ̂ + v³ Ẑ by v = [v¹, v², v³] where R̂, ϕ̂, Ẑ # are the normalized basis vectors of the cylindrical coordinates R, ϕ, Z. # We use a 2D divergence theorem over constant ϕ toroidal surface (i.e. R, Z plane). @@ -213,6 +213,8 @@ def _A_of_z_FourierRZToroidalSurface(params, transforms, profiles, data, **kwarg units="m^{2}", units_long="square meters", description="Average enclosed cross-sectional area, scaled by max(ρ)⁻²", + # Simple toroidal average A₀ = ∫ A(ζ) dζ / (2π) matches the convention for the + # average major radius R₀ = ∫ R(ρ=0) dζ / (2π). dim=0, params=[], transforms={"grid": []}, @@ -365,10 +367,12 @@ def _S_rr_of_r(params, transforms, profiles, data, **kwargs): @register_compute_fun( name="R0", - label="R_{0}", + label="R_{0} = V / (2\\pi A) = \\int R(\\rho=0) d\\zeta / (2\\pi)", units="m", units_long="meters", description="Average major radius", + # This differs from the average value of R on the magnetic axis. + # R₀ ≠ 〈 R(ρ=0) 〉 = ∫ (R ‖e_ζ‖)(ρ=0) dζ / ∫ ‖e_ζ‖(ρ=0) dζ. dim=0, params=[], transforms={}, diff --git a/desc/compute/utils.py b/desc/compute/utils.py index e3110ef8fa..8e8e1c2495 100644 --- a/desc/compute/utils.py +++ b/desc/compute/utils.py @@ -678,7 +678,10 @@ def _has_transforms(qty, transforms, parameterization): def dot(a, b, axis=-1): - """Batched vector dot product. + """Batched coordinate dot product. + + This returns the dot product between elements of a vector space only + if the basis vectors associated with these coordinates are orthonormal. Parameters ---------- @@ -695,11 +698,15 @@ def dot(a, b, axis=-1): y = sum(a*b, axis=axis) """ - return jnp.sum(a * b, axis=axis, keepdims=False) + return jnp.sum(a * b, axis=axis) def cross(a, b, axis=-1): - """Batched vector cross product. + """Batched coordinate cross product. + + This returns the cross product between elements of a vector space only + if the basis vectors associated with these coordinates are orthonormal, + and the coordinate system is right-handed. Parameters ---------- diff --git a/tests/inputs/master_compute_data_xyz.pkl b/tests/inputs/master_compute_data_xyz.pkl index 41faf549882321c2449dde4ac15d9de39f7f692f..381b217b6626049f27319d8c4f7ffc6e9c73e8c8 100644 GIT binary patch delta 138563 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%0A|HlqJYAo|`v`hx=jiq2Rlp3P0u6Pg-04t2g_Td4 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 delta 126134 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 Date: Sat, 20 Jul 2024 13:11:17 -0400 Subject: [PATCH 08/20] Loosen test tolerance for vmec comparison test for length scale quantitites --- tests/baseline/test_plot_b_mag.png | Bin 34290 -> 34335 bytes tests/test_configuration.py | 1 + tests/test_vmec.py | 11 ++++++++--- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/tests/baseline/test_plot_b_mag.png b/tests/baseline/test_plot_b_mag.png index 9f59728c33189c7a3dbab4ee93df6297bcc32c02..76a9f62cade724e8850f1264008ae34022a264bc 100644 GIT binary patch literal 34335 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 br?c=qIbYKgr}-7W454{d=Sses^`rj*7L}t* literal 34290 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 j|NoCLh5zpi!UiYv=Fyt(x8$_BlVo_o_ Date: Sat, 20 Jul 2024 13:17:08 -0400 Subject: [PATCH 09/20] Remove changes to adding_compute_funs.rst --- docs/adding_compute_funs.rst | 40 ------------------------------------ tests/test_vmec.py | 1 - 2 files changed, 41 deletions(-) diff --git a/docs/adding_compute_funs.rst b/docs/adding_compute_funs.rst index efe9f708d6..66e3c2c047 100644 --- a/docs/adding_compute_funs.rst +++ b/docs/adding_compute_funs.rst @@ -124,46 +124,6 @@ dependencies specified by the decorator. The function itself should do any calcu needed using these dependencies and then add the output to the ``data`` dictionary and return it. The key in the ``data`` dictionary should match the ``name`` of the quantity. -Here is another example. -:: - - @register_compute_fun( - name="perimeter(z)", - label="P(\\zeta)", - units="m", - units_long="meters", - description="Perimeter of enclosed cross-section (enclosed constant phi surface), " - "scaled by max(ρ)⁻¹, as function of zeta", - dim=1, - params=[], - transforms={"grid": []}, - profiles=[], - coordinates="z", - data=["rho", "e_theta|r,p"], - parameterization=[ - "desc.equilibrium.equilibrium.Equilibrium", - "desc.geometry.core.Surface", - ], - # Document that the grid should have resolution in theta for an accurate - # computation, as required for integration over theta. - resolution_requirement="t", - ) - def _perimeter_of_z(params, transforms, profiles, data, **kwargs): - warnif_sym(transforms["grid"], "perimeter(z)") - max_rho = jnp.max(data["rho"]) - data["perimeter(z)"] = ( - line_integrals( - transforms["grid"], - safenorm(data["e_theta|r,p"], axis=-1), - line_label="theta", - fix_surface=("rho", max_rho), - ) - # To approximate perimeter at ρ ~ 1, we scale by ρ⁻¹, assuming the integrand - # varies little from ρ = max_rho to ρ = 1. - / max_rho - ) - return data - Once a new quantity is added to the ``desc.compute`` module, there are two final steps involving the testing suite which must be checked. The first step is implementing the correct axis limit, or marking it as not finite or not implemented. We can check whether the axis limit currently evaluates as finite by computing the quantity on a grid with nodes at the axis. diff --git a/tests/test_vmec.py b/tests/test_vmec.py index b165728e51..7a9b146aca 100644 --- a/tests/test_vmec.py +++ b/tests/test_vmec.py @@ -482,7 +482,6 @@ def test_vmec_save_1(VMEC_save): vmec.variables["chi"][:], desc.variables["chi"][:], atol=2e-5 ) np.testing.assert_allclose(vmec.variables["chipf"][:], desc.variables["chipf"][:]) - # TODO: loosen test tol np.testing.assert_allclose( vmec.variables["Rmajor_p"][:], desc.variables["Rmajor_p"][:], rtol=3e-4 ) From 5912c793ecdb9aa672ac48f4f2917fbd02f0df25 Mon Sep 17 00:00:00 2001 From: unalmis Date: Sat, 20 Jul 2024 19:32:40 -0400 Subject: [PATCH 10/20] Fix bug in plot_1d - previously, error object was being returned instead of raised. - previously, could not compute elongation, or more generally any quantity that that required a reduction over some coordinate to compute. In some cases we correctly handled this logic in eq.compute() but in other cases plot_1d would just error. --- desc/equilibrium/equilibrium.py | 18 ++++- desc/plotting.py | 104 ++++++++++++-------------- tests/baseline/test_1d_elongation.png | Bin 13126 -> 13150 bytes tests/test_plotting.py | 2 +- tests/test_surfaces.py | 1 + 5 files changed, 64 insertions(+), 61 deletions(-) diff --git a/desc/equilibrium/equilibrium.py b/desc/equilibrium/equilibrium.py index e2dbc227fb..6affad480b 100644 --- a/desc/equilibrium/equilibrium.py +++ b/desc/equilibrium/equilibrium.py @@ -973,7 +973,6 @@ def need_src(name): # Warn if best way to compute accurately is increasing resolution. for dep in deps: req = data_index[p][dep]["resolution_requirement"] - coords = data_index[p][dep]["coordinates"] msg = lambda direction: colored( f"Dependency {dep} may require more {direction}" " resolution to compute accurately.", @@ -983,7 +982,9 @@ def need_src(name): # if need more radial resolution "r" in req and grid.L < self.L_grid # and won't override grid to one with more radial resolution - and not (override_grid and coords in {"z", ""}), + and not ( + override_grid and (is_1dz_tor_grid(dep) or is_0d_vol_grid(dep)) + ), ResolutionWarning, msg("radial"), ) @@ -991,7 +992,14 @@ def need_src(name): # if need more poloidal resolution "t" in req and grid.M < self.M_grid # and won't override grid to one with more poloidal resolution - and not (override_grid and coords in {"r", "z", ""}), + and not ( + override_grid + and ( + is_1dr_rad_grid(dep) + or is_1dz_tor_grid(dep) + or is_0d_vol_grid(dep) + ) + ), ResolutionWarning, msg("poloidal"), ) @@ -999,7 +1007,9 @@ def need_src(name): # if need more toroidal resolution "z" in req and grid.N < self.N_grid # and won't override grid to one with more toroidal resolution - and not (override_grid and coords in {"r", ""}), + and not ( + override_grid and (is_1dr_rad_grid(dep) or is_0d_vol_grid(dep)) + ), ResolutionWarning, msg("toroidal"), ) diff --git a/desc/plotting.py b/desc/plotting.py index 551e4fe469..9d0ee8bbb9 100644 --- a/desc/plotting.py +++ b/desc/plotting.py @@ -185,15 +185,14 @@ def _format_ax(ax, is3d=False, rows=1, cols=1, figsize=None, equal=False): return plt.gcf(), ax else: ax = np.atleast_1d(ax) - if isinstance(ax.flatten()[0], matplotlib.axes.Axes): - return plt.gcf(), ax - else: - raise TypeError( - colored( - "ax argument must be None or an axis instance or array of axes", - "red", - ) - ) + errorif( + not isinstance(ax.flatten()[0], matplotlib.axes.Axes), + TypeError, + colored( + "ax argument must be None or an axis instance or array of axes", "red" + ), + ) + return plt.gcf(), ax def _get_grid(**kwargs): @@ -276,11 +275,10 @@ def _compute(eq, name, grid, component=None, reshape=True): """ parameterization = _parse_parameterization(eq) - if name not in data_index[parameterization]: - raise ValueError( - f"Unrecognized value '{name}' for " - + f"parameterization {parameterization}." - ) + errorif( + name not in data_index[parameterization], + msg=f"Unrecognized value '{name}' for parameterization {parameterization}.", + ) assert component in [ None, "R", @@ -292,9 +290,7 @@ def _compute(eq, name, grid, component=None, reshape=True): label = data_index[parameterization][name]["label"] - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - data = eq.compute(name, grid=grid)[name] + data = eq.compute(name, grid=grid)[name] if data_index[parameterization][name]["dim"] > 1: if component is None: @@ -510,47 +506,50 @@ def plot_1d(eq, name, grid=None, log=False, ax=None, return_data=False, **kwargs grid_kwargs = {"L": default_L, "N": default_N, "NFP": NFP} grid = _get_grid(**grid_kwargs) plot_axes = _get_plot_axes(grid) + + data, ylabel = _compute( + eq, name, grid, kwargs.pop("component", None), reshape=False + ) + + # reshape data to 1D if len(plot_axes) != 1: - return ValueError(colored("Grid must be 1D", "red")) + surface_label = {"r": "rho", "t": "theta", "z": "zeta"}.get( + data_index[parameterization][name]["coordinates"], None + ) + axis = {"r": 0, "t": 1, "z": 2}.get( + data_index[parameterization][name]["coordinates"], None + ) + errorif( + surface_label is None or axis is None, + NotImplementedError, + msg=colored("Grid must be 1D", "red"), + ) + data = grid.compress(data, surface_label=surface_label) + nodes = grid.compress(grid.nodes[:, axis], surface_label=surface_label) + else: + axis = plot_axes[0] + data = data.ravel() + nodes = grid.nodes[:, axis] - data, ylabel = _compute(eq, name, grid, kwargs.pop("component", None)) label = kwargs.pop("label", None) - fig, ax = _format_ax(ax, figsize=kwargs.pop("figsize", None)) - - # reshape data to 1D - data = data.flatten() linecolor = kwargs.pop("linecolor", colorblind_colors[0]) ls = kwargs.pop("ls", "-") lw = kwargs.pop("lw", 1) if log: data = np.abs(data) # ensure data is positive for log plot - ax.semilogy( - grid.nodes[:, plot_axes[0]], - data, - label=label, - color=linecolor, - ls=ls, - lw=lw, - ) + ax.semilogy(nodes, data, label=label, color=linecolor, ls=ls, lw=lw) else: - ax.plot( - grid.nodes[:, plot_axes[0]], - data, - label=label, - color=linecolor, - ls=ls, - lw=lw, - ) + ax.plot(nodes, data, label=label, color=linecolor, ls=ls, lw=lw) xlabel_fontsize = kwargs.pop("xlabel_fontsize", None) ylabel_fontsize = kwargs.pop("ylabel_fontsize", None) assert len(kwargs) == 0, f"plot_1d got unexpected keyword argument: {kwargs.keys()}" - xlabel = _AXIS_LABELS_RTZ[plot_axes[0]] + xlabel = _AXIS_LABELS_RTZ[axis] ax.set_xlabel(xlabel, fontsize=xlabel_fontsize) ax.set_ylabel(ylabel, fontsize=ylabel_fontsize) _set_tight_layout(fig) - plot_data = {xlabel.strip("$").strip("\\"): grid.nodes[:, plot_axes[0]], name: data} + plot_data = {xlabel.strip("$").strip("\\"): nodes, name: data} if label is not None: ax.legend() @@ -629,8 +628,7 @@ def plot_2d( grid_kwargs = {"M": 33, "N": 33, "NFP": eq.NFP, "axis": False} grid = _get_grid(**grid_kwargs) plot_axes = _get_plot_axes(grid) - if len(plot_axes) != 2: - return ValueError(colored("Grid must be 2D", "red")) + errorif(len(plot_axes) != 2, msg=colored("Grid must be 2D", "red")) component = kwargs.pop("component", None) if name != "B*n": data, label = _compute( @@ -643,14 +641,12 @@ def plot_2d( field = kwargs.pop("field", None) errorif( field is None, - ValueError, - "If B*n is entered as the variable to plot, a magnetic field" + msg="If B*n is entered as the variable to plot, a magnetic field" " must be provided.", ) errorif( not np.all(np.isclose(grid.nodes[:, 0], 1)), - ValueError, - "If B*n is entered as the variable to plot, " + msg="If B*n is entered as the variable to plot, " "the grid nodes must be at rho=1.", ) @@ -920,14 +916,12 @@ def plot_3d( field = kwargs.pop("field", None) errorif( field is None, - ValueError, - "If B*n is entered as the variable to plot, a magnetic field" + msg="If B*n is entered as the variable to plot, a magnetic field" " must be provided.", ) errorif( not np.all(np.isclose(grid.nodes[:, 0], 1)), - ValueError, - "If B*n is entered as the variable to plot, " + msg="If B*n is entered as the variable to plot, " "the grid nodes must be at rho=1.", ) @@ -957,8 +951,7 @@ def plot_3d( label = r"$\mathbf{B} \cdot \hat{n} ~(\mathrm{T})$" errorif( len(kwargs) != 0, - ValueError, - f"plot_3d got unexpected keyword argument: {kwargs.keys()}", + msg=f"plot_3d got unexpected keyword argument: {kwargs.keys()}", ) with warnings.catch_warnings(): warnings.simplefilter("ignore") @@ -2391,8 +2384,7 @@ def plot_coils(coils, grid=None, fig=None, return_data=False, **kwargs): unique = kwargs.pop("unique", False) errorif( len(kwargs) != 0, - ValueError, - f"plot_coils got unexpected keyword argument: {kwargs.keys()}", + msg=f"plot_coils got unexpected keyword argument: {kwargs.keys()}", ) if not isinstance(lw, (list, tuple)): @@ -2811,7 +2803,7 @@ def plot_boozer_surface( iota = grid_compute.compress(data["iota"]) else: # OmnigenousField iota = kwargs.pop("iota", None) - errorif(iota is None, ValueError, "iota must be supplied for OmnigenousField") + errorif(iota is None, msg="iota must be supplied for OmnigenousField") with warnings.catch_warnings(): warnings.simplefilter("ignore") data = thing.compute( diff --git a/tests/baseline/test_1d_elongation.png b/tests/baseline/test_1d_elongation.png index ccf04b533cb07f1c8f13fe69ef62ebcfb43ef058..65f760839a3561ebdf93265bf40b073a23b3b369 100644 GIT binary patch literal 13150 zcmd6ObyU>fyY5JLNXO994H83&q#}q)cdCeV4DFCZmmnz82uOpZbfYK?jWkHNq~zK2 z{hfQ)y1#q=J8Rv0Sc^r>-k-hqyWe=;=Y2mBkG0f@3FrwR5D2k`y7ChU%hJ^r^2pNN*}=)(;iVOer>(2oOD9J$L1{q|ewG*R?#^y7 zA)(j*dw`&m>vN$Ix?NWA5PWBKLpKP7)Dr!Dt5BifB?Kb+T|@caGkE&WtQY*PZimFa zuiY@=25Y~j5{8Dlk_J0g9=AG00`}Y6_GC8tsN}-0Df)(9I`>THvx>h5^<4UM0BzIxG_tX;BiWB2pzg_o(XDTiQ^G16@<{V?6l2KG@4myIpw zD+dkq4H7v(K^THWa#$kB$P+mD$=KKuL$H;Ul@luzkx2F1)Oh6N8XXv{Y-}0^EXv9p z`2UjzSCT{9$UYYryDYTb!otPvM4@!t8QIv9P{YGP9UV&1P#NmExj9oGfhhiXOk5I+ zlkKS-Ycle*l1CpTEXPX>O?`;LCkqP}kol`yDypiH#BT4NJb4oT{yi@&jAK9$r#i~A zY)Z(a{>@bN^Ld}lZ2~ZSub`BTot>P9hD++ltc#nQ*w=x1Yfq6>QzEyYB#J^K7bePF z|1Pc6)Vw?n6gkKL8doMH`cbQZ0;)7GDketG%p4aTO;m06n~iN)(!WK)73=@E{HaY@ z9=-mU!%jwS$R8ybFT$MB5w!E%Ii~^#=nh)MQC94*H>`I^A6o{R-5vM$B~EA&G!Pah zb6e8g_o$(P#vu9Q^@{Jih2sdGP+yJvM5)9nGBJ!|{uPSt%2tV3XC5LJ+G)iadlg=} zJ8gwRA^R|z>-X5g0-P~+J{qBPqC1veJrR6o`K+E)HS}UZ^{Gt8yzi|jd1+h)ec$M~ zZ9y0lxgqj2j%uOQsf^9TigMe5|NQx(amn)hpVp@Ior?2>YdH5enx~R>OYSbE>*~rj zw>&@c^)lbMF%1&!McnE1jf}Mx*VAQzWW|54u+?MC!E9V?k89~3+vG$gAp4>}a+kCZ z{4h-YHP7s%jiiM37M7GLLfTMzh(V@DZ^DxVdP?O&KlezW2NRiocIdjlrDbgqFC#I4 zM3@LtK>G_zsubVseX4FTNJWN85HlHh(f`5YVD^vljG?|@X22uml0hYeRBU40 zdIL|EkxyfY^QYlE_+7^6D8-RuK9-HL+U%vP_sONZpy6a2n$>aVuqT zxHBfTVf?+N%_Vbbt4TYa!Q0dD$LF6#{Zfn(<>hm2^IXaudhK;uZ?OMRXwOhYKX!U9 zdtoR@Ga7*h8Ja8VcFQzvTX%Mfjys})_S#e^26XAM_D)l(atzAu&D%b`ChprJ^tvynBLEO$4> zZ~J5@9nC})bMEBCL<~vEx@q}$Z{LRG<>kqoUtP~K?sxP(zT6qIm6fl@_3@TrVB;iD z%PRl#xpK`9d$ii>$4QoQjS+E;k^l7C=H}+n$+_r9Z298%X=xE>XK))E8x}#qvWMkk zGiCSoBwJOj;(<0uDr)0L^u2xg1x94xO-WMgnhtkGs>pfg51y)NSzh6A$zZ3%#kCcz zl`Z#;G2|?hC6GI)w}x$3`Q&MBTkEW3JMqWM2#e`OgeXcjRqW-gb1U0e0HbXB(|u7w|yox9O<}ZgL;I%+BdbCJogR#8O-RYIAM|f)`*#GTy}rd z_wV?7Oe-#X$|(;DMp%#4Z}ps<+=t(#}LnKZjGT3dLQeKW`MJrg`?;Ba~1&$UcZ3Q@>hBIbl!81v1u(+JMEYeXJda z5EsYN!${=)^j-9+n5f3Zt@VF;T)Mmv{_QI7?ZE|xZS=FY7rxqQ>!rJslMBW)2R4z- zGCGJzn%#j#PFWyk^2vm_G&i@xlhp{b#*Ai|G}($rf%VlCL{@T(;Qc(I_E!uyt5oDL z5aq|B;bU;&E`Q)o$u=BJyfHB}S=PS9+79%FiW-S^|Gq4Ff%`Ihvof_}@z`Rsbtt?( zlQ~G1QKeUekDm}zq~2jBkvvh+655vOu zhm`RRSWNfB+vSFe#w>Su%zPi(#Lmg-y?Nt!0?%u0UFWuoz#hhKDLYA}D(F&(rOLUV zO9d=yS4r2JLH;LqchY?&i{b_2Y|6{0TR8>cp;>ulR9}CZ(g5||?RcNm9e>L}oLk+U zvbq~%BWL}MBQ5GXAzwqPmW{+OnVPc&W!BZM;)N9lE?Df86=J>p>HXjYJ$DM}m17`y z6m-%z8)N18H9V04_iG4t4lb#xXLwyTbiClukDtx0LcSU6fLHQ}bRDRXp*3P1@iB(6 zdim{{RBlMrhB9YaPByWx&@-z5r7UocIP4s*etblsgF`P3jki2?0?%~1Awj5SSl%QA zr8B@psH_dVJFDIl@r}IyBXC{k*szZz;CJHItr2L3mWk{hFEx_shc;f<^9HIydk3@$ z2dJuQKwZluozEX=8?gAir7RB7#Bu27r9yw!b3QV$F#m%ox3gJAtrCx)Ozw|oZD&{E z?%C-}`4|-&dm|a~$wb|-h6CP7=d}j2eQlk=L<$U-PbEx-`5tHikZwzxBR&W~)mM*_ z=PDGB988>;&l-MN%h8NPXns3CdPO_h2_nUr6+;(CpEXdaQR9_B9?E1RG65v z2YXJ^F)AFtPJIpr< zzY-ndU?~Z%eOx>5!4S#%jYZ|kNAGfOR0_O_-b;Ng=}lvq1X)F3bShQ|+Mz;W=E51q ziVT^Nh!BIoMyyU>pPYAf)$82U5!hCW1Pw%PxP@6i1@FHKR|V*!_=#UNwz*l6>K}+; z1_J?MSKDe&@#E=XL^BPqiW+MbuW{9bMGN*`_Nyy!I|lq@m|HtrLGWY-?e#mNRRV_j zXQs>w^{`3cIw}oVRMEZ;%+#44W`z+X=t}9E#ks8zr_vQuLc4P+6{9VDq7{DKHQI)G znF8S!XZ_?24$l<;E{yzNpDS*xA}@S=Thg^p_0Z@{BnnV?kJwo4Eo>2L-+|NZHNAy)Y zFhp|jb!Hc>%HP1gYJwd{eYsOj)a;*5Uc3#gNf+E{LefW!q>FP)H#;66lHuwU5@OHQ zx7Kzgw?*j+%A*n3RyGAf_c`VTk;~%wb6jR-=E7&ZM9lJx zr}KddK1b`8>)f0G`}BT!5m;FLu+q;DE0dCSICzhg-~X^352aHQ*-l_{x;v}>=uzm` zuQE8KOwj;`caDruFflO=y%4YWKI8=GKOrL{Hk6R2qq`ehsQKtN_&Q2qy>kcK(b2Ka zUyz3fUqeH~=YsypK(y{sCRe0$Qw2_^j}QJ2B^!Lt3_i7Ry{MO{^pPwTy|OjM35mr&wSj1Q{^xv%5U08IVg8J z1AT`J;ZA-~Vo-^3xcZ~h*r_>x&wx`!@Et3U1Y~;fZFcihKJXwzJ^&u|^*=Y9-iI{P z^hHwfWj)bo4U~ex=!II&a+oO6KBZMY7!~(g7+T>4cQ^2>c3X7v+e+&2ptd_@ac4mV z*2daAvHz8c_ZNH}8lZIDXX?ywsi}xqD-Qz}j33duR$f}z?|;F7DTzMx){T+!FO411 z52{eadQVRAW|f5a>x%*6v+{A38FrgY)LaGBZz2mYL|C$rr; zwyC4Nq_MTbnZGzT3|NAG0Qdj`UX#$rb-@)Ar?${K z3|6wm<#OXlQeR#`Q|n3}wH~|S4s-Y+*x7jn-)m6!k^9CWAwivykzr6_am&x&U*!2u z#;)Gp&Ysn^)@Z%r?liII`~6&*3j=9l@T=nqawxQPP~FZ_)d7+*nHKylOyaEZS5)kM zn?G9S#VYq6i4~M%ja(QS$oU+#o$O2}q@;uarDpDpg$BpPk%H$t?P!*lmUhQ5NIurl zL3DK~b8vAjA5WN1cu`i1gxzVEd*Y|`M04V13%^XDMF;?TM}$;+!Na&q$aD02v0X4=xdUJ~3xr6MvQSg*Jf z+_h%ZNqA6!A))R5^2{w3adFD*?ChSiCw8w?qi^?5R{@BHk^D7xT}qjA%itdIx6Ntb zjWFuZZP)@P3S_n^UALu-1%V&bn0{{>#^R+$MDT|U+Pzt+s2TDBcs;cwoks6P7N)82WwPK8+ zWLN2>hPHU8E~+I}AJ)0CsF4~jRZkbZ{2Se#vZ4lGY>iqx|LFnH=EBGa&LC_nE4wak zm$If?YvuD-jsa{BPrAE#N9#PTV0&_sbR7g7?ChBIF{-2QBn_>7d^=}RDO^XlulmNf zMUPIsRM0?^`^db5;CGDVoZ_QLKT6}u&DSi0AQk{Xy$uMMd~b^LQ44LP8ZYd(x-t%_ zOk^cRItXmOz2)iq_D#vsk~K0as?v4kfsT&mPY@1&>q@c~e=!5DHEI8E=mT-D7s7Hq z=I)f|w{o|YZ=?qmZe%+;IvoAeGc)6;`1FvG)=yNA{shHUL%~h4X{~UArJRkcABqSM zLFJm$Rn)SX$@ExWO_X)lyDU5U`|U5>11rVGD8&|`uEFlYsFv9qEF(*dUO&V=F)i$f z#AR0obI2t^?>f#%G0J!neSas^yVw~nVmCkwW)6crniRiQF#@1m2O09~qZ<@zB=AYa z?fly)9$&o2*0^P781V~x`;PPDtxC&I9Q2%c3vCdBL2v^AN1fY4k1i|}uC&o}U-eN; z1rI+L7nk4JVtAdrS!+OZAvdQ6$j!lhOXR(?SlK&oQ*9TJvGM1n|Fyr8Z0{%BP!0qx z7ShZoEiFBJQrRr$v~*FK=JMd#-J0d^d}APB;a4te(%C?mHU>BNo^m)~J$d#lMBm(> z>iYV+Z*VaDN&ni{Kz`0F1~xy_3J|@leJ>(`@wppUeG@LLBLxXQ5I`oY1J<9>r`p-t znetLzyNrO9Ip|}LLq=Lv0dSpYg;60^z$gHnsnH(4bE8TD(iAH@#=v@U-424hs;b-c zF*tw|3en{3OwyL;;f>UI7)h*X{Q)O)?H}*<%((jdf=zK70ChRJLqcQ{p*1%Bw*kvE zZ*);uT1rLLofrDIo`rRY7@!T2;Yu58z^cE%po^Ue#y|l%hJvPLcJ>$ zRn@46RWFSMgN3;w9dqhyvBj+a9wirv**8l{N@7BcjE%{us61Yse+Ika(n=S$qpTJK zuFPS@)nUzl!)6g6pT`Z-7B7$m;QAS&VHo&?gq=lC3!GO6==cq*un-7D-6PB9^UdO( zXluP0=xY)AVO$`+N*lN~$R3G62GV^Zwvw8ewZt=O*H(y~`0gDp(7Z3TwN~>j{&lms z9XuuT5&*8fWPZ+8{+ZlTUJy9XjoHQTV}*|PYe&gx!kd)ir)%b+VPSK6Opt}$UB>}# zyO&DOyy_?UvVJa!QyYE)qC*~e+;azPht4_)p0Tom=Qgc`(_D0It;D)J3?$VH+f&s! zOR3mu#@L^Zj(bx|o-~QVh(zha&upYYaygmo1{DGb__Q_+nC(~3osQrANlrV;`rMQ` zIjPBMF1IFAb%IKUeayTbQm<6c5Qx{jil^+Ppcx3Qz@QVc>Uv#Ac7EpEIrOn!VHBiV zo|B2)7sLHk4*lo5bBAVgO{X&^czk3uG&D`u=UaG0L|BmRxn>3#uU$&2UWZAL2~h8l zdg$@Y`3c`9kS|iA&id2`KR*UTyF>wimy9H#;i}f{l$Wt9c+e5dAc# zq=i`R&}rt3ytC^dtGaua}M zTUxqJ;u}X<+xGN*VHGisq<&#BtqACIIEpf@HRrvZpW88x-N6!fb!R8#kI@-8)!f-1 z0(lv8#7jT>(1FQM15c!;c=w$Z=6oF;;i)-kn*fU6lbfkzZ3Z;6-NS+rOOU^!(~)9K zp;%GLj!zXcv$LqVxqz)@X8GZVUUrU61h|6wi$4Cqiz_Fl^OmWYc~GnpKaPl1x=ow^ z2jD|OV`JkPw?R2)m%qD2T%k&c(a~pcINSo2qk{9dk%x!J+3l-;x$=`Iw-XZ+iT)f% zzxL6Dq+D{*0C%!K&@5|_FfbT)bQ`!o;ULmr+7P4CFr(6z9XAgT4&XgBS_ubQPOWq#SSXlE-QJ#eX=#b*&#zByBmE>47w)}bN3ZzFL}f~$ z^k@jejDzc-)eVKXQJ*<-qZlcHzQb--s9(Xc@`K6H}fjfnw}SwyrbhKr}Cs+AQRghf`C@o;Sr z7gAzWLja&b57MHtN9C-ocZ!5T>;YNsZxpAEJla)TWXZ7kdEZ4ehjw|6xLUdi2YY zPnH)aJKRD-xR5VjzRaB8)sXahLy#P^BjsEK7?B*AsyoFXw-FAG%RS<>hImoU_1Dzofo#TwmLZjM+fbGP4Q98+TI4rl4j&J#%s&)6l+N ziv_4k!f^(f%%{HutnJ0?*DB!TZyzw359x}g5gjh+!e8FpnQ?Fo52v`vSn=DEw-i-(k9TNB?`sQ7`bVAo*+WA=0u=*w`F>Q7K(b zsZn{WqMF>33}+)^?gpnoJ2SS_xNgb(=9~s5BU9GEd9U0<>UM5xbsCy?#kz+m9fDFl0CZ5V0hL)Hvj$rwd91{_jJlK3ww@F(C@7dJ?Z#Q_FcqX* zte2gei%Cc$*wy5Hhz7&qsA${qUHlV8At5dxtp2G~ok-N8Jf8D%O-)LN4O8%$OIo}* z`u=bVE0!Ik>5XK7*TDb)>+TZ3rmH<}N0u6zpA-Ys1tt3p?AWDQ$pnB&{X@dwK`K^l zL}VFX12mnv&Yh>$F;^reDw>6Qq3rJ+MZLa@JRol|aH}!^Fzt(nJ(^Jht1MU)lR?9e z)C~|#2R#ghMMVwA2gh3zDk_!gt;{o+Y55*~+(iHZmCWp>6Fifwu|{RFpmfv+L#X=R z@;r@CP7VciB@mdcSH30Zrgc!S3;ephhd}>zLopM+#7y9YU`oBPe zE)JBg{Is-4uh`$qdlWefn=ISq?@J8KblF=PT``%tx`BVjVc9md-T75RE9p2>8b`_` z%gr0vZ4^%%VjF%4s1?dM;-#^68^2fDrf4F9X?ITuMnLxl#1=_M##pFKSgu+e8!PKA z>z-(Gs%|U)*3_1B8xg{g=(6UgQGuB)VcwX}oPRGhsNAl_sRC}zVY1>DundFN067VV zNfzEn6=U&2T+s*hsaidCKuJEo|8-!%Ml&doTtSXZN}`az-0w7IE;nyAdqx>`q8LK@ z){*3F-$rDK*@XrgUefpeX*VtXQUtexV1_ZTB|8}xSHZM=ZCxGB+pa3~W~7TLV_wgs zY4y0|H{zSG>K>v@3Az3q0`61NQ9wu`Z})GEUKO7?@w_vaHH)Tsx3jS<(TB8Z7tf-f%z^KN!PKYn-le*CukI!!5fJ#1kp$MNRrK=$pKvW#P#8^ethWVEfLPAGY8vsw z4?kC0sz$GK+hBE!D+U-aH8eC#HhS=Z+)u=5PF5#@e=Z1tc;T?u1u{OcQ>D_YTH4*% z+En@<-EOZ~wtI()^~;y`0&iq~{rZ(Pvhmo|G=@&hu5CVZ9v(K_If74mbke<lON)elI%cLlen~dR)2f|X2=W3zCcF$Xh3#x7rz38G{3UZ;v;m_ z|F)k29z%}L7cb{~($?RP4=x>kgi>or7(y~ZY4HGBlb6!r2A7UZRy!nL-H8Sc;9oPy z)YN*7TQkI8-lilFY@~ZAiEE6u!N7c~?1qo0!%rtD=N&*cUbehp$qI@ZIm=)ffD3(& zxJT{p0@#~9vJszC zfC;_!dh#@q96xq^Cr7#*AG!AA$p;vC=RxA`;N0U}){b>QrJsgX0{=x#Ot7^2jE`g6 z$*&7ZUN@_>zPt>wgs}&7OhJn`nw{<6b!n$RxJ|g9jswH(@gxRyIW`ypK1+$BiHXVn z`BphQsJga!u_u0%@dBGm4hw^`X>Ej!vSag;HNFC%e~*c;t@G-V?Dyi?bSr{CwnF7- ztXMy{s0bfGLvC(v#n-P(3%T_kawf6b!tqEXJoVp&`J;D7$`3%GkRG%Idy-rSA~Po|K-(9qISg~QKE z;|>oGon&@DMz5U)`!3XUdIMjMCp60plIJu;vf7_)S2uL>4lY;`r0NGt-SFLpH8jl# zk%I4MfrSP^AP41W_zj#j<7*wwwnGT9WSmflD1kQkGmr(XS1*j2A4 z1fv-wNdOl~D{KJ)eFM%rzwTS&!zhrbD^Wl~tYCGP{6%K7r_Ak**qpqIHffn5zf`;CcU zCtq%dGbptV6F7n7n^X0pX;`u3`$~8BGpC!(eqP#q#S}r)$lt$hG=cR`*Ey+qdrL#I z^7B{5%lpMOH`d|`cLfbR&#HhEQxZ3VqCI(dP9wYC2Kox|ay2b^k{_f?xnK;+U+~)v zW)R1yV(RPbyL);rHJ{FjO-?-0&_H~c-kIM9{H^+f2cnY`;$HJ{N{JHB7u{V1ZU@b% zsIgI0TxrsQdaUK)fB{J71PjOP3&%F6<-vmr>L%W8L|^uS&_=A4AsaD1uE)X2sZ{iA z^Xk?ALD-I5Y#GC1^uk*LZxlkjWvmBt@qw@`e%%Bpgur2zdmV_J<;OG|hgYa|2K@g7 zkJf>PjfB8e3B?g~ZwpNI@s=*X4Nbl{GLaU1CSf&u^aA+gE@uXwtC9`WExbd|o~rxa zXjKIU`JH6VQnQ|v^idut91jgv>GT~aoQ7M0N@co0F|Z@7zk`3br1aYsfH~jxvfYI5*C#F zTx&?~6D(e9Aw5^&Cp*^#mVoE#^_#ov8_01lkB4lD_BQ&T;;++GDz58KP4yit^*wfw zc^Vd#9MgKm(8spjY7h~f2#b|p*9Rjc?{F1nZLhwWkS3@km@oIAq1Z+wWHb5?30WhC zoT}<{7D5xULBT7si8oe>e>VI37`ir*pWDfj)Q?uP9*k_6DhmsiOOu_-BgkN1l?@Pt zP@oGrs7i@&&ZxOFin;)Q#ZFR7z|Szj0H_z|&q%IgBVG?r9zeKuf}+3ldDeUvc#MRT zA`7}#BW=*t`&Bl!{l?Hjw?B$%73;rcS4qdQ3cu zz>4Sm;@>r)K3XD%OdAvi7)Vvmm;UzINRg1zF8tQ_j~8jO?$}Q?pc2w}bb8z0-HjEdn8NGv{!E0pL<{ zPyojPoe#i|Mpr1RC+hcx+%FzkbP7K+C~vqJS!+PY#U)lb5HG|!F<3SHOm_~3K_>uk z4uWoO*;6q01_F@LFaE$~w{*${h;@L7FoeU`#{dtFwGP*4z(jmtQyEwMG@#J@4+NI7 z2{T~fNDD5-_};6wps>cbAE*zq{rg@ouQpzx^~sBA>C?T$Fl;4LQFcxUx*j-?Ve+D8 z#^i+{h(-s0Xx_zBGQ2_DYxMwxJ$E5Map35M+10ylSqsH6NEvyqmce3n(`g&b= z6a3pV2Zg7xgRXr0?Y~=`y}qC^2o~7iZrY+8ImJR)C|DO=iisWjiW-eA@LX9~3Uv4ogQ;(`NoR4DdYq{Nb_k&>#()-LnMNt0()mQu9d{AL8a9%x9( zT9>jx7_is~$JP>{evcs9-cM|V`CuQyKtc1>!5_DuL zw6+!Tv!m5(56agz-*ciW0pCDY!P4L_V{V9IgA z71UjdDKA^7aUrLj`~DD!6$6kdpHI0?RfL3|YtE)3RLjEGA8EWMv~%k3sh^XF2Pg}H zGdut%Ell60oD`8{>aG!hTdhg2yU#EW>w;1R2pa9}s%qG0^Iw|#mFw7FHW@sr)Q(n}`*ux+v5R9ebdPY84~{PN1i z;A?4&Tp?AqPzPM6l#MMgyn(Mt=PWb5bWat2wmq85511fu6t^ye{o`b&d>iJ2qvNoZ zI;4K_?)T5YL1ww^b)%*B5Y)3ds&&RD!z!6GfT(NUn|`8O`tC2j zq@K9o2V%Y9R@+20`54wDVw<5&jla!Dpd%JsJn9{{aI>>0?LYUTw)MSa0)yp5?krh zO5iT3inl*sz)ip5S>vRo6|({=L9^ql+Tp?Kgnj}{gh0$H8F00?7AUFHXwx*qPC1Xe z^I8H@uU$B`D94ep95W!1$=mMl&fMLKxFehKQ4-}hjk}MCL6Tt zdE4>#1i%R>5Dt5_a9Zl~#Uv;7aTOav!xnew|rdTs$(p_1&HN ztnZWGRPYc_4QIH7xkQ9DJ0Qm{*8=5`>Q5ub&Gm+zZuS ztCH;#Klqxc`97+dSl(CsmY5Yr{1<6LzPR5}vHwuT`tUT|n_bM7*3WcXWILDw?lO=4 z#pC^;%f1Kbb(wn~)4w%>mYwL+u-x)MNmM0rH_|)qs{eDSkIeG=lJEYBq<-a5+nw#N zk0auetWXMVU*?gm--=cL)H;mTx?5cxy%>OIflfa|QmlB71-y`f_ez4DgzWcS&NnQF zZqe@V>NNcwqe^Ph&ucIZF7R4gxE|vo-&~1y8zkv%3Q|;~Lb?@9L2wxJy z6Gni>LIn7-G zRD;ofi3#KqteZPd`+Z^V>4IfciE0HSi=gN}b5kx(vhzAVO_WHRbgTalOH>;< zo?$vGYet{J@{7V=9~Eadxwn zupPH0VNheCg zn0E#@7vwnsrPP_AA`Aky?4h9`OdM7(J-Lu!K}tk;pw#q@*fTOyC<$~AXi-fpy$B%I zqMlcN7*4HKO8`3BVhh4?tU;g5qWq^yXKkAo;G{52j9I4`5+j)SS#3Ra@3l;j!SxuG z_!p1s&An6Cs_r2&ZGMJn2C!c?y$w5&=dR?l#MF3(cL5E6j&{Dj{$3&Kpljw;P3h2e zhuo`L0%?p{X#J;qSk!o^*MNl!flEik-m{^W+U5NBcJ2Qmo$#r&HAVukAe(=2SY=n6Y4Rka@W|YuiWS@_@$<%eQb;>@T`*=gs4r?SVbh!HmID`@3mZz zL7~JACM1A(0u9zjLA?zWbdNne?yANyf#%s5BoYtQGL9nI$=ER8%lS&A2pIPOlkCD^ z6^#c?GZ?$OyQ#vKL7={b19Vz6zHZKkFz|dNQ@NK#6d<;QTce|+Srrvzpf&^8dOCo` z`yhY*{K8!3m jzrs=W|L)C>O9cYeF!jB{^%L-}3q(UjOSw$RBIrK=#{wQ0 literal 13126 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 diff --git a/tests/test_plotting.py b/tests/test_plotting.py index 843e125319..93a3b43553 100644 --- a/tests/test_plotting.py +++ b/tests/test_plotting.py @@ -90,7 +90,7 @@ def test_1d_p(self): def test_1d_elongation(self): """Test plotting 1d elongation as a function of toroidal angle.""" eq = get("precise_QA") - grid = LinearGrid(N=20, NFP=eq.NFP) + grid = LinearGrid(M=eq.M_grid, N=20, NFP=eq.NFP) fig, ax, data = plot_1d( eq, "a_major/a_minor", grid=grid, figsize=(4, 4), return_data=True ) diff --git a/tests/test_surfaces.py b/tests/test_surfaces.py index c6d3a23480..ae7b592d69 100644 --- a/tests/test_surfaces.py +++ b/tests/test_surfaces.py @@ -405,6 +405,7 @@ class TestZernikeRZToroidalSection: """Tests for ZernikeRZToroidalSection class.""" @pytest.mark.unit + @pytest.mark.xfail(reason="GitHub issue 1127.") def test_area(self): """Test calculation of surface area.""" s = ZernikeRZToroidalSection() From 1659fc0f23eba192e9a6c80df856385b5ad8eeec Mon Sep 17 00:00:00 2001 From: unalmis Date: Sat, 20 Jul 2024 20:12:59 -0400 Subject: [PATCH 11/20] Fix test by suppressing warning --- tests/test_axis_limits.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/test_axis_limits.py b/tests/test_axis_limits.py index af5ae38823..5c7fe899ae 100644 --- a/tests/test_axis_limits.py +++ b/tests/test_axis_limits.py @@ -17,6 +17,7 @@ from desc.examples import get from desc.grid import LinearGrid from desc.objectives import GenericObjective, ObjectiveFunction +from desc.utils import ResolutionWarning # Unless mentioned in the source code of the compute function, the assumptions # made to compute the magnetic axis limit can be reduced to assuming that these @@ -282,12 +283,14 @@ def test_limit_continuity(self): eq = get("W7-X") with pytest.warns(UserWarning, match="Reducing radial"): eq.change_resolution(4, 4, 4, 8, 8, 8) - assert_is_continuous(eq, kwargs=kwargs) + with pytest.warns(ResolutionWarning, match="full domain [0, 2π) is required"): + assert_is_continuous(eq, kwargs=kwargs) # fixed current eq = get("NCSX") with pytest.warns(UserWarning, match="Reducing radial"): eq.change_resolution(4, 4, 4, 8, 8, 8) - assert_is_continuous(eq, kwargs=kwargs) + with pytest.warns(ResolutionWarning, match="full domain [0, 2π) is required"): + assert_is_continuous(eq, kwargs=kwargs) @pytest.mark.unit def test_magnetic_field_is_physical(self): From 4222b74ae407800f04d51038114de04a495f3fc2 Mon Sep 17 00:00:00 2001 From: unalmis Date: Sat, 20 Jul 2024 20:51:39 -0400 Subject: [PATCH 12/20] Fix unrecognized char error since warnings doesn't recognize unicode --- tests/test_axis_limits.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_axis_limits.py b/tests/test_axis_limits.py index 5c7fe899ae..398e084944 100644 --- a/tests/test_axis_limits.py +++ b/tests/test_axis_limits.py @@ -283,13 +283,13 @@ def test_limit_continuity(self): eq = get("W7-X") with pytest.warns(UserWarning, match="Reducing radial"): eq.change_resolution(4, 4, 4, 8, 8, 8) - with pytest.warns(ResolutionWarning, match="full domain [0, 2π) is required"): + with pytest.warns(ResolutionWarning, match="full domain"): assert_is_continuous(eq, kwargs=kwargs) # fixed current eq = get("NCSX") with pytest.warns(UserWarning, match="Reducing radial"): eq.change_resolution(4, 4, 4, 8, 8, 8) - with pytest.warns(ResolutionWarning, match="full domain [0, 2π) is required"): + with pytest.warns(ResolutionWarning, match="full domain"): assert_is_continuous(eq, kwargs=kwargs) @pytest.mark.unit From cf81a3cd4d9fef4c8d164dcbda3ff60343a55c23 Mon Sep 17 00:00:00 2001 From: unalmis Date: Sat, 20 Jul 2024 21:26:29 -0400 Subject: [PATCH 13/20] Fix test that assumes S = S(r) instead of outermost --- tests/test_configuration.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/test_configuration.py b/tests/test_configuration.py index 2906972d48..59c533eccd 100644 --- a/tests/test_configuration.py +++ b/tests/test_configuration.py @@ -462,7 +462,9 @@ def test_get_rho_surface(self): rho = 0.5 surf = eq.get_surface_at(rho=rho) assert surf.rho == rho - np.testing.assert_allclose(surf.compute("S")["S"], 4 * np.pi**2 * R0 * rho) + np.testing.assert_allclose( + surf.compute("S")["S"] * rho, 4 * np.pi**2 * R0 * rho + ) @pytest.mark.unit @pytest.mark.xfail(reason="GitHub issue 1127.") From 780ddb3634c9f2d694d33962fc2bce1c3fba9d5a Mon Sep 17 00:00:00 2001 From: unalmis Date: Mon, 16 Sep 2024 11:54:31 -0400 Subject: [PATCH 14/20] clean up comment --- desc/compute/_geometry.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/desc/compute/_geometry.py b/desc/compute/_geometry.py index 220355e55c..0356e26354 100644 --- a/desc/compute/_geometry.py +++ b/desc/compute/_geometry.py @@ -37,7 +37,7 @@ def _V(params, transforms, profiles, data, **kwargs): data["V"] = jnp.sum(data["sqrt(g)"] * transforms["grid"].weights) else: # To approximate volume at ρ ~ 1, we scale by ρ⁻², assuming the integrand - # varies little from ρ = max_rho to ρ = 1 and a roughly circular cross-section. + # varies little from max ρ to ρ = 1 and a roughly circular cross-section. data["V"] = jnp.max(data["V(r)"]) / jnp.max(data["rho"]) ** 2 return data @@ -58,7 +58,7 @@ def _V(params, transforms, profiles, data, **kwargs): ) def _V_FourierRZToroidalSurface(params, transforms, profiles, data, **kwargs): # To approximate volume at ρ ~ 1, we scale by ρ⁻², assuming the integrand - # varies little from ρ = max_rho to ρ = 1 and a roughly circular cross-section. + # varies little from max ρ to ρ = 1 and a roughly circular cross-section. data["V"] = jnp.max(data["V(r)"]) / jnp.max(data["rho"]) ** 2 return data @@ -202,7 +202,7 @@ def _A_of_z(params, transforms, profiles, data, **kwargs): expand_out=True, ) # To approximate area at ρ ~ 1, we scale by ρ⁻², assuming the integrand - # varies little from ρ = max_rho to ρ = 1 and a roughly circular cross-section. + # varies little from max ρ to ρ = 1 and a roughly circular cross-section. / max_rho**2 ) return data @@ -252,7 +252,7 @@ def _A(params, transforms, profiles, data, **kwargs): expand_out=False, ) # To approximate area at ρ ~ 1, we scale by ρ⁻², assuming the integrand - # varies little from ρ = max_rho to ρ = 1 and a roughly circular cross-section. + # varies little from max ρ to ρ = 1 and a roughly circular cross-section. / max_rho**2 ) phi = transforms["grid"].compress(data["phi"], "zeta") @@ -297,7 +297,7 @@ def _A_of_r(params, transforms, profiles, data, **kwargs): ) def _S(params, transforms, profiles, data, **kwargs): # To approximate surface are at ρ ~ 1, we scale by ρ⁻¹, assuming the integrand - # varies little from ρ = max_rho to ρ = 1. + # varies little from max ρ to ρ = 1. data["S"] = jnp.max(data["S(r)"]) / jnp.max(data["rho"]) return data @@ -469,7 +469,7 @@ def _perimeter_of_z(params, transforms, profiles, data, **kwargs): expand_out=True, ) # To approximate perimeter at ρ ~ 1, we scale by ρ⁻¹, assuming the integrand - # varies little from ρ = max_rho to ρ = 1. + # varies little from max ρ to ρ = 1. / max_rho ) return data From a93b98b49a4ba69ca4fbb817022d1c700e5cab28 Mon Sep 17 00:00:00 2001 From: unalmis Date: Mon, 16 Sep 2024 21:56:08 -0400 Subject: [PATCH 15/20] Remove old code --- desc/backend.py | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/desc/backend.py b/desc/backend.py index 1136c8de07..3b47cba4c5 100644 --- a/desc/backend.py +++ b/desc/backend.py @@ -404,14 +404,6 @@ def tangent_solve(g, y): ) return x, (safenorm(res), niter) - def trapezoid(y, x=None, dx=1.0, axis=-1): - """Integrate along the given axis using the composite trapezoidal rule.""" - if hasattr(jnp, "trapezoid"): - # https://github.com/google/jax/issues/20410 - return jnp.trapezoid(y, x, dx, axis) - else: - return jax.scipy.integrate.trapezoid(y, x, dx, axis) - # we can't really test the numpy backend stuff in automated testing, so we ignore it # for coverage purposes @@ -704,14 +696,6 @@ def repeat(a, repeats, axis=None, total_repeat_length=None): out = out[:total_repeat_length] return out - def trapezoid(y, x=None, dx=1.0, axis=-1): - """Integrate along the given axis using the composite trapezoidal rule.""" - if hasattr(np, "trapezoid"): - # https://github.com/numpy/numpy/issues/25586 - return np.trapezoid(y, x, dx, axis) - else: - return np.trapz(y, x, dx, axis) - def custom_jvp(fun, *args, **kwargs): """Dummy function for custom_jvp without JAX.""" fun.defjvp = lambda *args, **kwargs: None From 6adaa96aa5d29284bdbddeb2d9be49cd02585270 Mon Sep 17 00:00:00 2001 From: unalmis Date: Sun, 20 Oct 2024 07:10:16 -0400 Subject: [PATCH 16/20] Using grid requirement instead of warnings --- desc/compute/_geometry.py | 26 ++++++++++++++------------ desc/compute/geom_utils.py | 30 +----------------------------- desc/objectives/_geometry.py | 3 --- tests/test_axis_limits.py | 12 ++++++------ 4 files changed, 21 insertions(+), 50 deletions(-) diff --git a/desc/compute/_geometry.py b/desc/compute/_geometry.py index 0356e26354..cacb0095f9 100644 --- a/desc/compute/_geometry.py +++ b/desc/compute/_geometry.py @@ -15,7 +15,6 @@ from ..integrals.surface_integral import line_integrals, surface_integrals from ..utils import cross, dot, safenorm from .data_index import register_compute_fun -from .geom_utils import warnif_sym @register_compute_fun( @@ -173,6 +172,11 @@ def _V_rrr_of_r(params, transforms, profiles, data, **kwargs): "desc.geometry.surface.FourierRZToroidalSurface", ], resolution_requirement="t", + grid_requirement={"sym": False}, + # FIXME: For nonzero omega we need to integrate over theta at constant phi. + # Add source_grid_requirement={"coordinates": "rtp", "is_meshgrid": True} + # TODO: Recognize when omega = 0 and ignore all source grid requirements + # if the given grid satisfies them with phi replaced by zeta. ) def _A_of_z(params, transforms, profiles, data, **kwargs): # Denote any vector v = v¹ R̂ + v² ϕ̂ + v³ Ẑ by v = [v¹, v², v³] where R̂, ϕ̂, Ẑ @@ -184,7 +188,6 @@ def _A_of_z(params, transforms, profiles, data, **kwargs): # where n is the unit normal such that n dot e_θ|ρ,ϕ = 0 and n dot e_ϕ|R,Z = 0, # and the labels following | denote those coordinates are fixed. # Now choose v = [0, 0, Z], and n in the direction (e_θ|ρ,ζ × e_ζ|ρ,θ) ⊗ [1, 0, 1]. - warnif_sym(transforms["grid"], "A(z)") n = data["n_rho"] n = n.at[:, 1].set(0) n = n / jnp.linalg.norm(n, axis=-1)[:, jnp.newaxis] @@ -193,10 +196,6 @@ def _A_of_z(params, transforms, profiles, data, **kwargs): line_integrals( transforms["grid"], data["Z"] * n[:, 2] * safenorm(data["e_theta|r,p"], axis=-1), - # FIXME: Works currently for omega = zero, but for nonzero omega - # we need to integrate over theta at constant phi. - # Should be simple once we have coordinate mapping and source grid - # logic from GitHub pull request #1024. line_label="theta", fix_surface=("rho", max_rho), expand_out=True, @@ -227,6 +226,10 @@ def _A_of_z(params, transforms, profiles, data, **kwargs): "desc.equilibrium.equilibrium.Equilibrium", ], resolution_requirement="tz", + # FIXME: For nonzero omega we need to integrate over theta at constant phi. + # Add source_grid_requirement={"coordinates": "rtp", "is_meshgrid": True} + # TODO: Recognize when omega = 0 and ignore all source grid requirements + # if the given grid satisfies them with phi replaced by zeta. ) def _A(params, transforms, profiles, data, **kwargs): # Denote any vector v = v¹ R̂ + v² ϕ̂ + v³ Ẑ by v = [v¹, v², v³] where R̂, ϕ̂, Ẑ @@ -245,7 +248,6 @@ def _A(params, transforms, profiles, data, **kwargs): A = jnp.abs( line_integrals( transforms["grid"], - # FIXME: integrate over constant phi when omega is nonzero. data["Z"] * n[:, 2] * safenorm(data["e_theta|r,p"], axis=-1), line_label="theta", fix_surface=("rho", max_rho), @@ -452,18 +454,18 @@ def _R0_over_a(params, transforms, profiles, data, **kwargs): "desc.geometry.core.Surface", ], resolution_requirement="t", + grid_requirement={"sym": False}, + # FIXME: For nonzero omega we need to integrate over theta at constant phi. + # Add source_grid_requirement={"coordinates": "rtp", "is_meshgrid": True} + # TODO: Recognize when omega = 0 and ignore all source grid requirements + # if the given grid satisfies them with phi replaced by zeta. ) def _perimeter_of_z(params, transforms, profiles, data, **kwargs): - warnif_sym(transforms["grid"], "perimeter(z)") max_rho = jnp.max(data["rho"]) data["perimeter(z)"] = ( line_integrals( transforms["grid"], safenorm(data["e_theta|r,p"], axis=-1), - # FIXME: Works currently for omega = zero, but for nonzero omega - # we need to integrate over theta at constant phi. - # Should be simple once we have coordinate mapping and source grid - # logic from GitHub pull request #1024. line_label="theta", fix_surface=("rho", max_rho), expand_out=True, diff --git a/desc/compute/geom_utils.py b/desc/compute/geom_utils.py index d0d3383345..eeda658b61 100644 --- a/desc/compute/geom_utils.py +++ b/desc/compute/geom_utils.py @@ -2,37 +2,9 @@ import functools -from termcolor import colored - from desc.backend import jnp -from ..utils import ResolutionWarning, errorif, safenorm, safenormalize, warnif - - -def warnif_sym(grid, name): - """Warn if grid has truncated poloidal domain to [0, π] ⊂ [0, 2π).""" - warnif( - grid.sym, - ResolutionWarning, - msg=colored( - "This grid only samples the poloidal domain θ ∈ [0, π], " - f"but, in general, the full domain [0, 2π) is required to compute {name}.", - "yellow", - ), - ) - - -def errorif_sym(grid, name): - """Warn if grid has truncated poloidal domain to [0, π] ⊂ [0, 2π).""" - errorif( - grid.sym, - ResolutionWarning, - msg=colored( - "This grid only samples the poloidal domain θ ∈ [0, π], " - f"but, in general, the full domain [0, 2π) is required to compute {name}.", - "yellow", - ), - ) +from ..utils import safenorm, safenormalize def reflection_matrix(normal): diff --git a/desc/objectives/_geometry.py b/desc/objectives/_geometry.py index 5b6430d670..e21c5352f5 100644 --- a/desc/objectives/_geometry.py +++ b/desc/objectives/_geometry.py @@ -8,7 +8,6 @@ from desc.grid import LinearGrid, QuadratureGrid from desc.utils import Timer, errorif, parse_argname_change, safenorm, warnif -from ..compute.geom_utils import errorif_sym from .normalization import compute_scaling_factors from .objective_funs import _Objective, collect_docs from .utils import check_if_points_are_inside_perimeter, softmin @@ -201,8 +200,6 @@ def __init__( ): if target is None and bounds is None: target = 1 - if grid is not None: - errorif_sym(grid, name) self._grid = grid super().__init__( things=eq, diff --git a/tests/test_axis_limits.py b/tests/test_axis_limits.py index d83082f667..1c1a8e1de6 100644 --- a/tests/test_axis_limits.py +++ b/tests/test_axis_limits.py @@ -18,7 +18,7 @@ from desc.grid import LinearGrid from desc.integrals import surface_integrals_map from desc.objectives import GenericObjective, ObjectiveFunction -from desc.utils import ResolutionWarning, dot +from desc.utils import dot # Unless mentioned in the source code of the compute function, the assumptions # made to compute the magnetic axis limit can be reduced to assuming that these @@ -189,6 +189,7 @@ def assert_is_continuous( } """ + p = "desc.equilibrium.equilibrium.Equilibrium" if kwargs is None: kwargs = {} # TODO: remove when boozer transform works with multiple surfaces @@ -200,6 +201,8 @@ def assert_is_continuous( or "_mn" in name or name == "B modes" or _skip_this(eq, name) + # skip if require full grid (sym false) + or not data_index[p][name]["grid_requirement"].get("sym", True) ) ] @@ -211,7 +214,6 @@ def assert_is_continuous( integrate = surface_integrals_map(grid, expand_out=False) data = eq.compute(names=names, grid=grid) - p = "desc.equilibrium.equilibrium.Equilibrium" for name in names: if name in not_continuous_limits: continue @@ -296,14 +298,12 @@ def test_limit_continuity(self): eq = get("W7-X") with pytest.warns(UserWarning, match="Reducing radial"): eq.change_resolution(4, 4, 4, 8, 8, 8) - with pytest.warns(ResolutionWarning, match="full domain"): - assert_is_continuous(eq, kwargs=kwargs) + assert_is_continuous(eq, kwargs=kwargs) # fixed current eq = get("NCSX") with pytest.warns(UserWarning, match="Reducing radial"): eq.change_resolution(4, 4, 4, 8, 8, 8) - with pytest.warns(ResolutionWarning, match="full domain"): - assert_is_continuous(eq, kwargs=kwargs) + assert_is_continuous(eq, kwargs=kwargs) @pytest.mark.unit def test_magnetic_field_is_physical(self): From 340f4a8ec4e095f97f1d1781e56b4e73cabe6722 Mon Sep 17 00:00:00 2001 From: unalmis Date: Sun, 27 Oct 2024 20:01:03 -0400 Subject: [PATCH 17/20] . --- desc/compute/_geometry.py | 243 ++++++++++++++++------- desc/compute/_omnigenity.py | 2 +- desc/plotting.py | 9 +- tests/baseline/test_1d_elongation.png | Bin 13150 -> 13154 bytes tests/baseline/test_plot_b_mag.png | Bin 31565 -> 31577 bytes tests/inputs/master_compute_data_rpz.pkl | Bin 8656015 -> 8638058 bytes tests/test_compute_everything.py | 21 +- tests/test_compute_funs.py | 11 - tests/test_configuration.py | 4 +- 9 files changed, 190 insertions(+), 100 deletions(-) diff --git a/desc/compute/_geometry.py b/desc/compute/_geometry.py index cacb0095f9..7b842e45a3 100644 --- a/desc/compute/_geometry.py +++ b/desc/compute/_geometry.py @@ -9,7 +9,7 @@ expensive computations. """ -from desc.backend import jnp, trapezoid +from desc.backend import jnp from ..grid import QuadratureGrid from ..integrals.surface_integral import line_integrals, surface_integrals @@ -22,7 +22,7 @@ label="V", units="m^{3}", units_long="cubic meters", - description="Volume", + description="Volume scaled by max(ρ)⁻² to extrapolate to last closed flux surface", dim=0, params=[], transforms={"grid": []}, @@ -46,19 +46,17 @@ def _V(params, transforms, profiles, data, **kwargs): label="V", units="m^{3}", units_long="cubic meters", - description="Volume enclosed by surface, scaled by max(ρ)⁻²", + description="Volume enclosed by surface", dim=1, params=[], transforms={"grid": []}, profiles=[], coordinates="", - data=["V(r)", "rho"], + data=["V(r)"], parameterization="desc.geometry.surface.FourierRZToroidalSurface", ) def _V_FourierRZToroidalSurface(params, transforms, profiles, data, **kwargs): - # To approximate volume at ρ ~ 1, we scale by ρ⁻², assuming the integrand - # varies little from max ρ to ρ = 1 and a roughly circular cross-section. - data["V"] = jnp.max(data["V(r)"]) / jnp.max(data["rho"]) ** 2 + data["V"] = jnp.max(data["V(r)"]) return data @@ -153,21 +151,84 @@ def _V_rrr_of_r(params, transforms, profiles, data, **kwargs): return data +def _compute_A_of_z(grid, data, rho): + if isinstance(grid, QuadratureGrid): + return surface_integrals( + grid, + # TODO: generalize for nonzero omega. + data["|e_rho x e_theta|"], + surface_label="zeta", + expand_out=False, + ) + # Denote any vector v = v¹ R̂ + v² ϕ̂ + v³ Ẑ by v = [v¹, v², v³] where R̂, ϕ̂, Ẑ + # are the normalized basis vectors of the cylindrical coordinates R, ϕ, Z. + # We use a 2D divergence theorem over constant ϕ toroidal surface (i.e. R, Z plane). + # In this geometry, the divergence operator in this coordinate system is + # div = ([∂_R, ∂_ϕ, ∂_Z] ⊗ [1, 0, 1]) dot . + # ∫ dA div v = ∫ dℓ n dot v + # where n is the unit normal such that n dot e_θ|ρ,ϕ = 0 and n dot e_ϕ|R,Z = 0, + # and the labels following | denote those coordinates are fixed. + # Now choose v = [0, 0, Z], and n in the direction (e_θ|ρ,ζ × e_ζ|ρ,θ) ⊗ [1, 0, 1]. + n = data["n_rho"] + n = n.at[:, 1].set(0) + n = n / jnp.linalg.norm(n, axis=-1)[:, jnp.newaxis] + return jnp.abs( + line_integrals( + grid, + data["Z"] * n[:, 2] * safenorm(data["e_theta|r,p"], axis=-1), + line_label="theta", + fix_surface=("rho", rho), + expand_out=False, + ) + ) + + @register_compute_fun( name="A(z)", label="A(\\zeta)", units="m^{2}", units_long="square meters", description="Area of enclosed cross-section (enclosed constant phi surface), " - "scaled by max(ρ)⁻², as function of zeta", + "scaled by max(ρ)⁻² to extrapolate to last closed flux surface", dim=1, params=[], transforms={"grid": []}, profiles=[], coordinates="z", - data=["Z", "n_rho", "e_theta|r,p", "rho"], + data=["Z", "n_rho", "e_theta|r,p", "rho", "|e_rho x e_theta|"], + parameterization=["desc.equilibrium.equilibrium.Equilibrium"], + resolution_requirement="t", + grid_requirement={"sym": False}, + # FIXME: For nonzero omega we need to integrate over theta at constant phi. + # Add source_grid_requirement={"coordinates": "rtp", "is_meshgrid": True} + # TODO: Recognize when omega = 0 and ignore all source grid requirements + # if the given grid satisfies them with phi replaced by zeta. +) +def _A_of_z(params, transforms, profiles, data, **kwargs): + # noqa: unused dependency + # To approximate area at ρ ~ 1, we scale by ρ⁻², assuming the integrand + # varies little from max ρ to ρ = 1 and a roughly circular cross-section. + max_rho = jnp.max(data["rho"]) + data["A(z)"] = transforms["grid"].expand( + _compute_A_of_z(transforms["grid"], data, max_rho) / max_rho**2, + surface_label="zeta", + ) + 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 phi surface)", + dim=1, + params=[], + transforms={"grid": []}, + profiles=[], + coordinates="z", + data=["Z", "n_rho", "e_theta|r,p", "rho", "|e_rho x e_theta|"], parameterization=[ - "desc.equilibrium.equilibrium.Equilibrium", "desc.geometry.surface.ZernikeRZToroidalSection", "desc.geometry.surface.FourierRZToroidalSurface", ], @@ -178,31 +239,11 @@ def _V_rrr_of_r(params, transforms, profiles, data, **kwargs): # TODO: Recognize when omega = 0 and ignore all source grid requirements # if the given grid satisfies them with phi replaced by zeta. ) -def _A_of_z(params, transforms, profiles, data, **kwargs): - # Denote any vector v = v¹ R̂ + v² ϕ̂ + v³ Ẑ by v = [v¹, v², v³] where R̂, ϕ̂, Ẑ - # are the normalized basis vectors of the cylindrical coordinates R, ϕ, Z. - # We use a 2D divergence theorem over constant ϕ toroidal surface (i.e. R, Z plane). - # In this geometry, the divergence operator in this coordinate system is - # div = ([∂_R, ∂_ϕ, ∂_Z] ⊗ [1, 0, 1]) dot . - # ∫ dA div v = ∫ dℓ n dot v - # where n is the unit normal such that n dot e_θ|ρ,ϕ = 0 and n dot e_ϕ|R,Z = 0, - # and the labels following | denote those coordinates are fixed. - # Now choose v = [0, 0, Z], and n in the direction (e_θ|ρ,ζ × e_ζ|ρ,θ) ⊗ [1, 0, 1]. - n = data["n_rho"] - n = n.at[:, 1].set(0) - n = n / jnp.linalg.norm(n, axis=-1)[:, jnp.newaxis] - max_rho = jnp.max(data["rho"]) - data["A(z)"] = jnp.abs( - line_integrals( - transforms["grid"], - data["Z"] * n[:, 2] * safenorm(data["e_theta|r,p"], axis=-1), - line_label="theta", - fix_surface=("rho", max_rho), - expand_out=True, - ) - # To approximate area at ρ ~ 1, we scale by ρ⁻², assuming the integrand - # varies little from max ρ to ρ = 1 and a roughly circular cross-section. - / max_rho**2 +def _A_of_z_surface(params, transforms, profiles, data, **kwargs): + # noqa: unused dependency + data["A(z)"] = transforms["grid"].expand( + _compute_A_of_z(transforms["grid"], data, jnp.max(data["rho"])), + surface_label="zeta", ) return data @@ -212,7 +253,8 @@ def _A_of_z(params, transforms, profiles, data, **kwargs): label="A", units="m^{2}", units_long="square meters", - description="Average enclosed cross-sectional area, scaled by max(ρ)⁻²", + description="Average enclosed cross-sectional area, scaled by max(ρ)⁻²" + " to extrapolate to last closed flux surface", # Simple toroidal average A₀ = ∫ A(ζ) dζ / (2π) matches the convention for the # average major radius R₀ = ∫ R(ρ=0) dζ / (2π). dim=0, @@ -220,11 +262,8 @@ def _A_of_z(params, transforms, profiles, data, **kwargs): transforms={"grid": []}, profiles=[], coordinates="", - data=["Z", "n_rho", "e_theta|r,p", "rho", "phi"], - parameterization=[ - "desc.geometry.core.Surface", - "desc.equilibrium.equilibrium.Equilibrium", - ], + data=["Z", "n_rho", "e_theta|r,p", "rho", "|e_rho x e_theta|"], + parameterization=["desc.equilibrium.equilibrium.Equilibrium"], resolution_requirement="tz", # FIXME: For nonzero omega we need to integrate over theta at constant phi. # Add source_grid_requirement={"coordinates": "rtp", "is_meshgrid": True} @@ -232,33 +271,42 @@ def _A_of_z(params, transforms, profiles, data, **kwargs): # if the given grid satisfies them with phi replaced by zeta. ) def _A(params, transforms, profiles, data, **kwargs): - # Denote any vector v = v¹ R̂ + v² ϕ̂ + v³ Ẑ by v = [v¹, v², v³] where R̂, ϕ̂, Ẑ - # are the normalized basis vectors of the cylindrical coordinates R, ϕ, Z. - # We use a 2D divergence theorem over constant ϕ toroidal surface (i.e. R, Z plane). - # In this geometry, the divergence operator in this coordinate system is - # div = ([∂_R, ∂_ϕ, ∂_Z] ⊗ [1, 0, 1]) dot . - # ∫ dA div v = ∫ dℓ n dot v - # where n is the unit normal such that n dot e_θ|ρ,ϕ = 0 and n dot e_ϕ|R,Z = 0, - # and the labels following | denote those coordinates are fixed. - # Now choose v = [0, 0, Z], and n in the direction (e_θ|ρ,ζ × e_ζ|ρ,θ) ⊗ [1, 0, 1]. - n = data["n_rho"] - n = n.at[:, 1].set(0) - n = n / jnp.linalg.norm(n, axis=-1)[:, jnp.newaxis] + # noqa: unused dependency + # To approximate area at ρ ~ 1, we scale by ρ⁻², assuming the integrand + # varies little from max ρ to ρ = 1 and a roughly circular cross-section. max_rho = jnp.max(data["rho"]) - A = jnp.abs( - line_integrals( - transforms["grid"], - data["Z"] * n[:, 2] * safenorm(data["e_theta|r,p"], axis=-1), - line_label="theta", - fix_surface=("rho", max_rho), - expand_out=False, - ) - # To approximate area at ρ ~ 1, we scale by ρ⁻², assuming the integrand - # varies little from max ρ to ρ = 1 and a roughly circular cross-section. - / max_rho**2 + data["A"] = ( + jnp.mean(_compute_A_of_z(transforms["grid"], data, max_rho)) / max_rho**2 + ) + return data + + +@register_compute_fun( + name="A", + label="A", + units="m^{2}", + units_long="square meters", + description="Average enclosed cross-sectional area", + # Simple toroidal average A₀ = ∫ A(ζ) dζ / (2π) matches the convention for the + # average major radius R₀ = ∫ R(ρ=0) dζ / (2π). + dim=0, + params=[], + transforms={"grid": []}, + profiles=[], + coordinates="", + data=["Z", "n_rho", "e_theta|r,p", "rho", "|e_rho x e_theta|"], + parameterization=["desc.geometry.core.Surface"], + resolution_requirement="tz", + # FIXME: For nonzero omega we need to integrate over theta at constant phi. + # Add source_grid_requirement={"coordinates": "rtp", "is_meshgrid": True} + # TODO: Recognize when omega = 0 and ignore all source grid requirements + # if the given grid satisfies them with phi replaced by zeta. +) +def _A_surface(params, transforms, profiles, data, **kwargs): + # noqa: unused dependency + data["A"] = jnp.mean( + _compute_A_of_z(transforms["grid"], data, jnp.max(data["rho"])) ) - phi = transforms["grid"].compress(data["phi"], "zeta") - data["A"] = jnp.squeeze(trapezoid(A, phi) / jnp.ptp(phi) if A.size > 1 else A) return data @@ -285,7 +333,8 @@ def _A_of_r(params, transforms, profiles, data, **kwargs): label="S", units="m^{2}", units_long="square meters", - description="Surface area of outermost flux surface, scaled by max(ρ)⁻¹", + description="Surface area of outermost flux surface, scaled by max(ρ)⁻¹" + " to extrapolate to last closed flux surface", dim=0, params=[], transforms={"grid": []}, @@ -294,7 +343,6 @@ def _A_of_r(params, transforms, profiles, data, **kwargs): data=["S(r)", "rho"], parameterization=[ "desc.equilibrium.equilibrium.Equilibrium", - "desc.geometry.surface.FourierRZToroidalSurface", ], ) def _S(params, transforms, profiles, data, **kwargs): @@ -304,6 +352,27 @@ def _S(params, transforms, profiles, data, **kwargs): return data +@register_compute_fun( + name="S", + label="S", + units="m^{2}", + units_long="square meters", + description="Surface area", + dim=0, + params=[], + transforms={"grid": []}, + profiles=[], + coordinates="", + data=["S(r)"], + parameterization=[ + "desc.geometry.surface.FourierRZToroidalSurface", + ], +) +def _S_fourier_rz_surface(params, transforms, profiles, data, **kwargs): + data["S"] = jnp.max(data["S(r)"]) + return data + + @register_compute_fun( name="S(r)", label="S(\\rho)", @@ -442,17 +511,14 @@ def _R0_over_a(params, transforms, profiles, data, **kwargs): units="m", units_long="meters", description="Perimeter of enclosed cross-section (enclosed constant phi surface), " - "scaled by max(ρ)⁻¹, as function of zeta", + "scaled by max(ρ)⁻¹ to extrapolate to last closed flux surface.", dim=1, params=[], transforms={"grid": []}, profiles=[], coordinates="z", data=["rho", "e_theta|r,p"], - parameterization=[ - "desc.equilibrium.equilibrium.Equilibrium", - "desc.geometry.core.Surface", - ], + parameterization=["desc.equilibrium.equilibrium.Equilibrium"], resolution_requirement="t", grid_requirement={"sym": False}, # FIXME: For nonzero omega we need to integrate over theta at constant phi. @@ -477,6 +543,37 @@ def _perimeter_of_z(params, transforms, profiles, data, **kwargs): return data +@register_compute_fun( + name="perimeter(z)", + label="P(\\zeta)", + units="m", + units_long="meters", + description="Perimeter of enclosed cross-section (enclosed constant phi surface)", + dim=1, + params=[], + transforms={"grid": []}, + profiles=[], + coordinates="z", + data=["rho", "e_theta|r,p"], + parameterization=["desc.geometry.core.Surface"], + resolution_requirement="t", + grid_requirement={"sym": False}, + # FIXME: For nonzero omega we need to integrate over theta at constant phi. + # Add source_grid_requirement={"coordinates": "rtp", "is_meshgrid": True} + # TODO: Recognize when omega = 0 and ignore all source grid requirements + # if the given grid satisfies them with phi replaced by zeta. +) +def _perimeter_of_z_surface(params, transforms, profiles, data, **kwargs): + data["perimeter(z)"] = line_integrals( + transforms["grid"], + safenorm(data["e_theta|r,p"], axis=-1), + line_label="theta", + fix_surface=("rho", jnp.max(data["rho"])), + expand_out=True, + ) + return data + + @register_compute_fun( name="a_major/a_minor", label="a_{\\mathrm{major}} / a_{\\mathrm{minor}}", diff --git a/desc/compute/_omnigenity.py b/desc/compute/_omnigenity.py index db37766882..2ccd53d887 100644 --- a/desc/compute/_omnigenity.py +++ b/desc/compute/_omnigenity.py @@ -343,7 +343,7 @@ def _sqrtg_B(params, transforms, profiles, data, **kwargs): N_booz="int: Maximum toroidal mode number for Boozer harmonics. Default 2*eq.N", ) def _B_mn(params, transforms, profiles, data, **kwargs): - norm = 2 ** (3 - jnp.sum((transforms["B"].basis.modes == 0), axis=1)) + norm = 2 ** (3 - jnp.sum(transforms["B"].basis.modes == 0, axis=1)) grid = transforms["grid"] def fun(rho, theta_B, zeta_B, sqrtg_B, B): diff --git a/desc/plotting.py b/desc/plotting.py index 6fbdea29d9..754e370d37 100644 --- a/desc/plotting.py +++ b/desc/plotting.py @@ -12,7 +12,6 @@ from matplotlib import cycler, rcParams from mpl_toolkits.axes_grid1 import make_axes_locatable from pylatexenc.latex2text import LatexNodes2Text -from termcolor import colored from desc.backend import sign from desc.basis import fourier, zernike_radial_poly @@ -190,9 +189,7 @@ def _format_ax(ax, is3d=False, rows=1, cols=1, figsize=None, equal=False): errorif( not isinstance(ax.flatten()[0], matplotlib.axes.Axes), TypeError, - colored( - "ax argument must be None or an axis instance or array of axes", "red" - ), + "ax argument must be None or an axis instance or array of axes", ) return plt.gcf(), ax @@ -524,7 +521,7 @@ def plot_1d(eq, name, grid=None, log=False, ax=None, return_data=False, **kwargs errorif( surface_label is None or axis is None, NotImplementedError, - msg=colored("Grid must be 1D", "red"), + msg="Grid must be 1D", ) data = grid.compress(data, surface_label=surface_label) nodes = grid.compress(grid.nodes[:, axis], surface_label=surface_label) @@ -630,7 +627,7 @@ def plot_2d( grid_kwargs = {"M": 33, "N": 33, "NFP": eq.NFP, "axis": False} grid = _get_grid(**grid_kwargs) plot_axes = _get_plot_axes(grid) - errorif(len(plot_axes) != 2, msg=colored("Grid must be 2D", "red")) + errorif(len(plot_axes) != 2, msg="Grid must be 2D") component = kwargs.pop("component", None) if name != "B*n": data, label = _compute( diff --git a/tests/baseline/test_1d_elongation.png b/tests/baseline/test_1d_elongation.png index 65f760839a3561ebdf93265bf40b073a23b3b369..a2e877f9a46dba02557ef195a2d3b74cf6986e83 100644 GIT binary patch literal 13154 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 literal 13150 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 diff --git a/tests/baseline/test_plot_b_mag.png b/tests/baseline/test_plot_b_mag.png index 1a7db591f9c70f3419086c474cd442bd4e97b079..7752dd82970adf6ea4135b533abe3877bb7181cd 100644 GIT binary patch literal 31577 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 u&-Fn?Le?>S731C!T$m$BkS(~ literal 31565 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
  • B;7n3KEFP0C_A|vmrASh_pFO535NDlf6!oW61sdRXxum3%Ry- z#bcE^8n!oNbvNfClRamejGGyj6_k+G-puC6bmkWs{G#|9>e%L(UC7hZ(@u%1B#miR!?MRH*i0d_D76>&|xR$qc$h9TT`@R>|ex7o@# zy#yIU9P2!6>VnYFoF223%q7O>3=lqV>KeZ^f?s0w{8KK_8o!ZEfE*;UEGrU-I)kqy zH6(~U#Y>Y+o}}QCF-jERhjk@OMT0rkp+K-h!N+_l6p_xHn`H0MLU^O4FzOE?c(juF z{mnU?L=8J~*DtlqO==*gPp+n}ibk0vm~*m$syedGHLf~}`!&VajNy3Ik!!dATUAG_V>@Eh`v+=`8tfX_{8+9_pPv2tU7sFn%TMy(Bj_}y`rYsO@9a_Lzq1wpGyXfBw5k8j zrf2@UBZaQ9|IThT^50Ec=%%V&#j<(4(*B3~2-z&mnP(vVuX5)9aL*vy%zv-r?uo8y z)Z_nWSpV~VgrYe7IcHwvB`IAfwSN3(dImXUzvsA%Pc-MaXQcdZaNM0StbF}(&k1WO zGy8@7yC%Ya>&cr)_t){{jg7EP+6CEO8awXd_L_Cvxmx?*=eRRpPPp=TLg>GzgYb|0 z^4K27{C3eUH1*p>oHy~?*~9;1emgdU<>`1s-0L2+rP{2EkmhaDl`{4~7eB^h|C=0Zjh=Fy9^`Ad5A61&mn zLiyrEO3gPReAJZrO5tznX2|#dp|k%tt^BXhW|)#@Xe)oyg=7{Pg26u9kmMz|69BLD zRxY(2RzCLK#Byi)=r6E;qTwe;ivr$J?+mY|8FH-rDrUKj991?VY(&wE`m(StMHQtl zjw;O>n1YvhASehs1tT{bTuH*41{+Y#GA!W7<=!@6^WZXrJ<0mO(12&=OwW8g2cO{w z=ZcmYZqY-Vm&B)UN(TXOz>X|kYq-dcZ;GR~{0=?HX`Fr08bbp+QD?mK`g~k3hMxa& zA$5xkwqWrNuE!67iFfAI(mU)Vn0P1cO?rnN2Xg^@Yq@wF%!ME%YErt?@C`f9*ccK# z9x6d{lb#VZUC@J~jh^MF9mUm7uBWS&P@G^J=xoC`{J5AnI=2o->47|HhMU;jX1d_# z>3-!0#JtI?D-GxQal1%8dqR8hjvmpM&}KQ_EhTGbl@ zrK6I0^@f!aRf?}8Rf3NjPBN;y!bMyKNn=_cNkgHeq+x%NG{!-ZG=P&`F;a!i)8YgIC{l$jHU4{C zic*D5f>fb@B}yPB)#Sz%!y<_sDc4Qp!1;X1Ti1|{ksS0bPL8El4eQA}w++4$ITomE z9LS~HhRqU9(*KDx*?z}>XTY(n5cvQxdd;b3uS63z{L6hD<}`8m8G#5_)O^ecqprCk z5k?wNlGvXNdnt8rt}FD!6aMuk_V*1+QfOVXmr{q_ar@cuu|yrV%9elODiU?r9r-Wx zjwmyDCq+_ggbr_ZsKHT@E^PTxa)b-%!d9jvLHHO+)HPRS43I05oUr+O+tL|CImxrG zu_N01hP@I+*dwd$@exK5Iv1q~-LrV0^-E>V0f`ubZH-Yj7%**Z5Ex1fe1Q{#-QK3E KIbcyy5%yns?knv8 delta 63983 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 Date: Sun, 27 Oct 2024 20:42:05 -0400 Subject: [PATCH 18/20] .. --- desc/compute/_geometry.py | 131 ++++++++++++++--------- tests/inputs/master_compute_data_rpz.pkl | Bin 8638058 -> 8653878 bytes tests/test_compute_funs.py | 12 +-- 3 files changed, 89 insertions(+), 54 deletions(-) diff --git a/desc/compute/_geometry.py b/desc/compute/_geometry.py index 7b842e45a3..a85379de94 100644 --- a/desc/compute/_geometry.py +++ b/desc/compute/_geometry.py @@ -152,6 +152,10 @@ def _V_rrr_of_r(params, transforms, profiles, data, **kwargs): def _compute_A_of_z(grid, data, rho): + # TODO: For nonzero omega we need to integrate over theta at constant phi. + # Add source_grid_requirement={"coordinates": "rtp", "is_meshgrid": True} + # TODO: In compute_utils recognize when omega = 0 and ignore all source + # grid requirements if the given grid satisfies them with phi replaced by zeta. if isinstance(grid, QuadratureGrid): return surface_integrals( grid, @@ -199,10 +203,6 @@ def _compute_A_of_z(grid, data, rho): parameterization=["desc.equilibrium.equilibrium.Equilibrium"], resolution_requirement="t", grid_requirement={"sym": False}, - # FIXME: For nonzero omega we need to integrate over theta at constant phi. - # Add source_grid_requirement={"coordinates": "rtp", "is_meshgrid": True} - # TODO: Recognize when omega = 0 and ignore all source grid requirements - # if the given grid satisfies them with phi replaced by zeta. ) def _A_of_z(params, transforms, profiles, data, **kwargs): # noqa: unused dependency @@ -234,10 +234,6 @@ def _A_of_z(params, transforms, profiles, data, **kwargs): ], resolution_requirement="t", grid_requirement={"sym": False}, - # FIXME: For nonzero omega we need to integrate over theta at constant phi. - # Add source_grid_requirement={"coordinates": "rtp", "is_meshgrid": True} - # TODO: Recognize when omega = 0 and ignore all source grid requirements - # if the given grid satisfies them with phi replaced by zeta. ) def _A_of_z_surface(params, transforms, profiles, data, **kwargs): # noqa: unused dependency @@ -265,10 +261,6 @@ def _A_of_z_surface(params, transforms, profiles, data, **kwargs): data=["Z", "n_rho", "e_theta|r,p", "rho", "|e_rho x e_theta|"], parameterization=["desc.equilibrium.equilibrium.Equilibrium"], resolution_requirement="tz", - # FIXME: For nonzero omega we need to integrate over theta at constant phi. - # Add source_grid_requirement={"coordinates": "rtp", "is_meshgrid": True} - # TODO: Recognize when omega = 0 and ignore all source grid requirements - # if the given grid satisfies them with phi replaced by zeta. ) def _A(params, transforms, profiles, data, **kwargs): # noqa: unused dependency @@ -297,10 +289,6 @@ def _A(params, transforms, profiles, data, **kwargs): data=["Z", "n_rho", "e_theta|r,p", "rho", "|e_rho x e_theta|"], parameterization=["desc.geometry.core.Surface"], resolution_requirement="tz", - # FIXME: For nonzero omega we need to integrate over theta at constant phi. - # Add source_grid_requirement={"coordinates": "rtp", "is_meshgrid": True} - # TODO: Recognize when omega = 0 and ignore all source grid requirements - # if the given grid satisfies them with phi replaced by zeta. ) def _A_surface(params, transforms, profiles, data, **kwargs): # noqa: unused dependency @@ -341,9 +329,7 @@ def _A_of_r(params, transforms, profiles, data, **kwargs): profiles=[], coordinates="", data=["S(r)", "rho"], - parameterization=[ - "desc.equilibrium.equilibrium.Equilibrium", - ], + parameterization=["desc.equilibrium.equilibrium.Equilibrium"], ) def _S(params, transforms, profiles, data, **kwargs): # To approximate surface are at ρ ~ 1, we scale by ρ⁻¹, assuming the integrand @@ -364,9 +350,7 @@ def _S(params, transforms, profiles, data, **kwargs): profiles=[], coordinates="", data=["S(r)"], - parameterization=[ - "desc.geometry.surface.FourierRZToroidalSurface", - ], + parameterization=["desc.geometry.surface.FourierRZToroidalSurface"], ) def _S_fourier_rz_surface(params, transforms, profiles, data, **kwargs): data["S"] = jnp.max(data["S(r)"]) @@ -521,7 +505,7 @@ def _R0_over_a(params, transforms, profiles, data, **kwargs): parameterization=["desc.equilibrium.equilibrium.Equilibrium"], resolution_requirement="t", grid_requirement={"sym": False}, - # FIXME: For nonzero omega we need to integrate over theta at constant phi. + # TODO: For nonzero omega we need to integrate over theta at constant phi. # Add source_grid_requirement={"coordinates": "rtp", "is_meshgrid": True} # TODO: Recognize when omega = 0 and ignore all source grid requirements # if the given grid satisfies them with phi replaced by zeta. @@ -558,10 +542,6 @@ def _perimeter_of_z(params, transforms, profiles, data, **kwargs): parameterization=["desc.geometry.core.Surface"], resolution_requirement="t", grid_requirement={"sym": False}, - # FIXME: For nonzero omega we need to integrate over theta at constant phi. - # Add source_grid_requirement={"coordinates": "rtp", "is_meshgrid": True} - # TODO: Recognize when omega = 0 and ignore all source grid requirements - # if the given grid satisfies them with phi replaced by zeta. ) def _perimeter_of_z_surface(params, transforms, profiles, data, **kwargs): data["perimeter(z)"] = line_integrals( @@ -574,26 +554,7 @@ def _perimeter_of_z_surface(params, transforms, profiles, data, **kwargs): return data -@register_compute_fun( - name="a_major/a_minor", - label="a_{\\mathrm{major}} / a_{\\mathrm{minor}}", - units="~", - units_long="None", - description="Elongation at a toroidal cross-section", - dim=1, - params=[], - transforms={"grid": []}, - profiles=[], - coordinates="z", - data=["A(z)", "perimeter(z)"], - parameterization=[ - "desc.equilibrium.equilibrium.Equilibrium", - "desc.geometry.core.Surface", - ], -) -def _a_major_over_a_minor(params, transforms, profiles, data, **kwargs): - A = transforms["grid"].compress(data["A(z)"], surface_label="zeta") - P = transforms["grid"].compress(data["perimeter(z)"], surface_label="zeta") +def _ramanujan(A, P): # derived from Ramanujan approximation for the perimeter of an ellipse a = ( # semi-major radius jnp.sqrt(3) @@ -610,7 +571,81 @@ def _a_major_over_a_minor(params, transforms, profiles, data, **kwargs): + 3 * P ) / (12 * jnp.pi) b = A / (jnp.pi * a) # semi-minor radius - data["a_major/a_minor"] = transforms["grid"].expand(a / b, surface_label="zeta") + return a / b + + +@register_compute_fun( + name="a_major/a_minor", + label="a_{\\mathrm{major}} / a_{\\mathrm{minor}}", + units="~", + units_long="None", + description="Elongation at a toroidal cross-section", + dim=1, + params=[], + transforms={"grid": []}, + profiles=[], + coordinates="z", + data=["A(z)", "perimeter(z)"], + parameterization=["desc.equilibrium.equilibrium.Equilibrium"], + aliases=["a_major/a_minor LCFS"], +) +def _a_major_over_a_minor(params, transforms, profiles, data, **kwargs): + A = transforms["grid"].compress(data["A(z)"], surface_label="zeta") + P = transforms["grid"].compress(data["perimeter(z)"], surface_label="zeta") + data["a_major/a_minor"] = transforms["grid"].expand( + _ramanujan(A, P), surface_label="zeta" + ) + return data + + +@register_compute_fun( + name="a_major/a_minor", + label="a_{\\mathrm{major}} / a_{\\mathrm{minor}}", + units="~", + units_long="None", + description="Elongation at a toroidal cross-section", + dim=1, + params=[], + transforms={"grid": []}, + profiles=[], + coordinates="z", + data=["A(z)", "perimeter(z)"], + parameterization=["desc.geometry.core.Surface"], +) +def _a_major_over_a_minor_surface(params, transforms, profiles, data, **kwargs): + A = transforms["grid"].compress(data["A(z)"], surface_label="zeta") + P = transforms["grid"].compress(data["perimeter(z)"], surface_label="zeta") + data["a_major/a_minor"] = transforms["grid"].expand( + _ramanujan(A, P), surface_label="zeta" + ) + return data + + +@register_compute_fun( + name="a_major/a_minor LCFS", + label="a_{\\mathrm{major}} / a_{\\mathrm{minor}}", + units="~", + units_long="None", + description="Elongation at a toroidal cross-section, " + "extrapolated to last closed flux surface.", + dim=1, + params=[], + transforms={"grid": []}, + profiles=[], + coordinates="z", + data=["A(z)", "perimeter(z)", "rho"], + parameterization=["desc.geometry.core.Surface"], +) +def _a_major_over_a_minor_surface_lcfs(params, transforms, profiles, data, **kwargs): + max_rho = jnp.max(data["rho"]) + A = transforms["grid"].compress(data["A(z)"], surface_label="zeta") / max_rho**2 + P = ( + transforms["grid"].compress(data["perimeter(z)"], surface_label="zeta") + / max_rho + ) + data["a_major/a_minor LCFS"] = transforms["grid"].expand( + _ramanujan(A, P), surface_label="zeta" + ) return data diff --git a/tests/inputs/master_compute_data_rpz.pkl b/tests/inputs/master_compute_data_rpz.pkl index f6314e5a6271d5f5ed5bda3488de8e350d004a57..38f47136fabd9426d1381307a01969f8f83027ed 100644 GIT binary patch delta 26765 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 RZbfcgTU8^Pg^;t_g>zXd9)VEyX>e6b-ce;!v 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 diff --git a/tests/test_compute_funs.py b/tests/test_compute_funs.py index 85e57e0116..bba7930789 100644 --- a/tests/test_compute_funs.py +++ b/tests/test_compute_funs.py @@ -181,13 +181,13 @@ def test_elongation(): ) assert surf3.sym grid = LinearGrid(rho=1, M=3 * surf3.M, N=surf3.N, NFP=surf3.NFP, sym=False) - data1 = surf1.compute(["a_major/a_minor"], grid=grid) - data2 = surf2.compute(["a_major/a_minor"], grid=grid) - data3 = surf3.compute(["a_major/a_minor"], grid=grid) + data1 = surf1.compute(["a_major/a_minor LCFS"], grid=grid) + data2 = surf2.compute(["a_major/a_minor LCFS"], grid=grid) + data3 = surf3.compute(["a_major/a_minor LCFS"], grid=grid) # elongation approximation is less accurate as elongation increases - np.testing.assert_allclose(1.0, data1["a_major/a_minor"]) - np.testing.assert_allclose(2.0, data2["a_major/a_minor"], rtol=1e-4) - np.testing.assert_allclose(3.0, data3["a_major/a_minor"], rtol=1e-3) + np.testing.assert_allclose(1.0, data1["a_major/a_minor LCFS"]) + np.testing.assert_allclose(2.0, data2["a_major/a_minor LCFS"], rtol=1e-4) + np.testing.assert_allclose(3.0, data3["a_major/a_minor LCFS"], rtol=1e-3) @pytest.mark.slow From 277148709358f02c1001372d6bc1714d32eb2e7f Mon Sep 17 00:00:00 2001 From: unalmis Date: Tue, 31 Dec 2024 16:17:52 -0600 Subject: [PATCH 19/20] Mark todo as resolved --- desc/objectives/_neoclassical.py | 1 - desc/objectives/_stability.py | 3 +++ tests/test_objective_funs.py | 5 +---- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/desc/objectives/_neoclassical.py b/desc/objectives/_neoclassical.py index c8ce9410f0..07f9a73031 100644 --- a/desc/objectives/_neoclassical.py +++ b/desc/objectives/_neoclassical.py @@ -251,7 +251,6 @@ def compute(self, params, constants=None): Effective ripple as a function of the flux surface label. """ - # TODO (#1094) if constants is None: constants = self.constants eq = self.things[0] diff --git a/desc/objectives/_stability.py b/desc/objectives/_stability.py index 3ef4debc82..004a69a763 100644 --- a/desc/objectives/_stability.py +++ b/desc/objectives/_stability.py @@ -471,6 +471,9 @@ def build(self, eq=None, use_jit=True, verbose=1): iota_profiles = get_profiles(self._iota_keys, obj=eq, grid=iota_grid) iota_transforms = get_transforms(self._iota_keys, obj=eq, grid=iota_grid) + # TODO: Generalize balloning stabilty funs to multiple flux surfaces, + # include last closed flux surface requirement, and remove quadrature + # transforms. # Separate grid to calculate the right length scale for normalization len_grid = QuadratureGrid(L=eq.L, M=eq.M, N=eq.N, NFP=eq.NFP) diff --git a/tests/test_objective_funs.py b/tests/test_objective_funs.py index 8fad7ec774..7895bbe3b8 100644 --- a/tests/test_objective_funs.py +++ b/tests/test_objective_funs.py @@ -1665,11 +1665,8 @@ def test_objective_compute(self): num_pitch=num_pitch, ) obj.build() - # TODO(#1094) np.testing.assert_allclose( - obj.compute(eq.params_dict), - grid.compress(data["effective ripple"]), - rtol=0.004, + obj.compute(eq.params_dict), grid.compress(data["effective ripple"]) ) obj = GammaC( eq, From eb8b50c3cbf5017e2c00a4c160ac7edb56d1e0b1 Mon Sep 17 00:00:00 2001 From: unalmis Date: Sun, 5 Jan 2025 16:29:34 -0600 Subject: [PATCH 20/20] Add docstring lost inold merge --- desc/utils.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/desc/utils.py b/desc/utils.py index 134108c9c4..17e5f72345 100644 --- a/desc/utils.py +++ b/desc/utils.py @@ -759,7 +759,10 @@ def atleast_2d_end(ary): def dot(a, b, axis=-1): - """Batched vector dot product. + """Batched coordinate dot product. + + This returns the dot product between elements of a vector space only + if the basis vectors associated with these coordinates are orthonormal. Parameters ---------- @@ -776,11 +779,15 @@ def dot(a, b, axis=-1): y = sum(a*b, axis=axis) """ - return jnp.sum(a * b, axis=axis, keepdims=False) + return jnp.sum(a * b, axis=axis) def cross(a, b, axis=-1): - """Batched vector cross product. + """Batched coordinate cross product. + + This returns the cross product between elements of a vector space only + if the basis vectors associated with these coordinates are orthonormal + and right-handed. Parameters ----------