Extension: Geometries
#include "dg/geometries/geometries.h"
|
Namespaces | |
namespace | circular |
namespace | guenter |
Contains the Guenter type flux functions. | |
namespace | mod |
A modification flux function. | |
namespace | polynomial |
A polynomial approximation type flux function. | |
namespace | solovev |
Contains the solovev state type flux function. | |
namespace | taylor |
Contains the Cerfon Taylor state type flux functions (using boost) | |
namespace | toroidal |
namespace | x |
Classes | |
struct | aCylindricalFunctor |
Represent functions written in cylindrical coordinates that are independent of the angle phi serving as both 2d and 3d functions. More... | |
struct | aRealGenerator2d |
The abstract generator base class. More... | |
struct | aRealGeneratorX2d |
The abstract generator base class. More... | |
struct | BFieldP |
\( B^\varphi = R_0I/R^2\) More... | |
struct | BFieldR |
\( B^R = R_0\psi_Z /R\) More... | |
struct | BFieldT |
\( B^{\theta} = B^R\partial_R\theta + B^Z\partial_Z\theta\) More... | |
struct | BFieldZ |
\( B^Z = -R_0\psi_R /R\) More... | |
struct | BHatP |
\( \hat b^\varphi = B^\varphi/|B|\) More... | |
struct | BHatPR |
\( \partial_R \hat b^\varphi\) More... | |
struct | BHatPZ |
\( \partial_Z \hat b^\varphi\) More... | |
struct | BHatR |
\( b^R = B^R/|B|\) More... | |
struct | BHatRR |
\( \partial_R b^R\) More... | |
struct | BHatRZ |
\( \partial_Z b^R\) More... | |
struct | BHatZ |
\( b^Z = B^Z/|B|\) More... | |
struct | BHatZR |
\( \partial_R b^Z\) More... | |
struct | BHatZZ |
\( \partial_Z b^Z\) More... | |
struct | Bmodule |
\( |B| = R_0\sqrt{I^2+(\nabla\psi)^2}/R \) More... | |
struct | BR |
\( \frac{\partial |B| }{ \partial R} \) More... | |
struct | BZ |
\( \frac{\partial |B| }{ \partial Z} \) More... | |
struct | Constant |
\( f(x,y) = c\) More... | |
struct | CurvatureKappaR |
Approximate \( \mathcal{K}^{R}_{\vec{\kappa}}=0 \). More... | |
struct | CurvatureKappaZ |
Approximate \( \mathcal{K}^{Z}_{\vec{\kappa}} \). More... | |
struct | CurvatureNablaBR |
Approximate \( \mathcal{K}^{R}_{\nabla B} \). More... | |
struct | CurvatureNablaBZ |
Approximate \( \mathcal{K}^{Z}_{\nabla B} \). More... | |
struct | CylindricalFunctorsLvl1 |
This struct bundles a function and its first derivatives. More... | |
struct | CylindricalFunctorsLvl2 |
This struct bundles a function and its first and second derivatives. More... | |
struct | CylindricalSymmTensorLvl1 |
struct | CylindricalVectorLvl0 |
struct | CylindricalVectorLvl1 |
This struct bundles a vector field and its divergence. More... | |
struct | Divb |
\( \nabla \cdot \vec b \) More... | |
struct | DivCurvatureKappa |
Approximate \( \vec{\nabla}\cdot \mathcal{K}_{\vec{\kappa}} \). More... | |
struct | DivCurvatureNablaB |
Approximate \( \vec{\nabla}\cdot \mathcal{K}_{\nabla B} \). More... | |
struct | DivLiseikinX |
The x-component of the divergence of the Liseikin monitor metric. More... | |
struct | DivLiseikinY |
The y-component of the divergence of the Liseikin monitor metric. More... | |
struct | DivVVP |
\( \nabla\cdot\left( \frac{ \hat b }{\hat b^\varphi}\right)\) More... | |
struct | DS |
Class for the evaluation of parallel derivatives. More... | |
struct | DSPGenerator |
A transformed field grid generator. More... | |
struct | Fieldaligned |
Create and manage interpolation matrices from fieldline integration. More... | |
struct | FluxGenerator |
A symmetry flux generator. More... | |
struct | FluxSurfaceAverage |
Flux surface average (differential volume average) over quantity \( \langle f\rangle(\psi_0) = \frac{1}{A} \int dR dZ \delta(\psi_p(R,Z)-\psi_0) f(R,Z)H(R,Z) \). More... | |
struct | FluxSurfaceIntegral |
Flux surface integral of the form \( \int dR dZ f(R,Z) \delta(\psi_p(R,Z)-\psi_0) g(R,Z) \). More... | |
struct | FluxVolumeIntegral |
Flux volume integral of the form \( \int dR dZ f(R,Z) \Theta(\psi_p(R,Z)-\psi_0) g(R,Z) \). More... | |
struct | GradLnB |
\( \nabla_\parallel \ln{(B)} \) More... | |
struct | Hector |
The High PrEcision Conformal grid generaTOR. More... | |
struct | Hoo |
Inertia factor \( \mathcal I_0 = B^2/(R_0^2|\nabla\psi_p|^2)\). More... | |
struct | InvB |
\( |B|^{-1} = R/R_0\sqrt{I^2+(\nabla\psi)^2} \) More... | |
struct | LaplacePsip |
\( \Delta\psi_p = \psi_R/R + \psi_{RR}+\psi_{ZZ} \) More... | |
struct | Liseikin_XX |
The xx-component of the Liseikin monitor metric. More... | |
struct | Liseikin_XY |
The xy-component of the Liseikin monitor metric. More... | |
struct | Liseikin_YY |
The yy-component of the Liseikin monitor metric. More... | |
struct | LnB |
\( \ln{|B|} \) More... | |
struct | LogPolarGenerator |
Log Polar coordinates (conformal) More... | |
struct | MagneticFieldParameters |
Meta-data about the magnetic field in particular the flux function. More... | |
struct | NablaPsiInv |
A weight function for the Hector algorithm. More... | |
struct | NablaPsiInvX |
Derivative of the weight function. More... | |
struct | NablaPsiInvY |
Derivative of the weight function. More... | |
struct | Periodify |
This function extends another function beyond the grid boundaries. More... | |
struct | PolarGenerator |
Polar coordinates. More... | |
struct | RealCurvilinearGrid2d |
A two-dimensional grid based on curvilinear coordinates. More... | |
struct | RealCurvilinearGridX2d |
A two-dimensional grid based on curvilinear coordinates. More... | |
struct | RealCurvilinearMPIGrid2d |
A two-dimensional MPI grid based on curvilinear coordinates. More... | |
struct | RealCurvilinearProductGrid3d |
A 2x1 curvilinear product space grid. More... | |
struct | RealCurvilinearProductGridX3d |
A three-dimensional grid based on curvilinear coordinates. More... | |
struct | RealCurvilinearProductMPIGrid3d |
A 2x1 curvilinear product space MPI grid. More... | |
struct | RealCurvilinearRefinedGridX2d |
A two-dimensional grid based on curvilinear coordinates. More... | |
struct | RealCurvilinearRefinedProductGridX3d |
A three-dimensional grid based on curvilinear coordinates. More... | |
struct | RealCylindricalFunctor |
Inject both 2d and 3d operator() to a 2d functor. More... | |
struct | RhoP |
\( \sqrt{1. - \psi_p/ \psi_{p,O}} \) More... | |
struct | Ribeiro |
A two-dimensional grid based on "almost-conformal" coordinates by Ribeiro and Scott 2010. More... | |
struct | RibeiroFluxGenerator |
Same as the Ribeiro class but uses \( \zeta = f_0 (\psi_p - \psi_0)\) as a flux label directly. More... | |
struct | RibeiroX |
A two-dimensional grid based on "almost-conformal" coordinates by Ribeiro and Scott 2010. More... | |
struct | SafetyFactor |
Evaluation of the safety factor q based on direct integration of \( q(\psi_0) = \frac{1}{2\pi} \int d\Theta \frac{B^\varphi}{B^\Theta} \). More... | |
struct | SafetyFactorAverage |
Class for the evaluation of the safety factor q based on a flux-surface integral \( q(\psi_0) = \frac{1}{2\pi} \int dRdZ \frac{I(\psi_p)}{R} \delta(\psi_p - \psi_0)H(R,Z) \). More... | |
struct | ScalarProduct |
Return scalar product of two vector fields \( v_0w_0 + v_1w_1 + v_2w_2\). More... | |
struct | SeparatrixOrthogonal |
Choose points on separatrix and construct grid from there. More... | |
struct | SeparatrixOrthogonalAdaptor |
An Adaptor to use SeparatrixOrthogonal as aGenerator2d instead of aGeneratorX2d . More... | |
struct | SimpleOrthogonal |
Generate a simple orthogonal grid. More... | |
struct | SquareNorm |
Return norm of scalar product of two vector fields \( \sqrt{v_0w_0 + v_1w_1 + v_2w_2}\). More... | |
struct | TokamakMagneticField |
A tokamak field as given by R0, Psi and Ipol plus Meta-data like shape and equilibrium. More... | |
struct | Topology1d |
Helper class for construction. More... | |
struct | TrueCurvatureKappaP |
True \( \mathcal{K}^\varphi_{\vec{\kappa}} \). More... | |
struct | TrueCurvatureKappaR |
True \( \mathcal{K}^R_{\vec{\kappa}} \). More... | |
struct | TrueCurvatureKappaZ |
True \( \mathcal{K}^Z_{\vec{\kappa}} \). More... | |
struct | TrueCurvatureNablaBP |
True \( \mathcal{K}^{\varphi}_{\nabla B} \). More... | |
struct | TrueCurvatureNablaBR |
True \( \mathcal{K}^{R}_{\nabla B} \). More... | |
struct | TrueCurvatureNablaBZ |
True \( \mathcal{K}^{Z}_{\nabla B} \). More... | |
struct | TrueDivCurvatureKappa |
True \( \vec{\nabla}\cdot \mathcal{K}_{\vec{\kappa}} \). More... | |
struct | TrueDivCurvatureNablaB |
True \( \vec{\nabla}\cdot \mathcal{K}_{\nabla B} \). More... | |
struct | WallDirection |
Determine if poloidal field points towards or away from the nearest wall. More... | |
struct | WallFieldlineCoordinate |
Normalized coordinate relative to wall along fieldline in phi or s coordinate. More... | |
struct | WallFieldlineDistance |
Distance to wall along fieldline in phi or s coordinate More... | |
struct | ZCutter |
\( f(R,Z)= \begin{cases}
0 \text{ if } Z < Z_X \\
1 \text{ else }
\end{cases}
\) More... | |
Typedefs | |
using | CurvilinearGrid2d = dg::geo::RealCurvilinearGrid2d<double> |
using | CurvilinearProductGrid3d = dg::geo::RealCurvilinearProductGrid3d<double> |
using | CurvilinearGridX2d = dg::geo::RealCurvilinearGridX2d<double> |
using | CurvilinearProductGridX3d = dg::geo::RealCurvilinearProductGridX3d<double> |
typedef ONE | FullLimiter |
Full Limiter means there is a limiter everywhere. | |
typedef ZERO | NoLimiter |
No Limiter. | |
using | CylindricalFunctor = RealCylindricalFunctor<double> |
Most of the times we use double . | |
using | aGenerator2d = dg::geo::aRealGenerator2d<double> |
using | aGeneratorX2d = dg::geo::aRealGeneratorX2d<double> |
using | CurvilinearMPIGrid2d = dg::geo::RealCurvilinearMPIGrid2d<double> |
using | CurvilinearProductMPIGrid3d = dg::geo::RealCurvilinearProductMPIGrid3d<double> |
using | CurvilinearRefinedGridX2d = dg::geo::RealCurvilinearRefinedGridX2d<double> |
using | CurvilinearRefinedProductGridX3d = dg::geo::RealCurvilinearRefinedProductGridX3d<double> |
Enumerations | |
enum | whichMatrix { einsPlus = 0 , einsPlusT , einsMinus , einsMinusT , zeroPlus , zeroMinus , zeroPlusT , zeroMinusT , zeroForw } |
Enum for the use in Fieldaligned. More... | |
enum class | equilibrium { equilibrium::solovev , equilibrium::taylor , equilibrium::polynomial , equilibrium::guenter , equilibrium::toroidal , equilibrium::circular } |
How flux-function is computed. Decides how to construct magnetic field. More... | |
enum class | modifier { modifier::none , modifier::heaviside , modifier::sol_pfr , modifier::sol_pfr_2X } |
How flux-function is modified. More... | |
enum class | description { description::standardO , description::standardX , description::doubleX , description::none , description::square , description::centeredX } |
How flux function looks like. Decider on whether and what flux aligned grid to construct. More... | |
Functions | |
CylindricalFunctorsLvl1 | make_NablaPsiInvCollective (const CylindricalFunctorsLvl2 &psi) |
A container class that contains all NablaPsiInv functors. | |
CylindricalSymmTensorLvl1 | make_LiseikinCollective (const CylindricalFunctorsLvl2 &psi, double k, double eps) |
template<class FieldAligned , class container > | |
void | assign_bc_along_field_2nd (const FieldAligned &fa, const container &fm, const container &f, const container &fp, container &fmg, container &fpg, dg::bc bound, std::array< double, 2 > boundary_value={0, 0}) |
Assign boundary conditions along magnetic field lines interpolating a 2nd order polynomial. | |
template<class FieldAligned , class container > | |
void | assign_bc_along_field_1st (const FieldAligned &fa, const container &fm, const container &fp, container &fmg, container &fpg, dg::bc bound, std::array< double, 2 > boundary_value={0, 0}) |
Assign boundary conditions along magnetic field lines interpolating a 1st order polynomial (a line) | |
template<class FieldAligned , class container > | |
void | swap_bc_perp (const FieldAligned &fa, const container &fm, const container &fp, container &fmg, container &fpg) |
Swap the perp boundary condition. | |
template<class FieldAligned , class container > | |
void | ds_forward (const FieldAligned &fa, double alpha, const container &f, const container &fp, double beta, container &g) |
forward derivative \( g = \alpha \vec v \cdot \nabla f + \beta g\) | |
template<class FieldAligned , class container > | |
void | ds_forward2 (const FieldAligned &fa, double alpha, const container &f, const container &fp, const container &fpp, double beta, container &g) |
2nd order forward derivative \( g = \alpha \vec v \cdot \nabla f + \beta g\) | |
template<class FieldAligned , class container > | |
void | ds_backward (const FieldAligned &fa, double alpha, const container &fm, const container &f, double beta, container &g) |
backward derivative \( g = \alpha \vec v \cdot \nabla f + \beta g\) | |
template<class FieldAligned , class container > | |
void | ds_backward2 (const FieldAligned &fa, double alpha, const container &fmm, const container &fm, const container &f, double beta, container &g) |
2nd order backward derivative \( g = \alpha \vec v \cdot \nabla f + \beta g\) | |
template<class FieldAligned , class container > | |
void | ds_centered (const FieldAligned &fa, double alpha, const container &fm, const container &fp, double beta, container &g) |
centered derivative \( g = \alpha \vec v \cdot \nabla f + \beta g\) | |
template<class FieldAligned , class container > | |
void | dss_centered (const FieldAligned &fa, double alpha, const container &fm, const container &f, const container &fp, double beta, container &g) |
Centered derivative \( g = \alpha (\vec v\cdot \nabla)^2 f + \beta g \). | |
template<class FieldAligned , class container > | |
void | dssd_centered (const FieldAligned &fa, double alpha, const container &fm, const container &f, const container &fp, double beta, container &g) |
Centered derivative \( g = \alpha \nabla\cdot(\vec v \vec v\cdot \nabla) f + \beta g \). | |
template<class FieldAligned , class container > | |
void | ds_divBackward (const FieldAligned &fa, double alpha, const container &fm, const container &f, double beta, container &g) |
backward derivative \( g = \alpha \nabla \cdot \vec v f + \beta g\) | |
template<class FieldAligned , class container > | |
void | ds_divForward (const FieldAligned &fa, double alpha, const container &f, const container &fp, double beta, container &g) |
forward derivative \( g = \alpha \nabla \cdot \vec v f + \beta g\) | |
template<class FieldAligned , class container > | |
void | ds_divCentered (const FieldAligned &fa, double alpha, const container &fm, const container &fp, double beta, container &g) |
centered derivative \( g = \alpha \nabla \cdot \vec v f + \beta g\) | |
template<class FieldAligned , class container > | |
void | ds_average (const FieldAligned &fa, double alpha, const container &fm, const container &fp, double beta, container &g) |
Compute average along a fieldline \( g = \alpha \frac{f_{k+1} + f_{k-1}}{2} + \beta g\). | |
template<class FieldAligned , class container > | |
void | ds_slope (const FieldAligned &fa, double alpha, const container &fm, const container &fp, double beta, container &g) |
Compute simple slope along a fieldline \( g = \alpha v^\varphi\frac{f_{k+1} - f_{k-1}}{2\Delta\varphi} + \beta g\). | |
template<class BinaryOp , class UnaryOp > | |
thrust::host_vector< double > | fieldaligned_evaluate (const aProductGeometry3d &grid, const CylindricalVectorLvl0 &vec, const BinaryOp &binary, const UnaryOp &unary, unsigned p0, unsigned rounds, double eps=1e-5) |
Evaluate a 2d functor and transform to all planes along the fieldlines | |
int | findCriticalPoint (const CylindricalFunctorsLvl2 &psi, double &RC, double &ZC) |
This function finds critical points of psi (any point with vanishing gradient, including the X-point or O-point) via Newton iteration applied to the gradient of psi. | |
int | findOpoint (const CylindricalFunctorsLvl2 &psi, double &RC, double &ZC) |
This function finds O-points of psi. | |
void | findXpoint (const CylindricalFunctorsLvl2 &psi, double &RC, double &ZC) |
This function finds X-points of psi. | |
template<class Geometry3d > | |
dg::SparseTensor< typename Geometry3d::host_vector > | createAlignmentTensor (const dg::geo::CylindricalVectorLvl0 &bhat, const Geometry3d &g) |
\( \chi^{ij} = b^ib^j\) | |
template<class Geometry3d > | |
dg::SparseTensor< typename Geometry3d::host_vector > | createProjectionTensor (const dg::geo::CylindricalVectorLvl0 &bhat, const Geometry3d &g) |
\( h^{ij} = g^{ij} - b^ib^j\) | |
dg::geo::TokamakMagneticField | createGuenterField (double R_0, double I_0) |
Create a Guenter Magnetic field. | |
TokamakMagneticField | periodify (const TokamakMagneticField &mag, double R0, double R1, double Z0, double Z1, dg::bc bcx, dg::bc bcy) |
Use dg::geo::Periodify to periodify every function in the magnetic field. | |
CylindricalVectorLvl1 | createEPhi (int sign) |
Contravariant components of the unit vector field (0, 0, \(\pm 1/R \)) and its Divergence and derivative (0,0) in cylindrical coordinates. | |
CylindricalVectorLvl0 | createCurvatureNablaB (const TokamakMagneticField &mag, int sign) |
Approximate curvature vector field (CurvatureNablaBR, CurvatureNablaBZ, Constant(0)) | |
CylindricalVectorLvl0 | createCurvatureKappa (const TokamakMagneticField &mag, int sign) |
Approximate curvature vector field (CurvatureKappaR, CurvatureKappaZ, Constant(0)) | |
CylindricalVectorLvl0 | createTrueCurvatureKappa (const TokamakMagneticField &mag) |
True curvature vector field (TrueCurvatureKappaR, TrueCurvatureKappaZ, TrueCurvatureKappaP) | |
CylindricalVectorLvl0 | createTrueCurvatureNablaB (const TokamakMagneticField &mag) |
True curvature vector field (TrueCurvatureNablaBR, TrueCurvatureNablaBZ, TrueCurvatureNablaBP) | |
CylindricalVectorLvl0 | createGradPsip (const TokamakMagneticField &mag) |
Gradient Psip vector field (PsipR, PsipZ, 0) | |
CylindricalVectorLvl1 | createBHat (const TokamakMagneticField &mag) |
Contravariant components of the magnetic unit vector field and its Divergence and derivative in cylindrical coordinates. | |
TokamakMagneticField | createMagneticField (dg::file::WrappedJsonValue gs) |
Create a Magnetic field based on the given parameters. | |
TokamakMagneticField | createModifiedField (dg::file::WrappedJsonValue gs, dg::file::WrappedJsonValue jsmod, CylindricalFunctor &wall, CylindricalFunctor &transition) |
Modify Magnetic Field and create wall above or below certain Psi values according to given parameters. | |
CylindricalFunctor | createWallRegion (dg::geo::TokamakMagneticField mag, dg::file::WrappedJsonValue jsmod) |
A convenience function call for dg::geo::createModifiedField that ignores the transition parameter and returns the wall functor. | |
CylindricalFunctor | createWallRegion (dg::file::WrappedJsonValue gs, dg::file::WrappedJsonValue jsmod) |
DEPRECATED Same as createWallRegion( createMagneticField(gs), jsmod); | |
void | createSheathRegion (dg::file::WrappedJsonValue jsmod, TokamakMagneticField mag, CylindricalFunctor wall, dg::Grid2d &sheath_walls, CylindricalFunctor &sheath) |
Create the sheath region where fieldlines intersect the boundary. | |
template<class BinaryOp , class UnaryOp > | |
MPI_Vector< thrust::host_vector< double > > | fieldaligned_evaluate (const aProductMPIGeometry3d &grid, const CylindricalVectorLvl0 &vec, const BinaryOp &binary, const UnaryOp &unary, unsigned p0, unsigned rounds, double eps=1e-5) |
Evaluate a 2d functor and transform to all planes along the fieldlines (MPI Version) | |
dg::geo::TokamakMagneticField | createPolynomialField (dg::geo::polynomial::Parameters gp) |
Create a Polynomial Magnetic field. | |
dg::geo::TokamakMagneticField | createSolovevField (dg::geo::solovev::Parameters gp) |
Create a Solovev Magnetic field. | |
dg::geo::TokamakMagneticField | createModifiedSolovevField (dg::geo::solovev::Parameters gp, double psi0, double alpha, double sign=-1) |
DEPRECATED Create a modified Solovev Magnetic field. | |
dg::geo::TokamakMagneticField | createTaylorField (dg::geo::solovev::Parameters gp) |
Create a Taylor Magnetic field. | |
dg::geo::TokamakMagneticField | createToroidalField (double R0) |
Create a Toroidal Magnetic field. | |
dg::geo::TokamakMagneticField | createCircularField (double R0, double I0, double a=1, double b=1) |
\( \psi_p = 1- \left(\frac{R-R_0}{a}\right)^2 - \left( \frac{Z}{b}\right)^2,\quad I(\psi_p) = I_0 \) | |
CylindricalSymmTensorLvl1 | make_Xbump_monitor (const CylindricalFunctorsLvl2 &psi, double &R_X, double &Z_X, double radiusX, double radiusY) |
construct a monitor metric in which the Laplacian vanishes at the X-point | |
CylindricalSymmTensorLvl1 | make_Xconst_monitor (const CylindricalFunctorsLvl2 &psi, double &R_X, double &Z_X) |
construct a monitor metric in which the Laplacian vanishes at the X-point | |
using dg::geo::aGenerator2d = dg::geo::aRealGenerator2d<double> |
using dg::geo::aGeneratorX2d = dg::geo::aRealGeneratorX2d<double> |
|
inline |
construct a monitor metric in which the Laplacian vanishes at the X-point
calls the findXpoint
function to find the X-point
psi | the flux functions |
R_X | start value on input, X-point on output |
Z_X | start value on input, X-point on output |
radiusX | size of bump in x direction |
radiusY | size of bump in y-direction |
|
inline |
construct a monitor metric in which the Laplacian vanishes at the X-point
calls the findXpoint
function to find the X-point
psi | the flux functions |
R_X | start value on input, X-point on output |
Z_X | start value on input, X-point on output |