ASCOT5
|
3D magnetic field with tricubic spline interpolation More...
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include "../ascot5.h"
#include "../error.h"
#include "../print.h"
#include "B_3DS.h"
#include "../spline/interp.h"
Go to the source code of this file.
Functions | |
int | B_3DS_init_offload (B_3DS_offload_data *offload_data, real **offload_array) |
Initialize magnetic field offload data. | |
void | B_3DS_free_offload (B_3DS_offload_data *offload_data, real **offload_array) |
Free offload array. | |
void | B_3DS_init (B_3DS_data *Bdata, B_3DS_offload_data *offload_data, real *offload_array) |
Initialize magnetic field data struct on target. | |
a5err | B_3DS_eval_psi (real *psi, real r, real phi, real z, B_3DS_data *Bdata) |
Evaluate poloidal flux psi. | |
a5err | B_3DS_eval_psi_dpsi (real psi_dpsi[4], real r, real phi, real z, B_3DS_data *Bdata) |
Evaluate poloidal flux psi and its derivatives. | |
a5err | B_3DS_eval_rho_drho (real rho_drho[4], real r, real phi, real z, B_3DS_data *Bdata) |
Evaluate normalized poloidal flux rho and its derivatives. | |
a5err | B_3DS_eval_B (real B[3], real r, real phi, real z, B_3DS_data *Bdata) |
Evaluate magnetic field. | |
a5err | B_3DS_eval_B_dB (real B_dB[12], real r, real phi, real z, B_3DS_data *Bdata) |
Evaluate magnetic field and its derivatives. | |
a5err | B_3DS_get_axis_rz (real rz[2], B_3DS_data *Bdata) |
Return magnetic axis R-coordinate. | |
3D magnetic field with tricubic spline interpolation
This module represents a magnetic field where data is given in - grid from which it is interpolated with tricubic splines.
The magnetic field is evaluated from magnetic field strength which may not be divergence free. However, and components are also evaluated from poloidal magnetic flux as
The total field is then a sum of components interpolated directly from and components calculated via interpolated . Note that is assumed to be axisymmetric and is interpolated with bicubic splines. and are given in separate grids.
This module does no extrapolation so if queried value is outside the -grid an error is thrown.
The toroidal angle phi is treated as a periodic coordinate meaning that B(phi) = B(phi + N*(b_phimax - b_phimin)) being N the periodic number. Do note that to avoid duplicate data, the last points in phi axis in B data are not at b_phimax, i.e. br[:,-1,:] != BR(phi=b_phimax). It is user's responsibility to provide input whose -grid makes sense (in that it actually represents a periodic field).
Definition in file B_3DS.c.
int B_3DS_init_offload | ( | B_3DS_offload_data * | offload_data, |
real ** | offload_array ) |
Initialize magnetic field offload data.
This function takes pre-initialized offload data struct and offload array as inputs. The data is used to fill rest of the offload struct and to construct bicubic splines whose coefficients are stored in re-allocated offload array.
The offload data struct must have the following fields initialized:
B_3DS_offload_data.offload_array_length is set here.
The offload array must contain the following data:
Sanity checks are printed if data was initialized succesfully.
offload_data | pointer to offload data struct |
offload_array | pointer to offload array which is reallocated here |
void B_3DS_free_offload | ( | B_3DS_offload_data * | offload_data, |
real ** | offload_array ) |
void B_3DS_init | ( | B_3DS_data * | Bdata, |
B_3DS_offload_data * | offload_data, | ||
real * | offload_array ) |
Evaluate poloidal flux psi and its derivatives.
psi_dpsi | pointer for storing psi [V*s*m^-1] and its derivatives |
r | R coordinate [m] |
phi | phi coordinate [rad] |
z | z coordinate [m] |
Bdata | pointer to magnetic field data struct |
Evaluate normalized poloidal flux rho and its derivatives.
rho_drho | pointer where rho and its derivatives will be stored |
r | R coordinate [m] |
phi | phi coordinate [rad] |
z | z coordinate [m] |
Bdata | pointer to magnetic field data struct |
Evaluate magnetic field.
B | pointer to array where magnetic field values are stored |
r | R coordinate [m] |
phi | phi coordinate [deg] |
z | z coordinate [m] |
Bdata | pointer to magnetic field data struct |
Evaluate magnetic field and its derivatives.
B_dB | pointer to array where the field and its derivatives are stored |
r | R coordinate [m] |
phi | phi coordinate [deg] |
z | z coordinate [m] |
Bdata | pointer to magnetic field data struct |
a5err B_3DS_get_axis_rz | ( | real | rz[2], |
B_3DS_data * | Bdata ) |