From cec28fc20a105de64b9dca4295a4fa2ad1c5d0b8 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Tue, 7 Mar 2023 23:58:22 -0600 Subject: [PATCH 01/31] Add limit at axis for iota --- desc/compute/_profiles.py | 319 ++++++++++++++++++++++++++---------- desc/objectives/utils.py | 2 +- tests/test_compute_utils.py | 45 +++-- 3 files changed, 269 insertions(+), 97 deletions(-) diff --git a/desc/compute/_profiles.py b/desc/compute/_profiles.py index 7f79607e1c..1ae3006d6b 100644 --- a/desc/compute/_profiles.py +++ b/desc/compute/_profiles.py @@ -1,6 +1,6 @@ from scipy.constants import elementary_charge, mu_0 -from desc.backend import jnp +from desc.backend import jnp, put from .data_index import register_compute_fun from .utils import compress, dot, expand, surface_averages @@ -482,7 +482,7 @@ def _gradp_mag_vol(params, transforms, profiles, data, **kwargs): transforms={"grid": []}, profiles=["iota", "current"], coordinates="r", - data=["psi_r", "lambda_t", "lambda_z", "g_tt", "g_tz", "sqrt(g)"], + data=["psi_r", "iota_0_num", "iota_0_den"], ) def _iota(params, transforms, profiles, data, **kwargs): # The rotational transform is computed from the toroidal current profile using @@ -502,13 +502,7 @@ def _iota(params, transforms, profiles, data, **kwargs): * profiles["current"].compute(params["c_l"], dr=0) / data["psi_r"] ) - num = ( - data["lambda_z"] * data["g_tt"] - (1 + data["lambda_t"]) * data["g_tz"] - ) / data["sqrt(g)"] - den = data["g_tt"] / data["sqrt(g)"] - num_avg = surface_averages(transforms["grid"], num) - den_avg = surface_averages(transforms["grid"], den) - data["iota"] = (current_term + num_avg) / den_avg + data["iota"] = (current_term + data["iota_0_num"]) / data["iota_0_den"] return data @@ -527,16 +521,10 @@ def _iota(params, transforms, profiles, data, **kwargs): "iota", "psi_r", "psi_rr", - "lambda_t", - "lambda_z", - "lambda_rt", - "lambda_rz", - "g_tt", - "g_tt_r", - "g_tz", - "g_tz_r", - "sqrt(g)", - "sqrt(g)_r", + "iota_0_num", + "iota_0_num_r", + "iota_0_den", + "iota_0_den_r", ], ) def _iota_r(params, transforms, profiles, data, **kwargs): @@ -563,23 +551,10 @@ def _iota_r(params, transforms, profiles, data, **kwargs): / data["psi_r"] - current_term * data["psi_rr"] / data["psi_r"] ) - num = ( - data["lambda_z"] * data["g_tt"] - (1 + data["lambda_t"]) * data["g_tz"] - ) / data["sqrt(g)"] - num_r = ( - data["lambda_rz"] * data["g_tt"] - + data["lambda_z"] * data["g_tt_r"] - - data["lambda_rt"] * data["g_tz"] - - (1 + data["lambda_t"]) * data["g_tz_r"] - ) / data["sqrt(g)"] - num * data["sqrt(g)_r"] / data["sqrt(g)"] - den = data["g_tt"] / data["sqrt(g)"] - den_r = (data["g_tt_r"] - den * data["sqrt(g)_r"]) / data["sqrt(g)"] - den_avg = surface_averages(transforms["grid"], den) - num_avg_r = surface_averages(transforms["grid"], num_r) - den_avg_r = surface_averages(transforms["grid"], den_r) + iota = (current_term + data["iota_0_num"]) / data["iota_0_den"] data["iota_r"] = ( - current_term_r + num_avg_r - data["iota"] * den_avg_r - ) / den_avg + current_term_r + data["iota_0_num_r"] - iota * data["iota_0_den_r"] + ) / data["iota_0_den"] return data @@ -596,27 +571,15 @@ def _iota_r(params, transforms, profiles, data, **kwargs): coordinates="r", data=[ "iota", - "iota_r", "psi_r", "psi_rr", "psi_rrr", - "lambda_t", - "lambda_rt", - "lambda_z", - "lambda_rz", - "lambda_rt", - "lambda_rrt", - "lambda_rz", - "lambda_rrz", - "g_tt", - "g_tt_r", - "g_tt_rr", - "g_tz", - "g_tz_r", - "g_tz_rr", - "sqrt(g)", - "sqrt(g)_r", - "sqrt(g)_rr", + "iota_0_num", + "iota_0_num_r", + "iota_0_num_rr", + "iota_0_den", + "iota_0_den_r", + "iota_0_den_rr", ], ) def _iota_rr(params, transforms, profiles, data, **kwargs): @@ -648,40 +611,226 @@ def _iota_rr(params, transforms, profiles, data, **kwargs): - 2 * current_term_r * data["psi_rr"] - current_term * data["psi_rrr"] ) / data["psi_r"] - num = ( - data["lambda_z"] * data["g_tt"] - (1 + data["lambda_t"]) * data["g_tz"] - ) / data["sqrt(g)"] - num_r = ( - data["lambda_rz"] * data["g_tt"] - + data["lambda_z"] * data["g_tt_r"] - - data["lambda_rt"] * data["g_tz"] - - (1 + data["lambda_t"]) * data["g_tz_r"] - ) / data["sqrt(g)"] - num * data["sqrt(g)_r"] / data["sqrt(g)"] - num_rr = ( - data["lambda_rrz"] * data["g_tt"] - + 2 * data["lambda_rz"] * data["g_tt_r"] - + data["lambda_z"] * data["g_tt_rr"] - - data["lambda_rrt"] * data["g_tz"] - - 2 * data["lambda_rt"] * data["g_tz_r"] - - (1 + data["lambda_t"]) * data["g_tz_rr"] - - 2 * num_r * data["sqrt(g)_r"] - - num * data["sqrt(g)_rr"] - ) / data["sqrt(g)"] - den = data["g_tt"] / data["sqrt(g)"] - den_r = (data["g_tt_r"] - den * data["sqrt(g)_r"]) / data["sqrt(g)"] - den_rr = ( - data["g_tt_rr"] - 2 * den_r * data["sqrt(g)_r"] - den * data["sqrt(g)_rr"] - ) / data["sqrt(g)"] - den_avg = surface_averages(transforms["grid"], den) - den_avg_r = surface_averages(transforms["grid"], den_r) - den_avg_rr = surface_averages(transforms["grid"], den_rr) - num_avg_rr = surface_averages(transforms["grid"], num_rr) + iota = (current_term + data["iota_0_num"]) / data["iota_0_den"] + iota_r = ( + current_term_r + data["iota_0_num_r"] - iota * data["iota_0_den_r"] + ) / data["iota_0_den"] data["iota_rr"] = ( current_term_rr - + num_avg_rr - - 2 * data["iota_r"] * den_avg_r - - data["iota"] * den_avg_rr - ) / den_avg + + data["iota_0_num_rr"] + - 2 * iota_r * data["iota_0_den_r"] + - iota * data["iota_0_den_rr"] + ) / data["iota_0_den"] + return data + + +@register_compute_fun( + name="iota_0_num", + label="\\iota_{0} numerator", + units="m^{-1}", + units_long="inverse meters", + description="Numerator of zero current rotational transform", + dim=1, + params=[], + transforms={"grid": []}, + profiles=[], + coordinates="r", + data=["lambda_t", "lambda_z", "g_tt", "g_tz", "sqrt(g)"] + + ["lambda_rt", "g_tz_r", "g_tz_rr", "sqrt(g)_r", "sqrt(g)_rr"], +) +def _iota_0_num(params, transforms, profiles, data, **kwargs): + num = ( + data["lambda_z"] * data["g_tt"] - (1 + data["lambda_t"]) * data["g_tz"] + ) / data["sqrt(g)"] + data["iota_0_num"] = surface_averages(transforms["grid"], num) + + # limit at axis + nearest_surface_idx = transforms["grid"].unique_rho_idx[0] + if jnp.isclose(transforms["grid"].nodes[nearest_surface_idx, 0], 0): + limit = ( + (data["g_tz_r"] * data["sqrt(g)_rr"] * (1 + data["lambda_t"])) + / data["sqrt(g)_r"] ** 2 + ) + ( + data["lambda_z"] * data["g_tt_rr"] + - 2 * data["g_tz_r"] * data["lambda_rt"] + - (1 + data["lambda_t"]) * data["g_tz_rr"] + ) / data[ + "sqrt(g)_r" + ] + limit = surface_averages(transforms["grid"], limit)[nearest_surface_idx] + iota_0_num = put(compress(transforms["grid"], data["iota_0_num"]), 0, limit) + data["iota_0_num"] = expand(transforms["grid"], iota_0_num) + + return data + + +@register_compute_fun( + name="iota_0_num_r", + label="\\partial_{\\rho} \\iota_{0} numerator", + units="m^{-1}", + units_long="inverse meters", + description="Numerator of zero current rotational transform, first radial derivative", + dim=1, + params=[], + transforms={"grid": []}, + profiles=[], + coordinates="r", + data=[ + "lambda_t", + "lambda_rt", + "lambda_z", + "lambda_rz", + "g_tt", + "g_tt_r", + "g_tz", + "g_tz_r", + "sqrt(g)", + "sqrt(g)_r", + ], +) +def _iota_0_num_r(params, transforms, profiles, data, **kwargs): + num = ( + data["lambda_z"] * data["g_tt"] - (1 + data["lambda_t"]) * data["g_tz"] + ) / data["sqrt(g)"] + num_r = ( + data["lambda_rz"] * data["g_tt"] + + data["lambda_z"] * data["g_tt_r"] + - data["lambda_rt"] * data["g_tz"] + - (1 + data["lambda_t"]) * data["g_tz_r"] + ) / data["sqrt(g)"] - num * data["sqrt(g)_r"] / data["sqrt(g)"] + data["iota_0_num_r"] = surface_averages(transforms["grid"], num_r) + # TODO: limit at axis + # I will need to check if limit and derivative interchangeable. + return data + + +@register_compute_fun( + name="iota_0_num_rr", + label="\\partial_{\\rho\\rho} \\iota_{0} numerator", + units="m^{-1}", + units_long="inverse meters", + description="Numerator of zero current rotational transform, second radial derivative", + dim=1, + params=[], + transforms={"grid": []}, + profiles=[], + coordinates="r", + data=[ + "lambda_t", + "lambda_rt", + "lambda_rrt", + "lambda_z", + "lambda_rz", + "lambda_rrz", + "g_tt", + "g_tt_r", + "g_tt_rr", + "g_tz", + "g_tz_r", + "g_tz_rr", + "sqrt(g)", + "sqrt(g)_r", + "sqrt(g)_rr", + ], +) +def _iota_0_num_rr(params, transforms, profiles, data, **kwargs): + num = ( + data["lambda_z"] * data["g_tt"] - (1 + data["lambda_t"]) * data["g_tz"] + ) / data["sqrt(g)"] + num_r = ( + data["lambda_rz"] * data["g_tt"] + + data["lambda_z"] * data["g_tt_r"] + - data["lambda_rt"] * data["g_tz"] + - (1 + data["lambda_t"]) * data["g_tz_r"] + ) / data["sqrt(g)"] - num * data["sqrt(g)_r"] / data["sqrt(g)"] + num_rr = ( + data["lambda_rrz"] * data["g_tt"] + + 2 * data["lambda_rz"] * data["g_tt_r"] + + data["lambda_z"] * data["g_tt_rr"] + - data["lambda_rrt"] * data["g_tz"] + - 2 * data["lambda_rt"] * data["g_tz_r"] + - (1 + data["lambda_t"]) * data["g_tz_rr"] + - 2 * num_r * data["sqrt(g)_r"] + - num * data["sqrt(g)_rr"] + ) / data["sqrt(g)"] + data["iota_0_num_rr"] = surface_averages(transforms["grid"], num_rr) + # TODO: limit at axis + # I will need to check if limit and derivative interchangeable. + return data + + +@register_compute_fun( + name="iota_0_den", + label="\\iota_{0} denominator", + units="m^{-1}", + units_long="inverse meters", + description="Denominator of zero current rotational transform", + dim=1, + params=[], + transforms={"grid": []}, + profiles=[], + coordinates="r", + data=["g_tt", "sqrt(g)"] + ["g_tt_rr", "sqrt(g)_r"], +) +def _iota_0_den(params, transforms, profiles, data, **kwargs): + den = data["g_tt"] / data["sqrt(g)"] + data["iota_0_den"] = surface_averages(transforms["grid"], den) + + # limit at axis + nearest_surface_idx = transforms["grid"].unique_rho_idx[0] + if jnp.isclose(transforms["grid"].nodes[nearest_surface_idx, 0], 0): + limit = data["g_tt_rr"] / data["sqrt(g)_r"] + limit = surface_averages(transforms["grid"], limit)[nearest_surface_idx] + iota_0_den = put(compress(transforms["grid"], data["iota_0_den"]), 0, limit) + data["iota_0_den"] = expand(transforms["grid"], iota_0_den) + + return data + + +@register_compute_fun( + name="iota_0_den_r", + label="\\partial_{\\rho} \\iota_{0} denominator", + units="m^{-1}", + units_long="inverse meters", + description="Denominator of zero current rotational transform, first radial derivative", + dim=1, + params=[], + transforms={"grid": []}, + profiles=[], + coordinates="r", + data=["g_tt", "g_tt_r", "sqrt(g)", "sqrt(g)_r"], +) +def _iota_0_den_r(params, transforms, profiles, data, **kwargs): + den = data["g_tt"] / data["sqrt(g)"] + den_r = (data["g_tt_r"] - den * data["sqrt(g)_r"]) / data["sqrt(g)"] + data["iota_0_den_r"] = surface_averages(transforms["grid"], den_r) + # TODO: limit at axis + # I will need to check if limit and derivative interchangeable. + return data + + +@register_compute_fun( + name="iota_0_den_rr", + label="\\partial_{\\rho\\rho} \\iota_{0} denominator", + units="m^{-1}", + units_long="inverse meters", + description="Denominator of zero current rotational transform, second radial derivative", + dim=1, + params=[], + transforms={"grid": []}, + profiles=[], + coordinates="r", + data=["g_tt", "g_tt_r", "g_tt_r", "sqrt(g)", "sqrt(g)_r", "sqrt(g)_rr"], +) +def _iota_0_den_rr(params, transforms, profiles, data, **kwargs): + den = data["g_tt"] / data["sqrt(g)"] + den_r = (data["g_tt_r"] - den * data["sqrt(g)_r"]) / data["sqrt(g)"] + den_rr = ( + data["g_tt_rr"] - 2 * den_r * data["sqrt(g)_r"] - den * data["sqrt(g)_rr"] + ) / data["sqrt(g)"] + data["iota_0_den_rr"] = surface_averages(transforms["grid"], den_rr) + # TODO: limit at axis + # I will need to check if limit and derivative interchangeable. return data diff --git a/desc/objectives/utils.py b/desc/objectives/utils.py index c9dbe6f916..5bfa9dad2b 100644 --- a/desc/objectives/utils.py +++ b/desc/objectives/utils.py @@ -216,7 +216,7 @@ def factorize_linear_constraints(constraints, objective_args): # noqa: C901 def project(x): """Project a full state vector into the reduced optimization vector.""" - x_reduced = jnp.dot(Z.T, (x - xp)[unfixed_idx]) + x_reduced = Z.T @ ((x - xp)[unfixed_idx]) return jnp.atleast_1d(jnp.squeeze(x_reduced)) def recover(x_reduced): diff --git a/tests/test_compute_utils.py b/tests/test_compute_utils.py index 73eedfece7..631bcdc187 100644 --- a/tests/test_compute_utils.py +++ b/tests/test_compute_utils.py @@ -87,7 +87,8 @@ def test(surface_label, grid): test("zeta", cg_sym) @pytest.mark.unit - def test_surface_integrals(self): + @pytest.mark.solve + def test_surface_integrals(self, DSHAPE_current, HELIOTRON_vac): """Test surface_integrals against a more intuitive implementation. This test should ensure that the algorithm in implementation is correct @@ -95,30 +96,52 @@ def test_surface_integrals(self): should also be done on grids with duplicate nodes (e.g. endpoint=True). """ - def test(surface_label, grid): - q = np.random.random_sample(size=grid.num_nodes) + def test_B_theta(surface_label, grid, eq): + q = eq.compute("B_theta", grid=grid)["B_theta"] integrals_1 = benchmark_surface_integrals(grid, q, surface_label) integrals_2 = compress( grid, surface_integrals(grid, q, surface_label), surface_label ) - np.testing.assert_allclose(integrals_1, integrals_2, err_msg=surface_label) + np.testing.assert_allclose( + integrals_1, integrals_2, atol=1e-16, err_msg=surface_label + ) nrho = 13 ntheta = 11 nzeta = 9 - NFP = 5 - lg = LinearGrid(L=nrho, M=ntheta, N=nzeta, NFP=NFP, endpoint=False) - lg_endpoint = LinearGrid(L=nrho, M=ntheta, N=nzeta, NFP=NFP, endpoint=True) + eq = desc.io.load(load_from=str(DSHAPE_current["desc_h5_path"]))[-1] + lg = LinearGrid(L=nrho, M=ntheta, N=nzeta, NFP=eq.NFP, endpoint=False) + lg_endpoint = LinearGrid(L=nrho, M=ntheta, N=nzeta, NFP=eq.NFP, endpoint=True) cg_sym = ConcentricGrid( - L=(nrho + ntheta) // 2, M=(nrho + ntheta) // 2, N=nzeta, NFP=NFP, sym=True + L=(nrho + ntheta) // 2, + M=(nrho + ntheta) // 2, + N=nzeta, + NFP=eq.NFP, + sym=True, ) + for label in ("rho", "theta", "zeta"): + test_B_theta(label, lg, eq) + test_B_theta(label, lg_endpoint, eq) + if label != "theta": + # theta integrals are poorly defined on concentric grids + test_B_theta(label, cg_sym, eq) + eq = desc.io.load(load_from=str(HELIOTRON_vac["desc_h5_path"]))[-1] + lg = LinearGrid(L=nrho, M=ntheta, N=nzeta, NFP=eq.NFP, endpoint=False) + lg_endpoint = LinearGrid(L=nrho, M=ntheta, N=nzeta, NFP=eq.NFP, endpoint=True) + cg_sym = ConcentricGrid( + L=(nrho + ntheta) // 2, + M=(nrho + ntheta) // 2, + N=nzeta, + NFP=eq.NFP, + sym=True, + ) for label in ("rho", "theta", "zeta"): - test(label, lg) - test(label, lg_endpoint) + test_B_theta(label, lg, eq) + test_B_theta(label, lg_endpoint, eq) if label != "theta": # theta integrals are poorly defined on concentric grids - test(label, cg_sym) + test_B_theta(label, cg_sym, eq) @pytest.mark.unit def test_surface_area_unweighted(self): From d307ee9ae88f021819b7998dafd3ce87f94a8ade Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Wed, 8 Mar 2023 00:52:34 -0600 Subject: [PATCH 02/31] fix jax conditional --- desc/compute/_profiles.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/desc/compute/_profiles.py b/desc/compute/_profiles.py index 1ae3006d6b..e9d3f94052 100644 --- a/desc/compute/_profiles.py +++ b/desc/compute/_profiles.py @@ -636,7 +636,7 @@ def _iota_rr(params, transforms, profiles, data, **kwargs): profiles=[], coordinates="r", data=["lambda_t", "lambda_z", "g_tt", "g_tz", "sqrt(g)"] - + ["lambda_rt", "g_tz_r", "g_tz_rr", "sqrt(g)_r", "sqrt(g)_rr"], + + ["lambda_rt", "g_tt_rr", "g_tz_r", "g_tz_rr", "sqrt(g)_r", "sqrt(g)_rr"], ) def _iota_0_num(params, transforms, profiles, data, **kwargs): num = ( @@ -645,8 +645,7 @@ def _iota_0_num(params, transforms, profiles, data, **kwargs): data["iota_0_num"] = surface_averages(transforms["grid"], num) # limit at axis - nearest_surface_idx = transforms["grid"].unique_rho_idx[0] - if jnp.isclose(transforms["grid"].nodes[nearest_surface_idx, 0], 0): + if transforms["grid"].axis.size: limit = ( (data["g_tz_r"] * data["sqrt(g)_rr"] * (1 + data["lambda_t"])) / data["sqrt(g)_r"] ** 2 @@ -657,6 +656,7 @@ def _iota_0_num(params, transforms, profiles, data, **kwargs): ) / data[ "sqrt(g)_r" ] + nearest_surface_idx = transforms["grid"].unique_rho_idx[0] limit = surface_averages(transforms["grid"], limit)[nearest_surface_idx] iota_0_num = put(compress(transforms["grid"], data["iota_0_num"]), 0, limit) data["iota_0_num"] = expand(transforms["grid"], iota_0_num) @@ -777,9 +777,9 @@ def _iota_0_den(params, transforms, profiles, data, **kwargs): data["iota_0_den"] = surface_averages(transforms["grid"], den) # limit at axis - nearest_surface_idx = transforms["grid"].unique_rho_idx[0] - if jnp.isclose(transforms["grid"].nodes[nearest_surface_idx, 0], 0): + if transforms["grid"].axis.size: limit = data["g_tt_rr"] / data["sqrt(g)_r"] + nearest_surface_idx = transforms["grid"].unique_rho_idx[0] limit = surface_averages(transforms["grid"], limit)[nearest_surface_idx] iota_0_den = put(compress(transforms["grid"], data["iota_0_den"]), 0, limit) data["iota_0_den"] = expand(transforms["grid"], iota_0_den) @@ -820,7 +820,7 @@ def _iota_0_den_r(params, transforms, profiles, data, **kwargs): transforms={"grid": []}, profiles=[], coordinates="r", - data=["g_tt", "g_tt_r", "g_tt_r", "sqrt(g)", "sqrt(g)_r", "sqrt(g)_rr"], + data=["g_tt", "g_tt_r", "g_tt_rr", "sqrt(g)", "sqrt(g)_r", "sqrt(g)_rr"], ) def _iota_0_den_rr(params, transforms, profiles, data, **kwargs): den = data["g_tt"] / data["sqrt(g)"] From 06cd7cdd6fb3b00b0eb08afbad3cf2a522f1e7c9 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Wed, 8 Mar 2023 01:01:17 -0600 Subject: [PATCH 03/31] Use axis indices from grid --- desc/compute/_profiles.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/desc/compute/_profiles.py b/desc/compute/_profiles.py index e9d3f94052..7c41d37a6b 100644 --- a/desc/compute/_profiles.py +++ b/desc/compute/_profiles.py @@ -656,10 +656,8 @@ def _iota_0_num(params, transforms, profiles, data, **kwargs): ) / data[ "sqrt(g)_r" ] - nearest_surface_idx = transforms["grid"].unique_rho_idx[0] - limit = surface_averages(transforms["grid"], limit)[nearest_surface_idx] - iota_0_num = put(compress(transforms["grid"], data["iota_0_num"]), 0, limit) - data["iota_0_num"] = expand(transforms["grid"], iota_0_num) + limit = surface_averages(transforms["grid"], limit)[transforms["grid"].axis] + data["iota_0_num"] = put(data["iota_0_num"], transforms["grid"].axis, limit) return data @@ -779,10 +777,8 @@ def _iota_0_den(params, transforms, profiles, data, **kwargs): # limit at axis if transforms["grid"].axis.size: limit = data["g_tt_rr"] / data["sqrt(g)_r"] - nearest_surface_idx = transforms["grid"].unique_rho_idx[0] - limit = surface_averages(transforms["grid"], limit)[nearest_surface_idx] - iota_0_den = put(compress(transforms["grid"], data["iota_0_den"]), 0, limit) - data["iota_0_den"] = expand(transforms["grid"], iota_0_den) + limit = surface_averages(transforms["grid"], limit)[transforms["grid"].axis] + data["iota_0_den"] = put(data["iota_0_den"], transforms["grid"].axis, limit) return data From 5e8c56f7951ad0cfe15030320097e8f4fff6b054 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Wed, 8 Mar 2023 01:06:06 -0600 Subject: [PATCH 04/31] Remove iota dependency from its derivatives --- desc/compute/_profiles.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/desc/compute/_profiles.py b/desc/compute/_profiles.py index 7c41d37a6b..3860703215 100644 --- a/desc/compute/_profiles.py +++ b/desc/compute/_profiles.py @@ -518,7 +518,6 @@ def _iota(params, transforms, profiles, data, **kwargs): profiles=["iota", "current"], coordinates="r", data=[ - "iota", "psi_r", "psi_rr", "iota_0_num", @@ -570,7 +569,6 @@ def _iota_r(params, transforms, profiles, data, **kwargs): profiles=["iota", "current"], coordinates="r", data=[ - "iota", "psi_r", "psi_rr", "psi_rrr", From ab7c6abdcfbd463bd55efce04dddd1de269bdf94 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Wed, 8 Mar 2023 01:10:55 -0600 Subject: [PATCH 05/31] Add back iota dependency --- desc/compute/_profiles.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/desc/compute/_profiles.py b/desc/compute/_profiles.py index 3860703215..09e4a6eaaa 100644 --- a/desc/compute/_profiles.py +++ b/desc/compute/_profiles.py @@ -518,6 +518,7 @@ def _iota(params, transforms, profiles, data, **kwargs): profiles=["iota", "current"], coordinates="r", data=[ + "iota", "psi_r", "psi_rr", "iota_0_num", @@ -550,9 +551,8 @@ def _iota_r(params, transforms, profiles, data, **kwargs): / data["psi_r"] - current_term * data["psi_rr"] / data["psi_r"] ) - iota = (current_term + data["iota_0_num"]) / data["iota_0_den"] data["iota_r"] = ( - current_term_r + data["iota_0_num_r"] - iota * data["iota_0_den_r"] + current_term_r + data["iota_0_num_r"] - data["iota"] * data["iota_0_den_r"] ) / data["iota_0_den"] return data @@ -569,6 +569,8 @@ def _iota_r(params, transforms, profiles, data, **kwargs): profiles=["iota", "current"], coordinates="r", data=[ + "iota", + "iota_r", "psi_r", "psi_rr", "psi_rrr", @@ -609,15 +611,11 @@ def _iota_rr(params, transforms, profiles, data, **kwargs): - 2 * current_term_r * data["psi_rr"] - current_term * data["psi_rrr"] ) / data["psi_r"] - iota = (current_term + data["iota_0_num"]) / data["iota_0_den"] - iota_r = ( - current_term_r + data["iota_0_num_r"] - iota * data["iota_0_den_r"] - ) / data["iota_0_den"] data["iota_rr"] = ( current_term_rr + data["iota_0_num_rr"] - - 2 * iota_r * data["iota_0_den_r"] - - iota * data["iota_0_den_rr"] + - 2 * data["iota_r"] * data["iota_0_den_r"] + - data["iota"] * data["iota_0_den_rr"] ) / data["iota_0_den"] return data From 0692138b9837fb24c36db5aa045cbb6cc6084d77 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Wed, 8 Mar 2023 02:07:49 -0600 Subject: [PATCH 06/31] Add current limit --- desc/compute/_profiles.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/desc/compute/_profiles.py b/desc/compute/_profiles.py index 09e4a6eaaa..53f0b4012d 100644 --- a/desc/compute/_profiles.py +++ b/desc/compute/_profiles.py @@ -502,6 +502,14 @@ def _iota(params, transforms, profiles, data, **kwargs): * profiles["current"].compute(params["c_l"], dr=0) / data["psi_r"] ) + if transforms["grid"].axis.size: + limit = ( + mu_0 + / (2 * jnp.pi) + * profiles["current"].compute(params["c_l"], dr=2) + / data["psi_rr"] + )[transforms["grid"].axis] + current_term = put(current_term, transforms["grid"].axis, limit) data["iota"] = (current_term + data["iota_0_num"]) / data["iota_0_den"] return data @@ -625,7 +633,7 @@ def _iota_rr(params, transforms, profiles, data, **kwargs): label="\\iota_{0} numerator", units="m^{-1}", units_long="inverse meters", - description="Numerator of zero current rotational transform", + description="0 current rotational transform numerator", dim=1, params=[], transforms={"grid": []}, @@ -640,7 +648,6 @@ def _iota_0_num(params, transforms, profiles, data, **kwargs): ) / data["sqrt(g)"] data["iota_0_num"] = surface_averages(transforms["grid"], num) - # limit at axis if transforms["grid"].axis.size: limit = ( (data["g_tz_r"] * data["sqrt(g)_rr"] * (1 + data["lambda_t"])) @@ -663,7 +670,7 @@ def _iota_0_num(params, transforms, profiles, data, **kwargs): label="\\partial_{\\rho} \\iota_{0} numerator", units="m^{-1}", units_long="inverse meters", - description="Numerator of zero current rotational transform, first radial derivative", + description="0 current rotational transform numerator, first radial derivative", dim=1, params=[], transforms={"grid": []}, @@ -703,7 +710,7 @@ def _iota_0_num_r(params, transforms, profiles, data, **kwargs): label="\\partial_{\\rho\\rho} \\iota_{0} numerator", units="m^{-1}", units_long="inverse meters", - description="Numerator of zero current rotational transform, second radial derivative", + description="0 current rotational transform numerator, second radial derivative", dim=1, params=[], transforms={"grid": []}, @@ -758,7 +765,7 @@ def _iota_0_num_rr(params, transforms, profiles, data, **kwargs): label="\\iota_{0} denominator", units="m^{-1}", units_long="inverse meters", - description="Denominator of zero current rotational transform", + description="0 current rotational transform denominator", dim=1, params=[], transforms={"grid": []}, @@ -770,7 +777,6 @@ def _iota_0_den(params, transforms, profiles, data, **kwargs): den = data["g_tt"] / data["sqrt(g)"] data["iota_0_den"] = surface_averages(transforms["grid"], den) - # limit at axis if transforms["grid"].axis.size: limit = data["g_tt_rr"] / data["sqrt(g)_r"] limit = surface_averages(transforms["grid"], limit)[transforms["grid"].axis] @@ -784,7 +790,7 @@ def _iota_0_den(params, transforms, profiles, data, **kwargs): label="\\partial_{\\rho} \\iota_{0} denominator", units="m^{-1}", units_long="inverse meters", - description="Denominator of zero current rotational transform, first radial derivative", + description="0 current rotational transform denominator, first radial derivative", dim=1, params=[], transforms={"grid": []}, @@ -806,7 +812,7 @@ def _iota_0_den_r(params, transforms, profiles, data, **kwargs): label="\\partial_{\\rho\\rho} \\iota_{0} denominator", units="m^{-1}", units_long="inverse meters", - description="Denominator of zero current rotational transform, second radial derivative", + description="0 current rotational transform denominator, second radial derivative", dim=1, params=[], transforms={"grid": []}, From 4b5596c0d05b85dabb41e51244cb9f168788d673 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Wed, 8 Mar 2023 11:24:58 -0600 Subject: [PATCH 07/31] Add missing dependency --- desc/compute/_profiles.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desc/compute/_profiles.py b/desc/compute/_profiles.py index 53f0b4012d..528242c290 100644 --- a/desc/compute/_profiles.py +++ b/desc/compute/_profiles.py @@ -482,7 +482,7 @@ def _gradp_mag_vol(params, transforms, profiles, data, **kwargs): transforms={"grid": []}, profiles=["iota", "current"], coordinates="r", - data=["psi_r", "iota_0_num", "iota_0_den"], + data=["psi_r", "iota_0_num", "iota_0_den"] + ["psi_rr"], ) def _iota(params, transforms, profiles, data, **kwargs): # The rotational transform is computed from the toroidal current profile using From e4650e10e68b693fe4b711de10359229a2565bfd Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Tue, 11 Apr 2023 21:18:43 -0500 Subject: [PATCH 08/31] update qas, add test for iota limit --- desc/examples/QAS | 576 ++++++++++++++++---------------- desc/examples/QAS_output.h5 | Bin 2669839 -> 3059745 bytes tests/test_compute_utils.py | 123 +++---- tests/test_constrain_current.py | 59 ++-- 4 files changed, 364 insertions(+), 394 deletions(-) diff --git a/desc/examples/QAS b/desc/examples/QAS index 189260e285..a5b6502f31 100644 --- a/desc/examples/QAS +++ b/desc/examples/QAS @@ -1,9 +1,9 @@ # This DESC input file is for QAS with a fixed toroidal current profile # global parameters -sym = 1 -NFP = 3 -Psi = 0.49707021 +sym = 1 +NFP = 3 +Psi = 0.49707021 # spectral resolution L_rad = 6, 11, 11, 11, 11, 11, 11 @@ -14,16 +14,12 @@ M_grid = 22, 22, 22, 22, 22, 22, 22 N_grid = 0, 0, 0, 12, 12, 12, 12 # continuation parameters -bdry_ratio = 0, 0, 0, 0.25, 0.5, 0.75, 1.0 -pres_ratio = 0, 0.5, 1.0, 1.0, 1.0, 1.0, 1.0 -curr_ratio = 0, 0.5, 1.0, 1.0, 1.0, 1.0, 1.0 -pert_order = 1, 2, 2, 2, 2, 2, 2 +bdry_ratio = 0.0, 0.0, 0.0, 0.25, 0.5, 0.75, 1.0 +pres_ratio = 0.0, 0.5, 1.0, 1.0, 1.0, 1.0, 1.0 +curr_ratio = 0.0, 0.5, 1.0, 1.0, 1.0, 1.0, 1.0 +pert_order = 1.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0 # solver tolerances -ftol = 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01 -xtol = 1e-06, 1e-06, 1e-06, 1e-06, 1e-06, 1e-06, 1e-06 -gtol = 1e-06, 1e-06, 1e-06, 1e-06, 1e-06, 1e-06, 1e-06 -nfev = 50, 50, 50, 50, 50, 50, 50 # solver methods optimizer = lsq-exact @@ -47,285 +43,285 @@ l: 20 p = 0.00000000E+00 c = -1.36284423E+07 l: 22 p = 0.00000000E+00 c = -0.00000000E+00 # fixed-boundary surface shape -m: -10 n: -6 R1 = 8.14350338E-05 Z1 = 0.00000000E+00 -m: -10 n: -5 R1 = 2.01547121E-04 Z1 = 0.00000000E+00 -m: -10 n: -4 R1 = 4.68298448E-04 Z1 = 0.00000000E+00 -m: -10 n: -3 R1 = 5.73987703E-04 Z1 = 0.00000000E+00 -m: -10 n: -2 R1 = -1.82882589E-04 Z1 = 0.00000000E+00 -m: -10 n: -1 R1 = 1.32601104E-05 Z1 = 0.00000000E+00 -m: -10 n: 0 R1 = 0.00000000E+00 Z1 = 6.04052050E-05 -m: -10 n: 1 R1 = 0.00000000E+00 Z1 = -2.08250930E-04 -m: -10 n: 2 R1 = 0.00000000E+00 Z1 = 3.24032094E-04 -m: -10 n: 3 R1 = 0.00000000E+00 Z1 = 1.99053799E-04 -m: -10 n: 4 R1 = 0.00000000E+00 Z1 = -1.52074199E-05 -m: -10 n: 5 R1 = 0.00000000E+00 Z1 = -1.48762352E-04 -m: -10 n: 6 R1 = 0.00000000E+00 Z1 = -4.87923099E-05 -m: -9 n: -6 R1 = 2.47441818E-05 Z1 = 0.00000000E+00 -m: -9 n: -5 R1 = -8.10275602E-06 Z1 = 0.00000000E+00 -m: -9 n: -4 R1 = -1.54421106E-04 Z1 = 0.00000000E+00 -m: -9 n: -3 R1 = -6.32928269E-04 Z1 = 0.00000000E+00 -m: -9 n: -2 R1 = 4.82654762E-04 Z1 = 0.00000000E+00 -m: -9 n: -1 R1 = -4.60548208E-04 Z1 = 0.00000000E+00 -m: -9 n: 0 R1 = 0.00000000E+00 Z1 = -4.32916759E-04 -m: -9 n: 1 R1 = 0.00000000E+00 Z1 = 5.84274986E-04 -m: -9 n: 2 R1 = 0.00000000E+00 Z1 = -4.55987612E-04 -m: -9 n: 3 R1 = 0.00000000E+00 Z1 = 3.81005563E-04 -m: -9 n: 4 R1 = 0.00000000E+00 Z1 = 7.17758516E-04 -m: -9 n: 5 R1 = 0.00000000E+00 Z1 = 3.68375903E-04 -m: -9 n: 6 R1 = 0.00000000E+00 Z1 = 4.68175270E-05 -m: -8 n: -6 R1 = -3.19973368E-04 Z1 = 0.00000000E+00 -m: -8 n: -5 R1 = -2.37135123E-04 Z1 = 0.00000000E+00 -m: -8 n: -4 R1 = -5.12481627E-04 Z1 = 0.00000000E+00 -m: -8 n: -3 R1 = -3.96910050E-04 Z1 = 0.00000000E+00 -m: -8 n: -2 R1 = -9.44688405E-04 Z1 = 0.00000000E+00 -m: -8 n: -1 R1 = 6.22775172E-04 Z1 = 0.00000000E+00 -m: -8 n: 0 R1 = 0.00000000E+00 Z1 = 5.42465826E-04 -m: -8 n: 1 R1 = 0.00000000E+00 Z1 = -6.44842899E-04 -m: -8 n: 2 R1 = 0.00000000E+00 Z1 = -2.58150556E-04 -m: -8 n: 3 R1 = 0.00000000E+00 Z1 = -5.69576067E-04 -m: -8 n: 4 R1 = 0.00000000E+00 Z1 = -2.14130645E-04 -m: -8 n: 5 R1 = 0.00000000E+00 Z1 = -1.04987873E-04 -m: -8 n: 6 R1 = 0.00000000E+00 Z1 = -1.61596308E-04 -m: -7 n: -6 R1 = 5.78555253E-05 Z1 = 0.00000000E+00 -m: -7 n: -5 R1 = 2.96580714E-04 Z1 = 0.00000000E+00 -m: -7 n: -4 R1 = -8.75201492E-06 Z1 = 0.00000000E+00 -m: -7 n: -3 R1 = 2.66751524E-04 Z1 = 0.00000000E+00 -m: -7 n: -2 R1 = 9.50772287E-04 Z1 = 0.00000000E+00 -m: -7 n: -1 R1 = -5.63493028E-04 Z1 = 0.00000000E+00 -m: -7 n: 0 R1 = 0.00000000E+00 Z1 = 3.25818663E-04 -m: -7 n: 1 R1 = 0.00000000E+00 Z1 = -1.82361079E-04 -m: -7 n: 2 R1 = 0.00000000E+00 Z1 = -2.60301318E-04 -m: -7 n: 3 R1 = 0.00000000E+00 Z1 = -9.98835120E-04 -m: -7 n: 4 R1 = 0.00000000E+00 Z1 = -5.06079737E-04 -m: -7 n: 5 R1 = 0.00000000E+00 Z1 = 2.17492380E-04 -m: -7 n: 6 R1 = 0.00000000E+00 Z1 = -1.05335066E-05 -m: -6 n: -6 R1 = -2.88206448E-04 Z1 = 0.00000000E+00 -m: -6 n: -5 R1 = 3.45460291E-04 Z1 = 0.00000000E+00 -m: -6 n: -4 R1 = 2.56006029E-04 Z1 = 0.00000000E+00 -m: -6 n: -3 R1 = 8.93134232E-04 Z1 = 0.00000000E+00 -m: -6 n: -2 R1 = 3.51415104E-04 Z1 = 0.00000000E+00 -m: -6 n: -1 R1 = 5.21280889E-04 Z1 = 0.00000000E+00 -m: -6 n: 0 R1 = 0.00000000E+00 Z1 = -7.36122964E-04 -m: -6 n: 1 R1 = 0.00000000E+00 Z1 = 1.56806191E-03 -m: -6 n: 2 R1 = 0.00000000E+00 Z1 = 1.79013711E-03 -m: -6 n: 3 R1 = 0.00000000E+00 Z1 = 2.24329054E-03 -m: -6 n: 4 R1 = 0.00000000E+00 Z1 = 3.61202446E-04 -m: -6 n: 5 R1 = 0.00000000E+00 Z1 = 2.52038598E-05 -m: -6 n: 6 R1 = 0.00000000E+00 Z1 = -2.99632140E-05 -m: -5 n: -6 R1 = -1.79894272E-04 Z1 = 0.00000000E+00 -m: -5 n: -5 R1 = 1.69262338E-04 Z1 = 0.00000000E+00 -m: -5 n: -4 R1 = -1.33186916E-03 Z1 = 0.00000000E+00 -m: -5 n: -3 R1 = -2.23968572E-04 Z1 = 0.00000000E+00 -m: -5 n: -2 R1 = -1.23544015E-03 Z1 = 0.00000000E+00 -m: -5 n: -1 R1 = 3.14546008E-04 Z1 = 0.00000000E+00 -m: -5 n: 0 R1 = 0.00000000E+00 Z1 = 1.97890516E-03 -m: -5 n: 1 R1 = 0.00000000E+00 Z1 = -4.83970236E-03 -m: -5 n: 2 R1 = 0.00000000E+00 Z1 = 5.85977954E-05 -m: -5 n: 3 R1 = 0.00000000E+00 Z1 = -1.02955285E-03 -m: -5 n: 4 R1 = 0.00000000E+00 Z1 = -5.81428318E-04 -m: -5 n: 5 R1 = 0.00000000E+00 Z1 = -1.47832303E-04 -m: -5 n: 6 R1 = 0.00000000E+00 Z1 = 2.26066995E-04 -m: -4 n: -6 R1 = -9.97545544E-05 Z1 = 0.00000000E+00 -m: -4 n: -5 R1 = 8.21441029E-04 Z1 = 0.00000000E+00 -m: -4 n: -4 R1 = -8.05209081E-04 Z1 = 0.00000000E+00 -m: -4 n: -3 R1 = -9.61098432E-04 Z1 = 0.00000000E+00 -m: -4 n: -2 R1 = -4.43482508E-03 Z1 = 0.00000000E+00 -m: -4 n: -1 R1 = -5.56452734E-03 Z1 = 0.00000000E+00 -m: -4 n: 0 R1 = 0.00000000E+00 Z1 = -1.56109493E-03 -m: -4 n: 1 R1 = 0.00000000E+00 Z1 = -2.30220915E-03 -m: -4 n: 2 R1 = 0.00000000E+00 Z1 = -1.93904047E-03 -m: -4 n: 3 R1 = 0.00000000E+00 Z1 = 1.19486293E-03 -m: -4 n: 4 R1 = 0.00000000E+00 Z1 = 1.40374240E-03 -m: -4 n: 5 R1 = 0.00000000E+00 Z1 = -3.41549422E-04 -m: -4 n: 6 R1 = 0.00000000E+00 Z1 = -1.64114451E-06 -m: -3 n: -6 R1 = -1.84355381E-04 Z1 = 0.00000000E+00 -m: -3 n: -5 R1 = 2.05151636E-05 Z1 = 0.00000000E+00 -m: -3 n: -4 R1 = -1.84460804E-03 Z1 = 0.00000000E+00 -m: -3 n: -3 R1 = 7.70966313E-03 Z1 = 0.00000000E+00 -m: -3 n: -2 R1 = 1.81273842E-02 Z1 = 0.00000000E+00 -m: -3 n: -1 R1 = 1.11514279E-02 Z1 = 0.00000000E+00 -m: -3 n: 0 R1 = 0.00000000E+00 Z1 = -5.05936200E-03 -m: -3 n: 1 R1 = 0.00000000E+00 Z1 = 1.21507912E-02 -m: -3 n: 2 R1 = 0.00000000E+00 Z1 = -6.94774187E-03 -m: -3 n: 3 R1 = 0.00000000E+00 Z1 = -5.30417926E-03 -m: -3 n: 4 R1 = 0.00000000E+00 Z1 = 4.12801063E-04 -m: -3 n: 5 R1 = 0.00000000E+00 Z1 = -1.77853024E-04 -m: -3 n: 6 R1 = 0.00000000E+00 Z1 = 1.03204591E-04 -m: -2 n: -6 R1 = 1.38215777E-04 Z1 = 0.00000000E+00 -m: -2 n: -5 R1 = 1.58293945E-04 Z1 = 0.00000000E+00 -m: -2 n: -4 R1 = -2.73960915E-04 Z1 = 0.00000000E+00 -m: -2 n: -3 R1 = -6.79953299E-04 Z1 = 0.00000000E+00 -m: -2 n: -2 R1 = -4.69983344E-02 Z1 = 0.00000000E+00 -m: -2 n: -1 R1 = -6.65708174E-02 Z1 = 0.00000000E+00 -m: -2 n: 0 R1 = 0.00000000E+00 Z1 = -4.81527028E-03 -m: -2 n: 1 R1 = 0.00000000E+00 Z1 = -1.05918513E-02 -m: -2 n: 2 R1 = 0.00000000E+00 Z1 = 2.46270934E-02 -m: -2 n: 3 R1 = 0.00000000E+00 Z1 = -5.40725298E-04 -m: -2 n: 4 R1 = 0.00000000E+00 Z1 = 5.62719040E-04 -m: -2 n: 5 R1 = 0.00000000E+00 Z1 = 3.91958597E-04 -m: -2 n: 6 R1 = 0.00000000E+00 Z1 = -1.32798702E-04 -m: -1 n: -6 R1 = -1.07159513E-04 Z1 = 0.00000000E+00 -m: -1 n: -5 R1 = -9.67349530E-05 Z1 = 0.00000000E+00 -m: -1 n: -4 R1 = -5.08597913E-04 Z1 = 0.00000000E+00 -m: -1 n: -3 R1 = 4.20703083E-03 Z1 = 0.00000000E+00 -m: -1 n: -2 R1 = -8.63910436E-03 Z1 = 0.00000000E+00 -m: -1 n: -1 R1 = 1.33216131E-01 Z1 = 0.00000000E+00 -m: -1 n: 0 R1 = 0.00000000E+00 Z1 = -4.50462555E-01 -m: -1 n: 1 R1 = 0.00000000E+00 Z1 = -1.66483540E-01 -m: -1 n: 2 R1 = 0.00000000E+00 Z1 = -6.34082800E-03 -m: -1 n: 3 R1 = 0.00000000E+00 Z1 = -2.54108943E-03 -m: -1 n: 4 R1 = 0.00000000E+00 Z1 = -1.44687806E-03 -m: -1 n: 5 R1 = 0.00000000E+00 Z1 = 2.33187459E-04 -m: -1 n: 6 R1 = 0.00000000E+00 Z1 = 1.16018769E-04 -m: 0 n: -6 R1 = 0.00000000E+00 Z1 = -9.58024291E-05 -m: 0 n: -5 R1 = 0.00000000E+00 Z1 = 1.57143910E-04 -m: 0 n: -4 R1 = 0.00000000E+00 Z1 = -1.34394805E-03 -m: 0 n: -3 R1 = 0.00000000E+00 Z1 = 3.97869472E-03 -m: 0 n: -2 R1 = 0.00000000E+00 Z1 = -1.11459511E-02 -m: 0 n: -1 R1 = 0.00000000E+00 Z1 = 1.92433268E-02 -m: 0 n: 0 R1 = 1.40941669E+00 Z1 = 0.00000000E+00 -m: 0 n: 1 R1 = 2.79226697E-02 Z1 = 0.00000000E+00 -m: 0 n: 2 R1 = -1.54739399E-03 Z1 = 0.00000000E+00 -m: 0 n: 3 R1 = 2.90733840E-03 Z1 = 0.00000000E+00 -m: 0 n: 4 R1 = -8.91322016E-04 Z1 = 0.00000000E+00 -m: 0 n: 5 R1 = -7.81997770E-05 Z1 = 0.00000000E+00 -m: 0 n: 6 R1 = 1.06129712E-04 Z1 = 0.00000000E+00 -m: 1 n: -6 R1 = 0.00000000E+00 Z1 = 7.03415243E-05 -m: 1 n: -5 R1 = 0.00000000E+00 Z1 = 8.93539466E-04 -m: 1 n: -4 R1 = 0.00000000E+00 Z1 = -1.19080140E-03 -m: 1 n: -3 R1 = 0.00000000E+00 Z1 = -1.85468961E-03 -m: 1 n: -2 R1 = 0.00000000E+00 Z1 = -5.11647864E-03 -m: 1 n: -1 R1 = 0.00000000E+00 Z1 = -2.20496922E-01 -m: 1 n: 0 R1 = 2.89195233E-01 Z1 = 0.00000000E+00 -m: 1 n: 1 R1 = -1.02761570E-01 Z1 = 0.00000000E+00 -m: 1 n: 2 R1 = -1.63375704E-02 Z1 = 0.00000000E+00 -m: 1 n: 3 R1 = 1.31798472E-03 Z1 = 0.00000000E+00 -m: 1 n: 4 R1 = -9.31843883E-04 Z1 = 0.00000000E+00 -m: 1 n: 5 R1 = 2.61448486E-04 Z1 = 0.00000000E+00 -m: 1 n: 6 R1 = 1.56805293E-04 Z1 = 0.00000000E+00 -m: 2 n: -6 R1 = 0.00000000E+00 Z1 = -2.11881983E-04 -m: 2 n: -5 R1 = 0.00000000E+00 Z1 = 3.85457630E-04 -m: 2 n: -4 R1 = 0.00000000E+00 Z1 = 6.55023524E-04 -m: 2 n: -3 R1 = 0.00000000E+00 Z1 = -1.22246170E-03 -m: 2 n: -2 R1 = 0.00000000E+00 Z1 = 1.62314631E-02 -m: 2 n: -1 R1 = 0.00000000E+00 Z1 = 2.91589224E-02 -m: 2 n: 0 R1 = 5.73443942E-02 Z1 = 0.00000000E+00 -m: 2 n: 1 R1 = 7.13063574E-02 Z1 = 0.00000000E+00 -m: 2 n: 2 R1 = 4.74010355E-02 Z1 = 0.00000000E+00 -m: 2 n: 3 R1 = -1.78173140E-03 Z1 = 0.00000000E+00 -m: 2 n: 4 R1 = 5.75021867E-04 Z1 = 0.00000000E+00 -m: 2 n: 5 R1 = -2.56783822E-04 Z1 = 0.00000000E+00 -m: 2 n: 6 R1 = -1.86392299E-04 Z1 = 0.00000000E+00 -m: 3 n: -6 R1 = 0.00000000E+00 Z1 = -2.00385003E-05 -m: 3 n: -5 R1 = 0.00000000E+00 Z1 = 6.89858398E-05 -m: 3 n: -4 R1 = 0.00000000E+00 Z1 = 4.20773803E-04 -m: 3 n: -3 R1 = 0.00000000E+00 Z1 = -6.70667623E-03 -m: 3 n: -2 R1 = 0.00000000E+00 Z1 = -5.61095198E-04 -m: 3 n: -1 R1 = 0.00000000E+00 Z1 = -4.34236334E-03 -m: 3 n: 0 R1 = -1.34574093E-02 Z1 = 0.00000000E+00 -m: 3 n: 1 R1 = -4.89535781E-03 Z1 = 0.00000000E+00 -m: 3 n: 2 R1 = -1.55748053E-02 Z1 = 0.00000000E+00 -m: 3 n: 3 R1 = -8.30197153E-03 Z1 = 0.00000000E+00 -m: 3 n: 4 R1 = 1.76874994E-03 Z1 = 0.00000000E+00 -m: 3 n: 5 R1 = 8.26699576E-05 Z1 = 0.00000000E+00 -m: 3 n: 6 R1 = -1.78560181E-05 Z1 = 0.00000000E+00 -m: 4 n: -6 R1 = 0.00000000E+00 Z1 = 2.97279372E-05 -m: 4 n: -5 R1 = 0.00000000E+00 Z1 = -4.21064768E-04 -m: 4 n: -4 R1 = 0.00000000E+00 Z1 = 1.25925647E-03 -m: 4 n: -3 R1 = 0.00000000E+00 Z1 = 1.90071960E-03 -m: 4 n: -2 R1 = 0.00000000E+00 Z1 = -2.18646103E-03 -m: 4 n: -1 R1 = 0.00000000E+00 Z1 = -5.31600771E-03 -m: 4 n: 0 R1 = 1.80149787E-03 Z1 = 0.00000000E+00 -m: 4 n: 1 R1 = 2.09091045E-03 Z1 = 0.00000000E+00 -m: 4 n: 2 R1 = 6.44187561E-03 Z1 = 0.00000000E+00 -m: 4 n: 3 R1 = 7.18361225E-04 Z1 = 0.00000000E+00 -m: 4 n: 4 R1 = 5.43318112E-04 Z1 = 0.00000000E+00 -m: 4 n: 5 R1 = -5.75854140E-04 Z1 = 0.00000000E+00 -m: 4 n: 6 R1 = 7.57795761E-05 Z1 = 0.00000000E+00 -m: 5 n: -6 R1 = 0.00000000E+00 Z1 = 2.01610262E-04 -m: 5 n: -5 R1 = 0.00000000E+00 Z1 = -5.48663508E-05 -m: 5 n: -4 R1 = 0.00000000E+00 Z1 = -7.22188635E-04 -m: 5 n: -3 R1 = 0.00000000E+00 Z1 = -6.58082550E-04 -m: 5 n: -2 R1 = 0.00000000E+00 Z1 = -1.80783469E-03 -m: 5 n: -1 R1 = 0.00000000E+00 Z1 = -5.86731104E-04 -m: 5 n: 0 R1 = -7.12579133E-04 Z1 = 0.00000000E+00 -m: 5 n: 1 R1 = 2.07680032E-03 Z1 = 0.00000000E+00 -m: 5 n: 2 R1 = 6.98980757E-04 Z1 = 0.00000000E+00 -m: 5 n: 3 R1 = 1.99619787E-04 Z1 = 0.00000000E+00 -m: 5 n: 4 R1 = 1.25620908E-03 Z1 = 0.00000000E+00 -m: 5 n: 5 R1 = -9.16930290E-05 Z1 = 0.00000000E+00 -m: 5 n: 6 R1 = 1.93466976E-04 Z1 = 0.00000000E+00 -m: 6 n: -6 R1 = 0.00000000E+00 Z1 = -4.50311026E-05 -m: 6 n: -5 R1 = 0.00000000E+00 Z1 = 7.61790723E-05 -m: 6 n: -4 R1 = 0.00000000E+00 Z1 = 3.27166273E-04 -m: 6 n: -3 R1 = 0.00000000E+00 Z1 = 1.98058939E-03 -m: 6 n: -2 R1 = 0.00000000E+00 Z1 = 2.66796663E-03 -m: 6 n: -1 R1 = 0.00000000E+00 Z1 = 6.78986592E-04 -m: 6 n: 0 R1 = -8.51896573E-04 Z1 = 0.00000000E+00 -m: 6 n: 1 R1 = 4.15956236E-04 Z1 = 0.00000000E+00 -m: 6 n: 2 R1 = 8.75057954E-05 Z1 = 0.00000000E+00 -m: 6 n: 3 R1 = -8.89830393E-04 Z1 = 0.00000000E+00 -m: 6 n: 4 R1 = -5.23460160E-04 Z1 = 0.00000000E+00 -m: 6 n: 5 R1 = -2.03199260E-04 Z1 = 0.00000000E+00 -m: 6 n: 6 R1 = 2.06563738E-04 Z1 = 0.00000000E+00 -m: 7 n: -6 R1 = 0.00000000E+00 Z1 = -1.78559274E-05 -m: 7 n: -5 R1 = 0.00000000E+00 Z1 = 2.92058007E-04 -m: 7 n: -4 R1 = 0.00000000E+00 Z1 = -6.80977408E-04 -m: 7 n: -3 R1 = 0.00000000E+00 Z1 = -7.01446149E-04 -m: 7 n: -2 R1 = 0.00000000E+00 Z1 = -7.15341244E-04 -m: 7 n: -1 R1 = 0.00000000E+00 Z1 = 6.50841570E-04 -m: 7 n: 0 R1 = 9.59457671E-04 Z1 = 0.00000000E+00 -m: 7 n: 1 R1 = -1.23781235E-03 Z1 = 0.00000000E+00 -m: 7 n: 2 R1 = 2.08324851E-05 Z1 = 0.00000000E+00 -m: 7 n: 3 R1 = -5.51619122E-04 Z1 = 0.00000000E+00 -m: 7 n: 4 R1 = 9.76657348E-05 Z1 = 0.00000000E+00 -m: 7 n: 5 R1 = -3.46805251E-04 Z1 = 0.00000000E+00 -m: 7 n: 6 R1 = -3.86252015E-05 Z1 = 0.00000000E+00 -m: 8 n: -6 R1 = 0.00000000E+00 Z1 = -1.69614547E-04 -m: 8 n: -5 R1 = 0.00000000E+00 Z1 = -7.80510436E-05 -m: 8 n: -4 R1 = 0.00000000E+00 Z1 = -2.72964434E-04 -m: 8 n: -3 R1 = 0.00000000E+00 Z1 = -5.26000869E-04 -m: 8 n: -2 R1 = 0.00000000E+00 Z1 = -4.03446986E-04 -m: 8 n: -1 R1 = 0.00000000E+00 Z1 = -1.42552308E-04 -m: 8 n: 0 R1 = -5.84359102E-04 Z1 = 0.00000000E+00 -m: 8 n: 1 R1 = 4.99403019E-04 Z1 = 0.00000000E+00 -m: 8 n: 2 R1 = 2.53863157E-04 Z1 = 0.00000000E+00 -m: 8 n: 3 R1 = 7.40130275E-04 Z1 = 0.00000000E+00 -m: 8 n: 4 R1 = 3.82326442E-04 Z1 = 0.00000000E+00 -m: 8 n: 5 R1 = 3.16274505E-04 Z1 = 0.00000000E+00 -m: 8 n: 6 R1 = 2.75268814E-04 Z1 = 0.00000000E+00 -m: 9 n: -6 R1 = 0.00000000E+00 Z1 = 4.31023397E-05 -m: 9 n: -5 R1 = 0.00000000E+00 Z1 = 3.89769912E-04 -m: 9 n: -4 R1 = 0.00000000E+00 Z1 = 6.94508082E-04 -m: 9 n: -3 R1 = 0.00000000E+00 Z1 = 3.19314003E-04 -m: 9 n: -2 R1 = 0.00000000E+00 Z1 = -4.91496517E-05 -m: 9 n: -1 R1 = 0.00000000E+00 Z1 = -2.14830931E-04 -m: 9 n: 0 R1 = 4.98714381E-04 Z1 = 0.00000000E+00 -m: 9 n: 1 R1 = -6.21757999E-04 Z1 = 0.00000000E+00 -m: 9 n: 2 R1 = 3.09056740E-04 Z1 = 0.00000000E+00 -m: 9 n: 3 R1 = 2.37753412E-04 Z1 = 0.00000000E+00 -m: 9 n: 4 R1 = 3.12749382E-04 Z1 = 0.00000000E+00 -m: 9 n: 5 R1 = -2.34943795E-05 Z1 = 0.00000000E+00 -m: 9 n: 6 R1 = -3.23070998E-05 Z1 = 0.00000000E+00 -m: 10 n: -6 R1 = 0.00000000E+00 Z1 = -3.93207097E-05 -m: 10 n: -5 R1 = 0.00000000E+00 Z1 = -1.62755651E-04 -m: 10 n: -4 R1 = 0.00000000E+00 Z1 = -3.35677081E-05 -m: 10 n: -3 R1 = 0.00000000E+00 Z1 = 3.35168635E-04 -m: 10 n: -2 R1 = 0.00000000E+00 Z1 = 1.11290747E-04 -m: 10 n: -1 R1 = 0.00000000E+00 Z1 = 3.60728591E-05 -m: 10 n: 0 R1 = 3.22193520E-05 Z1 = 0.00000000E+00 -m: 10 n: 1 R1 = 1.10910321E-05 Z1 = 0.00000000E+00 -m: 10 n: 2 R1 = 2.52205023E-05 Z1 = 0.00000000E+00 -m: 10 n: 3 R1 = -4.69942953E-04 Z1 = 0.00000000E+00 -m: 10 n: 4 R1 = -5.23683727E-04 Z1 = 0.00000000E+00 -m: 10 n: 5 R1 = -1.87493710E-04 Z1 = 0.00000000E+00 -m: 10 n: 6 R1 = -5.73936897E-05 Z1 = 0.00000000E+00 +l: 0 m: -10 n: -6 R1 = -8.14350338E-05 Z1 = 0.00000000E+00 +l: 0 m: -10 n: -5 R1 = -2.01547121E-04 Z1 = 0.00000000E+00 +l: 0 m: -10 n: -4 R1 = -4.68298448E-04 Z1 = 0.00000000E+00 +l: 0 m: -10 n: -3 R1 = -5.73987703E-04 Z1 = 0.00000000E+00 +l: 0 m: -10 n: -2 R1 = 1.82882589E-04 Z1 = 0.00000000E+00 +l: 0 m: -10 n: -1 R1 = -1.32601104E-05 Z1 = 0.00000000E+00 +l: 0 m: -10 n: 0 R1 = 0.00000000E+00 Z1 = -6.04052050E-05 +l: 0 m: -10 n: 1 R1 = 0.00000000E+00 Z1 = 2.08250930E-04 +l: 0 m: -10 n: 2 R1 = 0.00000000E+00 Z1 = -3.24032094E-04 +l: 0 m: -10 n: 3 R1 = 0.00000000E+00 Z1 = -1.99053799E-04 +l: 0 m: -10 n: 4 R1 = 0.00000000E+00 Z1 = 1.52074199E-05 +l: 0 m: -10 n: 5 R1 = 0.00000000E+00 Z1 = 1.48762352E-04 +l: 0 m: -10 n: 6 R1 = 0.00000000E+00 Z1 = 4.87923099E-05 +l: 0 m: -9 n: -6 R1 = -2.47441818E-05 Z1 = 0.00000000E+00 +l: 0 m: -9 n: -5 R1 = 8.10275602E-06 Z1 = 0.00000000E+00 +l: 0 m: -9 n: -4 R1 = 1.54421106E-04 Z1 = 0.00000000E+00 +l: 0 m: -9 n: -3 R1 = 6.32928269E-04 Z1 = 0.00000000E+00 +l: 0 m: -9 n: -2 R1 = -4.82654762E-04 Z1 = 0.00000000E+00 +l: 0 m: -9 n: -1 R1 = 4.60548208E-04 Z1 = 0.00000000E+00 +l: 0 m: -9 n: 0 R1 = 0.00000000E+00 Z1 = 4.32916759E-04 +l: 0 m: -9 n: 1 R1 = 0.00000000E+00 Z1 = -5.84274986E-04 +l: 0 m: -9 n: 2 R1 = 0.00000000E+00 Z1 = 4.55987612E-04 +l: 0 m: -9 n: 3 R1 = 0.00000000E+00 Z1 = -3.81005563E-04 +l: 0 m: -9 n: 4 R1 = 0.00000000E+00 Z1 = -7.17758516E-04 +l: 0 m: -9 n: 5 R1 = 0.00000000E+00 Z1 = -3.68375903E-04 +l: 0 m: -9 n: 6 R1 = 0.00000000E+00 Z1 = -4.68175270E-05 +l: 0 m: -8 n: -6 R1 = 3.19973368E-04 Z1 = 0.00000000E+00 +l: 0 m: -8 n: -5 R1 = 2.37135123E-04 Z1 = 0.00000000E+00 +l: 0 m: -8 n: -4 R1 = 5.12481627E-04 Z1 = 0.00000000E+00 +l: 0 m: -8 n: -3 R1 = 3.96910050E-04 Z1 = 0.00000000E+00 +l: 0 m: -8 n: -2 R1 = 9.44688405E-04 Z1 = 0.00000000E+00 +l: 0 m: -8 n: -1 R1 = -6.22775172E-04 Z1 = 0.00000000E+00 +l: 0 m: -8 n: 0 R1 = 0.00000000E+00 Z1 = -5.42465826E-04 +l: 0 m: -8 n: 1 R1 = 0.00000000E+00 Z1 = 6.44842899E-04 +l: 0 m: -8 n: 2 R1 = 0.00000000E+00 Z1 = 2.58150556E-04 +l: 0 m: -8 n: 3 R1 = 0.00000000E+00 Z1 = 5.69576067E-04 +l: 0 m: -8 n: 4 R1 = 0.00000000E+00 Z1 = 2.14130645E-04 +l: 0 m: -8 n: 5 R1 = 0.00000000E+00 Z1 = 1.04987873E-04 +l: 0 m: -8 n: 6 R1 = 0.00000000E+00 Z1 = 1.61596308E-04 +l: 0 m: -7 n: -6 R1 = -5.78555253E-05 Z1 = 0.00000000E+00 +l: 0 m: -7 n: -5 R1 = -2.96580714E-04 Z1 = 0.00000000E+00 +l: 0 m: -7 n: -4 R1 = 8.75201492E-06 Z1 = 0.00000000E+00 +l: 0 m: -7 n: -3 R1 = -2.66751524E-04 Z1 = 0.00000000E+00 +l: 0 m: -7 n: -2 R1 = -9.50772287E-04 Z1 = 0.00000000E+00 +l: 0 m: -7 n: -1 R1 = 5.63493028E-04 Z1 = 0.00000000E+00 +l: 0 m: -7 n: 0 R1 = 0.00000000E+00 Z1 = -3.25818663E-04 +l: 0 m: -7 n: 1 R1 = 0.00000000E+00 Z1 = 1.82361079E-04 +l: 0 m: -7 n: 2 R1 = 0.00000000E+00 Z1 = 2.60301318E-04 +l: 0 m: -7 n: 3 R1 = 0.00000000E+00 Z1 = 9.98835120E-04 +l: 0 m: -7 n: 4 R1 = 0.00000000E+00 Z1 = 5.06079737E-04 +l: 0 m: -7 n: 5 R1 = 0.00000000E+00 Z1 = -2.17492380E-04 +l: 0 m: -7 n: 6 R1 = 0.00000000E+00 Z1 = 1.05335066E-05 +l: 0 m: -6 n: -6 R1 = 2.88206448E-04 Z1 = 0.00000000E+00 +l: 0 m: -6 n: -5 R1 = -3.45460291E-04 Z1 = 0.00000000E+00 +l: 0 m: -6 n: -4 R1 = -2.56006029E-04 Z1 = 0.00000000E+00 +l: 0 m: -6 n: -3 R1 = -8.93134232E-04 Z1 = 0.00000000E+00 +l: 0 m: -6 n: -2 R1 = -3.51415104E-04 Z1 = 0.00000000E+00 +l: 0 m: -6 n: -1 R1 = -5.21280889E-04 Z1 = 0.00000000E+00 +l: 0 m: -6 n: 0 R1 = 0.00000000E+00 Z1 = 7.36122964E-04 +l: 0 m: -6 n: 1 R1 = 0.00000000E+00 Z1 = -1.56806191E-03 +l: 0 m: -6 n: 2 R1 = 0.00000000E+00 Z1 = -1.79013711E-03 +l: 0 m: -6 n: 3 R1 = 0.00000000E+00 Z1 = -2.24329054E-03 +l: 0 m: -6 n: 4 R1 = 0.00000000E+00 Z1 = -3.61202446E-04 +l: 0 m: -6 n: 5 R1 = 0.00000000E+00 Z1 = -2.52038598E-05 +l: 0 m: -6 n: 6 R1 = 0.00000000E+00 Z1 = 2.99632140E-05 +l: 0 m: -5 n: -6 R1 = 1.79894272E-04 Z1 = 0.00000000E+00 +l: 0 m: -5 n: -5 R1 = -1.69262338E-04 Z1 = 0.00000000E+00 +l: 0 m: -5 n: -4 R1 = 1.33186916E-03 Z1 = 0.00000000E+00 +l: 0 m: -5 n: -3 R1 = 2.23968572E-04 Z1 = 0.00000000E+00 +l: 0 m: -5 n: -2 R1 = 1.23544015E-03 Z1 = 0.00000000E+00 +l: 0 m: -5 n: -1 R1 = -3.14546008E-04 Z1 = 0.00000000E+00 +l: 0 m: -5 n: 0 R1 = 0.00000000E+00 Z1 = -1.97890516E-03 +l: 0 m: -5 n: 1 R1 = 0.00000000E+00 Z1 = 4.83970236E-03 +l: 0 m: -5 n: 2 R1 = 0.00000000E+00 Z1 = -5.85977954E-05 +l: 0 m: -5 n: 3 R1 = 0.00000000E+00 Z1 = 1.02955285E-03 +l: 0 m: -5 n: 4 R1 = 0.00000000E+00 Z1 = 5.81428318E-04 +l: 0 m: -5 n: 5 R1 = 0.00000000E+00 Z1 = 1.47832303E-04 +l: 0 m: -5 n: 6 R1 = 0.00000000E+00 Z1 = -2.26066995E-04 +l: 0 m: -4 n: -6 R1 = 9.97545544E-05 Z1 = 0.00000000E+00 +l: 0 m: -4 n: -5 R1 = -8.21441029E-04 Z1 = 0.00000000E+00 +l: 0 m: -4 n: -4 R1 = 8.05209081E-04 Z1 = 0.00000000E+00 +l: 0 m: -4 n: -3 R1 = 9.61098432E-04 Z1 = 0.00000000E+00 +l: 0 m: -4 n: -2 R1 = 4.43482508E-03 Z1 = 0.00000000E+00 +l: 0 m: -4 n: -1 R1 = 5.56452734E-03 Z1 = 0.00000000E+00 +l: 0 m: -4 n: 0 R1 = 0.00000000E+00 Z1 = 1.56109493E-03 +l: 0 m: -4 n: 1 R1 = 0.00000000E+00 Z1 = 2.30220915E-03 +l: 0 m: -4 n: 2 R1 = 0.00000000E+00 Z1 = 1.93904047E-03 +l: 0 m: -4 n: 3 R1 = 0.00000000E+00 Z1 = -1.19486293E-03 +l: 0 m: -4 n: 4 R1 = 0.00000000E+00 Z1 = -1.40374240E-03 +l: 0 m: -4 n: 5 R1 = 0.00000000E+00 Z1 = 3.41549422E-04 +l: 0 m: -4 n: 6 R1 = 0.00000000E+00 Z1 = 1.64114451E-06 +l: 0 m: -3 n: -6 R1 = 1.84355381E-04 Z1 = 0.00000000E+00 +l: 0 m: -3 n: -5 R1 = -2.05151636E-05 Z1 = 0.00000000E+00 +l: 0 m: -3 n: -4 R1 = 1.84460804E-03 Z1 = 0.00000000E+00 +l: 0 m: -3 n: -3 R1 = -7.70966313E-03 Z1 = 0.00000000E+00 +l: 0 m: -3 n: -2 R1 = -1.81273842E-02 Z1 = 0.00000000E+00 +l: 0 m: -3 n: -1 R1 = -1.11514279E-02 Z1 = 0.00000000E+00 +l: 0 m: -3 n: 0 R1 = 0.00000000E+00 Z1 = 5.05936200E-03 +l: 0 m: -3 n: 1 R1 = 0.00000000E+00 Z1 = -1.21507912E-02 +l: 0 m: -3 n: 2 R1 = 0.00000000E+00 Z1 = 6.94774187E-03 +l: 0 m: -3 n: 3 R1 = 0.00000000E+00 Z1 = 5.30417926E-03 +l: 0 m: -3 n: 4 R1 = 0.00000000E+00 Z1 = -4.12801063E-04 +l: 0 m: -3 n: 5 R1 = 0.00000000E+00 Z1 = 1.77853024E-04 +l: 0 m: -3 n: 6 R1 = 0.00000000E+00 Z1 = -1.03204591E-04 +l: 0 m: -2 n: -6 R1 = -1.38215777E-04 Z1 = 0.00000000E+00 +l: 0 m: -2 n: -5 R1 = -1.58293945E-04 Z1 = 0.00000000E+00 +l: 0 m: -2 n: -4 R1 = 2.73960915E-04 Z1 = 0.00000000E+00 +l: 0 m: -2 n: -3 R1 = 6.79953299E-04 Z1 = 0.00000000E+00 +l: 0 m: -2 n: -2 R1 = 4.69983344E-02 Z1 = 0.00000000E+00 +l: 0 m: -2 n: -1 R1 = 6.65708174E-02 Z1 = 0.00000000E+00 +l: 0 m: -2 n: 0 R1 = 0.00000000E+00 Z1 = 4.81527028E-03 +l: 0 m: -2 n: 1 R1 = 0.00000000E+00 Z1 = 1.05918513E-02 +l: 0 m: -2 n: 2 R1 = 0.00000000E+00 Z1 = -2.46270934E-02 +l: 0 m: -2 n: 3 R1 = 0.00000000E+00 Z1 = 5.40725298E-04 +l: 0 m: -2 n: 4 R1 = 0.00000000E+00 Z1 = -5.62719040E-04 +l: 0 m: -2 n: 5 R1 = 0.00000000E+00 Z1 = -3.91958597E-04 +l: 0 m: -2 n: 6 R1 = 0.00000000E+00 Z1 = 1.32798702E-04 +l: 0 m: -1 n: -6 R1 = 1.07159513E-04 Z1 = 0.00000000E+00 +l: 0 m: -1 n: -5 R1 = 9.67349530E-05 Z1 = 0.00000000E+00 +l: 0 m: -1 n: -4 R1 = 5.08597913E-04 Z1 = 0.00000000E+00 +l: 0 m: -1 n: -3 R1 = -4.20703083E-03 Z1 = 0.00000000E+00 +l: 0 m: -1 n: -2 R1 = 8.63910436E-03 Z1 = 0.00000000E+00 +l: 0 m: -1 n: -1 R1 = -1.33216131E-01 Z1 = 0.00000000E+00 +l: 0 m: -1 n: 0 R1 = 0.00000000E+00 Z1 = 4.50462555E-01 +l: 0 m: -1 n: 1 R1 = 0.00000000E+00 Z1 = 1.66483540E-01 +l: 0 m: -1 n: 2 R1 = 0.00000000E+00 Z1 = 6.34082800E-03 +l: 0 m: -1 n: 3 R1 = 0.00000000E+00 Z1 = 2.54108943E-03 +l: 0 m: -1 n: 4 R1 = 0.00000000E+00 Z1 = 1.44687806E-03 +l: 0 m: -1 n: 5 R1 = 0.00000000E+00 Z1 = -2.33187459E-04 +l: 0 m: -1 n: 6 R1 = 0.00000000E+00 Z1 = -1.16018769E-04 +l: 0 m: 0 n: -6 R1 = 0.00000000E+00 Z1 = -9.58024291E-05 +l: 0 m: 0 n: -5 R1 = 0.00000000E+00 Z1 = 1.57143910E-04 +l: 0 m: 0 n: -4 R1 = 0.00000000E+00 Z1 = -1.34394805E-03 +l: 0 m: 0 n: -3 R1 = 0.00000000E+00 Z1 = 3.97869472E-03 +l: 0 m: 0 n: -2 R1 = 0.00000000E+00 Z1 = -1.11459511E-02 +l: 0 m: 0 n: -1 R1 = 0.00000000E+00 Z1 = 1.92433268E-02 +l: 0 m: 0 n: 0 R1 = 1.40941669E+00 Z1 = 0.00000000E+00 +l: 0 m: 0 n: 1 R1 = 2.79226697E-02 Z1 = 0.00000000E+00 +l: 0 m: 0 n: 2 R1 = -1.54739399E-03 Z1 = 0.00000000E+00 +l: 0 m: 0 n: 3 R1 = 2.90733840E-03 Z1 = 0.00000000E+00 +l: 0 m: 0 n: 4 R1 = -8.91322016E-04 Z1 = 0.00000000E+00 +l: 0 m: 0 n: 5 R1 = -7.81997770E-05 Z1 = 0.00000000E+00 +l: 0 m: 0 n: 6 R1 = 1.06129712E-04 Z1 = 0.00000000E+00 +l: 0 m: 1 n: -6 R1 = 0.00000000E+00 Z1 = 7.03415243E-05 +l: 0 m: 1 n: -5 R1 = 0.00000000E+00 Z1 = 8.93539466E-04 +l: 0 m: 1 n: -4 R1 = 0.00000000E+00 Z1 = -1.19080140E-03 +l: 0 m: 1 n: -3 R1 = 0.00000000E+00 Z1 = -1.85468961E-03 +l: 0 m: 1 n: -2 R1 = 0.00000000E+00 Z1 = -5.11647864E-03 +l: 0 m: 1 n: -1 R1 = 0.00000000E+00 Z1 = -2.20496922E-01 +l: 0 m: 1 n: 0 R1 = 2.89195233E-01 Z1 = 0.00000000E+00 +l: 0 m: 1 n: 1 R1 = -1.02761570E-01 Z1 = 0.00000000E+00 +l: 0 m: 1 n: 2 R1 = -1.63375704E-02 Z1 = 0.00000000E+00 +l: 0 m: 1 n: 3 R1 = 1.31798472E-03 Z1 = 0.00000000E+00 +l: 0 m: 1 n: 4 R1 = -9.31843883E-04 Z1 = 0.00000000E+00 +l: 0 m: 1 n: 5 R1 = 2.61448486E-04 Z1 = 0.00000000E+00 +l: 0 m: 1 n: 6 R1 = 1.56805293E-04 Z1 = 0.00000000E+00 +l: 0 m: 2 n: -6 R1 = 0.00000000E+00 Z1 = -2.11881983E-04 +l: 0 m: 2 n: -5 R1 = 0.00000000E+00 Z1 = 3.85457630E-04 +l: 0 m: 2 n: -4 R1 = 0.00000000E+00 Z1 = 6.55023524E-04 +l: 0 m: 2 n: -3 R1 = 0.00000000E+00 Z1 = -1.22246170E-03 +l: 0 m: 2 n: -2 R1 = 0.00000000E+00 Z1 = 1.62314631E-02 +l: 0 m: 2 n: -1 R1 = 0.00000000E+00 Z1 = 2.91589224E-02 +l: 0 m: 2 n: 0 R1 = 5.73443942E-02 Z1 = 0.00000000E+00 +l: 0 m: 2 n: 1 R1 = 7.13063574E-02 Z1 = 0.00000000E+00 +l: 0 m: 2 n: 2 R1 = 4.74010355E-02 Z1 = 0.00000000E+00 +l: 0 m: 2 n: 3 R1 = -1.78173140E-03 Z1 = 0.00000000E+00 +l: 0 m: 2 n: 4 R1 = 5.75021867E-04 Z1 = 0.00000000E+00 +l: 0 m: 2 n: 5 R1 = -2.56783822E-04 Z1 = 0.00000000E+00 +l: 0 m: 2 n: 6 R1 = -1.86392299E-04 Z1 = 0.00000000E+00 +l: 0 m: 3 n: -6 R1 = 0.00000000E+00 Z1 = -2.00385003E-05 +l: 0 m: 3 n: -5 R1 = 0.00000000E+00 Z1 = 6.89858398E-05 +l: 0 m: 3 n: -4 R1 = 0.00000000E+00 Z1 = 4.20773803E-04 +l: 0 m: 3 n: -3 R1 = 0.00000000E+00 Z1 = -6.70667623E-03 +l: 0 m: 3 n: -2 R1 = 0.00000000E+00 Z1 = -5.61095198E-04 +l: 0 m: 3 n: -1 R1 = 0.00000000E+00 Z1 = -4.34236334E-03 +l: 0 m: 3 n: 0 R1 = -1.34574093E-02 Z1 = 0.00000000E+00 +l: 0 m: 3 n: 1 R1 = -4.89535781E-03 Z1 = 0.00000000E+00 +l: 0 m: 3 n: 2 R1 = -1.55748053E-02 Z1 = 0.00000000E+00 +l: 0 m: 3 n: 3 R1 = -8.30197153E-03 Z1 = 0.00000000E+00 +l: 0 m: 3 n: 4 R1 = 1.76874994E-03 Z1 = 0.00000000E+00 +l: 0 m: 3 n: 5 R1 = 8.26699576E-05 Z1 = 0.00000000E+00 +l: 0 m: 3 n: 6 R1 = -1.78560181E-05 Z1 = 0.00000000E+00 +l: 0 m: 4 n: -6 R1 = 0.00000000E+00 Z1 = 2.97279372E-05 +l: 0 m: 4 n: -5 R1 = 0.00000000E+00 Z1 = -4.21064768E-04 +l: 0 m: 4 n: -4 R1 = 0.00000000E+00 Z1 = 1.25925647E-03 +l: 0 m: 4 n: -3 R1 = 0.00000000E+00 Z1 = 1.90071960E-03 +l: 0 m: 4 n: -2 R1 = 0.00000000E+00 Z1 = -2.18646103E-03 +l: 0 m: 4 n: -1 R1 = 0.00000000E+00 Z1 = -5.31600771E-03 +l: 0 m: 4 n: 0 R1 = 1.80149787E-03 Z1 = 0.00000000E+00 +l: 0 m: 4 n: 1 R1 = 2.09091045E-03 Z1 = 0.00000000E+00 +l: 0 m: 4 n: 2 R1 = 6.44187561E-03 Z1 = 0.00000000E+00 +l: 0 m: 4 n: 3 R1 = 7.18361225E-04 Z1 = 0.00000000E+00 +l: 0 m: 4 n: 4 R1 = 5.43318112E-04 Z1 = 0.00000000E+00 +l: 0 m: 4 n: 5 R1 = -5.75854140E-04 Z1 = 0.00000000E+00 +l: 0 m: 4 n: 6 R1 = 7.57795761E-05 Z1 = 0.00000000E+00 +l: 0 m: 5 n: -6 R1 = 0.00000000E+00 Z1 = 2.01610262E-04 +l: 0 m: 5 n: -5 R1 = 0.00000000E+00 Z1 = -5.48663508E-05 +l: 0 m: 5 n: -4 R1 = 0.00000000E+00 Z1 = -7.22188635E-04 +l: 0 m: 5 n: -3 R1 = 0.00000000E+00 Z1 = -6.58082550E-04 +l: 0 m: 5 n: -2 R1 = 0.00000000E+00 Z1 = -1.80783469E-03 +l: 0 m: 5 n: -1 R1 = 0.00000000E+00 Z1 = -5.86731104E-04 +l: 0 m: 5 n: 0 R1 = -7.12579133E-04 Z1 = 0.00000000E+00 +l: 0 m: 5 n: 1 R1 = 2.07680032E-03 Z1 = 0.00000000E+00 +l: 0 m: 5 n: 2 R1 = 6.98980757E-04 Z1 = 0.00000000E+00 +l: 0 m: 5 n: 3 R1 = 1.99619787E-04 Z1 = 0.00000000E+00 +l: 0 m: 5 n: 4 R1 = 1.25620908E-03 Z1 = 0.00000000E+00 +l: 0 m: 5 n: 5 R1 = -9.16930290E-05 Z1 = 0.00000000E+00 +l: 0 m: 5 n: 6 R1 = 1.93466976E-04 Z1 = 0.00000000E+00 +l: 0 m: 6 n: -6 R1 = 0.00000000E+00 Z1 = -4.50311026E-05 +l: 0 m: 6 n: -5 R1 = 0.00000000E+00 Z1 = 7.61790723E-05 +l: 0 m: 6 n: -4 R1 = 0.00000000E+00 Z1 = 3.27166273E-04 +l: 0 m: 6 n: -3 R1 = 0.00000000E+00 Z1 = 1.98058939E-03 +l: 0 m: 6 n: -2 R1 = 0.00000000E+00 Z1 = 2.66796663E-03 +l: 0 m: 6 n: -1 R1 = 0.00000000E+00 Z1 = 6.78986592E-04 +l: 0 m: 6 n: 0 R1 = -8.51896573E-04 Z1 = 0.00000000E+00 +l: 0 m: 6 n: 1 R1 = 4.15956236E-04 Z1 = 0.00000000E+00 +l: 0 m: 6 n: 2 R1 = 8.75057954E-05 Z1 = 0.00000000E+00 +l: 0 m: 6 n: 3 R1 = -8.89830393E-04 Z1 = 0.00000000E+00 +l: 0 m: 6 n: 4 R1 = -5.23460160E-04 Z1 = 0.00000000E+00 +l: 0 m: 6 n: 5 R1 = -2.03199260E-04 Z1 = 0.00000000E+00 +l: 0 m: 6 n: 6 R1 = 2.06563738E-04 Z1 = 0.00000000E+00 +l: 0 m: 7 n: -6 R1 = 0.00000000E+00 Z1 = -1.78559274E-05 +l: 0 m: 7 n: -5 R1 = 0.00000000E+00 Z1 = 2.92058007E-04 +l: 0 m: 7 n: -4 R1 = 0.00000000E+00 Z1 = -6.80977408E-04 +l: 0 m: 7 n: -3 R1 = 0.00000000E+00 Z1 = -7.01446149E-04 +l: 0 m: 7 n: -2 R1 = 0.00000000E+00 Z1 = -7.15341244E-04 +l: 0 m: 7 n: -1 R1 = 0.00000000E+00 Z1 = 6.50841570E-04 +l: 0 m: 7 n: 0 R1 = 9.59457671E-04 Z1 = 0.00000000E+00 +l: 0 m: 7 n: 1 R1 = -1.23781235E-03 Z1 = 0.00000000E+00 +l: 0 m: 7 n: 2 R1 = 2.08324851E-05 Z1 = 0.00000000E+00 +l: 0 m: 7 n: 3 R1 = -5.51619122E-04 Z1 = 0.00000000E+00 +l: 0 m: 7 n: 4 R1 = 9.76657348E-05 Z1 = 0.00000000E+00 +l: 0 m: 7 n: 5 R1 = -3.46805251E-04 Z1 = 0.00000000E+00 +l: 0 m: 7 n: 6 R1 = -3.86252015E-05 Z1 = 0.00000000E+00 +l: 0 m: 8 n: -6 R1 = 0.00000000E+00 Z1 = -1.69614547E-04 +l: 0 m: 8 n: -5 R1 = 0.00000000E+00 Z1 = -7.80510436E-05 +l: 0 m: 8 n: -4 R1 = 0.00000000E+00 Z1 = -2.72964434E-04 +l: 0 m: 8 n: -3 R1 = 0.00000000E+00 Z1 = -5.26000869E-04 +l: 0 m: 8 n: -2 R1 = 0.00000000E+00 Z1 = -4.03446986E-04 +l: 0 m: 8 n: -1 R1 = 0.00000000E+00 Z1 = -1.42552308E-04 +l: 0 m: 8 n: 0 R1 = -5.84359102E-04 Z1 = 0.00000000E+00 +l: 0 m: 8 n: 1 R1 = 4.99403019E-04 Z1 = 0.00000000E+00 +l: 0 m: 8 n: 2 R1 = 2.53863157E-04 Z1 = 0.00000000E+00 +l: 0 m: 8 n: 3 R1 = 7.40130275E-04 Z1 = 0.00000000E+00 +l: 0 m: 8 n: 4 R1 = 3.82326442E-04 Z1 = 0.00000000E+00 +l: 0 m: 8 n: 5 R1 = 3.16274505E-04 Z1 = 0.00000000E+00 +l: 0 m: 8 n: 6 R1 = 2.75268814E-04 Z1 = 0.00000000E+00 +l: 0 m: 9 n: -6 R1 = 0.00000000E+00 Z1 = 4.31023397E-05 +l: 0 m: 9 n: -5 R1 = 0.00000000E+00 Z1 = 3.89769912E-04 +l: 0 m: 9 n: -4 R1 = 0.00000000E+00 Z1 = 6.94508082E-04 +l: 0 m: 9 n: -3 R1 = 0.00000000E+00 Z1 = 3.19314003E-04 +l: 0 m: 9 n: -2 R1 = 0.00000000E+00 Z1 = -4.91496517E-05 +l: 0 m: 9 n: -1 R1 = 0.00000000E+00 Z1 = -2.14830931E-04 +l: 0 m: 9 n: 0 R1 = 4.98714381E-04 Z1 = 0.00000000E+00 +l: 0 m: 9 n: 1 R1 = -6.21757999E-04 Z1 = 0.00000000E+00 +l: 0 m: 9 n: 2 R1 = 3.09056740E-04 Z1 = 0.00000000E+00 +l: 0 m: 9 n: 3 R1 = 2.37753412E-04 Z1 = 0.00000000E+00 +l: 0 m: 9 n: 4 R1 = 3.12749382E-04 Z1 = 0.00000000E+00 +l: 0 m: 9 n: 5 R1 = -2.34943795E-05 Z1 = 0.00000000E+00 +l: 0 m: 9 n: 6 R1 = -3.23070998E-05 Z1 = 0.00000000E+00 +l: 0 m: 10 n: -6 R1 = 0.00000000E+00 Z1 = -3.93207097E-05 +l: 0 m: 10 n: -5 R1 = 0.00000000E+00 Z1 = -1.62755651E-04 +l: 0 m: 10 n: -4 R1 = 0.00000000E+00 Z1 = -3.35677081E-05 +l: 0 m: 10 n: -3 R1 = 0.00000000E+00 Z1 = 3.35168635E-04 +l: 0 m: 10 n: -2 R1 = 0.00000000E+00 Z1 = 1.11290747E-04 +l: 0 m: 10 n: -1 R1 = 0.00000000E+00 Z1 = 3.60728591E-05 +l: 0 m: 10 n: 0 R1 = 3.22193520E-05 Z1 = 0.00000000E+00 +l: 0 m: 10 n: 1 R1 = 1.10910321E-05 Z1 = 0.00000000E+00 +l: 0 m: 10 n: 2 R1 = 2.52205023E-05 Z1 = 0.00000000E+00 +l: 0 m: 10 n: 3 R1 = -4.69942953E-04 Z1 = 0.00000000E+00 +l: 0 m: 10 n: 4 R1 = -5.23683727E-04 Z1 = 0.00000000E+00 +l: 0 m: 10 n: 5 R1 = -1.87493710E-04 Z1 = 0.00000000E+00 +l: 0 m: 10 n: 6 R1 = -5.73936897E-05 Z1 = 0.00000000E+00 # magnetic axis initial guess n: 0 R0 = 1.49569454E+00 Z0 = 0.00000000E+00 -n: 1 R0 = 1.05806401E-01 Z0 = 0.00000000E+00 -n: 2 R0 = 7.21255455E-03 Z0 = 0.00000000E+00 -n: 3 R0 = -3.87402652E-04 Z0 = 0.00000000E+00 -n: 4 R0 = -2.02425865E-04 Z0 = 0.00000000E+00 -n: 5 R0 = -1.62602354E-04 Z0 = 0.00000000E+00 -n: 6 R0 = -8.89569831E-06 Z0 = 0.00000000E+00 +n: 1 R0 = 1.05806401E-01 Z0 = -5.19492027E-02 +n: 2 R0 = 7.21255455E-03 Z0 = -3.18814224E-03 +n: 3 R0 = -3.87402652E-04 Z0 = 2.26199929E-04 +n: 4 R0 = -2.02425865E-04 Z0 = 1.28803681E-04 +n: 5 R0 = -1.62602354E-04 Z0 = 1.11266150E-06 +n: 6 R0 = -8.89569831E-06 Z0 = 1.13732704E-05 diff --git a/desc/examples/QAS_output.h5 b/desc/examples/QAS_output.h5 index a59b398cc803a564a4657c13db20dd73811f0a21..99948185a4461b88476783310c9ad3fc8faec252 100644 GIT binary patch delta 265195 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 z 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 usBRs-dw#_eB%UreXBZ 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.DBQekpDCdo*OPXJ=}_URSaw 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%0AYYIAQA?Q*FVb;W&aF{O>mydPo?yw!P4Qf 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

d2b`IJbs82he5$DraLoo$>0alPv2g zxlYa|T%3RC*EvOqzUzrvWI5(&rEIhzri3lAVqhi$|k!)yCe37gP z;m+LC`tYHPar{wyI^GN$8WF2fM;Awc;Klw#L`8TaB9=erkIMuO&gGMnwPBHuR;K3w z0zI$n()y=Q73G8Sq0fN6WT+q3S^$iKl>8jP$O=B*R8l)IPS$+DybxHe8RNw5sdTJf zg$d%gZ5S6hQ5+Y7adENYI1Dpcr|j!lqOA2w>Kq&2nW(%KxJ0eeknCf!B}_9`mJCSO zm(q?`B;$G`uki|KhoKeBoCQ}eXWbQhXMHJ-bH}*s+2S|_#$8Ae$6=VsI>ythR9Whk zG#@3kcQR!CUMhP&GASQiYfwBtzm@W#$48dT`7rr&Y%=GfR~9|T<|S`s-VQh8CM{vM z0^H6o!RmS)#99k}uvG@;@vY$obtwas0m=YnfHFWCpbSt3Dg*=4{p8Y)&sng@T$k7Q zobmXmBTGKecxCZ9Hl8!Y#|`aqtw{Sq9Os2`d0&a+V4YC@QgIy2CtO=1j(by;*6@2t zD4(!?nm-bO|3SZtlqKhHOa0v>3wAlm3ZEpOyfvQ>h5_c0RMvlm`l}5j5^9QT5x_{E zaOUAQbtwas0m=YnfHFWCpbSt3WX^!``e&VG**}Bglw6k|tPTz0!0aexG{2yp4N|E? zW0jiFSbh~gC#wS^BRBvXuF`}=2Eq2XGVcW#ul)MSviyw4$0w8zPOppCD}>3C4>bN_ z%{0afxwAK*&N^RbU-mnVJy{!Z+*dfh!k@%(hj4uPiA}Xvu%0|S-dQVWJ#DUaqwo!< zB!t7k3>+_v%iAQL?s^<@_#{W|6{MRo0mYw*^8>N;{`qZ#v~)d;SI@@FQm>51$1KVR zr+CHf&JxOp9v^FD$p^G0l6DsCZydyGuh@^V>l4kNT+6TndTEEM*?uTSwm)_UV0RE3 z7S3&O zst65+Gps616{t~1Mz9)Hc$7-5)SxiM{z0mU=upi#9Ds|5gyM8Hk>R0%{5Hr@Dm9l* zbQB-2GK||$8KjCY+WEf-m_kqXX7Y3IfNl;!*H{{Vzn BcxV6s diff --git a/tests/test_compute_utils.py b/tests/test_compute_utils.py index 631bcdc187..dd43acac2b 100644 --- a/tests/test_compute_utils.py +++ b/tests/test_compute_utils.py @@ -13,6 +13,7 @@ surface_max, surface_min, ) +from desc.examples import get from desc.grid import ConcentricGrid, LinearGrid, QuadratureGrid @@ -87,8 +88,7 @@ def test(surface_label, grid): test("zeta", cg_sym) @pytest.mark.unit - @pytest.mark.solve - def test_surface_integrals(self, DSHAPE_current, HELIOTRON_vac): + def test_surface_integrals(self): """Test surface_integrals against a more intuitive implementation. This test should ensure that the algorithm in implementation is correct @@ -109,24 +109,7 @@ def test_B_theta(surface_label, grid, eq): nrho = 13 ntheta = 11 nzeta = 9 - eq = desc.io.load(load_from=str(DSHAPE_current["desc_h5_path"]))[-1] - lg = LinearGrid(L=nrho, M=ntheta, N=nzeta, NFP=eq.NFP, endpoint=False) - lg_endpoint = LinearGrid(L=nrho, M=ntheta, N=nzeta, NFP=eq.NFP, endpoint=True) - cg_sym = ConcentricGrid( - L=(nrho + ntheta) // 2, - M=(nrho + ntheta) // 2, - N=nzeta, - NFP=eq.NFP, - sym=True, - ) - for label in ("rho", "theta", "zeta"): - test_B_theta(label, lg, eq) - test_B_theta(label, lg_endpoint, eq) - if label != "theta": - # theta integrals are poorly defined on concentric grids - test_B_theta(label, cg_sym, eq) - - eq = desc.io.load(load_from=str(HELIOTRON_vac["desc_h5_path"]))[-1] + eq = get("W7-X") lg = LinearGrid(L=nrho, M=ntheta, N=nzeta, NFP=eq.NFP, endpoint=False) lg_endpoint = LinearGrid(L=nrho, M=ntheta, N=nzeta, NFP=eq.NFP, endpoint=True) cg_sym = ConcentricGrid( @@ -222,82 +205,56 @@ def test(surface_label, grid): test(label, cg_sym) @pytest.mark.unit - @pytest.mark.solve - def test_surface_area_weighted(self, DSHAPE_current, HELIOTRON_vac): + def test_surface_area_weighted(self): """Test that rho surface integral(dt*dz*sqrt(g)) are monotonic wrt rho.""" - - def test(stellarator): - eq = desc.io.load(load_from=str(stellarator["desc_h5_path"]))[-1] - grid = ConcentricGrid(L=11, M=11, N=9, NFP=eq.NFP, sym=True) - sqrt_g = np.abs(eq.compute("sqrt(g)", grid=grid)["sqrt(g)"]) - areas = compress(grid, surface_integrals(grid, sqrt_g)) - np.testing.assert_allclose(areas, np.sort(areas)) - - test(DSHAPE_current) - test(HELIOTRON_vac) + eq = get("W7-X") + grid = ConcentricGrid(L=11, M=11, N=9, NFP=eq.NFP, sym=eq.sym) + sqrt_g = np.abs(eq.compute("sqrt(g)", grid=grid)["sqrt(g)"]) + areas = compress(grid, surface_integrals(grid, sqrt_g)) + np.testing.assert_allclose(areas, np.sort(areas)) @pytest.mark.unit - @pytest.mark.solve - def test_surface_averages_identity_op(self, DSHAPE_current, HELIOTRON_vac): + def test_surface_averages_identity_op(self): """Test that surface averages of flux functions are identity operations.""" - - def test(stellarator): - eq = desc.io.load(load_from=str(stellarator["desc_h5_path"]))[-1] - grid = ConcentricGrid(L=11, M=11, N=9, NFP=eq.NFP, sym=True) - data = eq.compute("p", grid=grid) - data = eq.compute("sqrt(g)", grid=grid, data=data) - pressure_average = surface_averages(grid, data["p"], data["sqrt(g)"]) - np.testing.assert_allclose(data["p"], pressure_average) - - test(DSHAPE_current) - test(HELIOTRON_vac) + eq = get("W7-X") + grid = ConcentricGrid(L=11, M=11, N=9, NFP=eq.NFP, sym=eq.sym) + data = eq.compute("p", grid=grid) + data = eq.compute("sqrt(g)", grid=grid, data=data) + pressure_average = surface_averages(grid, data["p"], data["sqrt(g)"]) + np.testing.assert_allclose(data["p"], pressure_average) @pytest.mark.unit - @pytest.mark.solve - def test_surface_averages_homomorphism(self, DSHAPE_current, HELIOTRON_vac): + def test_surface_averages_homomorphism(self): """Test that surface averages of flux functions are additive homomorphisms. Meaning average(a + b) = average(a) + average(b). """ - - def test(stellarator): - eq = desc.io.load(load_from=str(stellarator["desc_h5_path"]))[-1] - grid = ConcentricGrid(L=11, M=11, N=9, NFP=eq.NFP, sym=True) - data = eq.compute("|B|_t", grid=grid) - a = surface_averages(grid, data["|B|"], data["sqrt(g)"]) - b = surface_averages(grid, data["|B|_t"], data["sqrt(g)"]) - a_plus_b = surface_averages( - grid, data["|B|"] + data["|B|_t"], data["sqrt(g)"] - ) - np.testing.assert_allclose(a_plus_b, a + b) - - test(DSHAPE_current) - test(HELIOTRON_vac) + eq = get("W7-X") + grid = ConcentricGrid(L=11, M=11, N=9, NFP=eq.NFP, sym=eq.sym) + data = eq.compute("|B|_t", grid=grid) + a = surface_averages(grid, data["|B|"], data["sqrt(g)"]) + b = surface_averages(grid, data["|B|_t"], data["sqrt(g)"]) + a_plus_b = surface_averages(grid, data["|B|"] + data["|B|_t"], data["sqrt(g)"]) + np.testing.assert_allclose(a_plus_b, a + b) @pytest.mark.unit - @pytest.mark.solve - def test_surface_averages_shortcut(self, DSHAPE_current, HELIOTRON_vac): + def test_surface_averages_shortcut(self): """Test that surface_averages on single rho surface matches mean() shortcut.""" - - def test(stellarator): - eq = desc.io.load(load_from=str(stellarator["desc_h5_path"]))[-1] - rho = np.array((1 - 1e-4) * np.random.default_rng().random() + 1e-4) - grid = LinearGrid(M=eq.M_grid, N=eq.N_grid, NFP=eq.NFP, sym=eq.sym, rho=rho) - data = eq.compute("|B|", grid=grid) - - np.testing.assert_allclose( - surface_averages(grid, data["|B|"], data["sqrt(g)"]), - np.mean(data["sqrt(g)"] * data["|B|"]) / np.mean(data["sqrt(g)"]), - err_msg="average with sqrt(g) fail", - ) - np.testing.assert_allclose( - surface_averages(grid, data["|B|"]), - np.mean(data["|B|"]), - err_msg="average without sqrt(g) fail", - ) - - test(DSHAPE_current) - test(HELIOTRON_vac) + eq = get("W7-X") + rho = np.array((1 - 1e-4) * np.random.default_rng().random() + 1e-4) + grid = LinearGrid(M=eq.M_grid, N=eq.N_grid, NFP=eq.NFP, sym=eq.sym, rho=rho) + data = eq.compute("|B|", grid=grid) + + np.testing.assert_allclose( + surface_averages(grid, data["|B|"], data["sqrt(g)"]), + np.mean(data["sqrt(g)"] * data["|B|"]) / np.mean(data["sqrt(g)"]), + err_msg="average with sqrt(g) fail", + ) + np.testing.assert_allclose( + surface_averages(grid, data["|B|"]), + np.mean(data["|B|"]), + err_msg="average without sqrt(g) fail", + ) @pytest.mark.unit def test_min_max(self): diff --git a/tests/test_constrain_current.py b/tests/test_constrain_current.py index 8a12ad2922..a37204482e 100644 --- a/tests/test_constrain_current.py +++ b/tests/test_constrain_current.py @@ -7,6 +7,7 @@ from desc.compute import compute as compute_fun from desc.compute import get_params, get_profiles, get_transforms from desc.compute.utils import compress +from desc.examples import get from desc.grid import ConcentricGrid, LinearGrid, QuadratureGrid @@ -67,9 +68,19 @@ def test(stellarator, grid_type): eq = desc.io.load(load_from=str(stellarator["desc_h5_path"]))[-1] if grid_type == "quadrature": grid = QuadratureGrid(L=eq.L_grid, M=eq.M_grid, N=eq.N_grid, NFP=eq.NFP) + elif grid_type == "concentric": + grid = ConcentricGrid( + L=eq.L_grid, M=eq.M_grid, N=eq.N_grid, NFP=eq.NFP, sym=eq.sym + ) else: - f = ConcentricGrid if grid_type == "concentric" else LinearGrid - grid = f(L=eq.L_grid, M=eq.M_grid, N=eq.N_grid, NFP=eq.NFP, sym=eq.sym) + grid = LinearGrid( + L=eq.L_grid, + M=eq.M_grid, + N=eq.N_grid, + NFP=eq.NFP, + sym=eq.sym, + axis=False, + ) params = { "R_lmn": eq.R_lmn, @@ -98,27 +109,33 @@ def test(stellarator, grid_type): transforms=transforms, profiles=get_profiles("iota_rr", eq=eq, grid=grid), ) - - if grid_type in "linear": - # ignore axis - np.testing.assert_allclose( - compress(grid, data["iota"])[1:], - compress(grid, benchmark_data["iota"])[1:], - ) - np.testing.assert_allclose( - compress(grid, data["iota_r"])[1:], - compress(grid, benchmark_data["iota_r"])[1:], - ) - np.testing.assert_allclose( - compress(grid, data["iota_rr"])[1:], - compress(grid, benchmark_data["iota_rr"])[1:], - ) - else: - np.testing.assert_allclose(data["iota"], benchmark_data["iota"]) - np.testing.assert_allclose(data["iota_r"], benchmark_data["iota_r"]) - np.testing.assert_allclose(data["iota_rr"], benchmark_data["iota_rr"]) + np.testing.assert_allclose(data["iota"], benchmark_data["iota"]) + np.testing.assert_allclose(data["iota_r"], benchmark_data["iota_r"]) + np.testing.assert_allclose(data["iota_rr"], benchmark_data["iota_rr"]) for e in ("quadrature", "concentric", "linear"): # works with any stellarators in desc/examples with fixed iota profiles test(DSHAPE, e) test(HELIOTRON_vac, e) + + @pytest.mark.unit + @pytest.mark.solve + def test_compute_rotational_transform_axis(self, DSHAPE_current): + "Test that the limit at rho=0 axis is computed accurately." + + # test should be done on equilibria with fixed current profiles + def test(eq, expected_at_axis): + delta = 1e-3 + epsilon = 1e-6 + rho = np.linspace(0, delta, 10) + lg = LinearGrid(rho=rho, M=5, N=5, NFP=eq.NFP, sym=eq.sym) + iota = compress(lg, eq.compute("iota", grid=lg)["iota"]) + # check continuity + assert np.isfinite(iota).all() + np.testing.assert_allclose(iota[:-1], iota[1:], atol=epsilon) + # check value + np.testing.assert_allclose(iota[0], expected_at_axis, atol=epsilon) + + eq = desc.io.load(load_from=str(DSHAPE_current["desc_h5_path"]))[-1] + test(eq, -0.994167) + test(get("QAS"), -0.360675) From 98db0dc81030ec78e5bac15b7b12d0269d4e0974 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Tue, 11 Apr 2023 21:22:41 -0500 Subject: [PATCH 09/31] review dog --- tests/test_constrain_current.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_constrain_current.py b/tests/test_constrain_current.py index a37204482e..5a251373ab 100644 --- a/tests/test_constrain_current.py +++ b/tests/test_constrain_current.py @@ -121,8 +121,7 @@ def test(stellarator, grid_type): @pytest.mark.unit @pytest.mark.solve def test_compute_rotational_transform_axis(self, DSHAPE_current): - "Test that the limit at rho=0 axis is computed accurately." - + """Test that the limit at rho=0 axis is computed accurately.""" # test should be done on equilibria with fixed current profiles def test(eq, expected_at_axis): delta = 1e-3 From a9a3702c07ef72395e362ad8810bad14694e5474 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Tue, 11 Apr 2023 23:16:23 -0500 Subject: [PATCH 10/31] update variables --- docs/variables.csv | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/variables.csv b/docs/variables.csv index cede2ef267..1334741e51 100644 --- a/docs/variables.csv +++ b/docs/variables.csv @@ -331,6 +331,12 @@ Name,Label,Units,Description,Module ``iota``,:math:`\iota`,None,Rotational transform (normalized by 2pi),``desc.compute._profiles`` ``iota_r``,:math:`\partial_{\rho} \iota`,None,"Rotational transform (normalized by 2pi), first radial derivative",``desc.compute._profiles`` ``iota_rr``,:math:`\partial_{\rho\rho} \iota`,None,"Rotational transform (normalized by 2pi), second radial derivative",``desc.compute._profiles`` +``iota_0_num``,:math:`\iota_{0} numerator`,inverse meters,0 current rotational transform numerator,``desc.compute._profiles`` +``iota_0_num_r``,:math:`\partial_{\rho} \iota_{0} numerator`,inverse meters,"0 current rotational transform numerator, first radial derivative",``desc.compute._profiles`` +``iota_0_num_rr``,:math:`\partial_{\rho\rho} \iota_{0} numerator`,inverse meters,"0 current rotational transform numerator, second radial derivative",``desc.compute._profiles`` +``iota_0_den``,:math:`\iota_{0} denominator`,inverse meters,0 current rotational transform denominator,``desc.compute._profiles`` +``iota_0_den_r``,:math:`\partial_{\rho} \iota_{0} denominator`,inverse meters,"0 current rotational transform denominator, first radial derivative",``desc.compute._profiles`` +``iota_0_den_rr``,:math:`\partial_{\rho\rho} \iota_{0} denominator`,inverse meters,"0 current rotational transform denominator, second radial derivative",``desc.compute._profiles`` ``q``,:math:`q = 1/\iota`,None,"Safety factor 'q', inverse of rotational transform.",``desc.compute._profiles`` ``I``,:math:`I`,Tesla * meters,Covariant poloidal component of magnetic field in Boozer coordinates (proportional to toroidal current),``desc.compute._profiles`` ``I_r``,:math:`\partial_{\rho} I`,Tesla * meters,"Covariant poloidal component of magnetic field in Boozer coordinates (proportional to toroidal current), derivative wrt radial coordinate",``desc.compute._profiles`` From 994e3c8e1194e287285999df794d27d60ea5ab76 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Wed, 12 Apr 2023 00:29:06 -0500 Subject: [PATCH 11/31] remove old comment --- desc/compute/_profiles.py | 4 ---- tests/test_compute_utils.py | 1 - 2 files changed, 5 deletions(-) diff --git a/desc/compute/_profiles.py b/desc/compute/_profiles.py index 2e084782a5..180f11a118 100644 --- a/desc/compute/_profiles.py +++ b/desc/compute/_profiles.py @@ -697,7 +697,6 @@ def _iota_0_num_r(params, transforms, profiles, data, **kwargs): ) / data["sqrt(g)"] - num * data["sqrt(g)_r"] / data["sqrt(g)"] data["iota_0_num_r"] = surface_averages(transforms["grid"], num_r) # TODO: limit at axis - # I will need to check if limit and derivative interchangeable. return data @@ -752,7 +751,6 @@ def _iota_0_num_rr(params, transforms, profiles, data, **kwargs): ) / data["sqrt(g)"] data["iota_0_num_rr"] = surface_averages(transforms["grid"], num_rr) # TODO: limit at axis - # I will need to check if limit and derivative interchangeable. return data @@ -799,7 +797,6 @@ def _iota_0_den_r(params, transforms, profiles, data, **kwargs): den_r = (data["g_tt_r"] - den * data["sqrt(g)_r"]) / data["sqrt(g)"] data["iota_0_den_r"] = surface_averages(transforms["grid"], den_r) # TODO: limit at axis - # I will need to check if limit and derivative interchangeable. return data @@ -824,7 +821,6 @@ def _iota_0_den_rr(params, transforms, profiles, data, **kwargs): ) / data["sqrt(g)"] data["iota_0_den_rr"] = surface_averages(transforms["grid"], den_rr) # TODO: limit at axis - # I will need to check if limit and derivative interchangeable. return data diff --git a/tests/test_compute_utils.py b/tests/test_compute_utils.py index dd43acac2b..59aa7624a9 100644 --- a/tests/test_compute_utils.py +++ b/tests/test_compute_utils.py @@ -3,7 +3,6 @@ import numpy as np import pytest -import desc.io from desc.compute.utils import ( _get_grid_surface, compress, From 66327847a6738f861b536a87cbcdcf3dbf1bfdb0 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Tue, 2 May 2023 19:29:45 -0500 Subject: [PATCH 12/31] Add limit quantities related to magnetic field B --- desc/compute/_field.py | 7 +++++-- desc/grid.py | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/desc/compute/_field.py b/desc/compute/_field.py index 36b3a05907..90ee8802af 100644 --- a/desc/compute/_field.py +++ b/desc/compute/_field.py @@ -27,10 +27,13 @@ transforms={}, profiles=[], coordinates="rtz", - data=["psi_r", "sqrt(g)"], + data=["psi_r", "sqrt(g)"] + ["psi_rr", "sqrt(g)_r"], ) def _B0(params, transforms, profiles, data, **kwargs): - data["B0"] = data["psi_r"] / data["sqrt(g)"] + if transforms["grid"].axis.size: + data["B0"] = data["psi_rr"] / data["sqrt(g)_r"] + else: + data["B0"] = data["psi_r"] / data["sqrt(g)"] return data diff --git a/desc/grid.py b/desc/grid.py index cd99b72467..84acc51930 100644 --- a/desc/grid.py +++ b/desc/grid.py @@ -668,7 +668,7 @@ def change_resolution(self, L, M, N, NFP=None): axis=len(self.axis) > 0, endpoint=self.endpoint, ) - self._enforce_symmetry() + # symmetry handled in create_nodes() self._sort_nodes() self._find_axis() self._scale_weights() From 4c0ad76b158a581389a0ed507408888fd7700b11 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Tue, 2 May 2023 20:28:05 -0500 Subject: [PATCH 13/31] add test for |B| limit --- desc/compute/_field.py | 8 ++++---- tests/test_limits.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 tests/test_limits.py diff --git a/desc/compute/_field.py b/desc/compute/_field.py index 90ee8802af..8916dac451 100644 --- a/desc/compute/_field.py +++ b/desc/compute/_field.py @@ -2,7 +2,7 @@ from scipy.constants import mu_0 -from desc.backend import jnp +from desc.backend import jnp, put from .data_index import register_compute_fun from .utils import ( @@ -30,10 +30,10 @@ data=["psi_r", "sqrt(g)"] + ["psi_rr", "sqrt(g)_r"], ) def _B0(params, transforms, profiles, data, **kwargs): + data["B0"] = data["psi_r"] / data["sqrt(g)"] if transforms["grid"].axis.size: - data["B0"] = data["psi_rr"] / data["sqrt(g)_r"] - else: - data["B0"] = data["psi_r"] / data["sqrt(g)"] + limit = (data["psi_rr"] / data["sqrt(g)_r"])[transforms["grid"].axis] + data["B0"] = put(data["B0"], transforms["grid"].axis, limit) return data diff --git a/tests/test_limits.py b/tests/test_limits.py new file mode 100644 index 0000000000..c7f4e78e41 --- /dev/null +++ b/tests/test_limits.py @@ -0,0 +1,34 @@ +"""Tests for compute functions evaluated at limits.""" + +import numpy as np +import pytest + +from desc.compute.utils import compress, surface_averages +from desc.examples import get +from desc.grid import LinearGrid + + +class TestLimits: + @pytest.mark.unit + def test_b_mag_fsa(self): + """Test that the limit at rho=0 axis is computed accurately.""" + + def test(eq, expected_at_axis): + delta = 1e-3 + epsilon = 1e-6 + rho = np.linspace(0, delta, 10) + lg = LinearGrid(rho=rho, M=7, N=7, NFP=eq.NFP, sym=eq.sym) + b_mag_fsa_no_sqrt_g = compress( + lg, surface_averages(lg, eq.compute("|B|", grid=lg)["|B|"]) + ) + # check continuity + assert np.isfinite(b_mag_fsa_no_sqrt_g).all() + np.testing.assert_allclose( + b_mag_fsa_no_sqrt_g[:-1], b_mag_fsa_no_sqrt_g[1:], atol=epsilon + ) + # check value + np.testing.assert_allclose( + b_mag_fsa_no_sqrt_g[0], expected_at_axis, atol=epsilon + ) + + test(get("W7-X"), 2.708108) From 33801a8e32220ab287025772d58f2bf5ce51adb6 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Tue, 30 May 2023 15:13:02 -0500 Subject: [PATCH 14/31] refactor depedency recursion for clarity --- desc/compute/__init__.py | 2 +- desc/compute/data_index.py | 2 +- desc/compute/utils.py | 10 +++++----- desc/equilibrium/configuration.py | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/desc/compute/__init__.py b/desc/compute/__init__.py index 6620ce76c2..0a49916a83 100644 --- a/desc/compute/__init__.py +++ b/desc/compute/__init__.py @@ -52,7 +52,7 @@ # rather than having to recursively compute the full dependencies every time we -# compute something, its easier to just do it once for all quantities when we first +# compute something, it's easier to just do it once for all quantities when we first # import the compute module. def _build_data_index(): for key in data_index.keys(): diff --git a/desc/compute/data_index.py b/desc/compute/data_index.py index a27e516214..c00fc9521a 100644 --- a/desc/compute/data_index.py +++ b/desc/compute/data_index.py @@ -50,7 +50,7 @@ def register_compute_fun( Notes ----- Should only list *direct* dependencies. The full dependencies will be built - recursively at runtime using each quantities direct dependencies. + recursively at runtime using each quantity's direct dependencies. """ deps = { "params": params, diff --git a/desc/compute/utils.py b/desc/compute/utils.py index fd1ddcd035..7b96060af8 100644 --- a/desc/compute/utils.py +++ b/desc/compute/utils.py @@ -73,7 +73,7 @@ def compute(names, params, transforms, profiles, data=None, **kwargs): if name not in data_index: raise ValueError("Unrecognized value '{}'.".format(name)) allowed_kwargs = {"helicity", "M_booz", "N_booz", "gamma"} - bad_kwargs = set(kwargs.keys()).difference(allowed_kwargs) + bad_kwargs = kwargs.keys() - allowed_kwargs if len(bad_kwargs) > 0: raise ValueError(f"Unrecognized argument(s): {bad_kwargs}") @@ -102,10 +102,10 @@ def _compute(names, params, transforms, profiles, data=None, **kwargs): """Same as above but without checking inputs for faster recursion.""" for name in names: if name in data: + # don't compute something that's already been computed continue - if has_dependencies(name, params, transforms, profiles, data): - data = data_index[name]["fun"](params, transforms, profiles, data, **kwargs) - else: + if not has_dependencies(name, params, transforms, profiles, data): + # then compute the missing dependencies first data = _compute( data_index[name]["dependencies"]["data"], params=params, @@ -114,7 +114,7 @@ def _compute(names, params, transforms, profiles, data=None, **kwargs): data=data, **kwargs, ) - data = data_index[name]["fun"](params, transforms, profiles, data, **kwargs) + data = data_index[name]["fun"](params, transforms, profiles, data, **kwargs) return data diff --git a/desc/equilibrium/configuration.py b/desc/equilibrium/configuration.py index e281ba1596..bd5f0a90aa 100644 --- a/desc/equilibrium/configuration.py +++ b/desc/equilibrium/configuration.py @@ -1136,7 +1136,7 @@ def compute( params=params, transforms=get_transforms(dep1d, eq=self, grid=grid1d, **kwargs), profiles=get_profiles(dep1d, eq=self, grid=grid1d), - data=None, + data=None, # Todo: ask if should pass in data0d **kwargs, ) # need to make this data broadcastable with the data on the original grid @@ -1148,8 +1148,8 @@ def compute( data.update(data1d) # TODO: we can probably reduce the number of deps computed here if some are only - # needed as inputs for 0d and 1d qtys, unless the user asks for them - # specifically? + # needed as inputs for 0d and 1d qtys, unless the user asks for them + # specifically? data = compute_fun( names, params=params, From 2d1d5387aad8499efdbc5a3829ba34e164d72527 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Tue, 30 May 2023 15:17:58 -0500 Subject: [PATCH 15/31] Do Dr. Dudt's refactor suggestion --- tests/test_objective_funs.py | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/tests/test_objective_funs.py b/tests/test_objective_funs.py index b54b64b2ed..fb5c449200 100644 --- a/tests/test_objective_funs.py +++ b/tests/test_objective_funs.py @@ -511,32 +511,10 @@ def test_principal_curvature(): def test_field_scale_length(): """Test for B field scale length objective function.""" surf1 = FourierRZToroidalSurface( - R_lmn=[ - 5, - 1, - ], - Z_lmn=[ - -1, - ], - modes_R=[[0, 0], [1, 0]], - modes_Z=[ - [-1, 0], - ], - NFP=1, + R_lmn=[5, 1], Z_lmn=[-1], modes_R=[[0, 0], [1, 0]], modes_Z=[[-1, 0]], NFP=1 ) surf2 = FourierRZToroidalSurface( - R_lmn=[ - 10, - 2, - ], - Z_lmn=[ - -2, - ], - modes_R=[[0, 0], [1, 0]], - modes_Z=[ - [-1, 0], - ], - NFP=1, + R_lmn=[10, 2], Z_lmn=[-2], modes_R=[[0, 0], [1, 0]], modes_Z=[[-1, 0]], NFP=1 ) eq1 = Equilibrium(L=2, M=2, N=0, surface=surf1) eq2 = Equilibrium(L=2, M=2, N=0, surface=surf2) @@ -554,7 +532,7 @@ def test_field_scale_length(): @pytest.mark.unit def test_objective_print(capsys): - """Test that the profile objectives prints correctly.""" + """Test that the profile objectives print correctly.""" eq = Equilibrium() grid = LinearGrid(L=10, M=10, N=5, axis=False) @@ -664,7 +642,7 @@ def test_jvp_scaled(): @pytest.mark.unit def test_objective_target_bounds(): - """Test that the target_scaled and bounds_scaled etc return the right things.""" + """Test that the target_scaled and bounds_scaled etc. return the right things.""" eq = Equilibrium() vol = Volume(target=3, normalize=True) From 75035e907661d93e07e843c234602e58fcef2d4e Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Tue, 6 Jun 2023 22:03:27 -0500 Subject: [PATCH 16/31] first pass at limit api - fails compute_everything test with derivative orders are out of initialized bounds message --- desc/compute/__init__.py | 29 ++++++++++--- desc/compute/_field.py | 3 +- desc/compute/_profiles.py | 34 +++++++-------- desc/compute/data_index.py | 6 ++- desc/compute/utils.py | 66 +++++++++++++++++++++------- desc/equilibrium/configuration.py | 26 ++++++----- desc/equilibrium/coords.py | 2 +- desc/objectives/_bootstrap.py | 8 ++-- desc/objectives/_equilibrium.py | 40 ++++++++++------- desc/objectives/_generic.py | 22 ++++++---- desc/objectives/_geometry.py | 71 +++++++++++++++++++++---------- desc/objectives/_qs.py | 29 ++++++++----- desc/objectives/_stability.py | 16 ++++--- desc/objectives/utils.py | 2 +- desc/plotting.py | 19 +++++++-- docs/adding_objectives.rst | 16 +++++-- tests/test_compute_funs.py | 6 ++- tests/test_constrain_current.py | 12 +++--- tests/test_objective_funs.py | 3 +- tests/test_transform.py | 2 +- 20 files changed, 277 insertions(+), 135 deletions(-) diff --git a/desc/compute/__init__.py b/desc/compute/__init__.py index 0a49916a83..d4a76bbb82 100644 --- a/desc/compute/__init__.py +++ b/desc/compute/__init__.py @@ -56,12 +56,31 @@ # import the compute module. def _build_data_index(): for key in data_index.keys(): - full = {} - full["data"] = get_data_deps(key) - full["transforms"] = get_derivs(key) - full["params"] = get_params(key) - full["profiles"] = get_profiles(key) + full = { + "data": get_data_deps(key, False), + "transforms": get_derivs(key, False), + "params": get_params(key, False), + "profiles": get_profiles(key, False), + } data_index[key]["full_dependencies"] = full + full_and_axis_data = get_data_deps(key, True) + if len(full["data"]) >= len(full_and_axis_data): + # Then this quantity lacks dependencies that would only be required + # to evaluate this quantity's limit at the magnetic axis. + full_and_axis = full + else: + full_and_axis = { + "data": full_and_axis_data, + "transforms": get_derivs(key, True), + "params": get_params(key, True), + "profiles": get_profiles(key, True), + } + for _key, val in full_and_axis.items(): + if len(full[_key]) >= len(val): + # one is a deep copy of the other; dereference to save memory + full_and_axis[_key] = full[_key] + data_index[key]["full_and_axis_dependencies"] = full_and_axis + _build_data_index() diff --git a/desc/compute/_field.py b/desc/compute/_field.py index 4e9600f44e..8623f1ccc7 100644 --- a/desc/compute/_field.py +++ b/desc/compute/_field.py @@ -27,7 +27,8 @@ transforms={}, profiles=[], coordinates="rtz", - data=["psi_r", "sqrt(g)"] + ["psi_rr", "sqrt(g)_r"], + data=["psi_r", "sqrt(g)"], + limit_data=["psi_rr", "sqrt(g)_r"], ) def _B0(params, transforms, profiles, data, **kwargs): data["B0"] = data["psi_r"] / data["sqrt(g)"] diff --git a/desc/compute/_profiles.py b/desc/compute/_profiles.py index 180f11a118..833c066f46 100644 --- a/desc/compute/_profiles.py +++ b/desc/compute/_profiles.py @@ -478,7 +478,8 @@ def _gradp_mag_vol(params, transforms, profiles, data, **kwargs): transforms={"grid": []}, profiles=["iota", "current"], coordinates="r", - data=["psi_r", "iota_0_num", "iota_0_den"] + ["psi_rr"], + data=["psi_r", "iota_0_num", "iota_0_den"], + limit_data=["psi_rr"], ) def _iota(params, transforms, profiles, data, **kwargs): # The rotational transform is computed from the toroidal current profile using @@ -549,12 +550,9 @@ def _iota_r(params, transforms, profiles, data, **kwargs): / data["psi_r"] ) current_term_r = ( - mu_0 - / (2 * jnp.pi) - * profiles["current"].compute(params["c_l"], dr=1) - / data["psi_r"] - - current_term * data["psi_rr"] / data["psi_r"] - ) + mu_0 / (2 * jnp.pi) * profiles["current"].compute(params["c_l"], dr=1) + - current_term * data["psi_rr"] + ) / data["psi_r"] data["iota_r"] = ( current_term_r + data["iota_0_num_r"] - data["iota"] * data["iota_0_den_r"] ) / data["iota_0_den"] @@ -604,12 +602,9 @@ def _iota_rr(params, transforms, profiles, data, **kwargs): / data["psi_r"] ) current_term_r = ( - mu_0 - / (2 * jnp.pi) - * profiles["current"].compute(params["c_l"], dr=1) - / data["psi_r"] - - current_term * data["psi_rr"] / data["psi_r"] - ) + mu_0 / (2 * jnp.pi) * profiles["current"].compute(params["c_l"], dr=1) + - current_term * data["psi_rr"] + ) / data["psi_r"] current_term_rr = ( mu_0 / (2 * jnp.pi) * profiles["current"].compute(params["c_l"], dr=2) - 2 * current_term_r * data["psi_rr"] @@ -635,8 +630,8 @@ def _iota_rr(params, transforms, profiles, data, **kwargs): transforms={"grid": []}, profiles=[], coordinates="r", - data=["lambda_t", "lambda_z", "g_tt", "g_tz", "sqrt(g)"] - + ["lambda_rt", "g_tt_rr", "g_tz_r", "g_tz_rr", "sqrt(g)_r", "sqrt(g)_rr"], + data=["lambda_t", "lambda_z", "g_tt", "g_tz", "sqrt(g)"], + limit_data=["lambda_rt", "g_tt_rr", "g_tz_r", "g_tz_rr", "sqrt(g)_r", "sqrt(g)_rr"], ) def _iota_0_num(params, transforms, profiles, data, **kwargs): num = ( @@ -694,7 +689,8 @@ def _iota_0_num_r(params, transforms, profiles, data, **kwargs): + data["lambda_z"] * data["g_tt_r"] - data["lambda_rt"] * data["g_tz"] - (1 + data["lambda_t"]) * data["g_tz_r"] - ) / data["sqrt(g)"] - num * data["sqrt(g)_r"] / data["sqrt(g)"] + - num * data["sqrt(g)_r"] + ) / data["sqrt(g)"] data["iota_0_num_r"] = surface_averages(transforms["grid"], num_r) # TODO: limit at axis return data @@ -738,7 +734,8 @@ def _iota_0_num_rr(params, transforms, profiles, data, **kwargs): + data["lambda_z"] * data["g_tt_r"] - data["lambda_rt"] * data["g_tz"] - (1 + data["lambda_t"]) * data["g_tz_r"] - ) / data["sqrt(g)"] - num * data["sqrt(g)_r"] / data["sqrt(g)"] + - num * data["sqrt(g)_r"] + ) / data["sqrt(g)"] num_rr = ( data["lambda_rrz"] * data["g_tt"] + 2 * data["lambda_rz"] * data["g_tt_r"] @@ -765,7 +762,8 @@ def _iota_0_num_rr(params, transforms, profiles, data, **kwargs): transforms={"grid": []}, profiles=[], coordinates="r", - data=["g_tt", "sqrt(g)"] + ["g_tt_rr", "sqrt(g)_r"], + data=["g_tt", "sqrt(g)"], + limit_data=["g_tt_rr", "sqrt(g)_r"], ) def _iota_0_den(params, transforms, profiles, data, **kwargs): den = data["g_tt"] / data["sqrt(g)"] diff --git a/desc/compute/data_index.py b/desc/compute/data_index.py index c00fc9521a..4bfbe5cce4 100644 --- a/desc/compute/data_index.py +++ b/desc/compute/data_index.py @@ -15,6 +15,7 @@ def register_compute_fun( profiles, coordinates, data, + limit_data=None, **kwargs ): """Decorator to wrap a function and add it to the list of things we can compute. @@ -45,7 +46,9 @@ def register_compute_fun( Coordinate dependency. IE, "rtz" for a function of rho, theta, zeta, or "r" for a flux function, etc. data : list of str - Names of other items in the data index needed to compute qty + Names of other items in the data index needed to compute qty. + limit_data : list of str + Names of other items in the data index needed to compute axis limit of qty. Notes ----- @@ -57,6 +60,7 @@ def register_compute_fun( "transforms": transforms, "profiles": profiles, "data": data, + "limit_data": [] if limit_data is None else limit_data, "kwargs": list(kwargs.values()), } diff --git a/desc/compute/utils.py b/desc/compute/utils.py index 7b96060af8..d2f681c3da 100644 --- a/desc/compute/utils.py +++ b/desc/compute/utils.py @@ -105,7 +105,7 @@ def _compute(names, params, transforms, profiles, data=None, **kwargs): # don't compute something that's already been computed continue if not has_dependencies(name, params, transforms, profiles, data): - # then compute the missing dependencies first + # then compute the missing dependencies data = _compute( data_index[name]["dependencies"]["data"], params=params, @@ -114,17 +114,29 @@ def _compute(names, params, transforms, profiles, data=None, **kwargs): data=data, **kwargs, ) + if transforms["grid"].axis.size: + data = _compute( + data_index[name]["dependencies"]["limit_data"], + params=params, + transforms=transforms, + profiles=profiles, + data=data, + **kwargs, + ) + # now compute the quantity data = data_index[name]["fun"](params, transforms, profiles, data, **kwargs) return data -def get_data_deps(keys): +def get_data_deps(keys, has_axis): """Get list of data keys needed to compute a given quantity. Parameters ---------- keys : str or array-like of str Name of the desired quantity from the data index + has_axis : bool + Whether the grid to compute on has a node on the magnetic axis. Returns ------- @@ -134,9 +146,14 @@ def get_data_deps(keys): keys = [keys] if isinstance(keys, str) else keys def _get_deps_1_key(key): - if "full_dependencies" in data_index[key]: + if has_axis: + if "full_and_axis_dependencies" in data_index[key]: + return data_index[key]["full_and_axis_dependencies"]["data"] + elif "full_dependencies" in data_index[key]: return data_index[key]["full_dependencies"]["data"] deps = data_index[key]["dependencies"]["data"] + if has_axis: + deps += data_index[key]["dependencies"]["limit_data"] if len(deps) == 0: return deps out = deps.copy() @@ -150,13 +167,15 @@ def _get_deps_1_key(key): return sorted(list(set(out))) -def get_derivs(keys): +def get_derivs(keys, has_axis): """Get dict of derivative orders needed to compute a given quantity. Parameters ---------- keys : str or array-like of str Name of the desired quantity from the data index + has_axis : bool + Whether the grid to compute on has a node on the magnetic axis. Returns ------- @@ -167,9 +186,12 @@ def get_derivs(keys): keys = [keys] if isinstance(keys, str) else keys def _get_derivs_1_key(key): - if "full_dependencies" in data_index[key]: + if has_axis: + if "full_and_axis_dependencies" in data_index[key]: + return data_index[key]["full_and_axis_dependencies"]["transforms"] + elif "full_dependencies" in data_index[key]: return data_index[key]["full_dependencies"]["transforms"] - deps = [key] + get_data_deps(key) + deps = [key] + get_data_deps(key, has_axis) derivs = {} for dep in deps: for key, val in data_index[dep]["dependencies"]["transforms"].items(): @@ -188,17 +210,19 @@ def _get_derivs_1_key(key): return {key: np.unique(val, axis=0).tolist() for key, val in derivs.items()} -def get_profiles(keys, eq=None, grid=None, **kwargs): +def get_profiles(keys, has_axis, eq=None, grid=None, **kwargs): """Get profiles needed to compute a given quantity on a given grid. Parameters ---------- keys : str or array-like of str - Name of the desired quantity from the data index + Name of the desired quantity from the data index. + has_axis : bool + Whether the grid to compute on has a node on the magnetic axis. eq : Equilibrium Equilibrium to compute quantity for. grid : Grid - Grid to compute quantity on + Grid to compute quantity on. Returns ------- @@ -209,7 +233,8 @@ def get_profiles(keys, eq=None, grid=None, **kwargs): Keys for pressure, iota, etc. """ keys = [keys] if isinstance(keys, str) else keys - deps = list(keys) + get_data_deps(keys) + has_axis = has_axis or (grid is not None and grid.axis.size) + deps = list(keys) + get_data_deps(keys, has_axis) profs = [] for key in deps: profs += data_index[key]["dependencies"]["profiles"] @@ -228,13 +253,15 @@ def get_profiles(keys, eq=None, grid=None, **kwargs): return profiles -def get_params(keys, eq=None, **kwargs): +def get_params(keys, has_axis, eq=None, **kwargs): """Get parameters needed to compute a given quantity. Parameters ---------- keys : str or array-like of str Name of the desired quantity from the data index + has_axis : bool + Whether the grid to compute on has a node on the magnetic axis. eq : Equilibrium Equilibrium to compute quantity for. @@ -246,7 +273,7 @@ def get_params(keys, eq=None, **kwargs): otherwise, returns a dict of ndarray with keys for R_lmn, Z_lmn, etc. """ keys = [keys] if isinstance(keys, str) else keys - deps = list(keys) + get_data_deps(keys) + deps = list(keys) + get_data_deps(keys, has_axis) params = [] for key in deps: params += data_index[key]["dependencies"]["params"] @@ -257,13 +284,15 @@ def get_params(keys, eq=None, **kwargs): return params -def get_transforms(keys, eq, grid, **kwargs): +def get_transforms(keys, has_axis, eq, grid, **kwargs): """Get transforms needed to compute a given quantity on a given grid. Parameters ---------- keys : str or array-like of str Name of the desired quantity from the data index + has_axis : bool + Whether the grid to compute on has a node on the magnetic axis. eq : Equilibrium Equilibrium to compute quantity for. grid : Grid @@ -280,7 +309,8 @@ def get_transforms(keys, eq, grid, **kwargs): from desc.transform import Transform keys = [keys] if isinstance(keys, str) else keys - derivs = get_derivs(keys) + has_axis = has_axis or grid.axis.size + derivs = get_derivs(keys, has_axis) transforms = {"grid": grid} for c in ["R", "L", "Z"]: if c in derivs: @@ -339,6 +369,7 @@ def has_dependencies(qty, params, transforms, profiles, data): """ return ( _has_data(qty, data) + and (not transforms["grid"].axis.size or _has_limit_data(qty, data)) and _has_params(qty, params) and _has_profiles(qty, profiles) and _has_transforms(qty, transforms) @@ -346,12 +377,15 @@ def has_dependencies(qty, params, transforms, profiles, data): def _has_data(qty, data): - if qty in data: # don't compute something that's already been computed - return False deps = data_index[qty]["dependencies"]["data"] return all(d in data for d in deps) +def _has_limit_data(qty, data): + deps = data_index[qty]["dependencies"]["limit_data"] + return all(d in data for d in deps) + + def _has_params(qty, params): deps = data_index[qty]["dependencies"]["params"] return all(d in params for d in deps) diff --git a/desc/equilibrium/configuration.py b/desc/equilibrium/configuration.py index bd5f0a90aa..f08fc5ebc7 100644 --- a/desc/equilibrium/configuration.py +++ b/desc/equilibrium/configuration.py @@ -1094,18 +1094,20 @@ def compute( grid = QuadratureGrid(self.L_grid, self.M_grid, self.N_grid, self.NFP) if params is None: - params = get_params(names, eq=self) + params = get_params(names, grid.axis.size, eq=self) if profiles is None: - profiles = get_profiles(names, eq=self, grid=grid) + profiles = get_profiles(names, grid.axis.size, eq=self, grid=grid) if transforms is None: - transforms = get_transforms(names, eq=self, grid=grid, **kwargs) + transforms = get_transforms( + names, grid.axis.size, eq=self, grid=grid, **kwargs + ) if data is None: data = {} # To avoid the issue of using the wrong grid for surface and volume averages, # we first figure out what needed qtys are flux functions or volume integrals # and compute those first on a full grid - deps = list(set(get_data_deps(names) + names)) + deps = list(set(get_data_deps(names, has_axis=grid.axis.size) + names)) dep0d = [dep for dep in deps if data_index[dep]["coordinates"] == ""] dep1d = [dep for dep in deps if data_index[dep]["coordinates"] == "r"] @@ -1114,8 +1116,10 @@ def compute( data0d = compute_fun( dep0d, params=params, - transforms=get_transforms(dep0d, eq=self, grid=grid0d, **kwargs), - profiles=get_profiles(dep0d, eq=self, grid=grid0d), + transforms=get_transforms( + dep0d, grid0d.axis.size, eq=self, grid=grid0d, **kwargs + ), + profiles=get_profiles(dep0d, grid0d.axis.size, eq=self, grid=grid0d), data=None, **kwargs, ) @@ -1134,9 +1138,11 @@ def compute( data1d = compute_fun( dep1d, params=params, - transforms=get_transforms(dep1d, eq=self, grid=grid1d, **kwargs), - profiles=get_profiles(dep1d, eq=self, grid=grid1d), - data=None, # Todo: ask if should pass in data0d + transforms=get_transforms( + dep1d, grid1d.axis.size, eq=self, grid=grid1d, **kwargs + ), + profiles=get_profiles(dep1d, grid1d.axis.size, eq=self, grid=grid1d), + data=None, # Todo: pass in data0d? **kwargs, ) # need to make this data broadcastable with the data on the original grid @@ -1253,7 +1259,7 @@ def compute_flux_coords( def is_nested(self, grid=None, R_lmn=None, Z_lmn=None, L_lmn=None, msg=None): """Check that an equilibrium has properly nested flux surfaces in a plane. - Does so by checking coordianate Jacobian (sqrt(g)) sign. + Does so by checking coordinate Jacobian (sqrt(g)) sign. If coordinate Jacobian switches sign somewhere in the volume, this indicates that it is zero at some point, meaning surfaces are touching and the equilibrium is not nested. diff --git a/desc/equilibrium/coords.py b/desc/equilibrium/coords.py index 645fac274d..8fa2a9282a 100644 --- a/desc/equilibrium/coords.py +++ b/desc/equilibrium/coords.py @@ -352,7 +352,7 @@ def is_nested(eq, grid=None, R_lmn=None, Z_lmn=None, L_lmn=None, msg=None): if grid is None: grid = QuadratureGrid(eq.L_grid, eq.M_grid, eq.N_grid, eq.NFP) - transforms = get_transforms("sqrt(g)_PEST", eq=eq, grid=grid) + transforms = get_transforms("sqrt(g)_PEST", grid.axis.size, eq=eq, grid=grid) data = compute_fun( "sqrt(g)_PEST", params={ diff --git a/desc/objectives/_bootstrap.py b/desc/objectives/_bootstrap.py index 95beaaaaa2..583878be1d 100644 --- a/desc/objectives/_bootstrap.py +++ b/desc/objectives/_bootstrap.py @@ -123,7 +123,7 @@ def build(self, eq, use_jit=True, verbose=1): ), "Helicity toroidal mode number should be 0 (QA) or +/- NFP (QH)" self._dim_f = grid.num_rho self._data_keys = ["", " Redl"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) if eq.electron_temperature is None: raise RuntimeError( @@ -176,8 +176,10 @@ def build(self, eq, use_jit=True, verbose=1): print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: diff --git a/desc/objectives/_equilibrium.py b/desc/objectives/_equilibrium.py index 35bdd02ecb..af3ae80c07 100644 --- a/desc/objectives/_equilibrium.py +++ b/desc/objectives/_equilibrium.py @@ -137,15 +137,17 @@ def build(self, eq, use_jit=True, verbose=1): "F_helical", "|e^helical|", ] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: @@ -313,15 +315,17 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_nodes self._data_keys = ["F_rho", "|grad(rho)|", "sqrt(g)"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: @@ -486,15 +490,17 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_nodes self._data_keys = ["F_helical", "|e^helical|", "sqrt(g)"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: @@ -670,15 +676,17 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = 1 self._data_keys = ["W"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: @@ -847,15 +855,17 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = 3 * grid.num_nodes self._data_keys = ["J^rho", "J^theta", "J^zeta", "sqrt(g)"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: diff --git a/desc/objectives/_generic.py b/desc/objectives/_generic.py index 7000970649..a31ff31316 100644 --- a/desc/objectives/_generic.py +++ b/desc/objectives/_generic.py @@ -100,9 +100,9 @@ def build(self, eq, use_jit=True, verbose=1): else: self._dim_f = grid.num_nodes * data_index[self.f]["dim"] self._scalar = False - self._args = get_params(self.f) - self._profiles = get_profiles(self.f, eq=eq, grid=grid) - self._transforms = get_transforms(self.f, eq=eq, grid=grid) + self._args = get_params(self.f, grid.axis.size) + self._profiles = get_profiles(self.f, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms(self.f, grid.axis.size, eq=eq, grid=grid) super().build(eq=eq, use_jit=use_jit, verbose=verbose) def compute(self, *args, **kwargs): @@ -220,15 +220,17 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_rho self._data_keys = ["current"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: @@ -397,15 +399,17 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_rho self._data_keys = ["iota"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: diff --git a/desc/objectives/_geometry.py b/desc/objectives/_geometry.py index 62149e2a07..75e03c6278 100644 --- a/desc/objectives/_geometry.py +++ b/desc/objectives/_geometry.py @@ -94,15 +94,17 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = 1 self._data_keys = ["R0/a"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: @@ -215,15 +217,17 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = 1 self._data_keys = ["a_major/a_minor"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: @@ -336,15 +340,17 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = 1 self._data_keys = ["V"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: @@ -383,7 +389,7 @@ def compute(self, *args, **kwargs): class PlasmaVesselDistance(_Objective): - """Target the distance between the plasma and a surounding surface. + """Target the distance between the plasma and a surrounding surface. Computes the minimum distance from each point on the surface grid to a point on the plasma grid. For dense grids, this will approximate the global min, but in general @@ -480,7 +486,10 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = surface_grid.num_nodes self._data_keys = ["R", "phi", "Z"] - self._args = get_params(self._data_keys) + # Todo: review this please + self._args = get_params( + self._data_keys, has_axis=plasma_grid.axis.size or surface_grid.axis.size + ) timer = Timer() if verbose > 0: @@ -490,8 +499,20 @@ def build(self, eq, use_jit=True, verbose=1): self._surface_coords = self._surface.compute_coordinates( grid=surface_grid, basis="xyz" ) - self._profiles = get_profiles(self._data_keys, eq=eq, grid=plasma_grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=plasma_grid) + # Todo: review this please + self._profiles = get_profiles( + self._data_keys, + has_axis=plasma_grid.axis.size or surface_grid.axis.size, + eq=eq, + grid=plasma_grid, + ) + # Todo: review this please + self._transforms = get_transforms( + self._data_keys, + has_axis=plasma_grid.axis.size or surface_grid.axis.size, + eq=eq, + grid=plasma_grid, + ) timer.stop("Precomputing transforms") if verbose > 1: @@ -617,15 +638,17 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_nodes self._data_keys = ["curvature_H"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: @@ -750,15 +773,17 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_nodes self._data_keys = ["curvature_k1", "curvature_k2"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: @@ -878,15 +903,17 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_nodes self._data_keys = ["L_grad(B)"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: diff --git a/desc/objectives/_qs.py b/desc/objectives/_qs.py index 5a0f19103b..0c78e82747 100644 --- a/desc/objectives/_qs.py +++ b/desc/objectives/_qs.py @@ -117,7 +117,7 @@ def build(self, eq, use_jit=True, verbose=1): grid = self._grid self._data_keys = ["|B|_mn"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) assert grid.sym is False assert grid.num_rho == 1 @@ -127,9 +127,10 @@ def build(self, eq, use_jit=True, verbose=1): print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) self._transforms = get_transforms( self._data_keys, + grid.axis.size, eq=eq, grid=grid, M_booz=M_booz, @@ -303,15 +304,17 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_nodes self._data_keys = ["f_C"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: @@ -461,15 +464,17 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_nodes self._data_keys = ["f_T"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: @@ -601,15 +606,17 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_nodes self._data_keys = ["isodynamicity"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: diff --git a/desc/objectives/_stability.py b/desc/objectives/_stability.py index 8c3f798b8f..e6a31a3244 100644 --- a/desc/objectives/_stability.py +++ b/desc/objectives/_stability.py @@ -105,15 +105,17 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_rho self._data_keys = ["D_Mercier"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: @@ -296,15 +298,17 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_rho self._data_keys = ["magnetic well"] - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) timer.stop("Precomputing transforms") if verbose > 1: diff --git a/desc/objectives/utils.py b/desc/objectives/utils.py index afccca1ff2..ab8fa92e99 100644 --- a/desc/objectives/utils.py +++ b/desc/objectives/utils.py @@ -313,7 +313,7 @@ def factorize_linear_constraints(constraints, objective_args): # noqa: C901 def project(x): """Project a full state vector into the reduced optimization vector.""" - x_reduced = Z.T @ ((x - xp)[unfixed_idx]) + x_reduced = jnp.matmul(Z.T, (x - xp)[unfixed_idx]) return jnp.atleast_1d(jnp.squeeze(x_reduced)) def recover(x_reduced): diff --git a/desc/plotting.py b/desc/plotting.py index 500b3e4d93..ad1bc4d8eb 100644 --- a/desc/plotting.py +++ b/desc/plotting.py @@ -2160,7 +2160,7 @@ def plot_boozer_modes( for i, r in enumerate(rho): grid = LinearGrid(M=2 * eq.M_grid, N=2 * eq.N_grid, NFP=eq.NFP, rho=np.array(r)) transforms = get_transforms( - "|B|_mn", eq=eq, grid=grid, M_booz=M_booz, N_booz=N_booz + "|B|_mn", grid.axis.size, eq=eq, grid=grid, M_booz=M_booz, N_booz=N_booz ) with warnings.catch_warnings(): warnings.simplefilter("ignore") @@ -2306,11 +2306,22 @@ def plot_boozer_surface( N_booz = kwargs.pop("N_booz", 2 * eq.N) title_font_size = kwargs.pop("title_font_size", None) + # Todo: review this please transforms_compute = get_transforms( - "|B|_mn", eq=eq, grid=grid_compute, M_booz=M_booz, N_booz=N_booz + "|B|_mn", + has_axis=grid_compute.axis.size, + eq=eq, + grid=grid_compute, + M_booz=M_booz, + N_booz=N_booz, ) transforms_plot = get_transforms( - "|B|_mn", eq=eq, grid=grid_plot, M_booz=M_booz, N_booz=N_booz + "|B|_mn", + has_axis=grid_plot.axis.size, + eq=eq, + grid=grid_plot, + M_booz=M_booz, + N_booz=N_booz, ) with warnings.catch_warnings(): warnings.simplefilter("ignore") @@ -2474,7 +2485,7 @@ def plot_qs_error( # noqa: 16 fxn too complex grid = LinearGrid(M=eq.M_grid, N=eq.N_grid, NFP=eq.NFP, rho=np.array(r)) if fB: transforms = get_transforms( - "|B|_mn", eq=eq, grid=grid, M_booz=M_booz, N_booz=N_booz + "|B|_mn", grid.axis.size, eq=eq, grid=grid, M_booz=M_booz, N_booz=N_booz ) if i == 0: # only need to do this once for the first rho surface matrix, modes, idx = ptolemy_linear_transform( diff --git a/docs/adding_objectives.rst b/docs/adding_objectives.rst index 0e5fd01c7d..72a971b1e6 100644 --- a/docs/adding_objectives.rst +++ b/docs/adding_objectives.rst @@ -116,7 +116,7 @@ A full example objective with comments describing key points is given below: # What data from desc.compute is needed? Here we want the QS triple product. self._data_keys = ["f_T"] # what arguments should be passed to self.compute - self._args = get_params(self._data_keys) + self._args = get_params(self._data_keys, has_axis=self.grid.axis.size) # some helper code for profiling and logging timer = Timer() @@ -127,8 +127,18 @@ A full example objective with comments describing key points is given below: # helper functions for building transforms etc to compute given # quantities. Alternatively, these can be created manually based on the # equilibrium, though in most cases that isn't necessary. - self._profiles = get_profiles(self._data_keys, eq=eq, grid=self.grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=self.grid) + self._profiles = get_profiles( + self._data_keys, + has_axis=self.grid.axis.size, + eq=eq, + grid=self.grid, + ) + self._transforms = get_transforms( + self._data_keys, + has_axis=self.grid.axis.size, + eq=eq, + grid=self.grid, + ) timer.stop("Precomputing transforms") if verbose > 1: diff --git a/tests/test_compute_funs.py b/tests/test_compute_funs.py index a5a9025be3..fddd64e5cd 100644 --- a/tests/test_compute_funs.py +++ b/tests/test_compute_funs.py @@ -1116,7 +1116,11 @@ def test_compute_everything(): eq = Equilibrium(1, 1, 1) grid = LinearGrid(1, 1, 1) for key in data_index.keys(): - data = eq.compute(key, grid=grid) + try: + data = eq.compute(key, grid=grid) + except ValueError: + print(key) + assert False assert key in data diff --git a/tests/test_constrain_current.py b/tests/test_constrain_current.py index 5a251373ab..fcfa47a76a 100644 --- a/tests/test_constrain_current.py +++ b/tests/test_constrain_current.py @@ -17,9 +17,9 @@ class _ExactValueProfile: def __init__(self, eq, grid): self.eq = eq self.grid = grid - self.transforms = get_transforms("current_rr", eq=eq, grid=grid) - self.profiles = get_profiles("current_rr", eq=eq, grid=grid) - self.params = get_params("current_rr", eq=eq) + self.transforms = get_transforms("current_rr", grid.axis.size, eq=eq, grid=grid) + self.profiles = get_profiles("current_rr", grid.axis.size, eq=eq, grid=grid) + self.params = get_params("current_rr", grid.axis.size, eq=eq) def compute(self, params, dr, *args, **kwargs): if dr == 0: @@ -90,7 +90,7 @@ def test(stellarator, grid_type): "c_l": None, "Psi": eq.Psi, } - transforms = get_transforms("iota_rr", eq=eq, grid=grid) + transforms = get_transforms("iota_rr", grid.axis.size, eq=eq, grid=grid) profiles = {"iota": None, "current": _ExactValueProfile(eq, grid)} # compute rotational transform from the above current profile, which # is monkey patched to return a surface average of B_theta in amps @@ -105,9 +105,9 @@ def test(stellarator, grid_type): # if the equilibrium fixes iota) benchmark_data = compute_fun( ["iota", "iota_r", "iota_rr"], - params=get_params("iota_rr", eq=eq), + params=get_params("iota_rr", grid.axis.size, eq=eq), transforms=transforms, - profiles=get_profiles("iota_rr", eq=eq, grid=grid), + profiles=get_profiles("iota_rr", grid.axis.size, eq=eq, grid=grid), ) np.testing.assert_allclose(data["iota"], benchmark_data["iota"]) np.testing.assert_allclose(data["iota_r"], benchmark_data["iota_r"]) diff --git a/tests/test_objective_funs.py b/tests/test_objective_funs.py index fb5c449200..f63bf6a6e9 100644 --- a/tests/test_objective_funs.py +++ b/tests/test_objective_funs.py @@ -191,6 +191,7 @@ def test_qh_boozer(self): # compute all amplitudes in the Boozer spectrum transforms = get_transforms( "|B|_mn", + has_axis=grid.axis.size, eq=eq, grid=grid, M_booz=M_booz, @@ -248,7 +249,7 @@ def test(eq): @pytest.mark.unit def test_qs_boozer_grids(self): - """Test grid compatability with QS objectives.""" + """Test grid compatibility with QS objectives.""" eq = get("QAS") # symmetric grid diff --git a/tests/test_transform.py b/tests/test_transform.py index be67b06510..51f6c0ebf8 100644 --- a/tests/test_transform.py +++ b/tests/test_transform.py @@ -559,7 +559,7 @@ def test_Z_projection(self): axis=False, node_pattern=eq.node_pattern, ) - tr = get_transforms(data_keys, eq, grid) + tr = get_transforms(data_keys, grid.axis.size, eq, grid) f = np.ones(grid.num_nodes) assert tr["Z"].matrices["direct1"][0][0][0].shape == ( From fa69c4cecb77aee217769398b4747ffeaec7d41c Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Tue, 6 Jun 2023 22:22:03 -0500 Subject: [PATCH 17/31] fix bug in creation of full_dependencies --- desc/compute/__init__.py | 18 ++++++++++-------- desc/compute/utils.py | 8 ++++---- tests/test_compute_funs.py | 6 +----- tests/test_limits.py | 4 +++- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/desc/compute/__init__.py b/desc/compute/__init__.py index d4a76bbb82..a935306ae0 100644 --- a/desc/compute/__init__.py +++ b/desc/compute/__init__.py @@ -64,23 +64,25 @@ def _build_data_index(): } data_index[key]["full_dependencies"] = full - full_and_axis_data = get_data_deps(key, True) - if len(full["data"]) >= len(full_and_axis_data): + full_with_axis_data = get_data_deps(key, True) + if len(full["data"]) >= len(full_with_axis_data): # Then this quantity lacks dependencies that would only be required # to evaluate this quantity's limit at the magnetic axis. - full_and_axis = full + full_with_axis = full else: - full_and_axis = { - "data": full_and_axis_data, + full_with_axis = { + "data": full_with_axis_data, "transforms": get_derivs(key, True), "params": get_params(key, True), "profiles": get_profiles(key, True), } - for _key, val in full_and_axis.items(): + for _key, val in full_with_axis.items(): + if _key == "transforms": + continue if len(full[_key]) >= len(val): # one is a deep copy of the other; dereference to save memory - full_and_axis[_key] = full[_key] - data_index[key]["full_and_axis_dependencies"] = full_and_axis + full_with_axis[_key] = full[_key] + data_index[key]["full_with_axis_dependencies"] = full_with_axis _build_data_index() diff --git a/desc/compute/utils.py b/desc/compute/utils.py index d2f681c3da..2125dc2a68 100644 --- a/desc/compute/utils.py +++ b/desc/compute/utils.py @@ -147,8 +147,8 @@ def get_data_deps(keys, has_axis): def _get_deps_1_key(key): if has_axis: - if "full_and_axis_dependencies" in data_index[key]: - return data_index[key]["full_and_axis_dependencies"]["data"] + if "full_with_axis_dependencies" in data_index[key]: + return data_index[key]["full_with_axis_dependencies"]["data"] elif "full_dependencies" in data_index[key]: return data_index[key]["full_dependencies"]["data"] deps = data_index[key]["dependencies"]["data"] @@ -187,8 +187,8 @@ def get_derivs(keys, has_axis): def _get_derivs_1_key(key): if has_axis: - if "full_and_axis_dependencies" in data_index[key]: - return data_index[key]["full_and_axis_dependencies"]["transforms"] + if "full_with_axis_dependencies" in data_index[key]: + return data_index[key]["full_with_axis_dependencies"]["transforms"] elif "full_dependencies" in data_index[key]: return data_index[key]["full_dependencies"]["transforms"] deps = [key] + get_data_deps(key, has_axis) diff --git a/tests/test_compute_funs.py b/tests/test_compute_funs.py index fddd64e5cd..a5a9025be3 100644 --- a/tests/test_compute_funs.py +++ b/tests/test_compute_funs.py @@ -1116,11 +1116,7 @@ def test_compute_everything(): eq = Equilibrium(1, 1, 1) grid = LinearGrid(1, 1, 1) for key in data_index.keys(): - try: - data = eq.compute(key, grid=grid) - except ValueError: - print(key) - assert False + data = eq.compute(key, grid=grid) assert key in data diff --git a/tests/test_limits.py b/tests/test_limits.py index c7f4e78e41..1605fe8601 100644 --- a/tests/test_limits.py +++ b/tests/test_limits.py @@ -9,9 +9,11 @@ class TestLimits: + """Tests for compute functions evaluated at limits.""" + @pytest.mark.unit def test_b_mag_fsa(self): - """Test that the limit at rho=0 axis is computed accurately.""" + """Test continuity of <|B|>. Failure indicates B0 limit is wrong.""" def test(eq, expected_at_axis): delta = 1e-3 From 1573c5e5b30b2bb6c20c57c48ac1ee6ca4376581 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Tue, 6 Jun 2023 23:09:30 -0500 Subject: [PATCH 18/31] fix missing parameters after merge --- desc/objectives/_generic.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/desc/objectives/_generic.py b/desc/objectives/_generic.py index 33f991c7a7..1f826ad148 100644 --- a/desc/objectives/_generic.py +++ b/desc/objectives/_generic.py @@ -146,9 +146,9 @@ def getvars(fun): self._dim_f = jax.eval_shape(self._fun_wrapped, dummy_data).size self._scalar = self._dim_f == 1 - self._args = get_params(self._data_keys) - self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) + self._args = get_params(self._data_keys, grid.axis.size) + self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, grid.axis.size, eq=eq, grid=grid) super().build(eq=eq, use_jit=use_jit, verbose=verbose) def compute(self, *args, **kwargs): From ea78cdc354c0fc6fd3997a7ea789e77c91a7875b Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Tue, 6 Jun 2023 23:12:06 -0500 Subject: [PATCH 19/31] formatting --- desc/objectives/_generic.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/desc/objectives/_generic.py b/desc/objectives/_generic.py index 1f826ad148..2959fe6663 100644 --- a/desc/objectives/_generic.py +++ b/desc/objectives/_generic.py @@ -148,7 +148,9 @@ def getvars(fun): self._scalar = self._dim_f == 1 self._args = get_params(self._data_keys, grid.axis.size) self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._transforms = get_transforms( + self._data_keys, grid.axis.size, eq=eq, grid=grid + ) super().build(eq=eq, use_jit=use_jit, verbose=verbose) def compute(self, *args, **kwargs): From 688507fb1bb18daf3c4d85c254502c188b5e8bc8 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Wed, 7 Jun 2023 14:32:24 -0500 Subject: [PATCH 20/31] Fix very big aliasing bug --- desc/compute/utils.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/desc/compute/utils.py b/desc/compute/utils.py index 2125dc2a68..bdf01c422f 100644 --- a/desc/compute/utils.py +++ b/desc/compute/utils.py @@ -152,13 +152,16 @@ def _get_deps_1_key(key): elif "full_dependencies" in data_index[key]: return data_index[key]["full_dependencies"]["data"] deps = data_index[key]["dependencies"]["data"] - if has_axis: - deps += data_index[key]["dependencies"]["limit_data"] if len(deps) == 0: return deps - out = deps.copy() + out = deps.copy() # to avoid modifying the data_index for dep in deps: out += _get_deps_1_key(dep) + if has_axis: + axis_limit_deps = data_index[key]["dependencies"]["limit_data"] + out += axis_limit_deps.copy() # to be safe + for dep in axis_limit_deps: + out += _get_deps_1_key(dep) return sorted(list(set(out))) out = [] From 668b05f08921b8ce809f889b9c1e3d603280d5c7 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Wed, 7 Jun 2023 14:41:03 -0500 Subject: [PATCH 21/31] changed limit_data to axis_limit_data with posix shell script --- desc/compute/_field.py | 2 +- desc/compute/_profiles.py | 13 ++++++++++--- desc/compute/data_index.py | 6 +++--- desc/compute/utils.py | 10 +++++----- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/desc/compute/_field.py b/desc/compute/_field.py index 8623f1ccc7..ea207371d6 100644 --- a/desc/compute/_field.py +++ b/desc/compute/_field.py @@ -28,7 +28,7 @@ profiles=[], coordinates="rtz", data=["psi_r", "sqrt(g)"], - limit_data=["psi_rr", "sqrt(g)_r"], + axis_limit_data=["psi_rr", "sqrt(g)_r"], ) def _B0(params, transforms, profiles, data, **kwargs): data["B0"] = data["psi_r"] / data["sqrt(g)"] diff --git a/desc/compute/_profiles.py b/desc/compute/_profiles.py index 833c066f46..199db5a9ab 100644 --- a/desc/compute/_profiles.py +++ b/desc/compute/_profiles.py @@ -479,7 +479,7 @@ def _gradp_mag_vol(params, transforms, profiles, data, **kwargs): profiles=["iota", "current"], coordinates="r", data=["psi_r", "iota_0_num", "iota_0_den"], - limit_data=["psi_rr"], + axis_limit_data=["psi_rr"], ) def _iota(params, transforms, profiles, data, **kwargs): # The rotational transform is computed from the toroidal current profile using @@ -631,7 +631,14 @@ def _iota_rr(params, transforms, profiles, data, **kwargs): profiles=[], coordinates="r", data=["lambda_t", "lambda_z", "g_tt", "g_tz", "sqrt(g)"], - limit_data=["lambda_rt", "g_tt_rr", "g_tz_r", "g_tz_rr", "sqrt(g)_r", "sqrt(g)_rr"], + axis_limit_data=[ + "lambda_rt", + "g_tt_rr", + "g_tz_r", + "g_tz_rr", + "sqrt(g)_r", + "sqrt(g)_rr", + ], ) def _iota_0_num(params, transforms, profiles, data, **kwargs): num = ( @@ -763,7 +770,7 @@ def _iota_0_num_rr(params, transforms, profiles, data, **kwargs): profiles=[], coordinates="r", data=["g_tt", "sqrt(g)"], - limit_data=["g_tt_rr", "sqrt(g)_r"], + axis_limit_data=["g_tt_rr", "sqrt(g)_r"], ) def _iota_0_den(params, transforms, profiles, data, **kwargs): den = data["g_tt"] / data["sqrt(g)"] diff --git a/desc/compute/data_index.py b/desc/compute/data_index.py index 4bfbe5cce4..7aeb5e8d6a 100644 --- a/desc/compute/data_index.py +++ b/desc/compute/data_index.py @@ -15,7 +15,7 @@ def register_compute_fun( profiles, coordinates, data, - limit_data=None, + axis_limit_data=None, **kwargs ): """Decorator to wrap a function and add it to the list of things we can compute. @@ -47,7 +47,7 @@ def register_compute_fun( a flux function, etc. data : list of str Names of other items in the data index needed to compute qty. - limit_data : list of str + axis_limit_data : list of str Names of other items in the data index needed to compute axis limit of qty. Notes @@ -60,7 +60,7 @@ def register_compute_fun( "transforms": transforms, "profiles": profiles, "data": data, - "limit_data": [] if limit_data is None else limit_data, + "axis_limit_data": [] if axis_limit_data is None else axis_limit_data, "kwargs": list(kwargs.values()), } diff --git a/desc/compute/utils.py b/desc/compute/utils.py index bdf01c422f..15b7f8aac2 100644 --- a/desc/compute/utils.py +++ b/desc/compute/utils.py @@ -116,7 +116,7 @@ def _compute(names, params, transforms, profiles, data=None, **kwargs): ) if transforms["grid"].axis.size: data = _compute( - data_index[name]["dependencies"]["limit_data"], + data_index[name]["dependencies"]["axis_limit_data"], params=params, transforms=transforms, profiles=profiles, @@ -158,7 +158,7 @@ def _get_deps_1_key(key): for dep in deps: out += _get_deps_1_key(dep) if has_axis: - axis_limit_deps = data_index[key]["dependencies"]["limit_data"] + axis_limit_deps = data_index[key]["dependencies"]["axis_limit_data"] out += axis_limit_deps.copy() # to be safe for dep in axis_limit_deps: out += _get_deps_1_key(dep) @@ -372,7 +372,7 @@ def has_dependencies(qty, params, transforms, profiles, data): """ return ( _has_data(qty, data) - and (not transforms["grid"].axis.size or _has_limit_data(qty, data)) + and (not transforms["grid"].axis.size or _has_axis_limit_data(qty, data)) and _has_params(qty, params) and _has_profiles(qty, profiles) and _has_transforms(qty, transforms) @@ -384,8 +384,8 @@ def _has_data(qty, data): return all(d in data for d in deps) -def _has_limit_data(qty, data): - deps = data_index[qty]["dependencies"]["limit_data"] +def _has_axis_limit_data(qty, data): + deps = data_index[qty]["dependencies"]["axis_limit_data"] return all(d in data for d in deps) From 38f9ad95df6504fe7c8f9a4a46181e3be20ef70c Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Thu, 8 Jun 2023 12:54:03 -0500 Subject: [PATCH 22/31] Add test for axis limit api --- tests/{test_limits.py => test_axis_limits.py} | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) rename tests/{test_limits.py => test_axis_limits.py} (57%) diff --git a/tests/test_limits.py b/tests/test_axis_limits.py similarity index 57% rename from tests/test_limits.py rename to tests/test_axis_limits.py index 1605fe8601..5449e1e046 100644 --- a/tests/test_limits.py +++ b/tests/test_axis_limits.py @@ -4,13 +4,31 @@ import pytest from desc.compute.utils import compress, surface_averages +from desc.equilibrium import Equilibrium from desc.examples import get from desc.grid import LinearGrid -class TestLimits: +class TestAxisLimits: """Tests for compute functions evaluated at limits.""" + @pytest.mark.unit + def test_compute_axis_limit_api(self): + """Test that axis limit dependencies are computed only when necessary.""" + eq = Equilibrium() + grid = LinearGrid(L=2, M=2, N=2, axis=False) + assert not grid.axis.size + data = eq.compute("B0", grid=grid) + assert "B0" in data and "psi_r" in data and "sqrt(g)" in data + # assert axis limit dependencies are not in data + assert "psi_rr" not in data and "sqrt(g)_r" not in data + grid = LinearGrid(L=2, M=2, N=2, axis=True) + assert grid.axis.size + data = eq.compute("B0", grid=grid) + assert "B0" in data and "psi_r" in data and "sqrt(g)" in data + # assert axis limit dependencies are in data + assert "psi_rr" in data and "sqrt(g)_r" in data + @pytest.mark.unit def test_b_mag_fsa(self): """Test continuity of <|B|>. Failure indicates B0 limit is wrong.""" From f355ac6ef196226f7c878fc579857d0ebefbac11 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Thu, 8 Jun 2023 12:59:49 -0500 Subject: [PATCH 23/31] add nan check to test --- tests/test_axis_limits.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_axis_limits.py b/tests/test_axis_limits.py index 5449e1e046..20ed6945f0 100644 --- a/tests/test_axis_limits.py +++ b/tests/test_axis_limits.py @@ -28,6 +28,7 @@ def test_compute_axis_limit_api(self): assert "B0" in data and "psi_r" in data and "sqrt(g)" in data # assert axis limit dependencies are in data assert "psi_rr" in data and "sqrt(g)_r" in data + assert np.isfinite(data["B0"]).all() @pytest.mark.unit def test_b_mag_fsa(self): From 62aef3e5b32300b8b6dadece3c797528743e4946 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Thu, 8 Jun 2023 14:18:07 -0500 Subject: [PATCH 24/31] Revert test_compute_utils as changes were moved to pr #501 --- desc/compute/_field.py | 6 +- desc/compute/_profiles.py | 21 ++++-- tests/test_axis_limits.py | 22 ++++++ tests/test_compute_utils.py | 129 +++++++++++++++++++------------- tests/test_constrain_current.py | 23 ------ 5 files changed, 115 insertions(+), 86 deletions(-) diff --git a/desc/compute/_field.py b/desc/compute/_field.py index ea207371d6..027915e6b2 100644 --- a/desc/compute/_field.py +++ b/desc/compute/_field.py @@ -33,8 +33,10 @@ def _B0(params, transforms, profiles, data, **kwargs): data["B0"] = data["psi_r"] / data["sqrt(g)"] if transforms["grid"].axis.size: - limit = (data["psi_rr"] / data["sqrt(g)_r"])[transforms["grid"].axis] - data["B0"] = put(data["B0"], transforms["grid"].axis, limit) + limit = data["psi_rr"] / data["sqrt(g)_r"] + data["B0"] = put( + data["B0"], transforms["grid"].axis, limit[transforms["grid"].axis] + ) return data diff --git a/desc/compute/_profiles.py b/desc/compute/_profiles.py index 199db5a9ab..94fedda6a0 100644 --- a/desc/compute/_profiles.py +++ b/desc/compute/_profiles.py @@ -505,8 +505,10 @@ def _iota(params, transforms, profiles, data, **kwargs): / (2 * jnp.pi) * profiles["current"].compute(params["c_l"], dr=2) / data["psi_rr"] - )[transforms["grid"].axis] - current_term = put(current_term, transforms["grid"].axis, limit) + ) + current_term = put( + current_term, transforms["grid"].axis, limit[transforms["grid"].axis] + ) data["iota"] = (current_term + data["iota_0_num"]) / data["iota_0_den"] return data @@ -657,8 +659,10 @@ def _iota_0_num(params, transforms, profiles, data, **kwargs): ) / data[ "sqrt(g)_r" ] - limit = surface_averages(transforms["grid"], limit)[transforms["grid"].axis] - data["iota_0_num"] = put(data["iota_0_num"], transforms["grid"].axis, limit) + limit = surface_averages(transforms["grid"], limit) + data["iota_0_num"] = put( + data["iota_0_num"], transforms["grid"].axis, limit[transforms["grid"].axis] + ) return data @@ -777,9 +781,12 @@ def _iota_0_den(params, transforms, profiles, data, **kwargs): data["iota_0_den"] = surface_averages(transforms["grid"], den) if transforms["grid"].axis.size: - limit = data["g_tt_rr"] / data["sqrt(g)_r"] - limit = surface_averages(transforms["grid"], limit)[transforms["grid"].axis] - data["iota_0_den"] = put(data["iota_0_den"], transforms["grid"].axis, limit) + limit = surface_averages( + transforms["grid"], data["g_tt_rr"] / data["sqrt(g)_r"] + ) + data["iota_0_den"] = put( + data["iota_0_den"], transforms["grid"].axis, limit[transforms["grid"].axis] + ) return data diff --git a/tests/test_axis_limits.py b/tests/test_axis_limits.py index 20ed6945f0..060836973f 100644 --- a/tests/test_axis_limits.py +++ b/tests/test_axis_limits.py @@ -7,6 +7,7 @@ from desc.equilibrium import Equilibrium from desc.examples import get from desc.grid import LinearGrid +import desc.io class TestAxisLimits: @@ -53,3 +54,24 @@ def test(eq, expected_at_axis): ) test(get("W7-X"), 2.708108) + + @pytest.mark.unit + @pytest.mark.solve + def test_rotational_transform(self, DSHAPE_current): + """Test that the limit at rho=0 axis is computed accurately.""" + # test should be done on equilibria with fixed current profiles + def test(eq, expected_at_axis): + delta = 1e-3 + epsilon = 1e-6 + rho = np.linspace(0, delta, 10) + lg = LinearGrid(rho=rho, M=5, N=5, NFP=eq.NFP, sym=eq.sym) + iota = compress(lg, eq.compute("iota", grid=lg)["iota"]) + # check continuity + assert np.isfinite(iota).all() + np.testing.assert_allclose(iota[:-1], iota[1:], atol=epsilon) + # check value + np.testing.assert_allclose(iota[0], expected_at_axis, atol=epsilon) + + eq = desc.io.load(load_from=str(DSHAPE_current["desc_h5_path"]))[-1] + test(eq, -0.994167) + test(get("QAS"), -0.360675) diff --git a/tests/test_compute_utils.py b/tests/test_compute_utils.py index 59aa7624a9..73eedfece7 100644 --- a/tests/test_compute_utils.py +++ b/tests/test_compute_utils.py @@ -3,6 +3,7 @@ import numpy as np import pytest +import desc.io from desc.compute.utils import ( _get_grid_surface, compress, @@ -12,7 +13,6 @@ surface_max, surface_min, ) -from desc.examples import get from desc.grid import ConcentricGrid, LinearGrid, QuadratureGrid @@ -95,35 +95,30 @@ def test_surface_integrals(self): should also be done on grids with duplicate nodes (e.g. endpoint=True). """ - def test_B_theta(surface_label, grid, eq): - q = eq.compute("B_theta", grid=grid)["B_theta"] + def test(surface_label, grid): + q = np.random.random_sample(size=grid.num_nodes) integrals_1 = benchmark_surface_integrals(grid, q, surface_label) integrals_2 = compress( grid, surface_integrals(grid, q, surface_label), surface_label ) - np.testing.assert_allclose( - integrals_1, integrals_2, atol=1e-16, err_msg=surface_label - ) + np.testing.assert_allclose(integrals_1, integrals_2, err_msg=surface_label) nrho = 13 ntheta = 11 nzeta = 9 - eq = get("W7-X") - lg = LinearGrid(L=nrho, M=ntheta, N=nzeta, NFP=eq.NFP, endpoint=False) - lg_endpoint = LinearGrid(L=nrho, M=ntheta, N=nzeta, NFP=eq.NFP, endpoint=True) + NFP = 5 + lg = LinearGrid(L=nrho, M=ntheta, N=nzeta, NFP=NFP, endpoint=False) + lg_endpoint = LinearGrid(L=nrho, M=ntheta, N=nzeta, NFP=NFP, endpoint=True) cg_sym = ConcentricGrid( - L=(nrho + ntheta) // 2, - M=(nrho + ntheta) // 2, - N=nzeta, - NFP=eq.NFP, - sym=True, + L=(nrho + ntheta) // 2, M=(nrho + ntheta) // 2, N=nzeta, NFP=NFP, sym=True ) + for label in ("rho", "theta", "zeta"): - test_B_theta(label, lg, eq) - test_B_theta(label, lg_endpoint, eq) + test(label, lg) + test(label, lg_endpoint) if label != "theta": # theta integrals are poorly defined on concentric grids - test_B_theta(label, cg_sym, eq) + test(label, cg_sym) @pytest.mark.unit def test_surface_area_unweighted(self): @@ -204,56 +199,82 @@ def test(surface_label, grid): test(label, cg_sym) @pytest.mark.unit - def test_surface_area_weighted(self): + @pytest.mark.solve + def test_surface_area_weighted(self, DSHAPE_current, HELIOTRON_vac): """Test that rho surface integral(dt*dz*sqrt(g)) are monotonic wrt rho.""" - eq = get("W7-X") - grid = ConcentricGrid(L=11, M=11, N=9, NFP=eq.NFP, sym=eq.sym) - sqrt_g = np.abs(eq.compute("sqrt(g)", grid=grid)["sqrt(g)"]) - areas = compress(grid, surface_integrals(grid, sqrt_g)) - np.testing.assert_allclose(areas, np.sort(areas)) + + def test(stellarator): + eq = desc.io.load(load_from=str(stellarator["desc_h5_path"]))[-1] + grid = ConcentricGrid(L=11, M=11, N=9, NFP=eq.NFP, sym=True) + sqrt_g = np.abs(eq.compute("sqrt(g)", grid=grid)["sqrt(g)"]) + areas = compress(grid, surface_integrals(grid, sqrt_g)) + np.testing.assert_allclose(areas, np.sort(areas)) + + test(DSHAPE_current) + test(HELIOTRON_vac) @pytest.mark.unit - def test_surface_averages_identity_op(self): + @pytest.mark.solve + def test_surface_averages_identity_op(self, DSHAPE_current, HELIOTRON_vac): """Test that surface averages of flux functions are identity operations.""" - eq = get("W7-X") - grid = ConcentricGrid(L=11, M=11, N=9, NFP=eq.NFP, sym=eq.sym) - data = eq.compute("p", grid=grid) - data = eq.compute("sqrt(g)", grid=grid, data=data) - pressure_average = surface_averages(grid, data["p"], data["sqrt(g)"]) - np.testing.assert_allclose(data["p"], pressure_average) + + def test(stellarator): + eq = desc.io.load(load_from=str(stellarator["desc_h5_path"]))[-1] + grid = ConcentricGrid(L=11, M=11, N=9, NFP=eq.NFP, sym=True) + data = eq.compute("p", grid=grid) + data = eq.compute("sqrt(g)", grid=grid, data=data) + pressure_average = surface_averages(grid, data["p"], data["sqrt(g)"]) + np.testing.assert_allclose(data["p"], pressure_average) + + test(DSHAPE_current) + test(HELIOTRON_vac) @pytest.mark.unit - def test_surface_averages_homomorphism(self): + @pytest.mark.solve + def test_surface_averages_homomorphism(self, DSHAPE_current, HELIOTRON_vac): """Test that surface averages of flux functions are additive homomorphisms. Meaning average(a + b) = average(a) + average(b). """ - eq = get("W7-X") - grid = ConcentricGrid(L=11, M=11, N=9, NFP=eq.NFP, sym=eq.sym) - data = eq.compute("|B|_t", grid=grid) - a = surface_averages(grid, data["|B|"], data["sqrt(g)"]) - b = surface_averages(grid, data["|B|_t"], data["sqrt(g)"]) - a_plus_b = surface_averages(grid, data["|B|"] + data["|B|_t"], data["sqrt(g)"]) - np.testing.assert_allclose(a_plus_b, a + b) + + def test(stellarator): + eq = desc.io.load(load_from=str(stellarator["desc_h5_path"]))[-1] + grid = ConcentricGrid(L=11, M=11, N=9, NFP=eq.NFP, sym=True) + data = eq.compute("|B|_t", grid=grid) + a = surface_averages(grid, data["|B|"], data["sqrt(g)"]) + b = surface_averages(grid, data["|B|_t"], data["sqrt(g)"]) + a_plus_b = surface_averages( + grid, data["|B|"] + data["|B|_t"], data["sqrt(g)"] + ) + np.testing.assert_allclose(a_plus_b, a + b) + + test(DSHAPE_current) + test(HELIOTRON_vac) @pytest.mark.unit - def test_surface_averages_shortcut(self): + @pytest.mark.solve + def test_surface_averages_shortcut(self, DSHAPE_current, HELIOTRON_vac): """Test that surface_averages on single rho surface matches mean() shortcut.""" - eq = get("W7-X") - rho = np.array((1 - 1e-4) * np.random.default_rng().random() + 1e-4) - grid = LinearGrid(M=eq.M_grid, N=eq.N_grid, NFP=eq.NFP, sym=eq.sym, rho=rho) - data = eq.compute("|B|", grid=grid) - - np.testing.assert_allclose( - surface_averages(grid, data["|B|"], data["sqrt(g)"]), - np.mean(data["sqrt(g)"] * data["|B|"]) / np.mean(data["sqrt(g)"]), - err_msg="average with sqrt(g) fail", - ) - np.testing.assert_allclose( - surface_averages(grid, data["|B|"]), - np.mean(data["|B|"]), - err_msg="average without sqrt(g) fail", - ) + + def test(stellarator): + eq = desc.io.load(load_from=str(stellarator["desc_h5_path"]))[-1] + rho = np.array((1 - 1e-4) * np.random.default_rng().random() + 1e-4) + grid = LinearGrid(M=eq.M_grid, N=eq.N_grid, NFP=eq.NFP, sym=eq.sym, rho=rho) + data = eq.compute("|B|", grid=grid) + + np.testing.assert_allclose( + surface_averages(grid, data["|B|"], data["sqrt(g)"]), + np.mean(data["sqrt(g)"] * data["|B|"]) / np.mean(data["sqrt(g)"]), + err_msg="average with sqrt(g) fail", + ) + np.testing.assert_allclose( + surface_averages(grid, data["|B|"]), + np.mean(data["|B|"]), + err_msg="average without sqrt(g) fail", + ) + + test(DSHAPE_current) + test(HELIOTRON_vac) @pytest.mark.unit def test_min_max(self): diff --git a/tests/test_constrain_current.py b/tests/test_constrain_current.py index fcfa47a76a..f26eda34c6 100644 --- a/tests/test_constrain_current.py +++ b/tests/test_constrain_current.py @@ -6,8 +6,6 @@ import desc.io from desc.compute import compute as compute_fun from desc.compute import get_params, get_profiles, get_transforms -from desc.compute.utils import compress -from desc.examples import get from desc.grid import ConcentricGrid, LinearGrid, QuadratureGrid @@ -117,24 +115,3 @@ def test(stellarator, grid_type): # works with any stellarators in desc/examples with fixed iota profiles test(DSHAPE, e) test(HELIOTRON_vac, e) - - @pytest.mark.unit - @pytest.mark.solve - def test_compute_rotational_transform_axis(self, DSHAPE_current): - """Test that the limit at rho=0 axis is computed accurately.""" - # test should be done on equilibria with fixed current profiles - def test(eq, expected_at_axis): - delta = 1e-3 - epsilon = 1e-6 - rho = np.linspace(0, delta, 10) - lg = LinearGrid(rho=rho, M=5, N=5, NFP=eq.NFP, sym=eq.sym) - iota = compress(lg, eq.compute("iota", grid=lg)["iota"]) - # check continuity - assert np.isfinite(iota).all() - np.testing.assert_allclose(iota[:-1], iota[1:], atol=epsilon) - # check value - np.testing.assert_allclose(iota[0], expected_at_axis, atol=epsilon) - - eq = desc.io.load(load_from=str(DSHAPE_current["desc_h5_path"]))[-1] - test(eq, -0.994167) - test(get("QAS"), -0.360675) From 16e4dffd79827808aa7062001fc38c149dddb6ef Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Thu, 8 Jun 2023 14:23:47 -0500 Subject: [PATCH 25/31] fix import order --- tests/test_axis_limits.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_axis_limits.py b/tests/test_axis_limits.py index 060836973f..2310f64419 100644 --- a/tests/test_axis_limits.py +++ b/tests/test_axis_limits.py @@ -3,11 +3,11 @@ import numpy as np import pytest +import desc.io from desc.compute.utils import compress, surface_averages from desc.equilibrium import Equilibrium from desc.examples import get from desc.grid import LinearGrid -import desc.io class TestAxisLimits: From b4903da1865ff0295aca8eae695e887d35558a07 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Wed, 14 Jun 2023 00:00:44 -0500 Subject: [PATCH 26/31] Address PR review comments --- desc/compute/__init__.py | 17 +++-- desc/compute/_profiles.py | 104 +++++++++++++++++------------- desc/equilibrium/configuration.py | 4 +- desc/objectives/_geometry.py | 3 - desc/plotting.py | 1 - docs/variables.csv | 12 ++-- tests/test_axis_limits.py | 9 ++- 7 files changed, 83 insertions(+), 67 deletions(-) diff --git a/desc/compute/__init__.py b/desc/compute/__init__.py index a935306ae0..96c53d8dd2 100644 --- a/desc/compute/__init__.py +++ b/desc/compute/__init__.py @@ -51,7 +51,7 @@ ) -# rather than having to recursively compute the full dependencies every time we +# Rather than having to recursively compute the full dependencies every time we # compute something, it's easier to just do it once for all quantities when we first # import the compute module. def _build_data_index(): @@ -66,8 +66,12 @@ def _build_data_index(): full_with_axis_data = get_data_deps(key, True) if len(full["data"]) >= len(full_with_axis_data): - # Then this quantity lacks dependencies that would only be required - # to evaluate this quantity's limit at the magnetic axis. + # It is possible for some quantity and all its dependencies to + # not depend on anything extra to evaluate its limit at the magnetic + # axis (e.g. the quantity rho). In this case, + # data_index[key]["full_dependencies"] will be identical to + # data_index[key]["full_with_axis_dependencies"], + # so we assign the same reference to avoid storing a copy. full_with_axis = full else: full_with_axis = { @@ -77,10 +81,9 @@ def _build_data_index(): "profiles": get_profiles(key, True), } for _key, val in full_with_axis.items(): - if _key == "transforms": - continue - if len(full[_key]) >= len(val): - # one is a deep copy of the other; dereference to save memory + if full[_key] == val: + # Nothing extra was needed to evaluate this quantity's limit. + # One is a copy of the other; dereference to save memory. full_with_axis[_key] = full[_key] data_index[key]["full_with_axis_dependencies"] = full_with_axis diff --git a/desc/compute/_profiles.py b/desc/compute/_profiles.py index 94fedda6a0..06ed378424 100644 --- a/desc/compute/_profiles.py +++ b/desc/compute/_profiles.py @@ -478,7 +478,7 @@ def _gradp_mag_vol(params, transforms, profiles, data, **kwargs): transforms={"grid": []}, profiles=["iota", "current"], coordinates="r", - data=["psi_r", "iota_0_num", "iota_0_den"], + data=["psi_r", "iota_zero_current_num", "iota_zero_current_den"], axis_limit_data=["psi_rr"], ) def _iota(params, transforms, profiles, data, **kwargs): @@ -509,7 +509,9 @@ def _iota(params, transforms, profiles, data, **kwargs): current_term = put( current_term, transforms["grid"].axis, limit[transforms["grid"].axis] ) - data["iota"] = (current_term + data["iota_0_num"]) / data["iota_0_den"] + data["iota"] = (current_term + data["iota_zero_current_num"]) / data[ + "iota_zero_current_den" + ] return data @@ -528,10 +530,10 @@ def _iota(params, transforms, profiles, data, **kwargs): "iota", "psi_r", "psi_rr", - "iota_0_num", - "iota_0_num_r", - "iota_0_den", - "iota_0_den_r", + "iota_zero_current_num", + "iota_zero_current_num_r", + "iota_zero_current_den", + "iota_zero_current_den_r", ], ) def _iota_r(params, transforms, profiles, data, **kwargs): @@ -556,8 +558,10 @@ def _iota_r(params, transforms, profiles, data, **kwargs): - current_term * data["psi_rr"] ) / data["psi_r"] data["iota_r"] = ( - current_term_r + data["iota_0_num_r"] - data["iota"] * data["iota_0_den_r"] - ) / data["iota_0_den"] + current_term_r + + data["iota_zero_current_num_r"] + - data["iota"] * data["iota_zero_current_den_r"] + ) / data["iota_zero_current_den"] return data @@ -578,12 +582,12 @@ def _iota_r(params, transforms, profiles, data, **kwargs): "psi_r", "psi_rr", "psi_rrr", - "iota_0_num", - "iota_0_num_r", - "iota_0_num_rr", - "iota_0_den", - "iota_0_den_r", - "iota_0_den_rr", + "iota_zero_current_num", + "iota_zero_current_num_r", + "iota_zero_current_num_rr", + "iota_zero_current_den", + "iota_zero_current_den_r", + "iota_zero_current_den_rr", ], ) def _iota_rr(params, transforms, profiles, data, **kwargs): @@ -614,19 +618,19 @@ def _iota_rr(params, transforms, profiles, data, **kwargs): ) / data["psi_r"] data["iota_rr"] = ( current_term_rr - + data["iota_0_num_rr"] - - 2 * data["iota_r"] * data["iota_0_den_r"] - - data["iota"] * data["iota_0_den_rr"] - ) / data["iota_0_den"] + + data["iota_zero_current_num_rr"] + - 2 * data["iota_r"] * data["iota_zero_current_den_r"] + - data["iota"] * data["iota_zero_current_den_rr"] + ) / data["iota_zero_current_den"] return data @register_compute_fun( - name="iota_0_num", + name="iota_zero_current_num", label="\\iota_{0} numerator", units="m^{-1}", units_long="inverse meters", - description="0 current rotational transform numerator", + description="Zero toroidal current rotational transform numerator", dim=1, params=[], transforms={"grid": []}, @@ -642,11 +646,11 @@ def _iota_rr(params, transforms, profiles, data, **kwargs): "sqrt(g)_rr", ], ) -def _iota_0_num(params, transforms, profiles, data, **kwargs): +def _iota_zero_current_num(params, transforms, profiles, data, **kwargs): num = ( data["lambda_z"] * data["g_tt"] - (1 + data["lambda_t"]) * data["g_tz"] ) / data["sqrt(g)"] - data["iota_0_num"] = surface_averages(transforms["grid"], num) + data["iota_zero_current_num"] = surface_averages(transforms["grid"], num) if transforms["grid"].axis.size: limit = ( @@ -660,19 +664,22 @@ def _iota_0_num(params, transforms, profiles, data, **kwargs): "sqrt(g)_r" ] limit = surface_averages(transforms["grid"], limit) - data["iota_0_num"] = put( - data["iota_0_num"], transforms["grid"].axis, limit[transforms["grid"].axis] + data["iota_zero_current_num"] = put( + data["iota_zero_current_num"], + transforms["grid"].axis, + limit[transforms["grid"].axis], ) return data @register_compute_fun( - name="iota_0_num_r", + name="iota_zero_current_num_r", label="\\partial_{\\rho} \\iota_{0} numerator", units="m^{-1}", units_long="inverse meters", - description="0 current rotational transform numerator, first radial derivative", + description="Zero toroidal current rotational transform numerator," + " first radial derivative", dim=1, params=[], transforms={"grid": []}, @@ -691,7 +698,7 @@ def _iota_0_num(params, transforms, profiles, data, **kwargs): "sqrt(g)_r", ], ) -def _iota_0_num_r(params, transforms, profiles, data, **kwargs): +def _iota_zero_current_num_r(params, transforms, profiles, data, **kwargs): num = ( data["lambda_z"] * data["g_tt"] - (1 + data["lambda_t"]) * data["g_tz"] ) / data["sqrt(g)"] @@ -702,17 +709,18 @@ def _iota_0_num_r(params, transforms, profiles, data, **kwargs): - (1 + data["lambda_t"]) * data["g_tz_r"] - num * data["sqrt(g)_r"] ) / data["sqrt(g)"] - data["iota_0_num_r"] = surface_averages(transforms["grid"], num_r) + data["iota_zero_current_num_r"] = surface_averages(transforms["grid"], num_r) # TODO: limit at axis return data @register_compute_fun( - name="iota_0_num_rr", + name="iota_zero_current_num_rr", label="\\partial_{\\rho\\rho} \\iota_{0} numerator", units="m^{-1}", units_long="inverse meters", - description="0 current rotational transform numerator, second radial derivative", + description="Zero toroidal current rotational transform numerator," + " second radial derivative", dim=1, params=[], transforms={"grid": []}, @@ -736,7 +744,7 @@ def _iota_0_num_r(params, transforms, profiles, data, **kwargs): "sqrt(g)_rr", ], ) -def _iota_0_num_rr(params, transforms, profiles, data, **kwargs): +def _iota_zero_current_num_rr(params, transforms, profiles, data, **kwargs): num = ( data["lambda_z"] * data["g_tt"] - (1 + data["lambda_t"]) * data["g_tz"] ) / data["sqrt(g)"] @@ -757,17 +765,17 @@ def _iota_0_num_rr(params, transforms, profiles, data, **kwargs): - 2 * num_r * data["sqrt(g)_r"] - num * data["sqrt(g)_rr"] ) / data["sqrt(g)"] - data["iota_0_num_rr"] = surface_averages(transforms["grid"], num_rr) + data["iota_zero_current_num_rr"] = surface_averages(transforms["grid"], num_rr) # TODO: limit at axis return data @register_compute_fun( - name="iota_0_den", + name="iota_zero_current_den", label="\\iota_{0} denominator", units="m^{-1}", units_long="inverse meters", - description="0 current rotational transform denominator", + description="Zero toroidal current rotational transform denominator", dim=1, params=[], transforms={"grid": []}, @@ -776,27 +784,30 @@ def _iota_0_num_rr(params, transforms, profiles, data, **kwargs): data=["g_tt", "sqrt(g)"], axis_limit_data=["g_tt_rr", "sqrt(g)_r"], ) -def _iota_0_den(params, transforms, profiles, data, **kwargs): +def _iota_zero_current_den(params, transforms, profiles, data, **kwargs): den = data["g_tt"] / data["sqrt(g)"] - data["iota_0_den"] = surface_averages(transforms["grid"], den) + data["iota_zero_current_den"] = surface_averages(transforms["grid"], den) if transforms["grid"].axis.size: limit = surface_averages( transforms["grid"], data["g_tt_rr"] / data["sqrt(g)_r"] ) - data["iota_0_den"] = put( - data["iota_0_den"], transforms["grid"].axis, limit[transforms["grid"].axis] + data["iota_zero_current_den"] = put( + data["iota_zero_current_den"], + transforms["grid"].axis, + limit[transforms["grid"].axis], ) return data @register_compute_fun( - name="iota_0_den_r", + name="iota_zero_current_den_r", label="\\partial_{\\rho} \\iota_{0} denominator", units="m^{-1}", units_long="inverse meters", - description="0 current rotational transform denominator, first radial derivative", + description="Zero toroidal current rotational transform denominator," + " first radial derivative", dim=1, params=[], transforms={"grid": []}, @@ -804,20 +815,21 @@ def _iota_0_den(params, transforms, profiles, data, **kwargs): coordinates="r", data=["g_tt", "g_tt_r", "sqrt(g)", "sqrt(g)_r"], ) -def _iota_0_den_r(params, transforms, profiles, data, **kwargs): +def _iota_zero_current_den_r(params, transforms, profiles, data, **kwargs): den = data["g_tt"] / data["sqrt(g)"] den_r = (data["g_tt_r"] - den * data["sqrt(g)_r"]) / data["sqrt(g)"] - data["iota_0_den_r"] = surface_averages(transforms["grid"], den_r) + data["iota_zero_current_den_r"] = surface_averages(transforms["grid"], den_r) # TODO: limit at axis return data @register_compute_fun( - name="iota_0_den_rr", + name="iota_zero_current_den_rr", label="\\partial_{\\rho\\rho} \\iota_{0} denominator", units="m^{-1}", units_long="inverse meters", - description="0 current rotational transform denominator, second radial derivative", + description="Zero toroidal current rotational transform denominator," + " second radial derivative", dim=1, params=[], transforms={"grid": []}, @@ -825,13 +837,13 @@ def _iota_0_den_r(params, transforms, profiles, data, **kwargs): coordinates="r", data=["g_tt", "g_tt_r", "g_tt_rr", "sqrt(g)", "sqrt(g)_r", "sqrt(g)_rr"], ) -def _iota_0_den_rr(params, transforms, profiles, data, **kwargs): +def _iota_zero_current_den_rr(params, transforms, profiles, data, **kwargs): den = data["g_tt"] / data["sqrt(g)"] den_r = (data["g_tt_r"] - den * data["sqrt(g)_r"]) / data["sqrt(g)"] den_rr = ( data["g_tt_rr"] - 2 * den_r * data["sqrt(g)_r"] - den * data["sqrt(g)_rr"] ) / data["sqrt(g)"] - data["iota_0_den_rr"] = surface_averages(transforms["grid"], den_rr) + data["iota_zero_current_den_rr"] = surface_averages(transforms["grid"], den_rr) # TODO: limit at axis return data diff --git a/desc/equilibrium/configuration.py b/desc/equilibrium/configuration.py index f08fc5ebc7..009a8eebbe 100644 --- a/desc/equilibrium/configuration.py +++ b/desc/equilibrium/configuration.py @@ -1135,6 +1135,8 @@ def compute( NFP=self.NFP, sym=self.sym, ) + # Todo: Pass in data0d as a seed once there are 1d quantities that + # depend on 0d quantities in data_index. data1d = compute_fun( dep1d, params=params, @@ -1142,7 +1144,7 @@ def compute( dep1d, grid1d.axis.size, eq=self, grid=grid1d, **kwargs ), profiles=get_profiles(dep1d, grid1d.axis.size, eq=self, grid=grid1d), - data=None, # Todo: pass in data0d? + data=None, **kwargs, ) # need to make this data broadcastable with the data on the original grid diff --git a/desc/objectives/_geometry.py b/desc/objectives/_geometry.py index f988ba1941..23ff152efd 100644 --- a/desc/objectives/_geometry.py +++ b/desc/objectives/_geometry.py @@ -486,7 +486,6 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = surface_grid.num_nodes self._data_keys = ["R", "phi", "Z"] - # Todo: review this please self._args = get_params( self._data_keys, has_axis=plasma_grid.axis.size or surface_grid.axis.size ) @@ -499,14 +498,12 @@ def build(self, eq, use_jit=True, verbose=1): self._surface_coords = self._surface.compute_coordinates( grid=surface_grid, basis="xyz" ) - # Todo: review this please self._profiles = get_profiles( self._data_keys, has_axis=plasma_grid.axis.size or surface_grid.axis.size, eq=eq, grid=plasma_grid, ) - # Todo: review this please self._transforms = get_transforms( self._data_keys, has_axis=plasma_grid.axis.size or surface_grid.axis.size, diff --git a/desc/plotting.py b/desc/plotting.py index ad1bc4d8eb..494e350e8b 100644 --- a/desc/plotting.py +++ b/desc/plotting.py @@ -2306,7 +2306,6 @@ def plot_boozer_surface( N_booz = kwargs.pop("N_booz", 2 * eq.N) title_font_size = kwargs.pop("title_font_size", None) - # Todo: review this please transforms_compute = get_transforms( "|B|_mn", has_axis=grid_compute.axis.size, diff --git a/docs/variables.csv b/docs/variables.csv index 4cf17bcfdb..27d449aa74 100644 --- a/docs/variables.csv +++ b/docs/variables.csv @@ -383,12 +383,12 @@ Name,Label,Units,Description,Module ``iota``,:math:`\iota`,None,Rotational transform (normalized by 2pi),``desc.compute._profiles`` ``iota_r``,:math:`\partial_{\rho} \iota`,None,"Rotational transform (normalized by 2pi), first radial derivative",``desc.compute._profiles`` ``iota_rr``,:math:`\partial_{\rho\rho} \iota`,None,"Rotational transform (normalized by 2pi), second radial derivative",``desc.compute._profiles`` -``iota_0_num``,:math:`\iota_{0} numerator`,inverse meters,0 current rotational transform numerator,``desc.compute._profiles`` -``iota_0_num_r``,:math:`\partial_{\rho} \iota_{0} numerator`,inverse meters,"0 current rotational transform numerator, first radial derivative",``desc.compute._profiles`` -``iota_0_num_rr``,:math:`\partial_{\rho\rho} \iota_{0} numerator`,inverse meters,"0 current rotational transform numerator, second radial derivative",``desc.compute._profiles`` -``iota_0_den``,:math:`\iota_{0} denominator`,inverse meters,0 current rotational transform denominator,``desc.compute._profiles`` -``iota_0_den_r``,:math:`\partial_{\rho} \iota_{0} denominator`,inverse meters,"0 current rotational transform denominator, first radial derivative",``desc.compute._profiles`` -``iota_0_den_rr``,:math:`\partial_{\rho\rho} \iota_{0} denominator`,inverse meters,"0 current rotational transform denominator, second radial derivative",``desc.compute._profiles`` +``iota_zero_current_num``,:math:`\iota_{0} numerator`,inverse meters,Zero toroidal current rotational transform numerator,``desc.compute._profiles`` +``iota_zero_current_num_r``,:math:`\partial_{\rho} \iota_{0} numerator`,inverse meters,"Zero toroidal current rotational transform numerator, first radial derivative",``desc.compute._profiles`` +``iota_zero_current_num_rr``,:math:`\partial_{\rho\rho} \iota_{0} numerator`,inverse meters,"Zero toroidal current rotational transform numerator, second radial derivative",``desc.compute._profiles`` +``iota_zero_current_den``,:math:`\iota_{0} denominator`,inverse meters,Zero toroidal current rotational transform denominator,``desc.compute._profiles`` +``iota_zero_current_den_r``,:math:`\partial_{\rho} \iota_{0} denominator`,inverse meters,"Zero toroidal current rotational transform denominator, first radial derivative",``desc.compute._profiles`` +``iota_zero_current_den_rr``,:math:`\partial_{\rho\rho} \iota_{0} denominator`,inverse meters,"Zero toroidal current rotational transform denominator, second radial derivative",``desc.compute._profiles`` ``q``,:math:`q = 1/\iota`,None,"Safety factor 'q', inverse of rotational transform.",``desc.compute._profiles`` ``I``,:math:`I`,Tesla * meters,Covariant poloidal component of magnetic field in Boozer coordinates (proportional to toroidal current),``desc.compute._profiles`` ``I_r``,:math:`\partial_{\rho} I`,Tesla * meters,"Covariant poloidal component of magnetic field in Boozer coordinates (proportional to toroidal current), derivative wrt radial coordinate",``desc.compute._profiles`` diff --git a/tests/test_axis_limits.py b/tests/test_axis_limits.py index 2310f64419..82faa97726 100644 --- a/tests/test_axis_limits.py +++ b/tests/test_axis_limits.py @@ -53,7 +53,8 @@ def test(eq, expected_at_axis): b_mag_fsa_no_sqrt_g[0], expected_at_axis, atol=epsilon ) - test(get("W7-X"), 2.708108) + value_computed_close_to_axis = 2.708108 + test(get("W7-X"), value_computed_close_to_axis) @pytest.mark.unit @pytest.mark.solve @@ -73,5 +74,7 @@ def test(eq, expected_at_axis): np.testing.assert_allclose(iota[0], expected_at_axis, atol=epsilon) eq = desc.io.load(load_from=str(DSHAPE_current["desc_h5_path"]))[-1] - test(eq, -0.994167) - test(get("QAS"), -0.360675) + value_computed_close_to_axis = -0.994167 + test(eq, value_computed_close_to_axis) + value_computed_close_to_axis = -0.360675 + test(get("QAS"), value_computed_close_to_axis) From 4b4cea6f74b66ebf3151bbc9770d7e6519670118 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Wed, 14 Jun 2023 00:10:49 -0500 Subject: [PATCH 27/31] Resolve flake commented code --- desc/compute/__init__.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/desc/compute/__init__.py b/desc/compute/__init__.py index 96c53d8dd2..c5a15ad2a5 100644 --- a/desc/compute/__init__.py +++ b/desc/compute/__init__.py @@ -66,12 +66,11 @@ def _build_data_index(): full_with_axis_data = get_data_deps(key, True) if len(full["data"]) >= len(full_with_axis_data): - # It is possible for some quantity and all its dependencies to - # not depend on anything extra to evaluate its limit at the magnetic - # axis (e.g. the quantity rho). In this case, - # data_index[key]["full_dependencies"] will be identical to - # data_index[key]["full_with_axis_dependencies"], - # so we assign the same reference to avoid storing a copy. + # Then this quantity and all its dependencies do not need anything + # extra to evaluate its limit at the magnetic axis. + # The dependencies in the `full` dictionary and the `full_with_axis` + # dictionary will be identical, so we assign the same reference to + # avoid storing a copy. full_with_axis = full else: full_with_axis = { From ebedc1f0750b0a9b493811f39d565f9c5a328a68 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Wed, 14 Jun 2023 00:17:38 -0500 Subject: [PATCH 28/31] missed merge conflict in function name --- tests/test_objective_funs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_objective_funs.py b/tests/test_objective_funs.py index 865d1a9fb7..8e4c826334 100644 --- a/tests/test_objective_funs.py +++ b/tests/test_objective_funs.py @@ -577,7 +577,7 @@ def test_field_scale_length(): @pytest.mark.unit -def test_objective_print(capsys): +def test_profile_objective_print(capsys): """Test that the profile objectives print correctly.""" eq = Equilibrium() grid = LinearGrid(L=10, M=10, N=5, axis=False) From 9a7f3c17829987bb0e95dcb161f6326bf291849a Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Wed, 14 Jun 2023 13:46:58 -0500 Subject: [PATCH 29/31] update get_params api --- desc/compute/__init__.py | 16 +++++----- desc/compute/utils.py | 27 +++++++--------- desc/equilibrium/configuration.py | 20 +++++------- desc/equilibrium/coords.py | 4 +-- desc/objectives/_bootstrap.py | 8 ++--- desc/objectives/_equilibrium.py | 40 +++++++++--------------- desc/objectives/_generic.py | 30 +++++++----------- desc/objectives/_geometry.py | 52 ++++++++++++------------------- desc/objectives/_qs.py | 29 +++++++---------- desc/objectives/_stability.py | 16 ++++------ desc/plotting.py | 6 ++-- docs/adding_objectives.rst | 14 ++------- tests/test_constrain_current.py | 20 ++++++------ tests/test_objective_funs.py | 7 +---- tests/test_transform.py | 2 +- 15 files changed, 113 insertions(+), 178 deletions(-) diff --git a/desc/compute/__init__.py b/desc/compute/__init__.py index c5a15ad2a5..31e4dc9f36 100644 --- a/desc/compute/__init__.py +++ b/desc/compute/__init__.py @@ -57,14 +57,14 @@ def _build_data_index(): for key in data_index.keys(): full = { - "data": get_data_deps(key, False), - "transforms": get_derivs(key, False), - "params": get_params(key, False), - "profiles": get_profiles(key, False), + "data": get_data_deps(key, has_axis=False), + "transforms": get_derivs(key, has_axis=False), + "params": get_params(key, has_axis=False), + "profiles": get_profiles(key, has_axis=False), } data_index[key]["full_dependencies"] = full - full_with_axis_data = get_data_deps(key, True) + full_with_axis_data = get_data_deps(key, has_axis=True) if len(full["data"]) >= len(full_with_axis_data): # Then this quantity and all its dependencies do not need anything # extra to evaluate its limit at the magnetic axis. @@ -75,9 +75,9 @@ def _build_data_index(): else: full_with_axis = { "data": full_with_axis_data, - "transforms": get_derivs(key, True), - "params": get_params(key, True), - "profiles": get_profiles(key, True), + "transforms": get_derivs(key, has_axis=True), + "params": get_params(key, has_axis=True), + "profiles": get_profiles(key, has_axis=True), } for _key, val in full_with_axis.items(): if full[_key] == val: diff --git a/desc/compute/utils.py b/desc/compute/utils.py index 15b7f8aac2..9054e86a9d 100644 --- a/desc/compute/utils.py +++ b/desc/compute/utils.py @@ -128,7 +128,7 @@ def _compute(names, params, transforms, profiles, data=None, **kwargs): return data -def get_data_deps(keys, has_axis): +def get_data_deps(keys, has_axis=False): """Get list of data keys needed to compute a given quantity. Parameters @@ -170,7 +170,7 @@ def _get_deps_1_key(key): return sorted(list(set(out))) -def get_derivs(keys, has_axis): +def get_derivs(keys, has_axis=False): """Get dict of derivative orders needed to compute a given quantity. Parameters @@ -213,19 +213,19 @@ def _get_derivs_1_key(key): return {key: np.unique(val, axis=0).tolist() for key, val in derivs.items()} -def get_profiles(keys, has_axis, eq=None, grid=None, **kwargs): +def get_profiles(keys, eq=None, grid=None, has_axis=False, **kwargs): """Get profiles needed to compute a given quantity on a given grid. Parameters ---------- keys : str or array-like of str Name of the desired quantity from the data index. - has_axis : bool - Whether the grid to compute on has a node on the magnetic axis. eq : Equilibrium Equilibrium to compute quantity for. grid : Grid Grid to compute quantity on. + has_axis : bool + Whether the grid to compute on has a node on the magnetic axis. Returns ------- @@ -237,7 +237,7 @@ def get_profiles(keys, has_axis, eq=None, grid=None, **kwargs): """ keys = [keys] if isinstance(keys, str) else keys has_axis = has_axis or (grid is not None and grid.axis.size) - deps = list(keys) + get_data_deps(keys, has_axis) + deps = list(keys) + get_data_deps(keys, has_axis=has_axis) profs = [] for key in deps: profs += data_index[key]["dependencies"]["profiles"] @@ -256,17 +256,17 @@ def get_profiles(keys, has_axis, eq=None, grid=None, **kwargs): return profiles -def get_params(keys, has_axis, eq=None, **kwargs): +def get_params(keys, eq=None, has_axis=False, **kwargs): """Get parameters needed to compute a given quantity. Parameters ---------- keys : str or array-like of str Name of the desired quantity from the data index - has_axis : bool - Whether the grid to compute on has a node on the magnetic axis. eq : Equilibrium Equilibrium to compute quantity for. + has_axis : bool + Whether the grid to compute on has a node on the magnetic axis. Returns ------- @@ -276,7 +276,7 @@ def get_params(keys, has_axis, eq=None, **kwargs): otherwise, returns a dict of ndarray with keys for R_lmn, Z_lmn, etc. """ keys = [keys] if isinstance(keys, str) else keys - deps = list(keys) + get_data_deps(keys, has_axis) + deps = list(keys) + get_data_deps(keys, has_axis=has_axis) params = [] for key in deps: params += data_index[key]["dependencies"]["params"] @@ -287,15 +287,13 @@ def get_params(keys, has_axis, eq=None, **kwargs): return params -def get_transforms(keys, has_axis, eq, grid, **kwargs): +def get_transforms(keys, eq, grid, **kwargs): """Get transforms needed to compute a given quantity on a given grid. Parameters ---------- keys : str or array-like of str Name of the desired quantity from the data index - has_axis : bool - Whether the grid to compute on has a node on the magnetic axis. eq : Equilibrium Equilibrium to compute quantity for. grid : Grid @@ -312,8 +310,7 @@ def get_transforms(keys, has_axis, eq, grid, **kwargs): from desc.transform import Transform keys = [keys] if isinstance(keys, str) else keys - has_axis = has_axis or grid.axis.size - derivs = get_derivs(keys, has_axis) + derivs = get_derivs(keys, has_axis=grid.axis.size) transforms = {"grid": grid} for c in ["R", "L", "Z"]: if c in derivs: diff --git a/desc/equilibrium/configuration.py b/desc/equilibrium/configuration.py index 009a8eebbe..276eebcc7b 100644 --- a/desc/equilibrium/configuration.py +++ b/desc/equilibrium/configuration.py @@ -1094,13 +1094,11 @@ def compute( grid = QuadratureGrid(self.L_grid, self.M_grid, self.N_grid, self.NFP) if params is None: - params = get_params(names, grid.axis.size, eq=self) + params = get_params(names, eq=self, has_axis=grid.axis.size) if profiles is None: - profiles = get_profiles(names, grid.axis.size, eq=self, grid=grid) + profiles = get_profiles(names, eq=self, grid=grid) if transforms is None: - transforms = get_transforms( - names, grid.axis.size, eq=self, grid=grid, **kwargs - ) + transforms = get_transforms(names, eq=self, grid=grid, **kwargs) if data is None: data = {} @@ -1116,10 +1114,8 @@ def compute( data0d = compute_fun( dep0d, params=params, - transforms=get_transforms( - dep0d, grid0d.axis.size, eq=self, grid=grid0d, **kwargs - ), - profiles=get_profiles(dep0d, grid0d.axis.size, eq=self, grid=grid0d), + transforms=get_transforms(dep0d, eq=self, grid=grid0d, **kwargs), + profiles=get_profiles(dep0d, eq=self, grid=grid0d), data=None, **kwargs, ) @@ -1140,10 +1136,8 @@ def compute( data1d = compute_fun( dep1d, params=params, - transforms=get_transforms( - dep1d, grid1d.axis.size, eq=self, grid=grid1d, **kwargs - ), - profiles=get_profiles(dep1d, grid1d.axis.size, eq=self, grid=grid1d), + transforms=get_transforms(dep1d, eq=self, grid=grid1d, **kwargs), + profiles=get_profiles(dep1d, eq=self, grid=grid1d), data=None, **kwargs, ) diff --git a/desc/equilibrium/coords.py b/desc/equilibrium/coords.py index 8fa2a9282a..2b19803b55 100644 --- a/desc/equilibrium/coords.py +++ b/desc/equilibrium/coords.py @@ -317,7 +317,7 @@ def body_fun(k_rhok_thetak_Rk_Zk): def is_nested(eq, grid=None, R_lmn=None, Z_lmn=None, L_lmn=None, msg=None): """Check that an equilibrium has properly nested flux surfaces in a plane. - Does so by checking coordianate Jacobian (sqrt(g)) sign. + Does so by checking coordinate Jacobian (sqrt(g)) sign. If coordinate Jacobian switches sign somewhere in the volume, this indicates that it is zero at some point, meaning surfaces are touching and the equilibrium is not nested. @@ -352,7 +352,7 @@ def is_nested(eq, grid=None, R_lmn=None, Z_lmn=None, L_lmn=None, msg=None): if grid is None: grid = QuadratureGrid(eq.L_grid, eq.M_grid, eq.N_grid, eq.NFP) - transforms = get_transforms("sqrt(g)_PEST", grid.axis.size, eq=eq, grid=grid) + transforms = get_transforms("sqrt(g)_PEST", eq=eq, grid=grid) data = compute_fun( "sqrt(g)_PEST", params={ diff --git a/desc/objectives/_bootstrap.py b/desc/objectives/_bootstrap.py index 583878be1d..ec3bbb338d 100644 --- a/desc/objectives/_bootstrap.py +++ b/desc/objectives/_bootstrap.py @@ -123,7 +123,7 @@ def build(self, eq, use_jit=True, verbose=1): ), "Helicity toroidal mode number should be 0 (QA) or +/- NFP (QH)" self._dim_f = grid.num_rho self._data_keys = ["", " Redl"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) if eq.electron_temperature is None: raise RuntimeError( @@ -176,10 +176,8 @@ def build(self, eq, use_jit=True, verbose=1): print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: diff --git a/desc/objectives/_equilibrium.py b/desc/objectives/_equilibrium.py index af3ae80c07..43891f62e5 100644 --- a/desc/objectives/_equilibrium.py +++ b/desc/objectives/_equilibrium.py @@ -137,17 +137,15 @@ def build(self, eq, use_jit=True, verbose=1): "F_helical", "|e^helical|", ] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: @@ -315,17 +313,15 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_nodes self._data_keys = ["F_rho", "|grad(rho)|", "sqrt(g)"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: @@ -490,17 +486,15 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_nodes self._data_keys = ["F_helical", "|e^helical|", "sqrt(g)"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: @@ -676,17 +670,15 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = 1 self._data_keys = ["W"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: @@ -855,17 +847,15 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = 3 * grid.num_nodes self._data_keys = ["J^rho", "J^theta", "J^zeta", "sqrt(g)"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: diff --git a/desc/objectives/_generic.py b/desc/objectives/_generic.py index 2959fe6663..afccaadb48 100644 --- a/desc/objectives/_generic.py +++ b/desc/objectives/_generic.py @@ -146,11 +146,9 @@ def getvars(fun): self._dim_f = jax.eval_shape(self._fun_wrapped, dummy_data).size self._scalar = self._dim_f == 1 - self._args = get_params(self._data_keys, grid.axis.size) - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) super().build(eq=eq, use_jit=use_jit, verbose=verbose) def compute(self, *args, **kwargs): @@ -266,9 +264,9 @@ def build(self, eq, use_jit=True, verbose=1): else: self._dim_f = grid.num_nodes * data_index[self.f]["dim"] self._scalar = False - self._args = get_params(self.f, grid.axis.size) - self._profiles = get_profiles(self.f, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms(self.f, grid.axis.size, eq=eq, grid=grid) + self._args = get_params(self.f, has_axis=grid.axis.size) + self._profiles = get_profiles(self.f, eq=eq, grid=grid) + self._transforms = get_transforms(self.f, eq=eq, grid=grid) super().build(eq=eq, use_jit=use_jit, verbose=verbose) def compute(self, *args, **kwargs): @@ -386,17 +384,15 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_rho self._data_keys = ["current"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: @@ -565,17 +561,15 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_rho self._data_keys = ["iota"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: diff --git a/desc/objectives/_geometry.py b/desc/objectives/_geometry.py index 5b7670fb65..dfa7aa7505 100644 --- a/desc/objectives/_geometry.py +++ b/desc/objectives/_geometry.py @@ -95,17 +95,15 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = 1 self._data_keys = ["R0/a"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: @@ -218,17 +216,15 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = 1 self._data_keys = ["a_major/a_minor"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: @@ -341,17 +337,15 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = 1 self._data_keys = ["V"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: @@ -548,15 +542,15 @@ def build(self, eq, use_jit=True, verbose=1): ) self._profiles = get_profiles( self._data_keys, - has_axis=plasma_grid.axis.size or surface_grid.axis.size, eq=eq, grid=plasma_grid, + has_axis=plasma_grid.axis.size or surface_grid.axis.size, ) self._transforms = get_transforms( self._data_keys, - has_axis=plasma_grid.axis.size or surface_grid.axis.size, eq=eq, grid=plasma_grid, + has_axis=plasma_grid.axis.size or surface_grid.axis.size, ) timer.stop("Precomputing transforms") @@ -686,17 +680,15 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_nodes self._data_keys = ["curvature_H"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: @@ -821,17 +813,15 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_nodes self._data_keys = ["curvature_k1", "curvature_k2"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: @@ -951,17 +941,15 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_nodes self._data_keys = ["L_grad(B)"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: diff --git a/desc/objectives/_qs.py b/desc/objectives/_qs.py index 0c78e82747..846c8f6aa8 100644 --- a/desc/objectives/_qs.py +++ b/desc/objectives/_qs.py @@ -117,7 +117,7 @@ def build(self, eq, use_jit=True, verbose=1): grid = self._grid self._data_keys = ["|B|_mn"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) assert grid.sym is False assert grid.num_rho == 1 @@ -127,10 +127,9 @@ def build(self, eq, use_jit=True, verbose=1): print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) self._transforms = get_transforms( self._data_keys, - grid.axis.size, eq=eq, grid=grid, M_booz=M_booz, @@ -304,17 +303,15 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_nodes self._data_keys = ["f_C"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: @@ -464,17 +461,15 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_nodes self._data_keys = ["f_T"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: @@ -606,17 +601,15 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_nodes self._data_keys = ["isodynamicity"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: diff --git a/desc/objectives/_stability.py b/desc/objectives/_stability.py index e6a31a3244..80b51e4f85 100644 --- a/desc/objectives/_stability.py +++ b/desc/objectives/_stability.py @@ -105,17 +105,15 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_rho self._data_keys = ["D_Mercier"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: @@ -298,17 +296,15 @@ def build(self, eq, use_jit=True, verbose=1): self._dim_f = grid.num_rho self._data_keys = ["magnetic well"] - self._args = get_params(self._data_keys, grid.axis.size) + self._args = get_params(self._data_keys, has_axis=grid.axis.size) timer = Timer() if verbose > 0: print("Precomputing transforms") timer.start("Precomputing transforms") - self._profiles = get_profiles(self._data_keys, grid.axis.size, eq=eq, grid=grid) - self._transforms = get_transforms( - self._data_keys, grid.axis.size, eq=eq, grid=grid - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=grid) timer.stop("Precomputing transforms") if verbose > 1: diff --git a/desc/plotting.py b/desc/plotting.py index 494e350e8b..c3ff2379f9 100644 --- a/desc/plotting.py +++ b/desc/plotting.py @@ -2160,7 +2160,7 @@ def plot_boozer_modes( for i, r in enumerate(rho): grid = LinearGrid(M=2 * eq.M_grid, N=2 * eq.N_grid, NFP=eq.NFP, rho=np.array(r)) transforms = get_transforms( - "|B|_mn", grid.axis.size, eq=eq, grid=grid, M_booz=M_booz, N_booz=N_booz + "|B|_mn", eq=eq, grid=grid, M_booz=M_booz, N_booz=N_booz ) with warnings.catch_warnings(): warnings.simplefilter("ignore") @@ -2308,7 +2308,6 @@ def plot_boozer_surface( transforms_compute = get_transforms( "|B|_mn", - has_axis=grid_compute.axis.size, eq=eq, grid=grid_compute, M_booz=M_booz, @@ -2316,7 +2315,6 @@ def plot_boozer_surface( ) transforms_plot = get_transforms( "|B|_mn", - has_axis=grid_plot.axis.size, eq=eq, grid=grid_plot, M_booz=M_booz, @@ -2484,7 +2482,7 @@ def plot_qs_error( # noqa: 16 fxn too complex grid = LinearGrid(M=eq.M_grid, N=eq.N_grid, NFP=eq.NFP, rho=np.array(r)) if fB: transforms = get_transforms( - "|B|_mn", grid.axis.size, eq=eq, grid=grid, M_booz=M_booz, N_booz=N_booz + "|B|_mn", eq=eq, grid=grid, M_booz=M_booz, N_booz=N_booz ) if i == 0: # only need to do this once for the first rho surface matrix, modes, idx = ptolemy_linear_transform( diff --git a/docs/adding_objectives.rst b/docs/adding_objectives.rst index 72a971b1e6..8dbef86cc9 100644 --- a/docs/adding_objectives.rst +++ b/docs/adding_objectives.rst @@ -127,18 +127,8 @@ A full example objective with comments describing key points is given below: # helper functions for building transforms etc to compute given # quantities. Alternatively, these can be created manually based on the # equilibrium, though in most cases that isn't necessary. - self._profiles = get_profiles( - self._data_keys, - has_axis=self.grid.axis.size, - eq=eq, - grid=self.grid, - ) - self._transforms = get_transforms( - self._data_keys, - has_axis=self.grid.axis.size, - eq=eq, - grid=self.grid, - ) + self._profiles = get_profiles(self._data_keys, eq=eq, grid=self.grid) + self._transforms = get_transforms(self._data_keys, eq=eq, grid=self.grid) timer.stop("Precomputing transforms") if verbose > 1: diff --git a/tests/test_constrain_current.py b/tests/test_constrain_current.py index f26eda34c6..e5016543c7 100644 --- a/tests/test_constrain_current.py +++ b/tests/test_constrain_current.py @@ -15,9 +15,9 @@ class _ExactValueProfile: def __init__(self, eq, grid): self.eq = eq self.grid = grid - self.transforms = get_transforms("current_rr", grid.axis.size, eq=eq, grid=grid) - self.profiles = get_profiles("current_rr", grid.axis.size, eq=eq, grid=grid) - self.params = get_params("current_rr", grid.axis.size, eq=eq) + self.transforms = get_transforms("current_rr", eq=eq, grid=grid) + self.profiles = get_profiles("current_rr", eq=eq, grid=grid) + self.params = get_params("current_rr", eq=eq, has_axis=grid.axis.size) def compute(self, params, dr, *args, **kwargs): if dr == 0: @@ -64,13 +64,15 @@ def test_compute_rotational_transform(self, DSHAPE, HELIOTRON_vac): def test(stellarator, grid_type): eq = desc.io.load(load_from=str(stellarator["desc_h5_path"]))[-1] - if grid_type == "quadrature": + if grid_type == "Quadrature": grid = QuadratureGrid(L=eq.L_grid, M=eq.M_grid, N=eq.N_grid, NFP=eq.NFP) - elif grid_type == "concentric": + elif grid_type == "Concentric": grid = ConcentricGrid( L=eq.L_grid, M=eq.M_grid, N=eq.N_grid, NFP=eq.NFP, sym=eq.sym ) else: + # Todo: set axis to true when every quantity's limit at the axis + # can be computed. grid = LinearGrid( L=eq.L_grid, M=eq.M_grid, @@ -88,7 +90,7 @@ def test(stellarator, grid_type): "c_l": None, "Psi": eq.Psi, } - transforms = get_transforms("iota_rr", grid.axis.size, eq=eq, grid=grid) + transforms = get_transforms("iota_rr", eq=eq, grid=grid) profiles = {"iota": None, "current": _ExactValueProfile(eq, grid)} # compute rotational transform from the above current profile, which # is monkey patched to return a surface average of B_theta in amps @@ -103,15 +105,15 @@ def test(stellarator, grid_type): # if the equilibrium fixes iota) benchmark_data = compute_fun( ["iota", "iota_r", "iota_rr"], - params=get_params("iota_rr", grid.axis.size, eq=eq), + params=get_params("iota_rr", eq=eq, has_axis=grid.axis.size), transforms=transforms, - profiles=get_profiles("iota_rr", grid.axis.size, eq=eq, grid=grid), + profiles=get_profiles("iota_rr", eq=eq, grid=grid), ) np.testing.assert_allclose(data["iota"], benchmark_data["iota"]) np.testing.assert_allclose(data["iota_r"], benchmark_data["iota_r"]) np.testing.assert_allclose(data["iota_rr"], benchmark_data["iota_rr"]) - for e in ("quadrature", "concentric", "linear"): + for e in ("Quadrature", "Concentric", "Linear"): # works with any stellarators in desc/examples with fixed iota profiles test(DSHAPE, e) test(HELIOTRON_vac, e) diff --git a/tests/test_objective_funs.py b/tests/test_objective_funs.py index 8e4c826334..bd41de30ba 100644 --- a/tests/test_objective_funs.py +++ b/tests/test_objective_funs.py @@ -210,12 +210,7 @@ def test_qh_boozer(self): # compute all amplitudes in the Boozer spectrum transforms = get_transforms( - "|B|_mn", - has_axis=grid.axis.size, - eq=eq, - grid=grid, - M_booz=M_booz, - N_booz=N_booz, + "|B|_mn", eq=eq, grid=grid, M_booz=M_booz, N_booz=N_booz ) matrix, modes, idx = ptolemy_linear_transform( transforms["B"].basis.modes, helicity=helicity, NFP=eq.NFP diff --git a/tests/test_transform.py b/tests/test_transform.py index 51f6c0ebf8..be67b06510 100644 --- a/tests/test_transform.py +++ b/tests/test_transform.py @@ -559,7 +559,7 @@ def test_Z_projection(self): axis=False, node_pattern=eq.node_pattern, ) - tr = get_transforms(data_keys, grid.axis.size, eq, grid) + tr = get_transforms(data_keys, eq, grid) f = np.ones(grid.num_nodes) assert tr["Z"].matrices["direct1"][0][0][0].shape == ( From 22597db9878046614812b526a41b7f0a6be43445 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Wed, 14 Jun 2023 13:50:44 -0500 Subject: [PATCH 30/31] make kwarg for consistency --- desc/compute/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desc/compute/utils.py b/desc/compute/utils.py index 9054e86a9d..86bdc93e83 100644 --- a/desc/compute/utils.py +++ b/desc/compute/utils.py @@ -194,7 +194,7 @@ def _get_derivs_1_key(key): return data_index[key]["full_with_axis_dependencies"]["transforms"] elif "full_dependencies" in data_index[key]: return data_index[key]["full_dependencies"]["transforms"] - deps = [key] + get_data_deps(key, has_axis) + deps = [key] + get_data_deps(key, has_axis=has_axis) derivs = {} for dep in deps: for key, val in data_index[dep]["dependencies"]["transforms"].items(): From c6161cf8d6c7363541a758f3492008aa0a1c58e5 Mon Sep 17 00:00:00 2001 From: Kaya Unalmis Date: Wed, 14 Jun 2023 15:49:46 -0500 Subject: [PATCH 31/31] Do Dr. Dudt's review suggestions --- desc/objectives/utils.py | 2 +- desc/plotting.py | 12 ++---------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/desc/objectives/utils.py b/desc/objectives/utils.py index 1230844d47..4d658adfec 100644 --- a/desc/objectives/utils.py +++ b/desc/objectives/utils.py @@ -315,7 +315,7 @@ def factorize_linear_constraints(constraints, objective_args): # noqa: C901 def project(x): """Project a full state vector into the reduced optimization vector.""" - x_reduced = jnp.matmul(Z.T, (x - xp)[unfixed_idx]) + x_reduced = Z.T @ ((x - xp)[unfixed_idx]) return jnp.atleast_1d(jnp.squeeze(x_reduced)) def recover(x_reduced): diff --git a/desc/plotting.py b/desc/plotting.py index c3ff2379f9..500b3e4d93 100644 --- a/desc/plotting.py +++ b/desc/plotting.py @@ -2307,18 +2307,10 @@ def plot_boozer_surface( title_font_size = kwargs.pop("title_font_size", None) transforms_compute = get_transforms( - "|B|_mn", - eq=eq, - grid=grid_compute, - M_booz=M_booz, - N_booz=N_booz, + "|B|_mn", eq=eq, grid=grid_compute, M_booz=M_booz, N_booz=N_booz ) transforms_plot = get_transforms( - "|B|_mn", - eq=eq, - grid=grid_plot, - M_booz=M_booz, - N_booz=N_booz, + "|B|_mn", eq=eq, grid=grid_plot, M_booz=M_booz, N_booz=N_booz ) with warnings.catch_warnings(): warnings.simplefilter("ignore")

b|@DQQF-~8-<_5rAIN@&_XD)E*+0)m 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