Skip to content
Closed
Show file tree
Hide file tree
Changes from 103 commits
Commits
Show all changes
135 commits
Select commit Hold shift + click to select a range
d556b64
adding more geometric terms 2
rahulgaur104 Aug 24, 2023
d0b26ef
Merge branch 'PlasmaControl:master' into rg/adjoint_ballooning
rahulgaur104 Aug 29, 2023
72773e8
adding zeta derivatives of the geometry terms + creating grid in the …
rahulgaur104 Aug 29, 2023
e1d8023
trying to pass tests
rahulgaur104 Aug 30, 2023
f95bd7f
trying to pass tests 2
rahulgaur104 Aug 30, 2023
2921c2e
fixing tests 3
rahulgaur104 Aug 30, 2023
5519ee2
fixing tests 3
rahulgaur104 Aug 30, 2023
3415574
Merge branch 'PlasmaControl:master' into rg/adjoint_ballooning
rahulgaur104 Aug 31, 2023
817ca66
current tests passing, coverage reduced, additional tests needed
rahulgaur104 Aug 31, 2023
02a5eb5
current tests passing, coverage reduced, additional tests needed 2
rahulgaur104 Sep 1, 2023
2880239
Merge branch 'PlasmaControl:master' into rg/adjoint_ballooning
rahulgaur104 Sep 1, 2023
1a7d30a
Merge branch 'master' into rg/adjoint_ballooning
rahulgaur104 Sep 14, 2023
0dec9c3
resolving conflicts --- removed on-axis terms for some basis vector d…
rahulgaur104 Sep 17, 2023
d328396
adding FD ideal balloonign solver + tests for geometry
rahulgaur104 Sep 21, 2023
b79a238
adding FD ideal balloonign solver + tests for geometry
rahulgaur104 Sep 21, 2023
b30bb32
adding FD ideal balloonign solver + tests for geometry
rahulgaur104 Sep 21, 2023
0667209
adding FD ideal balloonign solver + tests for geometry
rahulgaur104 Sep 21, 2023
1065e4f
adding FD ideal balloonign solver + tests for ballooning coefficients
rahulgaur104 Sep 23, 2023
c3c835a
adding FD ideal balloonign solver + tests for ballooning coefficients
rahulgaur104 Sep 23, 2023
582ccac
Merge branch 'PlasmaControl:master' into rg/adjoint_ballooning
rahulgaur104 Sep 23, 2023
e04ade6
added derivatives of the PEST jacobian
rahulgaur104 Sep 23, 2023
dbd7057
Merge branch 'rg/adjoint_ballooning' of https://github.com/rahulgaur1…
rahulgaur104 Sep 30, 2023
c72b51d
temporary fix for axis limits of derivatives of contravariant basis v…
rahulgaur104 Sep 30, 2023
d996cf3
removing unused/redundant basis vector
rahulgaur104 Sep 30, 2023
641f989
created a new master_compute_data.pkl
rahulgaur104 Sep 30, 2023
69e166e
Merge branch 'PlasmaControl:master' into rg/adjoint_ballooning
rahulgaur104 Sep 30, 2023
eea93fb
small fix in _metric.py
rahulgaur104 Sep 30, 2023
0adc1fd
Merge branch 'rg/adjoint_ballooning' of https://github.com/rahulgaur1…
rahulgaur104 Sep 30, 2023
2930598
adding master_compute_data.pkl; had to remove pre-commit temporarily
rahulgaur104 Oct 1, 2023
b3e8177
adding a test for the ballooning solver + some changes to the solver
rahulgaur104 Oct 1, 2023
91a111d
Merge branch 'rg/adjoint_ballooning' of https://github.com/rahulgaur1…
rahulgaur104 Oct 2, 2023
bee8b20
Merge branch 'PlasmaControl:master' into rg/adjoint_ballooning
rahulgaur104 Oct 7, 2023
5782aa1
Merge branch 'PlasmaControl:master' into rg/adjoint_ballooning
rahulgaur104 Oct 10, 2023
9b9e538
Merge branch 'PlasmaControl:master' into rg/adjoint_ballooning
rahulgaur104 Oct 11, 2023
5d15cc0
Merge branch 'PlasmaControl:master' into rg/adjoint_ballooning
rahulgaur104 Oct 14, 2023
5d85cbb
Solver now giving relatively sensible values, derivatives of gradpar_…
rahulgaur104 Oct 17, 2023
5af0c55
Merge branch 'PlasmaControl:master' into rg/adjoint_ballooning
rahulgaur104 Oct 17, 2023
9cadb18
fixing bugs in geometry-related calculation
rahulgaur104 Oct 17, 2023
fb6e90b
trying to pass tests
rahulgaur104 Oct 21, 2023
21ba604
allow deprecation warning in desc.compute._stability
rahulgaur104 Oct 21, 2023
2a4f68b
removing a non-DESC log file
rahulgaur104 Oct 21, 2023
e845b01
wrapping the ballooning solver in the Objective class
rahulgaur104 Oct 21, 2023
2c173cc
Merge branch 'rg/adjoint_ballooning' of https://github.com/rahulgaur1…
rahulgaur104 Oct 22, 2023
ad5e7b6
adding field-aligned grid for ballooning + modified __init__.py
rahulgaur104 Oct 22, 2023
257e0cc
Merge branch 'rg/adjoint_ballooning' of https://github.com/rahulgaur1…
rahulgaur104 Oct 22, 2023
bdd0c33
final fixes + jax AD only works with CPU foe eigvals doesn't work on …
rahulgaur104 Oct 22, 2023
6fb7e9e
resolving merge conflicts + linting
rahulgaur104 Nov 15, 2023
eec1f88
Merge branch 'master' into rg/adjoint_ballooning
rahulgaur104 Nov 15, 2023
59b6528
adding eigvals custom jvp + fixing tests
rahulgaur104 Nov 15, 2023
55961ba
Merge branch 'master' into rg/adjoint_ballooning
rahulgaur104 Nov 17, 2023
5e05533
fixing tests 2
rahulgaur104 Nov 17, 2023
e620e91
Merge branch 'rg/adjoint_ballooning' of https://github.com/rahulgaur1…
rahulgaur104 Nov 17, 2023
c80e2e2
Merge branch 'master' into rg/adjoint_ballooning
rahulgaur104 Nov 17, 2023
9d79a5d
updating objectives/_stability and desc/backend
rahulgaur104 Nov 17, 2023
b1a5e56
Merge branch 'rg/adjoint_ballooning' of https://github.com/rahulgaur1…
rahulgaur104 Nov 18, 2023
5dd3700
Merge branch 'master' into rg/adjoint_ballooning
rahulgaur104 Nov 18, 2023
9b2cd5c
remove jitting from desc/compute/_stability.py
rahulgaur104 Nov 18, 2023
08bd696
Merge branch 'rg/adjoint_ballooning' of https://github.com/rahulgaur1…
rahulgaur104 Nov 18, 2023
9344f9b
Merge branch 'PlasmaControl:master' into rg/adjoint_ballooning
rahulgaur104 Nov 27, 2023
4effacf
Merge branch 'master' into rg/adjoint_ballooning
rahulgaur104 Nov 28, 2023
1c9e66f
making compatible with recent commits + added two new ways of solving…
rahulgaur104 Nov 28, 2023
a07597e
Merge branch 'rg/adjoint_ballooning' of https://github.com/rahulgaur1…
rahulgaur104 Nov 28, 2023
ae60141
simplified the solver to reduce memory requirements
rahulgaur104 Nov 28, 2023
7d4e0f1
Merge branch 'rg/adjoint_ballooning' of https://github.com/rahulgaur1…
rahulgaur104 Dec 7, 2023
ae4eeb1
fixing merge conflicts with master2
rahulgaur104 Dec 7, 2023
2fbc375
merging rc/root, i.e., backward differentaibility through the DESC ro…
rahulgaur104 Dec 7, 2023
82d59a4
optimizing the code to increase GPU usage and number of fieldlines we…
rahulgaur104 Dec 9, 2023
baf5090
adding the Newcomb metric
rahulgaur104 Dec 9, 2023
7914aec
Newcomb metric working, tests failing
rahulgaur104 Dec 9, 2023
3ba1a95
Newcomb metric working, tests failing, merge errors fixed
rahulgaur104 Dec 18, 2023
8b3c728
merging master and resolving conflicts
rahulgaur104 Dec 18, 2023
a361212
Fixing the Newcomb metric, still getting nan optimality after 1 itera…
rahulgaur104 Dec 18, 2023
4d874a1
Merge branch 'rg/adjoint_ballooning' of https://github.com/rahulgaur1…
rahulgaur104 Dec 27, 2023
b1a0dc4
merging dd/omnigenity into this PR. Is this enough to give us KBM sta…
rahulgaur104 Dec 27, 2023
212273c
several small changes: normalization, simpson's rule, Newcomb's metric
rahulgaur104 Jan 17, 2024
cc57585
merging master
rahulgaur104 Jan 17, 2024
47b3d5f
Merge branch 'PlasmaControl:master' into rg/adjoint_ballooning
rahulgaur104 Jan 17, 2024
695e9af
merging with master
rahulgaur104 Feb 9, 2024
c09e27d
merging with master 2
rahulgaur104 Feb 9, 2024
9c3227d
merging dd/omnigenity again 2
rahulgaur104 Feb 9, 2024
0e51f19
fixing black formatting
rahulgaur104 Feb 9, 2024
90610ff
Merge branch 'rg/adjoint_ballooning' of https://github.com/rahulgaur1…
rahulgaur104 Feb 9, 2024
85ead1b
Adding FixCurveRotation
rahulgaur104 Feb 9, 2024
53c3f2c
Merge branch 'rg/adjoint_ballooning' of https://github.com/rahulgaur1…
rahulgaur104 Feb 9, 2024
5cf43eb
small changes
rahulgaur104 Feb 9, 2024
e4ead7a
Merge branch 'rg/adjoint_ballooning' of https://github.com/rahulgaur1…
rahulgaur104 Feb 9, 2024
4b2bcfd
fixing tests
rahulgaur104 Feb 9, 2024
223d4c0
fixing tests
rahulgaur104 Feb 9, 2024
f0f741e
Merge branch 'PlasmaControl:master' into rg/adjoint_ballooning
rahulgaur104 Feb 10, 2024
087562c
merging with dd/omnigenity 3
rahulgaur104 Feb 10, 2024
be9c4eb
merging with dd/omnigenity 5
rahulgaur104 Feb 10, 2024
6eba64d
merging master + dd/omnigenity should do that same 2
rahulgaur104 Feb 23, 2024
e031fa3
merging with master, omnigenity stale 2
rahulgaur104 Feb 27, 2024
b2189c3
merging dd/omnigenity
rahulgaur104 Feb 28, 2024
20a9d70
Merge branch 'dd/omnigenity' into rg/adjoint_ballooning
rahulgaur104 Feb 29, 2024
aadf5e0
merging master and resolving conflicts
rahulgaur104 Mar 27, 2024
c8cf520
fixing jax.backend line
rahulgaur104 Mar 27, 2024
ad05f95
Merge branch 'master' into rg/adjoint_ballooning
rahulgaur104 Mar 28, 2024
7a4f95b
resolving conflicts and merging with master
rahulgaur104 Apr 3, 2024
dd6b6e5
fixing normalization issue after comparing with VMEC+SIMSOPT ballooni…
rahulgaur104 Apr 3, 2024
743a22d
trying to fix test_data_index_deps
rahulgaur104 Apr 3, 2024
afb600d
trying to fix test_data_index_deps 2
rahulgaur104 Apr 3, 2024
b314872
trying to fix test_data_index_deps 3
rahulgaur104 Apr 3, 2024
1ffd93a
Merge branch 'master' into rg/adjoint_ballooning
rahulgaur104 Apr 4, 2024
b36cd90
merging master and resolving merge conflicsts
rahulgaur104 Jun 21, 2024
3a83ae6
Merge branch 'rg/adjoint_ballooning' of https://github.com/rahulgaur1…
rahulgaur104 Jun 21, 2024
30769fe
replacing ideal_ball_gamma4 with ballooning potential and removing id…
rahulgaur104 Jun 21, 2024
76338da
making changes suggested by Rory
rahulgaur104 Jun 21, 2024
88f56fe
adding ideal_ballooning_stability tutorial notebook
rahulgaur104 Jun 21, 2024
76319ef
replacing the ideal_ballooning tutorial with the version 1....
rahulgaur104 Jun 25, 2024
11e7311
merging master
rahulgaur104 Jun 26, 2024
3db0974
Merge branch 'PlasmaControl:master' into rg/adjoint_ballooning
rahulgaur104 Jun 26, 2024
5e4bb77
rg/adjoint_ballooning_solver + fieldline_compute
rahulgaur104 Jun 26, 2024
370168e
modifying the jupyter notebook... + linear constraints failing during…
rahulgaur104 Jun 26, 2024
ed7a6a9
Merge branch 'rg/adjoint_ballooning2' into rg/adjoint_ballooning
rahulgaur104 Jun 26, 2024
577fb30
updating the tutorial
rahulgaur104 Jun 26, 2024
25a9a11
making small changes to the tutorial
rahulgaur104 Jun 26, 2024
b4d0f36
merging fieldline_compute
rahulgaur104 Jul 8, 2024
23f6a7e
minor changes
rahulgaur104 Jul 8, 2024
d330d7c
Merge branch 'master' into rg/adjoint_ballooning
rahulgaur104 Jul 20, 2024
a2e6d0d
merging master and resolving cconflict in backend.py
rahulgaur104 Aug 6, 2024
09eb0e7
adding comparison test of marginal stability point with COBRAVMEC
rahulgaur104 Aug 7, 2024
59da394
adding a test for the BallooningStability objective
rahulgaur104 Aug 7, 2024
10444ac
fixing stability test
rahulgaur104 Aug 7, 2024
4ff760c
removing useless tests and compute functions
rahulgaur104 Aug 7, 2024
039e344
trying to fix tests 1
rahulgaur104 Aug 7, 2024
c40ad9b
trying to fix tests 2
rahulgaur104 Aug 7, 2024
d137dde
changing notebook environment to Python3
rahulgaur104 Aug 7, 2024
1907d12
fixing tests; correcting bad merge; adjusted to the new api
rahulgaur104 Aug 7, 2024
b5e2868
changing test_compute_everything agains so that tests pass
rahulgaur104 Aug 7, 2024
35acbcd
trying to pass more tests
rahulgaur104 Aug 7, 2024
28d0125
trying to pass more tests 2
rahulgaur104 Aug 8, 2024
e34e7cc
modifying setup.cfg; I don't know why codecov is failing
rahulgaur104 Aug 8, 2024
2fe95c0
Merge branch 'master' into rg/adjoint_ballooning
rahulgaur104 Aug 8, 2024
3c4db48
modifying setup.cfg; I don't know why codecov is failing 2
rahulgaur104 Aug 8, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 107 additions & 0 deletions desc/backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,15 @@
desc.__version__, np.__version__, y.dtype
)
)


print(
"Using device: {}, with {:.2f} GB available memory".format(
desc_config.get("device"), desc_config.get("avail_mem")
)
)


if use_jax: # noqa: C901 - FIXME: simplify this, define globally and then assign?
jit = jax.jit
fori_loop = jax.lax.fori_loop
Expand All @@ -73,6 +76,12 @@
vmap = jax.vmap
scan = jax.lax.scan
bincount = jnp.bincount
from functools import partial

import jax
import jax.numpy as jnp
import jaxlib
from jax import config as jax_config
from jax import custom_jvp
from jax.experimental.ode import odeint
from jax.scipy.linalg import block_diag, cho_factor, cho_solve, qr, solve_triangular
Expand Down Expand Up @@ -158,6 +167,94 @@ def tree_unstack(tree):
leaves, treedef = jtu.tree_flatten(tree)
return [treedef.unflatten(leaf) for leaf in zip(*leaves)]

_eigvals_cpu = jax.jit(jnp.linalg.eigvals, device=jax.devices("cpu")[0])

@jax.custom_jvp
def eigvals(A):
"""
Eigenvalue solver.

Returns the eigenvalues of the square matrix A.
eigvals only run on CPUs
"""
u = jax.pure_callback(
_eigvals_cpu, jnp.zeros_like(A[..., -1]) + 1j, A, vectorized=True
)
return u

@eigvals.defjvp
def _eigvals_jvp(primals, tangents):

u = eigvals(primals[0])

@partial(jnp.vectorize, signature="(n,n),(n,n)->(n)")
def jvpfun(primals, tangents):
u, du = jax.jvp(_eigvals_cpu, (primals,), (tangents,))
return du.squeeze()

du = jax.pure_callback(jvpfun, u, *primals, *tangents, vectorized=True)
return u, du

_gen_eigval_cpu = jax.jit(jax.scipy.linalg.eigh, device=jax.devices("cpu")[0])

@jax.custom_jvp
def gen_eigval(A):
"""
Generalize eigenvalue solver.

Returns the top n eigenvalues of the square matrix A. Calculation is
being performed on a CPU. If the CPU version can provide the top eigenvalue,
the calculation should be faster on a CPU.
Currently doesn't work because of the limitations of the jax functionality.
"""
neigs, N, _ = jnp.shape(A)
u = jnp.zeros((N,))
i = jnp.arange(N)

u = u.at[i].set(
jax.pure_callback(
_gen_eigval_cpu,
jnp.zeros_like(A[i, :, :]),
A[i, :, :],
k=1,
sigma=0.42,
vectorized=True,
)
)
return u

@gen_eigval.defjvp
def _gen_eigval_jvp(primals, tangents):

u = gen_eigval(primals[0])

@partial(jnp.vectorize, signature="(n,n),(n,n)->(n)")
def jvpfun(primals, tangents):
u, du = jax.jvp(_gen_eigval_cpu, (primals,), (tangents,))
return du.squeeze()

du = jax.pure_callback(jvpfun, u, *primals, *tangents, vectorized=True)
return u, du

@jit
def simspson_integrator(y, dx):
"""Simpsons integrations scheme for high-order accurate integrals."""
if len(y[..., :]) % 2 == 1:
raise ValueError("n must be even")

S = (
dx
/ 3
* (
y[..., 0]
+ y[..., -1]
+ 4 * jnp.sum(y[..., 1:-1:2], axis=-1)
+ 2 * jnp.sum(y[..., 2:-2:2], axis=-1)
)
)

return S

def root_scalar(
fun,
x0,
Expand Down Expand Up @@ -373,6 +470,7 @@ def tangent_solve(g, y):
# for coverage purposes
else: # pragma: no cover
jit = lambda func, *args, **kwargs: func
import numpy as np
import scipy.optimize
from scipy.integrate import odeint # noqa: F401
from scipy.linalg import ( # noqa: F401
Expand Down Expand Up @@ -636,6 +734,15 @@ def custom_jvp(fun, *args, **kwargs):
fun.defjvps = lambda *args, **kwargs: None
return fun

def eigvals(A):
"""
Eigenvalue solver.

Returns the eigenvalues of the square matrix A.
"""
u = np.linalg.eigvals(A)
return u

def root_scalar(
fun,
x0,
Expand Down
227 changes: 227 additions & 0 deletions desc/compute/_basis_vectors.py
Original file line number Diff line number Diff line change
Expand Up @@ -4370,6 +4370,233 @@ def _grad_alpha(params, transforms, profiles, data, **kwargs):
return data


@register_compute_fun(
name="grad(alpha)_t",
label="\\partial_{\\theta} \\nabla \\alpha",
units="m^{-1}",
units_long="Inverse meters",
description="Poloidal derivative of the gradient of the field line label",
dim=3,
params=[],
transforms={},
profiles=[],
coordinates="rtz",
data=[
"e^rho",
"e^theta",
"e^zeta",
"e^rho_t",
"e^theta_t",
"e^zeta_t",
"alpha_r",
"alpha_t",
"alpha_z",
"alpha_rt",
"alpha_tt",
"alpha_tz",
],
)
def _grad_alpha_t(params, transforms, profiles, data, **kwargs):
data["grad(alpha)_t"] = (
data["alpha_r"] * data["e^rho_t"].T
+ data["alpha_rt"] * data["e^rho"].T
+ data["alpha_t"] * data["e^theta_t"].T
+ data["alpha_tt"] * data["e^theta"].T
+ data["alpha_z"] * data["e^zeta_t"].T
+ data["alpha_tz"] * data["e^zeta"].T
).T
return data


@register_compute_fun(
name="grad(alpha)_z",
label="\\partial_{\\zeta} (\\nabla \\alpha)",
units="m^{-1}",
units_long="Inverse meters",
description="Toroidal derivative of the gradient of the field line label",
dim=3,
params=[],
transforms={},
profiles=[],
coordinates="rtz",
data=[
"e^rho",
"e^theta",
"e^zeta",
"e^rho_z",
"e^theta_z",
"e^zeta_z",
"alpha_r",
"alpha_t",
"alpha_z",
"alpha_rz",
"alpha_tz",
"alpha_zz",
],
)
def _grad_alpha_z(params, transforms, profiles, data, **kwargs):
data["grad(alpha)_z"] = (
data["alpha_r"] * data["e^rho_z"].T
+ data["alpha_rz"] * data["e^rho"].T
+ data["alpha_t"] * data["e^theta_z"].T
+ data["alpha_tz"] * data["e^theta"].T
+ data["alpha_z"] * data["e^zeta_z"].T
+ data["alpha_zz"] * data["e^zeta"].T
).T
return data


@register_compute_fun(
name="grad(alpha)_tt",
label="\\partial_{\\theta \\theta} \\nabla \\alpha",
units="m^{-1}",
units_long="Inverse meters",
description="Poloidal derivative of the gradient of the field line label",
dim=3,
params=[],
transforms={},
profiles=[],
coordinates="rtz",
data=[
"e^rho",
"e^theta",
"e^zeta",
"e^rho_t",
"e^theta_t",
"e^zeta_t",
"e^rho_tt",
"e^theta_tt",
"e^zeta_tt",
"alpha_r",
"alpha_t",
"alpha_z",
"alpha_rt",
"alpha_tt",
"alpha_tz",
"alpha_rtt",
"alpha_ttt",
"alpha_ttz",
],
)
def _grad_alpha_tt(params, transforms, profiles, data, **kwargs):
data["grad(alpha)_tt"] = (
data["alpha_r"] * data["e^rho_tt"].T
+ data["alpha_rtt"] * data["e^rho"].T
+ 2 * data["alpha_rt"] * data["e^rho_t"].T
+ data["alpha_t"] * data["e^theta_tt"].T
+ data["alpha_ttt"] * data["e^theta"].T
+ 2 * data["alpha_tt"] * data["e^theta_t"].T
+ data["alpha_z"] * data["e^zeta_tt"].T
+ data["alpha_ttz"] * data["e^zeta"].T
+ 2 * data["alpha_tz"] * data["e^zeta_t"].T
).T
return data


@register_compute_fun(
name="grad(alpha)_zz",
label="\\partial_{\\zeta \\zeta} (\\nabla \\alpha)",
units="m^{-1}",
units_long="Inverse meters",
description="Toroidal derivative of the gradient of the field line label",
dim=3,
params=[],
transforms={},
profiles=[],
coordinates="rtz",
data=[
"e^rho",
"e^theta",
"e^zeta",
"e^rho_z",
"e^theta_z",
"e^zeta_z",
"e^rho_zz",
"e^theta_zz",
"e^zeta_zz",
"alpha_r",
"alpha_t",
"alpha_z",
"alpha_rz",
"alpha_tz",
"alpha_zz",
"alpha_rzz",
"alpha_tzz",
"alpha_zzz",
],
)
def _grad_alpha_zz(params, transforms, profiles, data, **kwargs):
data["grad(alpha)_zz"] = (
data["alpha_r"] * data["e^rho_zz"].T
+ data["alpha_rzz"] * data["e^rho"].T
+ 2 * data["alpha_rz"] * data["e^rho_z"].T
+ data["alpha_t"] * data["e^theta_zz"].T
+ data["alpha_tzz"] * data["e^theta"].T
+ 2 * data["alpha_tz"] * data["e^theta_z"].T
+ data["alpha_z"] * data["e^zeta_zz"].T
+ data["alpha_zzz"] * data["e^zeta"].T
+ 2 * data["alpha_zz"] * data["e^zeta_z"].T
).T
return data


@register_compute_fun(
name="grad(alpha)_tz",
label="\\partial_{\\theta \\zeta} (\\nabla \\alpha)",
units="m^{-1}",
units_long="Inverse meters",
description=(
"Mixed toroidal and poloidal derivative of the gradient"
" of the field line label"
),
dim=3,
params=[],
transforms={},
profiles=[],
coordinates="rtz",
data=[
"e^rho",
"e^theta",
"e^zeta",
"e^rho_z",
"e^theta_z",
"e^zeta_z",
"e^rho_t",
"e^theta_t",
"e^zeta_t",
"e^rho_tz",
"e^theta_tz",
"e^zeta_tz",
"alpha_r",
"alpha_t",
"alpha_z",
"alpha_rz",
"alpha_tz",
"alpha_tt",
"alpha_rt",
"alpha_rtz",
"alpha_ttz",
"alpha_tzz",
],
)
def _grad_alpha_tz(params, transforms, profiles, data, **kwargs):
data["grad(alpha)_tz"] = (
data["alpha_r"] * data["e^rho_tz"].T
+ data["alpha_rtz"] * data["e^rho"].T
+ data["alpha_rz"] * data["e^rho_t"].T
+ data["alpha_rt"] * data["e^rho_z"].T
+ data["alpha_t"] * data["e^theta_tz"].T
+ data["alpha_ttz"] * data["e^theta"].T
+ data["alpha_tz"] * data["e^theta_t"].T
+ data["alpha_tt"] * data["e^theta_z"].T
+ data["alpha_z"] * data["e^zeta_tz"].T
+ data["alpha_tzz"] * data["e^zeta"].T
+ data["alpha_tz"] * data["e^zeta_t"].T
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this should be data["alpha_tz"] * data["e^zeta_z"].T

+ data["alpha_tt"] * data["e^zeta_z"].T
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this should be data["alpha_zz"] * data["e^zeta_t"].T

).T
return data


@register_compute_fun(
name="grad(psi)",
label="\\nabla\\psi",
Expand Down
Loading