scotty.beam_me_up module#

Created on Fri Jun 8 10:44:34 2018

@author: VH Hall-Chen Valerian Hongjie Hall-Chen valerian.chen@gmail.com

Run in Python 3, does not work in Python 2

Version history v1 - Renaming of variables, cleaning up

Plan#

Output everything to a file, and then do the analysis on that file.

  1. Check that gradK_xi and such are done correctly, check that K_mag is calculated correctly when K_zeta is nonzero

  2. Check that the calculation of Psi makes sense (and the rotation angle)

  3. Check that K initial’s calculation makes sense

Notes

  • The loading of the input files was taken from integral_5 and modified.

  • I should launch the beam inside the last closed flux surface

  • K**2 = K_R**2 + K_z**2 + (K_zeta/r_R)**2, and K_zeta is constant (mode number). See 14 Sep 2018 notes.

Coordinates#

  • X, Y, Z - Lab Cartesian coordinates

  • R, zeta, Z - Lab cylindrical coordinates

  • x, y, g - Beam coordinates

  • u1, u2, u_parallel - Field-aligned coordinates

Abbreviations#

  • bs - backscattered

  • loc - localisation

  • cum_loc - cumulative_localisation

  • ne - equilibrium electron density

Angles#

  • theta - angle between g and u1, small when mismatch is small

  • theta_m - mismatch angle, angle between u1 and K

Units#

  • SI units

  • Distance in m

  • Angles in rad

  • electron cyclotron frequency positive

  • K normalised such that K = 1 in vacuum. (Not implemented yet)

  • Distance not normalised yet, should give it thought

  • Start in vacuum, otherwise Psi_3D_beam_initial_cartersian does not get done properly

scotty.beam_me_up.beam_me_up(poloidal_launch_angle_Torbeam, toroidal_launch_angle_Torbeam, launch_freq_GHz, mode_flag, launch_beam_width, launch_beam_curvature, launch_position, vacuumLaunch_flag=True, find_B_method='torbeam', shot=None, equil_time=None, vacuum_propagation_flag=False, Psi_BC_flag=False, poloidal_flux_enter=None, delta_R=- 0.0001, delta_Z=0.0001, delta_K_R=0.1, delta_K_zeta=0.1, delta_K_Z=0.1, interp_order=5, len_tau=102, rtol=0.001, atol=1e-06, interp_smoothing=0, ne_data_path=PosixPath('.'), magnetic_data_path=PosixPath('.'), output_path=PosixPath('.'), input_filename_suffix='', output_filename_suffix='', figure_flag=True, detailed_analysis_flag=True, verbose_output_flag=True, quick_run=False, plasmaLaunch_K=array([0., 0., 0.]), plasmaLaunch_Psi_3D_lab_Cartesian=array([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]]), density_fit_parameters=None, density_fit_method=None, B_T_axis=None, B_p_a=None, R_axis=None, minor_radius_a=None)#
  1. Initialise density fit parameters. One of:
    • spline with data from file

    • Stefanikova

    • O(3) polynomial

    • tanh

    • quadratic

  2. Initialise magnetic field method. One of:
    • TORBEAM

    • OMFIT

    • analytical

    • EFIT++

    • UDA

    • curvy slab

    • test/test_notime

  3. Initialise beam launch parameters (vacuum/plasma)

  4. Initialise event functions for IVP solver

  5. Propagate single ray with IVP solver (?)

  6. Handle events

  7. Possible early exit if quick_run (?)

  8. Propagate beam with IVP solver

  9. Dump raw output (?)

  10. Analysis

  11. Dump analysis

Parameters
  • find_B_method

    1. ‘efitpp’ finds B from efitpp files directly

    2. ’torbeam’ finds B from topfile

    3. UDA_saved

  • density_fit_parameters (Optional[Sequence]) –

    A list of parameters to be passed to the density_fit_method constructor. See the docs for the individual methods for the meaning of their parameters

    Note

    These parameters should not include poloidal_flux_enter

  • density_fit_method (Optional[Union[str, DensityFitLike]]) –

    Parameterisation of the density profile. Either a callable (see DensityFit), or one of the following options:

    If density_fit_method is a string, then the corresponding DensityFit object is constructed using poloidal_flux_enter and density_fit_parameters.

    "smoothing-spline-file" looks for a file called ne<input_filename_suffix>.dat in ne_data_path. It also uses interp_order and interp_smoothing instead of density_fit_parameters.

    Deprecated since version 2.4.0: If None (the default) is passed, the method will be guessed from the length of density_fit_parameters. In this case, quadratic and tanh parameters _should_ include poloidal_flux_enter as the last value.

scotty.beam_me_up.make_density_fit(method, poloidal_flux_enter, parameters, filename)#

Either construct a DensityFit instance, or return method if it’s already suitable. Suitable methods are callables that take an array of poloidal fluxes and return an array of densities.

Parameters
  • method (Optional[Union[str, DensityFitLike]]) –

  • poloidal_flux_enter (float) –

  • parameters (Optional[Sequence]) –

  • filename (Optional[PathLike]) –

Return type

DensityFitLike