From be2df79c03d4879104948e00abdd4578c666057c Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Thu, 19 Dec 2024 15:12:33 -0600 Subject: [PATCH 01/16] implement with m>k subsystem --- desc/magnetic_fields/_dommaschk.py | 99 +++++++++++++++++++++++++++--- 1 file changed, 89 insertions(+), 10 deletions(-) diff --git a/desc/magnetic_fields/_dommaschk.py b/desc/magnetic_fields/_dommaschk.py index a26dbff23..0f5575f76 100644 --- a/desc/magnetic_fields/_dommaschk.py +++ b/desc/magnetic_fields/_dommaschk.py @@ -349,13 +349,13 @@ def gamma_n(m, n): """gamma_n of eq 33.""" def body_fun(i, val): - return val + 1 / i + 1 / (m + i) + return val + 1 / i def false_fun(m_n): m, n = m_n - return alpha(m, n) / 2 * fori_loop(1, n, body_fun, 0) + return fori_loop(1, n, body_fun, 0) + fori_loop(1, m + n, body_fun, 0) - return cond(n <= 0, true_fun, false_fun, (m, n)) + return cond(n < 0, true_fun, false_fun, (m, n)) * alpha(m, n) / 2 @jit @@ -370,7 +370,7 @@ def false_fun(m_n): @jit -def CD_m_k(R, m, k): +def CD_m_k_any_mk(R, m, k): """Eq 31 of Dommaschk paper.""" def body_fun(j, val): @@ -397,7 +397,59 @@ def body_fun(j, val): @jit -def CN_m_k(R, m, k): +def alphaj_betak_m_k(m, j, k): + """Eqn 29.""" + out = ((-1) ** j) / gamma(j + 1) / gamma(k - j + 1) / (2 ** (2 * k + 1)) + + def body_fun(ind, val): + result = val * (m + j - ind) + return result + + return out / fori_loop(0, k + 1, body_fun, 1.0) + + +@jit +def alphaj_betastark_m_k(m, j, k): + """Eqn 29.""" + return alphaj_betak_m_k(m, j, k) * (2 * k - 2 * j - m) + + +@jit +def alphak_m_j_betaj(m, j, k): + """Eqn 30.""" + out = ((-1) ** (k - j)) / gamma(j + 1) / gamma(k - j + 1) / 2 ** (2 * k + 1) + + def body_fun(ind, val): + result = val * (m - j + ind) + return result + + return out / fori_loop(0, k + 1, body_fun, 1.0) + + +@jit +def alphastark_m_j_betaj(m, j, k): + """Eqn 30.""" + return alphak_m_j_betaj(m, j, k) * (2 * k - 2 * j + m) + + +@jit +def CD_m_k(R, m, k): + """Eq 25 of Dommaschk paper.""" + + def body_fun(j, val): + result = ( + val + - R ** (m + 2 * j) * alphaj_betastark_m_k(m, j, k) + + R ** (2 * j - m) * alphastark_m_j_betaj(m, j, k) + ) + + return result + + return fori_loop(0, k + 1, body_fun, jnp.zeros_like(R)) + + +@jit +def CN_m_k_any_mk(R, m, k): """Eq 32 of Dommaschk paper.""" def body_fun(j, val): @@ -412,7 +464,24 @@ def body_fun(j, val): ) * R ** (2 * j + m) ) - - beta(m, j) * alpha(m, k - j) * R ** (2 * j - m) + - alpha(m, k - j) * beta(m, j) * R ** (2 * j - m) + ) + return result + + return fori_loop(0, k + 1, body_fun, jnp.zeros_like(R)) + + +@jit +def CN_m_k(R, m, k): + """Eq 26 of Dommaschk paper.""" + + def body_fun(j, val): + result = ( + val + + R ** (m + 2 * j) + * alphaj_betak_m_k(m, j, k) # alpha(m, j) * beta(m, k - j) + - R ** (2 * j - m) + * alphak_m_j_betaj(m, k, j) # alpha(m, k - j) * beta(m, j) ) return result @@ -422,10 +491,15 @@ def body_fun(j, val): @jit def D_m_n(R, Z, m, n): """D_m_n term in eqn 8 of Dommaschk paper.""" - # the sum comes from fact that D_mn = I_mn and the def of I_mn in eq 2 of the paper + def bool_fun(m, k): + return m > k + + # the sum comes from fact that D_mn = I_mn and the def of I_mn in eq 2 of the paper def body_fun(k, val): - coef = CD_m_k(R, m, k) / gamma(n - 2 * k + 1) + coef = cond(bool_fun(m, k), CD_m_k, CD_m_k_any_mk, R, m, k) / gamma( + n - 2 * k + 1 + ) exp = n - 2 * k mask = (Z == 0) & (exp == 0) exp = jnp.where(mask, 1, exp) @@ -437,10 +511,15 @@ def body_fun(k, val): @jit def N_m_n(R, Z, m, n): """N_m_n term in eqn 9 of Dommaschk paper.""" - # the sum comes from fact that N_mn = I_mn and the def of I_mn in eq 2 of the paper + def bool_fun(m, k): + return m > k + + # the sum comes from fact that N_mn = I_mn and the def of I_mn in eq 2 of the paper def body_fun(k, val): - coef = CN_m_k(R, m, k) / gamma(n - 2 * k + 1) + coef = cond(bool_fun(m, k), CN_m_k, CN_m_k_any_mk, R, m, k) / gamma( + n - 2 * k + 1 + ) exp = n - 2 * k mask = (Z == 0) & (exp == 0) exp = jnp.where(mask, 1, exp) From 7dd2dfaa16e1fa37148c8a063dda0767411c1bd4 Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Thu, 26 Dec 2024 02:04:44 -0600 Subject: [PATCH 02/16] implement symbolic recursive integration for dommschk. works for computing B but not for fitting or opt --- desc/magnetic_fields/_dommaschk.py | 392 ++++++++++++----------------- 1 file changed, 154 insertions(+), 238 deletions(-) diff --git a/desc/magnetic_fields/_dommaschk.py b/desc/magnetic_fields/_dommaschk.py index 0f5575f76..3a340c428 100644 --- a/desc/magnetic_fields/_dommaschk.py +++ b/desc/magnetic_fields/_dommaschk.py @@ -5,10 +5,15 @@ """ -from desc.backend import cond, fori_loop, gammaln, jit, jnp +import numpy as np +import sympy as sp +from sympy.abc import x +from sympy.vector import CoordSys3D, gradient + +from desc.backend import jit, jnp from desc.derivatives import Derivative -from ._core import ScalarPotentialField, _MagneticField +from ._core import ScalarPotentialField, _MagneticField, rpz2xyz_vec, xyz2rpz class DommaschkPotentialField(ScalarPotentialField): @@ -89,6 +94,81 @@ def __init__( super().__init__(dommaschk_potential, params, NFP) + self._set_potentials() + + def _set_potentials(self): + """Creates the potential and B function using sympy.""" + cyl = CoordSys3D( + "cyl", transformation="cylindrical", variable_names=("R", "phi", "Z") + ) + keys = list(self._params.keys()) + + params = dict( + zip( + keys, [list(np.array(self._params[key])) for key in keys if key != "B0"] + ) + ) + params["B0"] = float(self._params["B0"]) + + self._domm_pot = dommaschk_potential(cyl.R, cyl.phi, cyl.Z, **params) + self._B_function = gradient(self._domm_pot) + + def compute_magnetic_field( + self, coords, params=None, basis="rpz", source_grid=None, transforms=None + ): + """Compute magnetic field at a set of points. + + For the Dommaschk potentials, we use Sympy to + find the potentials by recursive symbolic integration, + then find their gradient symbolically, and finally convert + the gradient (the B field) to JAX-enabled functions. + + Parameters + ---------- + coords : array-like shape(n,3) + Nodes to evaluate field at in [R,phi,Z] or [X,Y,Z] coordinates. + params : dict or array-like of dict, optional + Dictionary of optimizable parameters, eg field.params_dict. + basis : {"rpz", "xyz"} + Basis for input coordinates and returned magnetic field. + source_grid : Grid, int or None + Unused by this MagneticField class. + transforms : dict of Transform + Transforms for R, Z, lambda, etc. Default is to build from source_grid + Unused by this MagneticField class. + + Returns + ------- + field : ndarray, shape(N,3) + magnetic field at specified points + + """ + assert basis.lower() in ["rpz", "xyz"] + coords = jnp.atleast_2d(jnp.asarray(coords)) + coords = coords.astype(float) + if basis == "xyz": + coords = xyz2rpz(coords) + + if params is None: + params = self._params + cyl = CoordSys3D( + "cyl", transformation="cylindrical", variable_names=("R", "phi", "Z") + ) + BR = sp.lambdify([cyl.R, cyl.phi, cyl.Z], self._B_function.coeff(cyl.i), "jax") + Bphi = sp.lambdify( + [cyl.R, cyl.phi, cyl.Z], self._B_function.coeff(cyl.j), "jax" + ) + BZ = sp.lambdify([cyl.R, cyl.phi, cyl.Z], self._B_function.coeff(cyl.k), "jax") + + r, p, z = coords.T + br = BR(r, p, z) + bp = Bphi(r, p, z) + bz = BZ(r, p, z) + B = jnp.array([br, bp / r, bz]).T + if basis == "xyz": + B = rpz2xyz_vec(B, phi=coords[:, 1]) + return B + @classmethod def fit_magnetic_field( # noqa: C901 cls, field, coords, max_m, max_l, sym=False, verbose=1, NFP=1 @@ -279,256 +359,103 @@ def get_B_dom(coords, X, ms, ls): return cls(ms, ls, a_arr, b_arr, c_arr, d_arr, B0) -true_fun = lambda m_n: 0.0 # used for returning 0 when conditionals evaluate to True +# Given the desired modenumbers, +# have sympy integrate the expressions at the time the potential is initiated -@jit def gamma(n): """Gamma function, only implemented for integers (equiv to factorial of (n-1)).""" - return jnp.exp(gammaln(n)) - - -@jit -def alpha(m, n): - """Alpha of eq 27, 1st ind comes from C_m_k, 2nd is the subscript of alpha.""" - # modified for eqns 31 and 32 - - def false_fun(m_n): - m, n = m_n - return (-1) ** n / (gamma(m + n + 1) * gamma(n + 1) * 2.0 ** (2 * n + m)) - - def bool_fun(n): - return n < 0 - - return cond( - bool_fun(n), - true_fun, - false_fun, - ( - m, - n, - ), - ) - - -@jit -def alphastar(m, n): - """Alphastar of eq 27, 1st ind comes from C_m_k, 2nd is the subscript of alpha.""" - - def false_fun(m_n): # modified for eqns 31 and 32 - m, n = m_n - return (2 * n + m) * alpha(m, n) - - return cond(n < 0, true_fun, false_fun, (m, n)) - - -@jit -def beta(m, n): - """Beta of eq 28, modified for eqns 31 and 32.""" - - def false_fun(m_n): - m, n = m_n - return gamma(m - n) / (gamma(n + 1) * 2.0 ** (2 * n - m + 1)) - - return cond(jnp.logical_or(n < 0, n >= m), true_fun, false_fun, (m, n)) - - -@jit -def betastar(m, n): - """Beta* of eq 28, modified for eqns 31 and 32.""" - - def false_fun(m_n): - m, n = m_n - return (2 * n - m) * beta(m, n) - - return cond(jnp.logical_or(n < 0, n >= m), true_fun, false_fun, (m, n)) - - -@jit -def gamma_n(m, n): - """gamma_n of eq 33.""" - - def body_fun(i, val): - return val + 1 / i + return sp.factorial(n - 1) # sp.prod(np.arange(1, n)) - def false_fun(m_n): - m, n = m_n - return fori_loop(1, n, body_fun, 0) + fori_loop(1, m + n, body_fun, 0) - return cond(n < 0, true_fun, false_fun, (m, n)) * alpha(m, n) / 2 +def CD_0_0(R): + """Eq 8, CD_m_k at m=0 k=0.""" + return 1 -@jit -def gamma_nstar(m, n): - """gamma_n star of eq 33.""" +def CD_m_0(R, m): + """Eq 8, CD_m_k at m>0, k=0.""" + return (R**m + R ** (-m)) / 2 - def false_fun(m_n): - m, n = m_n - return (2 * n + m) * gamma_n(m, n) - return cond(n <= 0, true_fun, false_fun, (m, n)) - - -@jit -def CD_m_k_any_mk(R, m, k): - """Eq 31 of Dommaschk paper.""" - - def body_fun(j, val): - result = ( - val - + ( - -( - alpha(m, j) - * ( - alphastar(m, k - m - j) * jnp.log(R) - + gamma_nstar(m, k - m - j) - - alpha(m, k - m - j) - ) - - gamma_n(m, j) * alphastar(m, k - m - j) - + alpha(m, j) * betastar(m, k - j) - ) - * R ** (2 * j + m) +def CD_m_k(R, m, k): + """Eq 6 and 7 of Dommaschk paper, for system in Eq 8.""" + if m == 0: + if k == 0: + return CD_0_0(R) + # call itself recursively + # Eq 6 + return sp.integrate( + CD_m_k(x, 0, k - 1) * (sp.log(x) - sp.log(R)) * x, (x, 1, R) + ) + elif k == 0: + return CD_m_0(R, m) + else: + # Eq 7 + return ( + sp.integrate( + CD_m_k(x, m, k - 1) * ((x / R) ** m - (R / x) ** m) * x, (x, 1, R) ) - + beta(m, j) * alphastar(m, k - j) * R ** (2 * j - m) + / 2 + / m ) - return result - - return fori_loop(0, k + 1, body_fun, jnp.zeros_like(R)) - - -@jit -def alphaj_betak_m_k(m, j, k): - """Eqn 29.""" - out = ((-1) ** j) / gamma(j + 1) / gamma(k - j + 1) / (2 ** (2 * k + 1)) - - def body_fun(ind, val): - result = val * (m + j - ind) - return result - - return out / fori_loop(0, k + 1, body_fun, 1.0) -@jit -def alphaj_betastark_m_k(m, j, k): - """Eqn 29.""" - return alphaj_betak_m_k(m, j, k) * (2 * k - 2 * j - m) +def CN_0_0(R): + """Eq 9, CN_m_k at m=0 k=0.""" + return sp.log(R) -@jit -def alphak_m_j_betaj(m, j, k): - """Eqn 30.""" - out = ((-1) ** (k - j)) / gamma(j + 1) / gamma(k - j + 1) / 2 ** (2 * k + 1) +def CN_m_0(R, m): + """Eq 9, CN_m_k at m>0 k=0.""" + return (R**m - R ** (-m)) / 2 / m - def body_fun(ind, val): - result = val * (m - j + ind) - return result - return out / fori_loop(0, k + 1, body_fun, 1.0) - - -@jit -def alphastark_m_j_betaj(m, j, k): - """Eqn 30.""" - return alphak_m_j_betaj(m, j, k) * (2 * k - 2 * j + m) - - -@jit -def CD_m_k(R, m, k): - """Eq 25 of Dommaschk paper.""" - - def body_fun(j, val): - result = ( - val - - R ** (m + 2 * j) * alphaj_betastark_m_k(m, j, k) - + R ** (2 * j - m) * alphastark_m_j_betaj(m, j, k) +def CN_m_k(R, m, k): + """Eq 6/7 of Dommaschk paper, for system in Eq 9.""" + if m == 0: + if k == 0: + return CN_0_0(R) + # call itself recursively + # Eq 6 + return sp.integrate( + CN_m_k(x, 0, k - 1) * (sp.log(x) - sp.log(R)) * x, (x, 1, R) ) - - return result - - return fori_loop(0, k + 1, body_fun, jnp.zeros_like(R)) - - -@jit -def CN_m_k_any_mk(R, m, k): - """Eq 32 of Dommaschk paper.""" - - def body_fun(j, val): - result = ( - val - + ( - ( - alpha(m, j) - * (alpha(m, k - m - j) * jnp.log(R) + gamma_n(m, k - m - j)) - - gamma_n(m, j) * alpha(m, k - m - j) - + alpha(m, j) * beta(m, k - j) - ) - * R ** (2 * j + m) + elif k == 0: + return CN_m_0(R, m) + else: + # Eq 7 + return ( + sp.integrate( + CN_m_k(x, m, k - 1) * ((x / R) ** m - (R / x) ** m) * x, (x, 1, R) ) - - alpha(m, k - j) * beta(m, j) * R ** (2 * j - m) - ) - return result - - return fori_loop(0, k + 1, body_fun, jnp.zeros_like(R)) - - -@jit -def CN_m_k(R, m, k): - """Eq 26 of Dommaschk paper.""" - - def body_fun(j, val): - result = ( - val - + R ** (m + 2 * j) - * alphaj_betak_m_k(m, j, k) # alpha(m, j) * beta(m, k - j) - - R ** (2 * j - m) - * alphak_m_j_betaj(m, k, j) # alpha(m, k - j) * beta(m, j) + / 2 + / m ) - return result - - return fori_loop(0, k + 1, body_fun, jnp.zeros_like(R)) -@jit def D_m_n(R, Z, m, n): """D_m_n term in eqn 8 of Dommaschk paper.""" + result = 0.0 + for k in range(n + 1): + if 2 * k <= n: + coef = CD_m_k(R, m, k) / gamma(n - 2 * k + 1) + exp = n - 2 * k + result += coef * Z**exp + return result - def bool_fun(m, k): - return m > k - - # the sum comes from fact that D_mn = I_mn and the def of I_mn in eq 2 of the paper - def body_fun(k, val): - coef = cond(bool_fun(m, k), CD_m_k, CD_m_k_any_mk, R, m, k) / gamma( - n - 2 * k + 1 - ) - exp = n - 2 * k - mask = (Z == 0) & (exp == 0) - exp = jnp.where(mask, 1, exp) - return val + coef * jnp.where(mask, 1, Z**exp) - return fori_loop(0, n // 2 + 1, body_fun, jnp.zeros_like(R)) - - -@jit def N_m_n(R, Z, m, n): """N_m_n term in eqn 9 of Dommaschk paper.""" + result = 0.0 + for k in range(n + 1): + if 2 * k <= n: + coef = CN_m_k(R, m, k) / gamma(n - 2 * k + 1) + exp = n - 2 * k + result += coef * Z**exp + return result - def bool_fun(m, k): - return m > k - - # the sum comes from fact that N_mn = I_mn and the def of I_mn in eq 2 of the paper - def body_fun(k, val): - coef = cond(bool_fun(m, k), CN_m_k, CN_m_k_any_mk, R, m, k) / gamma( - n - 2 * k + 1 - ) - exp = n - 2 * k - mask = (Z == 0) & (exp == 0) - exp = jnp.where(mask, 1, exp) - return val + coef * jnp.where(mask, 1, Z**exp) - - return fori_loop(0, n // 2 + 1, body_fun, jnp.zeros_like(R)) - -@jit def V_m_l(R, phi, Z, m, l, a, b, c, d): """Eq 12 of Dommaschk paper. @@ -557,12 +484,11 @@ def V_m_l(R, phi, Z, m, l, a, b, c, d): (same size as the size of the given R,phi, or Z arrays). """ - return (a * jnp.cos(m * phi) + b * jnp.sin(m * phi)) * D_m_n(R, Z, m, l) + ( - c * jnp.cos(m * phi) + d * jnp.sin(m * phi) + return (a * sp.cos(m * phi) + b * sp.sin(m * phi)) * D_m_n(R, Z, m, l) + ( + c * sp.cos(m * phi) + d * sp.sin(m * phi) ) * N_m_n(R, Z, m, l - 1) -@jit def dommaschk_potential(R, phi, Z, ms, ls, a_arr, b_arr, c_arr, d_arr, B0=1): """Eq 1 of Dommaschk paper. @@ -596,19 +522,9 @@ def dommaschk_potential(R, phi, Z, ms, ls, a_arr, b_arr, c_arr, d_arr, B0=1): Value of the total dommaschk potential evaluated at the given R,phi,Z points (same size as the size of the given R,phi, Z arrays). + """ - ms, ls, a_arr, b_arr, c_arr, d_arr = map( - jnp.atleast_1d, (ms, ls, a_arr, b_arr, c_arr, d_arr) - ) - R, phi, Z = map(jnp.atleast_1d, (R, phi, Z)) - R, phi, Z = jnp.broadcast_arrays(R, phi, Z) - ms, ls, a_arr, b_arr, c_arr, d_arr = jnp.broadcast_arrays( - ms, ls, a_arr, b_arr, c_arr, d_arr - ) value = B0 * phi # phi term - - def body(i, val): - val += V_m_l(R, phi, Z, ms[i], ls[i], a_arr[i], b_arr[i], c_arr[i], d_arr[i]) - return val - - return fori_loop(0, len(ms), body, value) + for i in range(len(ms)): + value += V_m_l(R, phi, Z, ms[i], ls[i], a_arr[i], b_arr[i], c_arr[i], d_arr[i]) + return value From d6fd793702c94cb0407014234874a33231268021 Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Thu, 26 Dec 2024 02:46:40 -0600 Subject: [PATCH 03/16] move lambdify to set_potentials --- desc/magnetic_fields/_dommaschk.py | 103 +++++++++++++++++++++++++---- 1 file changed, 91 insertions(+), 12 deletions(-) diff --git a/desc/magnetic_fields/_dommaschk.py b/desc/magnetic_fields/_dommaschk.py index 3a340c428..b0687ba7f 100644 --- a/desc/magnetic_fields/_dommaschk.py +++ b/desc/magnetic_fields/_dommaschk.py @@ -108,11 +108,70 @@ def _set_potentials(self): keys, [list(np.array(self._params[key])) for key in keys if key != "B0"] ) ) - params["B0"] = float(self._params["B0"]) + params["a_arr"] = sp.symbols( + " ".join([f"a_{l}{m}" for l, m in zip(params["ls"], params["ms"])]) + ) + params["b_arr"] = sp.symbols( + " ".join([f"b_{l}{m}" for l, m in zip(params["ls"], params["ms"])]) + ) + params["c_arr"] = sp.symbols( + " ".join([f"c_{l}{m}" for l, m in zip(params["ls"], params["ms"])]) + ) + params["d_arr"] = sp.symbols( + " ".join([f"d_{l}{m}" for l, m in zip(params["ls"], params["ms"])]) + ) + + params["B0"] = sp.symbols("B0") self._domm_pot = dommaschk_potential(cyl.R, cyl.phi, cyl.Z, **params) self._B_function = gradient(self._domm_pot) + cyl = CoordSys3D( + "cyl", transformation="cylindrical", variable_names=("R", "phi", "Z") + ) + self._BR = sp.lambdify( + [ + cyl.R, + cyl.phi, + cyl.Z, + params["a_arr"], + params["b_arr"], + params["c_arr"], + params["d_arr"], + params["B0"], + ], + self._B_function.coeff(cyl.i), + "jax", + ) + self._Bphi = sp.lambdify( + [ + cyl.R, + cyl.phi, + cyl.Z, + params["a_arr"], + params["b_arr"], + params["c_arr"], + params["d_arr"], + params["B0"], + ], + self._B_function.coeff(cyl.j), + "jax", + ) + self._BZ = sp.lambdify( + [ + cyl.R, + cyl.phi, + cyl.Z, + params["a_arr"], + params["b_arr"], + params["c_arr"], + params["d_arr"], + params["B0"], + ], + self._B_function.coeff(cyl.k), + "jax", + ) + def compute_magnetic_field( self, coords, params=None, basis="rpz", source_grid=None, transforms=None ): @@ -151,19 +210,38 @@ def compute_magnetic_field( if params is None: params = self._params - cyl = CoordSys3D( - "cyl", transformation="cylindrical", variable_names=("R", "phi", "Z") - ) - BR = sp.lambdify([cyl.R, cyl.phi, cyl.Z], self._B_function.coeff(cyl.i), "jax") - Bphi = sp.lambdify( - [cyl.R, cyl.phi, cyl.Z], self._B_function.coeff(cyl.j), "jax" - ) - BZ = sp.lambdify([cyl.R, cyl.phi, cyl.Z], self._B_function.coeff(cyl.k), "jax") r, p, z = coords.T - br = BR(r, p, z) - bp = Bphi(r, p, z) - bz = BZ(r, p, z) + br = self._BR( + r, + p, + z, + params["a_arr"], + params["b_arr"], + params["c_arr"], + params["d_arr"], + params["B0"], + ) + bp = self._Bphi( + r, + p, + z, + params["a_arr"], + params["b_arr"], + params["c_arr"], + params["d_arr"], + params["B0"], + ) + bz = self._BZ( + r, + p, + z, + params["a_arr"], + params["b_arr"], + params["c_arr"], + params["d_arr"], + params["B0"], + ) B = jnp.array([br, bp / r, bz]).T if basis == "xyz": B = rpz2xyz_vec(B, phi=coords[:, 1]) @@ -527,4 +605,5 @@ def dommaschk_potential(R, phi, Z, ms, ls, a_arr, b_arr, c_arr, d_arr, B0=1): value = B0 * phi # phi term for i in range(len(ms)): value += V_m_l(R, phi, Z, ms[i], ls[i], a_arr[i], b_arr[i], c_arr[i], d_arr[i]) + return value From 2ff475d4503403dc8eb4fa492bae9a14886f4603 Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Thu, 26 Dec 2024 14:39:40 -0600 Subject: [PATCH 04/16] add sympy requirement --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 9e4aa9146..e61b16fef 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,3 +16,4 @@ quadax >= 0.2.2, <= 0.2.4 scikit-image <= 0.25.0 scipy >= 1.7.0, <= 1.14.1 termcolor <= 2.5.0 +sympy From 7b6362cad7ee4188133d22e5da34acd1b1c97059 Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Thu, 26 Dec 2024 21:37:51 -0600 Subject: [PATCH 05/16] change implementation to use jax-differentiable potential after integration with sympy --- desc/magnetic_fields/_dommaschk.py | 153 +++++++---------------------- 1 file changed, 33 insertions(+), 120 deletions(-) diff --git a/desc/magnetic_fields/_dommaschk.py b/desc/magnetic_fields/_dommaschk.py index b0687ba7f..305e45438 100644 --- a/desc/magnetic_fields/_dommaschk.py +++ b/desc/magnetic_fields/_dommaschk.py @@ -8,12 +8,12 @@ import numpy as np import sympy as sp from sympy.abc import x -from sympy.vector import CoordSys3D, gradient +from sympy.vector import CoordSys3D from desc.backend import jit, jnp from desc.derivatives import Derivative -from ._core import ScalarPotentialField, _MagneticField, rpz2xyz_vec, xyz2rpz +from ._core import ScalarPotentialField, _MagneticField class DommaschkPotentialField(ScalarPotentialField): @@ -60,6 +60,7 @@ def __init__( d_arr=jnp.array([0.0]), B0=1.0, NFP=1, + symbolic_gradient=False, ): ms = jnp.atleast_1d(jnp.asarray(ms)) ls = jnp.atleast_1d(jnp.asarray(ls)) @@ -91,6 +92,7 @@ def __init__( params["c_arr"] = c_arr params["d_arr"] = d_arr params["B0"] = B0 + self._full_params = params super().__init__(dommaschk_potential, params, NFP) @@ -101,11 +103,12 @@ def _set_potentials(self): cyl = CoordSys3D( "cyl", transformation="cylindrical", variable_names=("R", "phi", "Z") ) - keys = list(self._params.keys()) + keys = list(self._full_params.keys()) params = dict( zip( - keys, [list(np.array(self._params[key])) for key in keys if key != "B0"] + keys, + [list(np.array(self._full_params[key])) for key in keys if key != "B0"], ) ) params["a_arr"] = sp.symbols( @@ -123,27 +126,9 @@ def _set_potentials(self): params["B0"] = sp.symbols("B0") - self._domm_pot = dommaschk_potential(cyl.R, cyl.phi, cyl.Z, **params) - self._B_function = gradient(self._domm_pot) + domm_pot = dommaschk_potential(cyl.R, cyl.phi, cyl.Z, **params) - cyl = CoordSys3D( - "cyl", transformation="cylindrical", variable_names=("R", "phi", "Z") - ) - self._BR = sp.lambdify( - [ - cyl.R, - cyl.phi, - cyl.Z, - params["a_arr"], - params["b_arr"], - params["c_arr"], - params["d_arr"], - params["B0"], - ], - self._B_function.coeff(cyl.i), - "jax", - ) - self._Bphi = sp.lambdify( + potential_fxn = sp.lambdify( [ cyl.R, cyl.phi, @@ -154,98 +139,27 @@ def _set_potentials(self): params["d_arr"], params["B0"], ], - self._B_function.coeff(cyl.j), + domm_pot, "jax", ) - self._BZ = sp.lambdify( - [ - cyl.R, - cyl.phi, - cyl.Z, - params["a_arr"], - params["b_arr"], - params["c_arr"], - params["d_arr"], - params["B0"], - ], - self._B_function.coeff(cyl.k), - "jax", - ) - - def compute_magnetic_field( - self, coords, params=None, basis="rpz", source_grid=None, transforms=None - ): - """Compute magnetic field at a set of points. - - For the Dommaschk potentials, we use Sympy to - find the potentials by recursive symbolic integration, - then find their gradient symbolically, and finally convert - the gradient (the B field) to JAX-enabled functions. - - Parameters - ---------- - coords : array-like shape(n,3) - Nodes to evaluate field at in [R,phi,Z] or [X,Y,Z] coordinates. - params : dict or array-like of dict, optional - Dictionary of optimizable parameters, eg field.params_dict. - basis : {"rpz", "xyz"} - Basis for input coordinates and returned magnetic field. - source_grid : Grid, int or None - Unused by this MagneticField class. - transforms : dict of Transform - Transforms for R, Z, lambda, etc. Default is to build from source_grid - Unused by this MagneticField class. - - Returns - ------- - field : ndarray, shape(N,3) - magnetic field at specified points - - """ - assert basis.lower() in ["rpz", "xyz"] - coords = jnp.atleast_2d(jnp.asarray(coords)) - coords = coords.astype(float) - if basis == "xyz": - coords = xyz2rpz(coords) - - if params is None: - params = self._params - - r, p, z = coords.T - br = self._BR( + # resulting function from lambdify does not take kwargs, so we need to + # wrap it in a lambda function that does + self._potential = lambda r, p, z, a_arr, b_arr, c_arr, d_arr, B0: potential_fxn( r, p, z, - params["a_arr"], - params["b_arr"], - params["c_arr"], - params["d_arr"], - params["B0"], + a_arr, + b_arr, + c_arr, + d_arr, + B0, ) - bp = self._Bphi( - r, - p, - z, - params["a_arr"], - params["b_arr"], - params["c_arr"], - params["d_arr"], - params["B0"], - ) - bz = self._BZ( - r, - p, - z, - params["a_arr"], - params["b_arr"], - params["c_arr"], - params["d_arr"], - params["B0"], - ) - B = jnp.array([br, bp / r, bz]).T - if basis == "xyz": - B = rpz2xyz_vec(B, phi=coords[:, 1]) - return B + self._potential = jit(self._potential) + + # remove ms and ls as are no longer needed in params, they are instead baked + # into the potential function + self._params.pop("ms") + self._params.pop("ls") @classmethod def fit_magnetic_field( # noqa: C901 @@ -375,7 +289,7 @@ def fit_magnetic_field( # noqa: C901 round(num_modes - 1) / 4 ) # how many l-m mode pairs there are, also is len(a_s) n = int(n) - domm_field = DommaschkPotentialField(0, 0, 0, 0, 0, 0, 1) + domm_field = DommaschkPotentialField(**params) def get_B_dom(coords, X, ms, ls): """Fxn wrapper to find jacobian of dommaschk B wrt coefs a,b,c,d.""" @@ -385,8 +299,6 @@ def get_B_dom(coords, X, ms, ls): return domm_field.compute_magnetic_field( coords, params={ - "ms": jnp.asarray(ms), - "ls": jnp.asarray(ls), "a_arr": jnp.asarray(X[1 : n + 1]) * abcd_zero_due_to_sym_inds[0], "b_arr": jnp.asarray(X[n + 1 : 2 * n + 1]) * abcd_zero_due_to_sym_inds[1], @@ -437,10 +349,7 @@ def get_B_dom(coords, X, ms, ls): return cls(ms, ls, a_arr, b_arr, c_arr, d_arr, B0) -# Given the desired modenumbers, -# have sympy integrate the expressions at the time the potential is initiated - - +# Dommaschk potential utility functions def gamma(n): """Gamma function, only implemented for integers (equiv to factorial of (n-1)).""" return sp.factorial(n - 1) # sp.prod(np.arange(1, n)) @@ -603,7 +512,11 @@ def dommaschk_potential(R, phi, Z, ms, ls, a_arr, b_arr, c_arr, d_arr, B0=1): """ value = B0 * phi # phi term - for i in range(len(ms)): - value += V_m_l(R, phi, Z, ms[i], ls[i], a_arr[i], b_arr[i], c_arr[i], d_arr[i]) - + if len(ms) > 1: + for i in range(len(ms)): + value += V_m_l( + R, phi, Z, ms[i], ls[i], a_arr[i], b_arr[i], c_arr[i], d_arr[i] + ) + else: + value += V_m_l(R, phi, Z, ms[0], ls[0], a_arr, b_arr, c_arr, d_arr) return value From eaa02f0be6aa13e119e374eceb575ddca197695b Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Thu, 26 Dec 2024 21:54:32 -0600 Subject: [PATCH 06/16] fix error in fitting --- desc/magnetic_fields/_dommaschk.py | 3 +-- tests/test_magnetic_fields.py | 4 +++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/desc/magnetic_fields/_dommaschk.py b/desc/magnetic_fields/_dommaschk.py index 305e45438..427b23cdc 100644 --- a/desc/magnetic_fields/_dommaschk.py +++ b/desc/magnetic_fields/_dommaschk.py @@ -60,7 +60,6 @@ def __init__( d_arr=jnp.array([0.0]), B0=1.0, NFP=1, - symbolic_gradient=False, ): ms = jnp.atleast_1d(jnp.asarray(ms)) ls = jnp.atleast_1d(jnp.asarray(ls)) @@ -92,7 +91,7 @@ def __init__( params["c_arr"] = c_arr params["d_arr"] = d_arr params["B0"] = B0 - self._full_params = params + self._full_params = params.copy() super().__init__(dommaschk_potential, params, NFP) diff --git a/tests/test_magnetic_fields.py b/tests/test_magnetic_fields.py index 134408bd4..1a8989a56 100644 --- a/tests/test_magnetic_fields.py +++ b/tests/test_magnetic_fields.py @@ -1533,7 +1533,9 @@ def test_dommaschk_fit_vertical_and_toroidal_field(): # only nonzero coefficient of the field should be the B0 and a_ml = a_01 np.testing.assert_allclose(B._params["B0"], B0, atol=1e-13) - for coef, m, l in zip(B._params["a_arr"], B._params["ms"], B._params["ls"]): + for coef, m, l in zip( + B._params["a_arr"], B._full_params["ms"], B._full_params["ls"] + ): if m == 0 and l == 1: np.testing.assert_allclose(coef, B0_Z) else: From 7a2112d2677d291280ebeccc81a0c078e4588594 Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Fri, 27 Dec 2024 02:40:51 -0600 Subject: [PATCH 07/16] remove unneeded args, increase output info --- desc/magnetic_fields/_dommaschk.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/desc/magnetic_fields/_dommaschk.py b/desc/magnetic_fields/_dommaschk.py index 427b23cdc..2a074b444 100644 --- a/desc/magnetic_fields/_dommaschk.py +++ b/desc/magnetic_fields/_dommaschk.py @@ -290,7 +290,7 @@ def fit_magnetic_field( # noqa: C901 n = int(n) domm_field = DommaschkPotentialField(**params) - def get_B_dom(coords, X, ms, ls): + def get_B_dom(coords, X): """Fxn wrapper to find jacobian of dommaschk B wrt coefs a,b,c,d.""" # zero out any terms that should be zero due to symmetry, which # we cataloged earlier for each a_arr,b_arr,c_arr,d_arr @@ -318,20 +318,22 @@ def get_B_dom(coords, X, ms, ls): X += [obj] X = jnp.asarray(X) - jac = jit(Derivative(get_B_dom, argnum=1))( - coords, X, params["ms"], params["ls"] - ) + jac = jit(Derivative(get_B_dom, argnum=1))(coords, X) A = jac.reshape((rhs.size, len(X)), order="F") # now solve Ac=b for the coefficients c # TODO (#928): use min singular value to give sense of cond number? - c, res, _, _ = jnp.linalg.lstsq(A, rhs) + c, res, rank, s = jnp.linalg.lstsq(A, rhs) if verbose > 0: # res is a list of len(1) so index into it - print(f"Sum of Squares Residual of fit: {res[0]:1.4e} T") + print(f"Sum of Squares Residual of fit: {res[0]:1.4e} T^2") + res_at_pts = A @ c - rhs + print(f"Max Residual: {jnp.max(abs(res_at_pts)):1.4e} T") + print(f"Min Residual: {jnp.min(abs(res_at_pts)):1.4e} T") + print(f"Mean Residual: {jnp.mean(abs(res_at_pts)):1.4e} T") # recover the params from the c coefficient vector B0 = c[0] From e325b2068f6af64c621ed9c1f3843c323b99e106 Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Fri, 27 Dec 2024 21:14:44 -0600 Subject: [PATCH 08/16] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19d182520..0ac525635 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ New Features - ``desc.objectives.Omnigenity`` is now vectorized and able to optimize multiple surfaces at the same time. Previously it was required to use a different objective for each surface. - Adds a new objective ``desc.objectives.MirrorRatio`` for targeting a particular mirror ratio on each flux surface, for either an ``Equilibrium`` or ``OmnigenousField``. - Adds the output quantities ``wb`` and ``wp`` to ``VMECIO.save``. +- Change implementation of Dommaschk potentials to use recursive algorithm and symbolic integration. Bug Fixes From fa8f5b826483163ddfb5cbc425f88297f64ec636 Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Sat, 28 Dec 2024 16:02:19 -0600 Subject: [PATCH 09/16] add test --- desc/magnetic_fields/_dommaschk.py | 4 + tests/baseline/test_domm_W7AS.png | Bin 0 -> 149960 bytes tests/test_magnetic_fields.py | 225 +++++++++++++++++++++++++++++ 3 files changed, 229 insertions(+) create mode 100644 tests/baseline/test_domm_W7AS.png diff --git a/desc/magnetic_fields/_dommaschk.py b/desc/magnetic_fields/_dommaschk.py index 2a074b444..5ef0d81d4 100644 --- a/desc/magnetic_fields/_dommaschk.py +++ b/desc/magnetic_fields/_dommaschk.py @@ -229,6 +229,9 @@ def fit_magnetic_field( # noqa: C901 # and max_l and max_m should probably be both nonzero anyways, # this is not an issue right now + # TODO: Add REGCOIL-like option to perform a least squares minimization + # of Bn, potentially also with some sort of regularization. + # mode numbers ms = [] ls = [] @@ -247,6 +250,7 @@ def fit_magnetic_field( # noqa: C901 ] # indices that should be 0 due to symmetry # if sym is True, when l is even then we need a=d=0 # and if l is odd then b=c=0 + # TODO: does the sym hold if the eq is not "centered" about R=1? for l in range(1, max_l + 1): for m in range(0, max_m * NFP + 1, NFP): diff --git a/tests/baseline/test_domm_W7AS.png b/tests/baseline/test_domm_W7AS.png new file mode 100644 index 0000000000000000000000000000000000000000..b4ede209ae4fcdfd0599b96db8d860bcfc8f7dc1 GIT binary patch literal 149960 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

Uo}SkZ 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 oUij}A4<3B~O7s4I&kJ`BUWl(u$?61 Date: Sat, 28 Dec 2024 16:06:01 -0600 Subject: [PATCH 10/16] adjust docstring --- desc/magnetic_fields/_dommaschk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desc/magnetic_fields/_dommaschk.py b/desc/magnetic_fields/_dommaschk.py index 5ef0d81d4..812bdac61 100644 --- a/desc/magnetic_fields/_dommaschk.py +++ b/desc/magnetic_fields/_dommaschk.py @@ -98,7 +98,7 @@ def __init__( self._set_potentials() def _set_potentials(self): - """Creates the potential and B function using sympy.""" + """Creates the potential using sympy.""" cyl = CoordSys3D( "cyl", transformation="cylindrical", variable_names=("R", "phi", "Z") ) From 735194a365fda7724a0625e7ed3e06fb95c5ab24 Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Sun, 5 Jan 2025 16:13:46 -0500 Subject: [PATCH 11/16] remove jit from potential, remove unneeded class initialization at end of fitting --- desc/magnetic_fields/_dommaschk.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/desc/magnetic_fields/_dommaschk.py b/desc/magnetic_fields/_dommaschk.py index 812bdac61..54eb80d18 100644 --- a/desc/magnetic_fields/_dommaschk.py +++ b/desc/magnetic_fields/_dommaschk.py @@ -153,7 +153,6 @@ def _set_potentials(self): d_arr, B0, ) - self._potential = jit(self._potential) # remove ms and ls as are no longer needed in params, they are instead baked # into the potential function @@ -351,13 +350,18 @@ def get_B_dom(coords, X): c_arr = c[2 * n + 1 : 3 * n + 1] * abcd_zero_due_to_sym_inds[2] d_arr = c[3 * n + 1 : 4 * n + 1] * abcd_zero_due_to_sym_inds[3] - return cls(ms, ls, a_arr, b_arr, c_arr, d_arr, B0) + domm_field._params["B0"] = B0 + domm_field._params["a_arr"] = a_arr + domm_field._params["b_arr"] = b_arr + domm_field._params["c_arr"] = c_arr + domm_field._params["d_arr"] = d_arr + return domm_field # Dommaschk potential utility functions def gamma(n): """Gamma function, only implemented for integers (equiv to factorial of (n-1)).""" - return sp.factorial(n - 1) # sp.prod(np.arange(1, n)) + return sp.factorial(n - 1) def CD_0_0(R): From 8b1c62b3c2f44cfcf0f06024309b615ca0faa3dc Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Sun, 5 Jan 2025 18:50:21 -0500 Subject: [PATCH 12/16] optimize performance of Dommaschk potentials --- desc/magnetic_fields/_dommaschk.py | 46 +++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/desc/magnetic_fields/_dommaschk.py b/desc/magnetic_fields/_dommaschk.py index 54eb80d18..31ba93b9f 100644 --- a/desc/magnetic_fields/_dommaschk.py +++ b/desc/magnetic_fields/_dommaschk.py @@ -5,7 +5,8 @@ """ -import numpy as np +import time + import sympy as sp from sympy.abc import x from sympy.vector import CoordSys3D @@ -107,7 +108,7 @@ def _set_potentials(self): params = dict( zip( keys, - [list(np.array(self._full_params[key])) for key in keys if key != "B0"], + [self._full_params[key].tolist() for key in keys if key != "B0"], ) ) params["a_arr"] = sp.symbols( @@ -183,7 +184,8 @@ def fit_magnetic_field( # noqa: C901 NFP (int): if the field being fit has a discrete toroidal symmetry with field period NFP. This will only allow Dommaschk m modes that are integer multiples of NFP. - verbose (int): verbosity level of fitting routine, > 0 prints residuals + verbose (int): verbosity level of fitting routine, > 0 prints residuals, + >1 prints timing info """ # We seek c in Ac = b # A will be the BR, Bphi and BZ from each individual @@ -291,7 +293,10 @@ def fit_magnetic_field( # noqa: C901 round(num_modes - 1) / 4 ) # how many l-m mode pairs there are, also is len(a_s) n = int(n) + t0 = time.time() domm_field = DommaschkPotentialField(**params) + if verbose > 1: + print(f"Time to make domm field: {time.time() - t0}") def get_B_dom(coords, X): """Fxn wrapper to find jacobian of dommaschk B wrt coefs a,b,c,d.""" @@ -320,8 +325,10 @@ def get_B_dom(coords, X): else: X += [obj] X = jnp.asarray(X) - + t0 = time.time() jac = jit(Derivative(get_B_dom, argnum=1))(coords, X) + if verbose > 1: + print(f"Time to compute jacobian: {time.time() - t0}") A = jac.reshape((rhs.size, len(X)), order="F") @@ -359,6 +366,14 @@ def get_B_dom(coords, X): # Dommaschk potential utility functions +# these kwargs found to make sp.integrate faster +sp_integrate_kwargs = { + "meijerg": None, + "heurisch": False, + "manual": False, +} + + def gamma(n): """Gamma function, only implemented for integers (equiv to factorial of (n-1)).""" return sp.factorial(n - 1) @@ -382,7 +397,9 @@ def CD_m_k(R, m, k): # call itself recursively # Eq 6 return sp.integrate( - CD_m_k(x, 0, k - 1) * (sp.log(x) - sp.log(R)) * x, (x, 1, R) + CD_m_k(x, 0, k - 1) * (sp.log(x) - sp.log(R)) * x, + (x, 1, R), + **sp_integrate_kwargs, ) elif k == 0: return CD_m_0(R, m) @@ -390,7 +407,9 @@ def CD_m_k(R, m, k): # Eq 7 return ( sp.integrate( - CD_m_k(x, m, k - 1) * ((x / R) ** m - (R / x) ** m) * x, (x, 1, R) + CD_m_k(x, m, k - 1) * ((x / R) ** m - (R / x) ** m) * x, + (x, 1, R), + **sp_integrate_kwargs, ) / 2 / m @@ -415,7 +434,9 @@ def CN_m_k(R, m, k): # call itself recursively # Eq 6 return sp.integrate( - CN_m_k(x, 0, k - 1) * (sp.log(x) - sp.log(R)) * x, (x, 1, R) + CN_m_k(x, 0, k - 1) * (sp.log(x) - sp.log(R)) * x, + (x, 1, R), + **sp_integrate_kwargs, ) elif k == 0: return CN_m_0(R, m) @@ -423,7 +444,9 @@ def CN_m_k(R, m, k): # Eq 7 return ( sp.integrate( - CN_m_k(x, m, k - 1) * ((x / R) ** m - (R / x) ** m) * x, (x, 1, R) + CN_m_k(x, m, k - 1) * ((x / R) ** m - (R / x) ** m) * x, + (x, 1, R), + **sp_integrate_kwargs, ) / 2 / m @@ -435,7 +458,8 @@ def D_m_n(R, Z, m, n): result = 0.0 for k in range(n + 1): if 2 * k <= n: - coef = CD_m_k(R, m, k) / gamma(n - 2 * k + 1) + # sp.expand here found to make later AD of potential faster + coef = sp.expand(CD_m_k(R, m, k)) / gamma(n - 2 * k + 1) exp = n - 2 * k result += coef * Z**exp return result @@ -446,7 +470,8 @@ def N_m_n(R, Z, m, n): result = 0.0 for k in range(n + 1): if 2 * k <= n: - coef = CN_m_k(R, m, k) / gamma(n - 2 * k + 1) + # sp.expand here found to make later AD of potential faster + coef = sp.expand(CN_m_k(R, m, k)) / gamma(n - 2 * k + 1) exp = n - 2 * k result += coef * Z**exp return result @@ -526,6 +551,7 @@ def dommaschk_potential(R, phi, Z, ms, ls, a_arr, b_arr, c_arr, d_arr, B0=1): value += V_m_l( R, phi, Z, ms[i], ls[i], a_arr[i], b_arr[i], c_arr[i], d_arr[i] ) + else: value += V_m_l(R, phi, Z, ms[0], ls[0], a_arr, b_arr, c_arr, d_arr) return value From 26a8c3538fa7d2530d7c7816ed83ce4e2974c3b0 Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Mon, 20 Jan 2025 15:28:50 -0500 Subject: [PATCH 13/16] move sympy import to backend --- desc/backend.py | 1 + desc/magnetic_fields/_dommaschk.py | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/desc/backend.py b/desc/backend.py index 3704cb0bb..e60d33cf6 100644 --- a/desc/backend.py +++ b/desc/backend.py @@ -5,6 +5,7 @@ import warnings import numpy as np +import sympy as sp from termcolor import colored import desc diff --git a/desc/magnetic_fields/_dommaschk.py b/desc/magnetic_fields/_dommaschk.py index 31ba93b9f..ff398ea48 100644 --- a/desc/magnetic_fields/_dommaschk.py +++ b/desc/magnetic_fields/_dommaschk.py @@ -7,11 +7,10 @@ import time -import sympy as sp from sympy.abc import x from sympy.vector import CoordSys3D -from desc.backend import jit, jnp +from desc.backend import jit, jnp, sp from desc.derivatives import Derivative from ._core import ScalarPotentialField, _MagneticField From 1f31ef359fa66fbc7a2b68d89bd56dbf189b3231 Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Mon, 20 Jan 2025 17:05:41 -0500 Subject: [PATCH 14/16] add proper ignore for flake8 warning --- desc/backend.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desc/backend.py b/desc/backend.py index e60d33cf6..f7f796854 100644 --- a/desc/backend.py +++ b/desc/backend.py @@ -5,7 +5,7 @@ import warnings import numpy as np -import sympy as sp +import sympy as sp # noqa: F401 from termcolor import colored import desc From 75222158e7bd60639150e5113f03c1da45c8c3c3 Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Tue, 21 Jan 2025 18:09:13 -0500 Subject: [PATCH 15/16] move sympy import --- desc/backend.py | 1 - desc/magnetic_fields/_dommaschk.py | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/desc/backend.py b/desc/backend.py index f7f796854..3704cb0bb 100644 --- a/desc/backend.py +++ b/desc/backend.py @@ -5,7 +5,6 @@ import warnings import numpy as np -import sympy as sp # noqa: F401 from termcolor import colored import desc diff --git a/desc/magnetic_fields/_dommaschk.py b/desc/magnetic_fields/_dommaschk.py index ff398ea48..31ba93b9f 100644 --- a/desc/magnetic_fields/_dommaschk.py +++ b/desc/magnetic_fields/_dommaschk.py @@ -7,10 +7,11 @@ import time +import sympy as sp from sympy.abc import x from sympy.vector import CoordSys3D -from desc.backend import jit, jnp, sp +from desc.backend import jit, jnp from desc.derivatives import Derivative from ._core import ScalarPotentialField, _MagneticField From 6c3a4b2488ca49630e0c565151c6b2a720417c8d Mon Sep 17 00:00:00 2001 From: Dario Panici Date: Wed, 22 Jan 2025 11:24:13 -0500 Subject: [PATCH 16/16] address comments --- desc/magnetic_fields/_dommaschk.py | 48 +++--- tests/test_magnetic_fields.py | 236 +++++++---------------------- 2 files changed, 75 insertions(+), 209 deletions(-) diff --git a/desc/magnetic_fields/_dommaschk.py b/desc/magnetic_fields/_dommaschk.py index 31ba93b9f..cfc736b45 100644 --- a/desc/magnetic_fields/_dommaschk.py +++ b/desc/magnetic_fields/_dommaschk.py @@ -5,14 +5,13 @@ """ -import time - import sympy as sp from sympy.abc import x from sympy.vector import CoordSys3D from desc.backend import jit, jnp from desc.derivatives import Derivative +from desc.utils import Timer from ._core import ScalarPotentialField, _MagneticField @@ -230,9 +229,6 @@ def fit_magnetic_field( # noqa: C901 # and max_l and max_m should probably be both nonzero anyways, # this is not an issue right now - # TODO: Add REGCOIL-like option to perform a least squares minimization - # of Bn, potentially also with some sort of regularization. - # mode numbers ms = [] ls = [] @@ -251,7 +247,6 @@ def fit_magnetic_field( # noqa: C901 ] # indices that should be 0 due to symmetry # if sym is True, when l is even then we need a=d=0 # and if l is odd then b=c=0 - # TODO: does the sym hold if the eq is not "centered" about R=1? for l in range(1, max_l + 1): for m in range(0, max_m * NFP + 1, NFP): @@ -293,10 +288,12 @@ def fit_magnetic_field( # noqa: C901 round(num_modes - 1) / 4 ) # how many l-m mode pairs there are, also is len(a_s) n = int(n) - t0 = time.time() + timer = Timer() + timer.start("Construct DommaschkPotentialField Object") domm_field = DommaschkPotentialField(**params) + timer.stop("Construct DommaschkPotentialField Object") if verbose > 1: - print(f"Time to make domm field: {time.time() - t0}") + timer.disp("Construct DommaschkPotentialField Object") def get_B_dom(coords, X): """Fxn wrapper to find jacobian of dommaschk B wrt coefs a,b,c,d.""" @@ -325,10 +322,11 @@ def get_B_dom(coords, X): else: X += [obj] X = jnp.asarray(X) - t0 = time.time() + timer.start("Compute Jacobian") jac = jit(Derivative(get_B_dom, argnum=1))(coords, X) + timer.stop("Compute Jacobian") if verbose > 1: - print(f"Time to compute jacobian: {time.time() - t0}") + timer.disp("Compute Jacobian") A = jac.reshape((rhs.size, len(X)), order="F") @@ -341,9 +339,9 @@ def get_B_dom(coords, X): # res is a list of len(1) so index into it print(f"Sum of Squares Residual of fit: {res[0]:1.4e} T^2") res_at_pts = A @ c - rhs - print(f"Max Residual: {jnp.max(abs(res_at_pts)):1.4e} T") - print(f"Min Residual: {jnp.min(abs(res_at_pts)):1.4e} T") - print(f"Mean Residual: {jnp.mean(abs(res_at_pts)):1.4e} T") + print(f"Max Absolute Residual: {jnp.max(abs(res_at_pts)):1.4e} T") + print(f"Min Absolute Residual: {jnp.min(abs(res_at_pts)):1.4e} T") + print(f"Mean Absolute Residual: {jnp.mean(abs(res_at_pts)):1.4e} T") # recover the params from the c coefficient vector B0 = c[0] @@ -519,30 +517,30 @@ def dommaschk_potential(R, phi, Z, ms, ls, a_arr, b_arr, c_arr, d_arr, B0=1): Parameters ---------- - R,phi,Z : array-like - Cylindrical coordinates (1-D arrays of each of size num_eval_pts) - to evaluate the Dommaschk potential term at. + R,phi,Z : sympy.vector.scalar.BaseScalar + Cylindrical coordinate sympy symbols. + Obtained from sympy.vector.CoordSys3D using the ``"cyl"`` basis. ms : 1D array-like of int first indices of V_m_l terms ls : 1D array-like of int second indices of V_m_l terms - a_arr : 1D array-like of float + a_arr : list of sympy variables a_m_l coefficients of V_m_l terms, which multiplies cos(m*phi)*D_m_l - b_arr : 1D array-like of float + b_arr : list of sympy variables b_m_l coefficients of V_m_l terms, which multiplies sin(m*phi)*D_m_l - c_arr : 1D array-like of float + c_arr : list of sympy variables c_m_l coefficients of V_m_l terms, which multiplies cos(m*phi)*N_m_l-1 - d_arr : 1D array-like of float + d_arr : list of sympy variables d_m_l coefficients of V_m_l terms, which multiplies sin(m*phi)*N_m_l-1 - B0: float, toroidal magnetic field strength scale, this is the strength of the + B0: float + toroidal magnetic field strength scale, this is the strength of the 1/R part of the magnetic field and is the Bphi at R=1. Returns ------- - value : array-like - Value of the total dommaschk potential evaluated - at the given R,phi,Z points - (same size as the size of the given R,phi, Z arrays). + value : sympy expression + Sympy expression for the total dommaschk potential as a function + of R, phi and Z. """ value = B0 * phi # phi term diff --git a/tests/test_magnetic_fields.py b/tests/test_magnetic_fields.py index 5ff9b6ce9..d3b1b232e 100644 --- a/tests/test_magnetic_fields.py +++ b/tests/test_magnetic_fields.py @@ -1570,192 +1570,60 @@ def test_domm_W7AS(): # W7-AS # The coefficients are taken from IPP-Report IPP_0_48 by Dommaschk et al. B0 = 1.00 + # fmt: off # toroidal harmonics - ms = [ - 0, - 5, - 10, - 15, - 0, - 5, - 10, - 15, - 0, - 5, - 10, - 15, - 0, - 5, - 10, - 15, - 0, - 5, - 10, - 15, - 0, - 5, - 10, - 15, - 0, - 5, - 10, - 15, - ] + ms = [ 0, 5, 10, 15, + 0, 5, 10, 15, + 0, 5, 10, 15, + 0, 5, 10, 15, + 0, 5, 10, 15, + 0, 5, 10, 15, + 0, 5, 10, 15 ] # poloidal harmonics - ls = [ - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 4, - 4, - 4, - 4, - 5, - 5, - 5, - 5, - 6, - 6, - 6, - 6, - ] - a_w7as = [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0094324, - 0.0112792, - 0.0147238, - -0.00100904, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0410242, - -4.15263, - -3.33006, - 0.0359866, - 0.0, - 0.0, - 0.0, - 0.0, - -29.9792, - -135.852, - 60.1416, - -215.314, - 0.0, - 0.0, - 0.0, - 0.0, - ] - - b_w7as = [ - 0.0, - -0.0121413, - 0.000471873, - 4.58071e-05, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 1.25878, - 0.237015, - -0.0403158, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 4.06992, - 38.1763, - 15.0701, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - -3192.22, - 376.945, - 2621.02, - ] - - c_w7as = [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.255341, - 1.35643, - 0.351854, - 0.0165178, - 0.0, - 0.0, - 0.0, - 0.0, - -14.022, - -9.04059, - 40.75, - 5.76041, - 0.0, - 0.0, - 0.0, - 0.0, - -3877.26, - -17583.9, - -20976.0, - 937.2, - ] - - d_w7as = [ - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.190922, - -0.0105725, - 0.00335741, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.163836, - 1.60217, - -0.136241, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 120.441, - 344.756, - 193.934, - 0.0, - 0.0, - 0.0, - 0.0, - ] - + ls = [ 0, 0, 0, 0, + 1, 1, 1, 1, + 2, 2, 2, 2, + 3, 3, 3, 3, + 4, 4, 4, 4, + 5, 5, 5, 5, + 6, 6, 6, 6 ] + # Arrays: + # m 0 5 10 15 # l + a_w7as=[0.0 , 0.0 , 0.0 , 0.0, # 0 + 0.0094324, 0.0112792, 0.0147238 ,-0.00100904, # 1 + 0.0 , 0.0 , 0.0 , 0.0, # 2 + 0.0410242,-4.15263 ,-3.33006 , 0.0359866, # 3 + 0.0 , 0.0 , 0.0 , 0.0, # 4 + -29.9792 ,-135.852 , 60.1416 ,-215.314 , # 5 + 0.0 , 0.0 , 0.0 , 0.0 ] # 6 + + # 0 5 10 15 + b_w7as=[0.0 ,-0.0121413,0.000471873, 4.58071E-05,# 0 + 0.0 , 0.0 , 0.0 , 0.0 , # 1 + 0.0 , 1.25878 , 0.237015 , -0.0403158, # 2 + 0.0 , 0.0 , 0.0 , 0.0 , # 3 + 0.0 , 4.06992 , 38.1763 , 15.0701 , # 4 + 0.0 , 0.0 , 0.0 , 0.0 , # 5 + 0.0 ,-3192.22 , 376.945 , 2621.02 ] # 6 + + # 0 5 10 15 + c_w7as=[0.0 , 0.0 , 0.0 , 0.0, # 0 + 0.0 , 0.0 , 0.0 , 0.0 , # 1 + 0.255341 , 1.35643 , 0.351854 , 0.0165178, # 2 + 0.0 , 0.0 , 0.0 , 0.0 , # 3 + -14.022 , -9.04059 , 40.75 , 5.76041 , # 4 + 0.0 , 0.0 , 0.0 , 0.0 , # 5 + -3877.26 , -17583.9 ,-20976. , 937.2 ] # 6 + + # 0 5 10 15 + d_w7as=[0.0 , 0.0 , 0.0 , 0.0, # 0 + 0.0 , 0.190922,-0.0105725, 0.00335741, # 1 + 0.0 , 0.0 , 0.0 , 0.0 , # 2 + 0.0 , 0.163836, 1.60217 ,-0.136241, # 3 + 0.0 , 0.0 , 0.0 , 0.0 , # 4 + 0.0 , 120.441 , 344.756 , 193.934 , # 5 + 0.0 , 0.0 , 0.0 , 0.0 ] # 6 + # fmt: on Bw7as_dom = DommaschkPotentialField( B0=B0, a_arr=a_w7as,