From 27a6fcbb86b3041553d378824bbd7a0f3244cc71 Mon Sep 17 00:00:00 2001 From: unalmis Date: Wed, 3 Jul 2024 23:26:48 -0500 Subject: [PATCH 01/16] 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/16] 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/16] 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/16] 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/16] 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 zcmeHwcVJY-_OM&ByCJ)&n?~9ufg}V-MM^pey(UyCX+TIpAPB6A;0^YI6d?>E3RvEI z3MxFGj3_Foz_ZY#2`EKS0YQWE1Pkz;nYnH6-VMZrcv~$j#Y&~^Y zx9zJVI=32q?QOTMck|OMF4JV8=QyJ~ddh8RYomR1->P#_KVwyRDz zvKXxo&bK0O!%)NGS9N}i3pFP6_l0F|B;af5fjF&t#($V+?+1PTi1D z!$!-Fnmh|ySvSNVedsncBx2dn*{MNE$FrBrSTbixTt(~0D?%zp&z!Mj$dY;bAxViy zqcgHDj7N93>;J)LZPBW_A=bs?w4F447DsBkX)F4mNgMlS=-e}AFRs?u7Vp%AEDqB2 zL~HAYm=-^$%|adC>6@;tC_u+I_U#T&yt`-OJ}Wvm#$eLuP~9KKU{vy8hcx{1O6_#( zQf{2dT(OPy?^Zp%5*37ZYKL;t#% zFw#cuJ4(9geCDXN70;caaw_T`+Pw|RkMl{w%OC7;pS6{M!!Tm;{TgjfuytZdIgn91#j8A#$&ug4d5u+-5~}A11m( zi&sV`?y~w?oY{D4Dm3#Dgr*-xttAd$>zVj6Q7-QOOyU7r2z@<~s2LxP)c}{g)ZBX% zqb;ophlZqMt{$b*m5-GZBVt_+%@|TI!Uhw*JiH9i41)8K|5{uIom*(2= z%1(t$GTrdly%cKif5z^&`qg?l)BaYgLa+sq_P)%PS6yEp9}4_OV&+lZ52&i+F3_vv~QzhV?VU!q-WHSrEfH?-v~w-DwH zudc|dwxXmTGCYVkZ|C^22Z-}--TJ~~%nNAI?y`p4oY>(V=NYqeXJ;{&Vv<#SD zNd1Rs<&h!nxxj}f`4m*0&TgS6*HRtx{cbkh(5`VWY(j{WL%c0-?BLmM&Z1&M=tu|nvGL+ z0=VWAwLm~l?dp|ZPx&F6J~^S#LQhVlq-6-;BvG^o0h~-1O-R5}^QpkqKcC6I?vuMw zz?%feU6;a})G^;LcYP7vR06mg(2)xQDn9spd8gKAvK#f}8jGNj?YTyC&^Q9P#*45~ z1aS51@V5`$x15@ICi|v6xtra=b?|dHjkD`?%=gRPJkj0|0WkjirA+vK(nl@yUO8ccE162LWFWKBu{ z*8rU@oczNX?GI87jCu)I!!yUd)JMg+k4t;V$p@p8DNJ+~Oz)7NL5dt`wE}D=49Bb~D|CTxD zx=-##0dEod{R@2pGB31_(YxCgx|88>&Z1&M=tu|nvGL+ z0=VWAwLrkaen&Q58~;Z(eR4vfg`S*9Ny`wxNup>G0yvp2nvejmXs_iqgEr^7Pwqwm zZxS4LT?%hf$9%us^+j}33E*x(M=l6Rp8UpVnkD+2Mm@R4B4}iLuF)JcjsULlB5V`^ zT>Uz%E4{Y2;!}OjO?z@TyMycC=WZHj*Xfw=m%DkQy&(cPeNL~LbH?`l#LzNNuBAHW z`{i1Ub4CEyETaEr-M5|I=xfe#esZo}G*dn2lCtI@fO8f}^K{JjTd1Owzea$AZ zZa`Cuf)qQQ%LLnnrx3%0XwbPA8KCg9%L)8yWJdPd!wVUuSUPt8s^k`7HNIkZSxFe#k0^{n>`RE_0oB6 z2+*I(4E2j<_sa@5fL2`<88V_h?-|3GL`DwNKWN2xj((4o@czWp`a{-0sUs85DPwik z-}S*+W(kpg2%4t11TU_uZG}Jl7Dyy0s()8U!B{Qva$~ICH_&ZdmS3%>6P38`NjJD4 z6)=6a3JNO3P`2^AZviHWn5x-&qM5V8T@&8+Oo6yB#vT(Js8!*hN8@Bojj}nw#3AEd~_8@nJpQ9cT=q z>N`8!c-U&r(F>NNn~m1*%a6i8R~g?K;vv%n-u#}i>ugn7au?*!q_=atskMSR zRx4Qr6utVm11Az4Zlh6tANMvmztDZHHC(C}=@U%RR91{iE_ue`A3ljZm+7dU6LY<@ z(EXl~CS0@5-8~EKG)7T+pZn1r?xeV=!}sf2g=c9)-0<_=TLl1R=_=Oo0oRH#_w15Z z%uMXBKuv-(O*5#>V0iFGEd2%=llFVZ;X(h1R?Mov#GF84E6}j3a{<#OtWAPZbQ(C@U%8Kb5;r)D#u>%U@W|YJq}yr zR9Fzj%IshUGyP4Ud-!CbCqMUaR}t_}2g*z`x@~RS$ay4m=l2=R-?IGt7hM?fwjwhj z-oxdj!4I!d$lKC>B`Uf*)r8L#nTOFa_QGK^)8B(XnU7LMj@MfPvixNR&x?S^5`*8% zwIrw*GL<~enrpFu_HTEVBp&gB<*?OL5|n;O@vPbl`bb>7&%$JCIRg+XqMW4=CHsxN zu3D5MikfNKTuTDZylP>y$g)|UhpZN(6&o?u8L))0=9qLFi2I&mWLZ8p| zrbD;KW^cx1+x^~T#QsxB3zNmXk^8KKtBcBB0C~5Ksu(a}=;+w#&fEQM zw9~rj{*hT0Y0+<0R)jvt^G-sE2EQlpm;dx1ni*dEqjO)fAukYVTN*SV9MuIH%}o5z zm?>~&LV$wjPwxz1JfD9xAS_D@0y3WoAQqOO)D?_~j!T;2q0<~1g8{T1^mW#mD?Fhn2rMhaO_#)2$tr8R>D@|F1Gsj%WoY*Ta?dl{e?BWwwH1albRYvqiOS7x5e!r?L;S8 z6!~^*f3oH6`gUvIEEF<5L?Q1zQ=`(*8}Vh)Z0+oNdx(4uBCEiO@+U_}acu<$|?mLP`|w?H3ltwt$ZIOkSeenzHsx6-Nug zoERd_FE0p-q1IsA8TN(Ms%8!N$~R%^7R4_w7cPZ`C`S`f^SncC6R_>FQ^#NfxhQ9P zT)f&#N%OE{Od$|NN*!D(ok&S)1Dhb;_Eh>6z}ldsQKb<~E)3N&~TNS;Wskx3#NcC_88uOez;umyTc-gV%XFZJh;@ zZFK*PLg(<-RX=RM_R%RWA#8r}ZBWU93{&m8OlItApu|=&XuuzKhqii!Ppz8Bo$&mJ z*K{v4n!4)j8SYV+Ykx`wW*9>dS6YB@&)>I^$8h+ zknd1fCsbvju`!cPsN|n%t#Nhx=*y0DljSvA61gh~41x|<;HE8e{NnYZj7jUCz!rX2 zu3!$f0PW}jBnZQTt{mw^To|T-NVVNRZCRXC1-_008G4j&3yQ&t-9Mdq$tJ39M^`=C z9XFMqdDX$PkU&3=4fexixBH1R1L(w-4pw~jSQ|J*Uo+v27u&RU+)jL-()Nh_KnY9A zg_O2!@ekcQvn6Hq*tT>@d3$WzFh@~hm?xB)6UIXuwC>YV6WV>T8*jn`pKVL#iMI8c zs?_@URA{}B69xdZW*dX>5i!j4{-}b2is=bEWvm2Y6~-RO$?D^WW90(@H`}n5a*=F{*+0HC8M`=eH;^E);1_aJFmJk*yx1= zx<^^@jEb@u$mg*%IR3!)5HDET?qnwNT-r{-H`_Lx?QBA8EvdZ9UBOZTUK!cW2d0MW ziyDos1kKbeZTGWUzmi-x`&ZNthC%#FwSb_q5j~inGgXAR?1jj4X{WR(Q3j_n!|JzW zikOa4s&7~116X?mQ$rUF$9JVg(DUx9qg4@#Q`NM`+cO0YdL9ZY+a~_x0}5;f4oC<6 z4NU4l%;)ubH#HLRM5t^XhK9=hi2#;@=}Tf;=~Fs@&vmPgPCHiE&n~e56>ilP@OQJA zPZUQi>%jkwuvWC5InYe6b%0AuFVcpA+As9@_bsI2c?;fqphGb1xvwbq+|V1GjTEPo zsG%KqwKH!Q9er+7P{HY*ygf$G=?Ieu?A3kV?RcWxT3f0V!cGgm5|to7)k7ySr3v3z zweZT*o^aZ#-LA)%pGbg{58w&>Bq1uxd=Xfr4rwxp@9`~9Kv%C!jHZ82>xcG9Yh{xw z50HXCXrBakyw>{qDmEYDSmYt&QBq*J8C4s~L+ZhofR1Q0l4M(I$v-HNgs)U3?PdFI zrwd{jbsD_qBpgv(6-B95k zUH}Od$x30aKRqA{XZ~G{mjtrYkD}3l^IR)sLpX>e5c#?W04br(8Rbk(Yrb>p8jPOm zkyq2M`*qb4-?OlBM&I3mW0ElPD9K)?oGk3P>R z55YMjV%C8culm$8?l8#1;IB}FpjdQg>4*-@Ppp6tMR4cY&PjOT`nc=RL)IH=S@nQ2 zt>co7Df<)#N|cR2*$^Munc`$=0=0Pd$$DPSzwG={lv&Nm6g?WadOD+V)#L45u|sKO zimVR`f8Hh4Ns$v$QczC+aUqNIM`q&uajCNvT!JRzF^s3ZptEy|3$d#l=1Nf>DDiYj z1jPrga8-QX^VA4o=ul_alb6>JE0rk#D4vkIt+9RY}N4XL7s}gUwN^1=DC8s8_8-Q0O0vY%z33r;$HLeRcn{O9CqV@^<1u z;6sCs01jf(tmDrq5anZx9 zBQAxm#WkxQ(8TNGO8W^|v(4?SWR3PF7z2eM>yWlyH4D=BmMvh;s4)mdxm;2G)0Jw@ z{?4E>&;4*rbsF~==usU3FgE!<>7l4(Tbvp@qQ>zmYZs?6PSz(-wi&g&_>Wts?6 zm)7;|cG~y+@T(KLLIe|DJ#lYWh-g7!()_N<%`814@7~ch6lJt2Wpko!XIG_YC8*iU z?h>KM8uMd)yCv${#en@!+WpRN>gm42o8cyOOqMBt8=Zm#+0 z_*|L^mqc}gWffRX>(cF*!cO318jX&priCJ4#*C{6bldF$!bV-qxTFgN;0Urxdp*d2 zD0(75u#fb_&)K^vmmjHLLL!MZ#Nie8ZY%)4?5%E)@!~KH;e;QBEYs6M@#asv?E>$9 zzO$_H@?$PZvQaM^1}~dy{scEr8@%HfPstbIX=)O~AhF8|3Kbl|Ryq!M=#<7d(iEks zafE@Ri&UDr$5cC_s=**4r=?!h+x-uv!0$o~(D#C&I>``DZFe2K3mQ z?ZQ+faG^Y_H`{lq7zBhSqR{>O%e$yBf&|fnul-Ql8&Olq2~a8Qj;{j?I#IR4((lSu z>p|jqX!jvzor>{^;iXdAf`%}h{*`-=?se*Y6JGH`zbtZ^++D8{KwUKKm%vg)#Xs1j zuv?x8IG3F5tY$}e%aANze^hcl-Eo=2pf4puf|i0%_0w4<5+iC||Dd5X!Y(LIZAfhC zFpk=rLXrrqC{MO^a<&${dXE!nKrQH|OR5@+%z!|sU=(nWS1~aRVh>P^6^Yq(so=Dy z6H<8Xr1~~mxFFpL4RD!@N-BkJWw~Vr>Tu>g&hywWKIssAf*5wz8m5=l;uOq7@%aYC za|lo=*!#ZhFXdTl6qlH=$bKo>AZVjU^DL#jIFxjW(G??!t?=2(;3YSry5K$?anZ}! zf3t?35EEm0C?OF-pPNLom!oj*sccw*8W#_b;p#$<6MbTZHCz z%ZtTjq21S7Jw?EIrraX_&fXr$@J8nI&_TX$c&8v1QL**vPU4qA&T%*F`B3+RGCG0s z-vKu^b6e~=w*R?IS%#E*ZZX>OVfR@4t$!}a4sb1w z&pmFnNc6gabW4Zj!X*C604CjnVY$cT5QNoLpAL$}zwHGG8AH%1v^j^>r6qe`r3X-Sa>1Ovrd#a3)`1t%@fDQsi z^Iz=6Qo`1q=oR4@bw3%=8`NQP!&^J`J_bGQRE|)1^+w;`Us+ia+0vrk`>ooaTjR;o zdxO-WFyOJ?(R7GU+twTCfto=_0Gu%1p^nr*!QHJ7s2UjmHn@*M!#flBSFh&vAv45! zrK&+okKe(=luho#bl&TMK7bhn6^;5Z&U)_e^V<;Z2_4Rf>$}TJmpbw*I?27P6Yqqu%jAIn?P7ouI%;7LSjQ=}*%C z)#(58nf{Faqp$ae++A@7rjag^PzFSL)3t~Cs=`0+52gqQh|j<54`&l`o+IEIo@{!Q z!PmY7NLeB^ndb8CgJKb&NWymn4FJD}Lvz9p27cH-Nm`Bq135kD$hj0V5JV__ z6atel_jf&;gmoDML2xh#*5?mo)7-+cf%_b1$$MrEWEMDT!9Zp?-ChD1YwZl>!4&WW zZRCM}+X29iqNLlQ*{cQxA;=+Q2J}gI4}}3?U|qRs6u8#oL6$*vRM9z6gT8iwK2)-c z1ziR)yT}|cNX0Jl5Xm~A4y#oI2F<33d)f!>w@P0QIN1UMThQa8CxH%y%HaHgfjg)A z%LDTq^O%^*CT+@n5ro*!c{hk_KOLl$ohSkXT}ug84Aq%qJe%m^pd(gKDP&`SKcY&$ z5{bqyx(^0Pz?4=HJ{XoU5rm8o>VVC8bg(zBN*&C6O+EU!gtAKFeY}t$g<;p_E>&<0 zNRP>k2_REf3_itn1?vYxx&c^>X4~MeKn@F)b11wzeR%Nqbe-Ds69I8hBti}UkIoi24XIZ zz}M!G0(kaMKRt}ed-vZ-VO9iwd($wO1OU%7dxjmbqNN{J`;uR?z9YZr$xoVK^yT!c zJa(=dx?uziEC9{+9uBCWm)N$X0KIsn4QI;ybr2~)FJF%zeu4sTzGwJZy7yiC)bKNo z^FIdXX@ugS1yy<2>+Ru6Zvv@DP|uG2xMauh4T@1qA-YbFiy<#xgA?=p^`4mLnn(0T z5N+;&k3Z2*Idj2FC1J$bg?B}cP<1y#y$vnAG@Kox=rr`(MxW`j*+)L16AyGA&Kxj8 z$t0l(Lli{0UQHi zQ^afGBVho=MdBw@N3sR1st>7wSA7ckn%KKW!pBo``z%5}=^k+?%+?z|jD2(@GtjS} z1u$Z%Z?98s1UsLf8sexAmc8!8D4u!;1qd-wGSy_G~1(3}T zmeHU?sQEN%bZvj_V^O$t%IFnoM84PlF&gF{C>(!}FKqc@G$hW!yt@4R(V*V5;^9d@ zWhP_hg+E6FSpbpmGlq4L5Hp5p!6SXl0jr3+TVJ9s-vkw&Bt=Fu=_;6vRUPkODk8Wb`8L0c^!uF`$@xqmw zJW>urD}9PygCnlbFNM(^Pjcd~G;j2Z|2wx4ofLgLSap8vM+UozGu z{=CtH-#K7(;IHU=!XKI+S=14yod$|L9ug^flo5L8S*X@Lgl1ccB2mfNLNk8;oFm{f z3~=|4qq8Rn!VC@+^AEg&xLu6%jpDdljW<1 z8xn+){3`v-RS&e~XUd8~T5SyM*kjlqk-=yYXY|unOre#bpQm#ZpI`NB_L3P(gnf3! zXqvNJF_A)OG-zsEQLwhc&VGJ~rqxbut+|9@3h(8Q*1k|=Vv}CL(mRVSxa*p!A^vF7 z&?0XQ9XEj}|8z+!d~IH(pOI3js|wTOEBh77+pDf|V|s6pzcsRRS@EPeC^)VBT3Y zDH+=q6jf;O?&pj4=$0mzVe{bJ(oc7fKFR{`JculQtZ;Y$`Sb1udfc!-6ta`lVqmo|!9um^` z(X`8zv3T~5N>90r&Z6WCmF@8R`zp;we+ktdH$hOppcC;`?J!qV9quoq(anf}#u&V7 zdbOvVP){S8yQw4=q8il}V}OJ(&?q1bG9sWY4v%@j5o4qgLrVv)-3+V>CWs$iDT*YT z3^&>&q^S~8gMhvhRZtQ>o>L4#A&GxDZNs*_J%&#qDi!r`!Y@SmlgEcTHA?0QkZB^# zz-(gOW5uD4crbWbo|IP=Idincz^qh;u$+gI@l`GI^>>l4X;f_O@Vfrftp1QPqfu<2 z95@Azaxr`@KTu8%a}j1?@Vper>o*$^jH8t}!DmvfK}Ogo2BN4aT>M8>8#(-&Ms@g2 zMg$`;7EfM2%|Z2BMQ*lH-NfT}R!?(~-F6Ft0TP3Y`<3_`wTCT4!g2Wdf)WRlJ82=N zWy4_wlVA=Y6NdJ@g(vZjNzrT$(Ov@20yU%HSYd~Env+jz1;XHFG+29bkfHw8oFGQ}8P z`-pPaE15Ebq&dRTxGuifCLdJrk{;7&IyR&qXDeQkEM^2*$Eq#qOZv$GeCDKVN%GMM zb?FL>BxMXk(wP#TkbxoVuD2RIq?jq;0nb3jP9KTab2?$Lo)SyL#ks3YoO;6C1-Ncv z31X{|!0>=$_ZV_56jg}iY+%Sn$(GMT56JK!l8r)=#Uj+?Eu^Hh!8MT4qUa7%QXY__ zO%q85P0@r0AulCF4Y!aIL9DH(%4F18?ccq5jk*@dfUZvB-mN4aL81_KTdDR(l}B<^uQg@xn*Oxfylis&a@^BM{d-G7k1q zN7@RDHap5DA%|;Jtoqddgv-5zdb~1k+&{i#% z)#q;<7h=@BD64sD^Ee(-S7nP}>D$zgg^O9$a<99qJ)85$mfWZ2V>^UflDHaPHNY-%@!@hb3+`g(s@{k8%SoA(dgEzH_yS zg!X~K2k)>Gii{)_3W{s*@C#gbu*qG9cU_sX!XP^e5^vF_l4aP-ZK^~4Qs*5e5C+;~ zx51D*c1##9sp~6Op&SBdubJtv(RX+W*VwpvX~l3E*+75IIdt{@30WF;>_=1LiVSEB zH^E=i4^QJJ*gfE2zGr1wEcSYG!VaD0-xz+J(@~Sv>>+O|u(!v=zS_mrBfUr|QiHtb zPxL^?o|s_L9F{?Q&|Tnz9bj@fPpZ%BJSM^q_QCTdf(aacuS`6NkB=_P*8sYp#+1;y zr-~M#sh1`&O0;mspL=b>Z^RNSTcLH;MShwSsOH*)vyJIQYD>CXP0;R`(kc0zEiT%ER5Agb*haf>{zmtaES0&RPK14AY_1Fp1LC8-a;;MfquC;cMVw zWnG)=rw^SsJ4srjXA#OfJv7l0-3ikYbrI208a2IV@NVtIMFuhh-;GN~mF>{UtPti4 zxJV-n!%Q(9x2q6`p39I7LA))ewA?AAvvw znT;8&j%~X!>Kx64+#Bh;|awrHd>6K!( zn=XI~x(>ALbYqrG6E4byRYp0De5?zv^-(&zq?w&eAh2u2uxouvKAyI-QIbEk++im8 zf>z&j$pTfvydhly9MqiM(mN_|{(x=u-(^BpRTFYpiQJ5A*_F+xAK}%{OgyEdUNKqq z=Lo9f@Rj?@x9TD!Go|4NI$KgN4J{oYpn>T4H{{;BVP&R9Z!M*HkL+)f$tKh6G*1@d z%_Ao&mn3Npp?8|CdJ`tmW+F-IntsMvT~r=?lSLw1KxyRHAyx&Oxmac_ zvYkf|+5e|CivqS=h++T0j!h);Av=rE1Fy})53w58FHc(VmPado(UEWo zK+)qyPY+bRYodvSOW20?_XOd{1>q6_%HdD~fe|HW2n7`mPYQw|M8e>u^G+KHb*4vn zZMxDu(k4+Lg6uuvqALs+UHzexZPQtO3WEEsA~qbG_@(nZcB2)B8?Am(z9eB1xMC_= ztsz`dgyEX0OO9q zoO=@QAyTE9zfC7rg(D$ir1lQB!1Tr@RS}YRp&z-X2*X89_4AJ4u8V{XUN8l_;0MFi zOiHy1mr+Rf(2QuVLzLpQ#?DlZq&rY&qUML|3d)uCN5O>KZU+4q(GP*XczkuZlhmPJ zarI5V|01eIsbjdCNNIC|tP^p~bah2IT(r{}MwrYU#hqJ0gi#+LO&~OqN;fkA0Wq}k zz@yVF0wF}zdKx{12q{1H$k5U-sSGU(ld8-yBy5M_!+qsgh5)H*moywA#zs{TQULOy zK8Cx&e^N{z^ox3kg{sb#Vk}ezD}+LMa%4=>c&NZ6MeS-D7J{M}f}%>bka#HVQHGg@ zLj}x~BM67WCxyPIS=_Rox4BzT|DHb(B z@GS7Df{+5xZ}Z7HUyT{ifSS@Ve374~=#9iZm)4Z0&^1EFIt_FRtdl^e3L%0v$hCYS zD(@l8>8xxT>l6@ER!FQ9TJM6B>KQjhltvn0WZ?0i>a)IN#M0QOfRm?+#XeQ2BB4)} zYKVL~6HCLN0%D>ta=C&m{7Lc12%*tW0bY!Ls`LioL1%NL5m2GE7y%_W^Qmf?gh5qM zi&0P|aWqFuKrcw1e#@_l9v}*pD1u0IS3n`k14D51l1?TDnl&YWkqD^@nKVF}lL4FI zc9N25Rv>Li)2(QUCM}T?gij0lRD|K#ITc%Vnj8|2h{csXDz@otbH(j94W80=G=%R{sj)$%j_6-HkA3UScOq3m*pc-sRY4#gs?$;mg6?F`d|lsF?xd4{ZPDb@JDHSbxOMkk~rt0x+gb@YEJ z%bD5)&2OP4nw>#QG`WJ7XtDw=(SSWIxy*9D7c!UHC^MHN`-H`koP*W#o_Wkoo%bxD zrF(nvY_FErNFjt<_*~>Y3)q@C@7V!u)8;)3s0nvBocAm=5|8(4@)FPYYA>&o_bhh6 zA0J)hJquuhYW{NGGmof&dCv~X`SkEF5JV3DYHT~4{#5|fvz!I2l+C}GsNrk>xBj5YPE4Bw#q^&VZEimCDhJ-XA9 zTHZ5#QE%Qeg{U|0nL^M*JS{aY@7Zef__vs=tjK-#Gn%XRh%Xgs(6F62EWVSaLc@1_ zQVwj>=R?EEMnccBpP|ayUT`(A6lkal6RTJrG*rciRgesw{0m99P86&DT3U1_Y}M~n zesUq5WO$wDvDn+wdR($f_}HF^j1vI_+Ru^P_CG_ zBGW&tR_EHN{=x^@6nRtnFDOEp|H9#W+rR3qU`UC#f|mYgycLui>aC!q8}L^2fNA9; z*X|&gR=}^(LLX#P9&ULnmJC_K-)yP+9dr|UD+1xzzE_zKD{aQX5QL8O_`m8aZE7Xd ze?d#se?d#se?d#se?d#se?dzw{TIp)U|oAFcsxz*tq{=ClVGF06#}*<_EtEcZCY=I zfVx563Zca8H!oTQAm{P+1UTz$#yjj!*m(4K3H+<%$*0-khk zCVYS{d15pf@{id~8RRo{8?OF+rqyUZo-4TRyfWAoOm5uNHvZu8I2d5>rmgq{`v=<3 z`f4}(VNJY!rn^Rq?@qNp;;!8ng`lDxj?1(Ub=Q8)ej)g^8?DQ6Fwa;bfV_KrNXAhHPl+&Q7+ zk5ZsRL$A*S)KG(fGQ)-m_MIBdTr_s6JrdWI*^g^H=8AOCYXKQB{GDggoZg-pfT8&b zjmL5kklqN$174d%0O`eW{utgpCW@Z&^iYlcNkQ}ilTSK`e*av1mLPh;w5W-%@JJKIMD6??mnJ^zA^Sd! zd9VmB82jCi*k59{DOh`tN9`}E8oCMjJjMe%82VADHA^Eyu<w;<2$+4Ke~jxTO*19_h{GgyM2ClTr zU-9FCzDiqV|JW?G0@c6;$o?o|wf%EFsYcV**yC~V3qXZ1A}C$=ykzgB)u#1Cb1YZ_)OKHQ|IESg J Date: Fri, 12 Jul 2024 01:11:14 -0400 Subject: [PATCH 06/16] 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/16] 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/16] 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/16] 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/16] 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 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 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/16] 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/16] 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/16] 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/16] 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/16] 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/16] 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):