PlasmaControl / DESC

Stellarator Equilibrium and Optimization Suite
MIT License
87 stars 22 forks source link

Generalize toroidal angle beyond phi cylindrical #465

Open f0uriest opened 1 year ago

f0uriest commented 1 year ago

This has come up several times now, and would be very useful for dealing with strongly shaped axes, racetrack/figure8 type shapes etc.

The main things to do:

f0uriest commented 1 year ago

including code here for generating new basis vector compute funs.

From mathematica> derivatives.txt:

{(R^(1,0,0))[\[Rho],\[Theta],\[Zeta]],R[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]],(Z^(1,0,0))[\[Rho],\[Theta],\[Zeta]]}
{(R^(0,1,0))[\[Rho],\[Theta],\[Zeta]],R[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]],(Z^(0,1,0))[\[Rho],\[Theta],\[Zeta]]}
{(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]],R[\[Rho],\[Theta],\[Zeta]] (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]),(Z^(0,0,1))[\[Rho],\[Theta],\[Zeta]]}
{-R[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]^2+(R^(2,0,0))[\[Rho],\[Theta],\[Zeta]],2 (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (W^(2,0,0))[\[Rho],\[Theta],\[Zeta]],(Z^(2,0,0))[\[Rho],\[Theta],\[Zeta]]}
{-R[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(1,1,0))[\[Rho],\[Theta],\[Zeta]],(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]],(Z^(1,1,0))[\[Rho],\[Theta],\[Zeta]]}
{-R[\[Rho],\[Theta],\[Zeta]] (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(1,0,1))[\[Rho],\[Theta],\[Zeta]],(1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]],(Z^(1,0,1))[\[Rho],\[Theta],\[Zeta]]}
{-3 (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]^2-3 R[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (W^(2,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(3,0,0))[\[Rho],\[Theta],\[Zeta]],3 ((W^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (R^(2,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (W^(2,0,0))[\[Rho],\[Theta],\[Zeta]])+R[\[Rho],\[Theta],\[Zeta]] (-(W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]^3+(W^(3,0,0))[\[Rho],\[Theta],\[Zeta]]),(Z^(3,0,0))[\[Rho],\[Theta],\[Zeta]]}
{-(R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]^2-2 R[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]]-(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (2 (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (W^(2,0,0))[\[Rho],\[Theta],\[Zeta]])+(R^(2,1,0))[\[Rho],\[Theta],\[Zeta]],2 (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (R^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+2 (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (R^(2,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(2,0,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (-(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]^2+(W^(2,1,0))[\[Rho],\[Theta],\[Zeta]]),(Z^(2,1,0))[\[Rho],\[Theta],\[Zeta]]}
{-2 (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]-(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]^2-2 R[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (W^(2,0,0))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(2,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(2,0,1))[\[Rho],\[Theta],\[Zeta]],2 (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (R^(1,0,1))[\[Rho],\[Theta],\[Zeta]]+2 (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]]+(R^(2,0,0))[\[Rho],\[Theta],\[Zeta]]+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (R^(2,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(2,0,0))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] ((1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]^2-(W^(2,0,1))[\[Rho],\[Theta],\[Zeta]]),(Z^(2,0,1))[\[Rho],\[Theta],\[Zeta]]}
{-(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]^2 (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (W^(0,2,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]-2 (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] ((R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]])+(R^(1,2,0))[\[Rho],\[Theta],\[Zeta]],(W^(0,2,0))[\[Rho],\[Theta],\[Zeta]] (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,2,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+2 (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (R^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+2 (R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (-(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]^2 (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(W^(1,2,0))[\[Rho],\[Theta],\[Zeta]]),(Z^(1,2,0))[\[Rho],\[Theta],\[Zeta]]}
{-((1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]])-R[\[Rho],\[Theta],\[Zeta]] (W^(0,1,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]-(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] ((1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]])-R[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+(R^(1,1,1))[\[Rho],\[Theta],\[Zeta]],(W^(0,1,1))[\[Rho],\[Theta],\[Zeta]] (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,1,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (R^(1,0,1))[\[Rho],\[Theta],\[Zeta]]+(R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]]+(R^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (R^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (-((1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]])+(W^(1,1,1))[\[Rho],\[Theta],\[Zeta]]),(Z^(1,1,1))[\[Rho],\[Theta],\[Zeta]]}
{-(1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]])^2 (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]-2 (R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (W^(0,0,2))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]-2 R[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]]-2 R[\[Rho],\[Theta],\[Zeta]] (W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]]+(R^(1,0,2))[\[Rho],\[Theta],\[Zeta]],(W^(0,0,2))[\[Rho],\[Theta],\[Zeta]] (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,2))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+2 (R^(1,0,1))[\[Rho],\[Theta],\[Zeta]]+2 (W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (R^(1,0,1))[\[Rho],\[Theta],\[Zeta]]+2 (R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] ((1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]])^2 (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]-(W^(1,0,2))[\[Rho],\[Theta],\[Zeta]]),(Z^(1,0,2))[\[Rho],\[Theta],\[Zeta]]}
{-R[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(1,1,0))[\[Rho],\[Theta],\[Zeta]],(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]],(Z^(1,1,0))[\[Rho],\[Theta],\[Zeta]]}
{-R[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]^2+(R^(0,2,0))[\[Rho],\[Theta],\[Zeta]],2 (R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (W^(0,2,0))[\[Rho],\[Theta],\[Zeta]],(Z^(0,2,0))[\[Rho],\[Theta],\[Zeta]]}
{-R[\[Rho],\[Theta],\[Zeta]] (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,1,1))[\[Rho],\[Theta],\[Zeta]],(1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (R^(0,1,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (W^(0,1,1))[\[Rho],\[Theta],\[Zeta]],(Z^(0,1,1))[\[Rho],\[Theta],\[Zeta]]}
{-(R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]^2-2 R[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]]-(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (2 (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (W^(2,0,0))[\[Rho],\[Theta],\[Zeta]])+(R^(2,1,0))[\[Rho],\[Theta],\[Zeta]],2 (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (R^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+2 (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (R^(2,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(2,0,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (-(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]^2+(W^(2,1,0))[\[Rho],\[Theta],\[Zeta]]),(Z^(2,1,0))[\[Rho],\[Theta],\[Zeta]]}
{-(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]^2 (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (W^(0,2,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]-2 (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] ((R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]])+(R^(1,2,0))[\[Rho],\[Theta],\[Zeta]],(W^(0,2,0))[\[Rho],\[Theta],\[Zeta]] (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,2,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+2 (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (R^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+2 (R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (-(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]^2 (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(W^(1,2,0))[\[Rho],\[Theta],\[Zeta]]),(Z^(1,2,0))[\[Rho],\[Theta],\[Zeta]]}
{-((1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]])-R[\[Rho],\[Theta],\[Zeta]] (W^(0,1,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]-(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] ((1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]])-R[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+(R^(1,1,1))[\[Rho],\[Theta],\[Zeta]],(W^(0,1,1))[\[Rho],\[Theta],\[Zeta]] (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,1,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (R^(1,0,1))[\[Rho],\[Theta],\[Zeta]]+(R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]]+(R^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (R^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (-((1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]])+(W^(1,1,1))[\[Rho],\[Theta],\[Zeta]]),(Z^(1,1,1))[\[Rho],\[Theta],\[Zeta]]}
{-3 (R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]^2-3 R[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(0,2,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,3,0))[\[Rho],\[Theta],\[Zeta]],3 ((W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (R^(0,2,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(0,2,0))[\[Rho],\[Theta],\[Zeta]])+R[\[Rho],\[Theta],\[Zeta]] (-(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]^3+(W^(0,3,0))[\[Rho],\[Theta],\[Zeta]]),(Z^(0,3,0))[\[Rho],\[Theta],\[Zeta]]}
{-2 (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]-(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]^2-2 R[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,1))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (W^(0,2,0))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(0,2,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,2,1))[\[Rho],\[Theta],\[Zeta]],2 (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (R^(0,1,1))[\[Rho],\[Theta],\[Zeta]]+2 (R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,1))[\[Rho],\[Theta],\[Zeta]]+(R^(0,2,0))[\[Rho],\[Theta],\[Zeta]]+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (R^(0,2,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(0,2,0))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] ((1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]^2-(W^(0,2,1))[\[Rho],\[Theta],\[Zeta]]),(Z^(0,2,1))[\[Rho],\[Theta],\[Zeta]]}
{-(1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]])^2 (R^(0,1,0))[\[Rho],\[Theta],\[Zeta]]-2 (R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (W^(0,0,2))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]-2 R[\[Rho],\[Theta],\[Zeta]] (W^(0,1,1))[\[Rho],\[Theta],\[Zeta]]-2 R[\[Rho],\[Theta],\[Zeta]] (W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,1))[\[Rho],\[Theta],\[Zeta]]+(R^(0,1,2))[\[Rho],\[Theta],\[Zeta]],(W^(0,0,2))[\[Rho],\[Theta],\[Zeta]] (R^(0,1,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,2))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]+2 (R^(0,1,1))[\[Rho],\[Theta],\[Zeta]]+2 (W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (R^(0,1,1))[\[Rho],\[Theta],\[Zeta]]+2 (R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,1))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] ((1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]])^2 (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]-(W^(0,1,2))[\[Rho],\[Theta],\[Zeta]]),(Z^(0,1,2))[\[Rho],\[Theta],\[Zeta]]}
{-R[\[Rho],\[Theta],\[Zeta]] (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(1,0,1))[\[Rho],\[Theta],\[Zeta]],(1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]],(Z^(1,0,1))[\[Rho],\[Theta],\[Zeta]]}
{-R[\[Rho],\[Theta],\[Zeta]] (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,1,1))[\[Rho],\[Theta],\[Zeta]],(1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (R^(0,1,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (W^(0,1,1))[\[Rho],\[Theta],\[Zeta]],(Z^(0,1,1))[\[Rho],\[Theta],\[Zeta]]}
{-R[\[Rho],\[Theta],\[Zeta]] (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]])^2+(R^(0,0,2))[\[Rho],\[Theta],\[Zeta]],2 (R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]])+R[\[Rho],\[Theta],\[Zeta]] (W^(0,0,2))[\[Rho],\[Theta],\[Zeta]],(Z^(0,0,2))[\[Rho],\[Theta],\[Zeta]]}
{-2 (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]-(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]^2-2 R[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (W^(2,0,0))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(2,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(2,0,1))[\[Rho],\[Theta],\[Zeta]],2 (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (R^(1,0,1))[\[Rho],\[Theta],\[Zeta]]+2 (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]]+(R^(2,0,0))[\[Rho],\[Theta],\[Zeta]]+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (R^(2,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(2,0,0))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] ((1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]^2-(W^(2,0,1))[\[Rho],\[Theta],\[Zeta]]),(Z^(2,0,1))[\[Rho],\[Theta],\[Zeta]]}
{-((1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]])-R[\[Rho],\[Theta],\[Zeta]] (W^(0,1,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]-(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] ((1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]])-R[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+(R^(1,1,1))[\[Rho],\[Theta],\[Zeta]],(W^(0,1,1))[\[Rho],\[Theta],\[Zeta]] (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,1,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (R^(1,0,1))[\[Rho],\[Theta],\[Zeta]]+(R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]]+(R^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (R^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,1,0))[\[Rho],\[Theta],\[Zeta]]+R[\[Rho],\[Theta],\[Zeta]] (-((1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]])+(W^(1,1,1))[\[Rho],\[Theta],\[Zeta]]),(Z^(1,1,1))[\[Rho],\[Theta],\[Zeta]]}
{-(1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]])^2 (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]-2 (R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (W^(0,0,2))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]-2 R[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]]-2 R[\[Rho],\[Theta],\[Zeta]] (W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]]+(R^(1,0,2))[\[Rho],\[Theta],\[Zeta]],(W^(0,0,2))[\[Rho],\[Theta],\[Zeta]] (R^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,2))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]+2 (R^(1,0,1))[\[Rho],\[Theta],\[Zeta]]+2 (W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (R^(1,0,1))[\[Rho],\[Theta],\[Zeta]]+2 (R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(1,0,1))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] ((1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]])^2 (W^(1,0,0))[\[Rho],\[Theta],\[Zeta]]-(W^(1,0,2))[\[Rho],\[Theta],\[Zeta]]),(Z^(1,0,2))[\[Rho],\[Theta],\[Zeta]]}
{-2 (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]-(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]^2-2 R[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,1))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (W^(0,2,0))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(0,2,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,2,1))[\[Rho],\[Theta],\[Zeta]],2 (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (R^(0,1,1))[\[Rho],\[Theta],\[Zeta]]+2 (R^(0,1,0))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,1))[\[Rho],\[Theta],\[Zeta]]+(R^(0,2,0))[\[Rho],\[Theta],\[Zeta]]+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (R^(0,2,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(0,2,0))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] ((1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]^2-(W^(0,2,1))[\[Rho],\[Theta],\[Zeta]]),(Z^(0,2,1))[\[Rho],\[Theta],\[Zeta]]}
{-(1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]])^2 (R^(0,1,0))[\[Rho],\[Theta],\[Zeta]]-2 (R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (W^(0,0,2))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]-2 R[\[Rho],\[Theta],\[Zeta]] (W^(0,1,1))[\[Rho],\[Theta],\[Zeta]]-2 R[\[Rho],\[Theta],\[Zeta]] (W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,1))[\[Rho],\[Theta],\[Zeta]]+(R^(0,1,2))[\[Rho],\[Theta],\[Zeta]],(W^(0,0,2))[\[Rho],\[Theta],\[Zeta]] (R^(0,1,0))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,2))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]+2 (R^(0,1,1))[\[Rho],\[Theta],\[Zeta]]+2 (W^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (R^(0,1,1))[\[Rho],\[Theta],\[Zeta]]+2 (R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(0,1,1))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] ((1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]])^2 (W^(0,1,0))[\[Rho],\[Theta],\[Zeta]]-(W^(0,1,2))[\[Rho],\[Theta],\[Zeta]]),(Z^(0,1,2))[\[Rho],\[Theta],\[Zeta]]}
{-3 (R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]])^2-3 R[\[Rho],\[Theta],\[Zeta]] (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (W^(0,0,2))[\[Rho],\[Theta],\[Zeta]]+(R^(0,0,3))[\[Rho],\[Theta],\[Zeta]],3 (1+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]) (R^(0,0,2))[\[Rho],\[Theta],\[Zeta]]+3 (R^(0,0,1))[\[Rho],\[Theta],\[Zeta]] (W^(0,0,2))[\[Rho],\[Theta],\[Zeta]]-R[\[Rho],\[Theta],\[Zeta]] (1+3 (W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]+3 (W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]^2+(W^(0,0,1))[\[Rho],\[Theta],\[Zeta]]^3-(W^(0,0,3))[\[Rho],\[Theta],\[Zeta]]),(Z^(0,0,3))[\[Rho],\[Theta],\[Zeta]]}

from mathematica > derivatives_labels.txt

0,0,0 Simplify[projVec[erho]]
1,0,0 Simplify[projVec[etheta]]
2,0,0 Simplify[projVec[ezeta]]
0,1,0 Simplify[projVec[D[erho,\[Rho]]]]
0,2,0 Simplify[projVec[D[erho,\[Theta]]]]
0,3,0 Simplify[projVec[D[erho,\[Zeta]]]]
0,1,1 Simplify[projVec[D[erho,\[Rho],\[Rho]]]]
0,1,2 Simplify[projVec[D[erho,\[Rho],\[Theta]]]]
0,1,3 Simplify[projVec[D[erho,\[Rho],\[Zeta]]]]
0,2,2 Simplify[projVec[D[erho,\[Theta],\[Theta]]]]
0,2,3 Simplify[projVec[D[erho,\[Theta],\[Zeta]]]]
0,3,3 Simplify[projVec[D[erho,\[Zeta],\[Zeta]]]]
1,1,0 Simplify[projVec[D[etheta,\[Rho]]]]
1,2,0 Simplify[projVec[D[etheta,\[Theta]]]]
1,3,0 Simplify[projVec[D[etheta,\[Zeta]]]]
1,1,1 Simplify[projVec[D[etheta,\[Rho],\[Rho]]]]
1,1,2 Simplify[projVec[D[etheta,\[Rho],\[Theta]]]]
1,1,3 Simplify[projVec[D[etheta,\[Rho],\[Zeta]]]]
1,2,2 Simplify[projVec[D[etheta,\[Theta],\[Theta]]]]
1,2,3 Simplify[projVec[D[etheta,\[Theta],\[Zeta]]]]
1,3,3 Simplify[projVec[D[etheta,\[Zeta],\[Zeta]]]]
2,1,0 Simplify[projVec[D[ezeta,\[Rho]]]]
2,2,0 Simplify[projVec[D[ezeta,\[Theta]]]]
2,3,0 Simplify[projVec[D[ezeta,\[Zeta]]]]
2,1,1 Simplify[projVec[D[ezeta,\[Rho],\[Rho]]]]
2,1,2 Simplify[projVec[D[ezeta,\[Rho],\[Theta]]]]
2,1,3 Simplify[projVec[D[ezeta,\[Rho],\[Zeta]]]]
2,2,2 Simplify[projVec[D[ezeta,\[Theta],\[Theta]]]]
2,2,3 Simplify[projVec[D[ezeta,\[Theta],\[Zeta]]]]
2,3,3 Simplify[projVec[D[ezeta,\[Zeta],\[Zeta]]]]

In python for parsing and code generation:


import re
f = open("../derivatives.txt")
lines = f.readlines()

f = open("../derivatives_labels.txt")
labels = f.readlines()

assert len(lines) == len(labels)

def txt_to_desc(s):
    X, d = s.split("^")
    X = X.replace("(", "").replace(")", "")
    d = d.replace("(", "").replace(")", "").replace(",", "")
    s = X + "_" + "r"*int(d[0]) + "t"*int(d[1]) +"z"*int(d[2])
    out = """data["{}"]""".format(s)
    return out

slines = []
pattern = "\([A-Z]\^\([0-9]\,[0-9]\,[0-9]\)\)"
for line in lines:
    s = line.replace("}", "").replace("{", "").replace("[\\[Rho],\\[Theta],\\[Zeta]]", "").replace(" ", "*").replace("\n", "")
    matches = re.findall(pattern, s)
    for m in matches:
        s = s.replace(m, txt_to_desc(m))
    s = s.replace("R*", """data["R"]*""")
    s = "jnp.array([" + s + "]).T"
    s = s.replace("^", "**")
    s = s.replace("W", "omega")
    slines += [s]

lab = ["rho", "theta", "zeta"]
tex = [""] + ["""{\\\\""" + foo + "}" for foo in lab]
cha = ["", "r", "t", "z"]
des = ["", "radial", "poloidal", "toroidal"]
Des = ["", "Radial", "Poloidal", "Toroidal"]

cnt = 0

for k, line in enumerate(labels):
    l = int(line[0])
    i = int(line[2])
    j = int(line[4])
    name = f"e_{lab[l]}" 
    if i>0:
        name += f"_{cha[i]}{cha[j]}"
    # elif i>0 and j==0:
    #     name += f"_{cha[i-1]}"
    label = r"\\mathbf{e}_" + f"{tex[l+1]}"
    if i>0:
        label = f"\\\partial_{tex[i]}{tex[j]} " + label
    description = f"Covariant {Des[l+1]} basis vector"
    if i>0 and j>0:
        description += f", second derivative wrt {des[i]} and {des[j]} coordinates"
    elif i>0 and j==0:
        description += f", derivative wrt {des[i]} coordinate"

    s = (
f"""
@register_compute_fun(
    name="{name}",
    label="{label}",
    units="m",
    units_long="meters",
    description="{description}",
    dim=3,
    params=[],
    transforms={{}},
    profiles=[],
    coordinates="rtz",
    """
)
    src=(
f"""
def _e_sub_{lab[l]}_{cha[i]}{cha[j]}(params, transforms, profiles, data, **kwargs):
    data["{name}"] = {slines[k]}
    return data
"""
)
    pattern = r"data\[(.*?)\]"
    variables = re.findall(pattern, src)
    variables = [s.replace("'", "").replace('"', "") for s in variables]
    variables = sorted(list(set(variables[1:])))
    s += f"data={variables}\n)"
    print(s+src)
    cnt += 1
dpanici commented 3 weeks ago

@unalmis check what is done and check boxes

unalmis commented 3 weeks ago

I marked the two I knew were done and added couple