Bennett Equilibrium for Ideal MHD Should Work for Cylindrical and Cartesian cases Ref.
More...
Bennett Equilibrium for Ideal MHD Should Work for Cylindrical and Cartesian cases Ref.
Freidberg Rev. Mod. Phys. 1982 For momentum equilibrium: grad p = J x B For a Z-pinch configuration with B = B_theta(r) \hat(theta) J = J_z(r) \hat(z) This results in d/dr(p + Bth^2/(2mu0)) + Bth^2/(\mu0 r) = 0 where Jz = curl B / mu0 is used Bennett shows the following profiles satisfies this equilibrium: p = mu0 I^2 / (8 pi^2) * a^2 / (r^2 + a^2)^2 Jz = I/pi * a^2/(r^2 + a^2)^2 Bth = mu0 I / (2 pi) * r / (r^2 + a^2) where I = prescribed pinch current and a = prescribed pinch radius
We convert this to WARPXM units J = curl B / wct grad p = wct * J x B d/dr(p + Bth^2/2) + Bth^2/r = 0 p = wct^2 * I^2 / (8 pi^2) * a^2 / (r^2 + a^2)^2 Jz = I / pi * a^2 / (r^2 + a^2)^2 Bth = wct * I / (2 pi) * r / (r^2 + a^2) where wct = (omega_c tau)
We also assume uniform temperature, then rho = A * n = A * p / T
For warpy class see warpy.apps.functions.mhd.bennett_equilibrium
|
| BennettEquilibrium () |
| Constructor.
|
|
| ~BennettEquilibrium () override |
| Destructor.
|
|
void | setup (const WxCryptSet &wxc) override |
| Setup.
|
|
const std::vector< int > & | getOutputVariableIndexes (int flag) const override |
| Grab output variable indices.
|
|
void | evaluate_function (const real *q, const real *aux, const solverVariables_t *pSV, real *result) const override |
| Redefinition of the function evaluator.
|
|
void | bc_q (const real *q_in, const real *aux_in, const real *aux_out, const solverVariables_t *pFV, real *q_out) const override |
| Redefinition of the bc.
|
|
| WmApplication () |
|
virtual | ~WmApplication ()=default |
|
virtual void | setup (const WxCryptSet &wxc) |
|
virtual const std::vector< int > & | getAuxiliaryVariableIndexes (int flag=WMAPPLICATIONFLAG_NONE) const |
|
virtual const std::vector< int > & | getCrossVariableIndexes (int flag=WMAPPLICATIONFLAG_NONE) const |
|
const std::vector< std::string > & | getBoundaryNames () const |
|
bool | isOnBoundary (const std::string &boundaryName) const |
|
bool | has (int flag) const |
|
virtual real | numerical_flux (const real *q_l, const real *q_r, const real *aux_l, const real *aux_r, const solverVariables_t *pFV, real *numericalFlux) const |
|
virtual real | internal_flux (const real *q, const real *aux, const solverVariables_t *pSV, std::vector< std::vector< real > > &internalFlux) const |
|
virtual real | source (const real *q, const real *aux, const elementGeometry_t *pEG, real *source) const |
|
virtual void | bc_q (const real *q_in, const real *aux_in, const real *aux_out, const solverVariables_t *pFV, real *q_out) const |
| Boundary Condition Application which sets the boundary condition on ghost nodes.
|
|
virtual real | bcNumericalFlux (const real *q_l, const real *q_r, const real *aux_l, const real *aux_r, const solverVariables_t *pFV, real *numericalFlux) const |
|
virtual void | conserved_to_primitive (const real *q, const real *aux, real *w) const |
|
virtual void | primitive_to_conserved (const real *w, const real *aux, real *q) const |
|
virtual void | evaluate_function (const real *q, const real *aux, const solverVariables_t *pSV, real *result) const |
|
virtual void | bc_q_kinetic (const real *q_in, const real *aux_in, const solverVariables_t *pFV, real *q_out) const |
|
std::shared_ptr< std::string > | app_name () |
|
virtual const std::vector< int > & | getInputVariableIndexes (int flag=0) const |
|
virtual const std::vector< int > & | getOutputVariableIndexes (int flag=0) const |
|