fieldline.f90 Source File


This file depends on

sourcefile~~fieldline.f90~~EfferentGraph sourcefile~fieldline.f90 fieldline.f90 sourcefile~constants.f90 constants.f90 sourcefile~fieldline.f90->sourcefile~constants.f90

Files dependent on this one

sourcefile~~fieldline.f90~~AfferentGraph sourcefile~fieldline.f90 fieldline.f90 sourcefile~coefficients.f90 coefficients.f90 sourcefile~coefficients.f90->sourcefile~fieldline.f90 sourcefile~deviation.f90 deviation.f90 sourcefile~coefficients.f90->sourcefile~deviation.f90 sourcefile~surface_average.f90 surface_average.f90 sourcefile~coefficients.f90->sourcefile~surface_average.f90 sourcefile~deviation.f90->sourcefile~fieldline.f90 sourcefile~fieldline_labels.f90 fieldline_labels.f90 sourcefile~deviation.f90->sourcefile~fieldline_labels.f90 sourcefile~deviation.f90->sourcefile~surface_average.f90 sourcefile~field_along_fieldline.f90 field_along_fieldline.f90 sourcefile~field_along_fieldline.f90->sourcefile~fieldline.f90 sourcefile~field_checks.f90 field_checks.f90 sourcefile~field_checks.f90->sourcefile~fieldline.f90 sourcefile~field_checks.f90->sourcefile~field_along_fieldline.f90 sourcefile~fieldline_integrals.f90 fieldline_integrals.f90 sourcefile~fieldline_integrals.f90->sourcefile~fieldline.f90 sourcefile~fieldline_labels.f90->sourcefile~fieldline.f90 sourcefile~main.f90 main.f90 sourcefile~main.f90->sourcefile~fieldline.f90 sourcefile~main.f90->sourcefile~coefficients.f90 sourcefile~make_fieldline.f90 make_fieldline.f90 sourcefile~main.f90->sourcefile~make_fieldline.f90 sourcefile~shaing_callen.f90 shaing_callen.f90 sourcefile~main.f90->sourcefile~shaing_callen.f90 sourcefile~read_file.f90 read_file.f90 sourcefile~main.f90->sourcefile~read_file.f90 sourcefile~make_fieldline.f90->sourcefile~fieldline.f90 sourcefile~make_fieldline.f90->sourcefile~field_along_fieldline.f90 sourcefile~make_fieldline.f90->sourcefile~field_checks.f90 sourcefile~make_fieldline.f90->sourcefile~fieldline_integrals.f90 sourcefile~make_fieldline.f90->sourcefile~fieldline_labels.f90 sourcefile~shaing_callen.f90->sourcefile~fieldline.f90 sourcefile~shaing_callen.f90->sourcefile~fieldline_labels.f90 sourcefile~shaing_callen_integration.f90 shaing_callen_integration.f90 sourcefile~shaing_callen.f90->sourcefile~shaing_callen_integration.f90 sourcefile~shaing_callen_wrappers.f90 shaing_callen_wrappers.f90 sourcefile~shaing_callen.f90->sourcefile~shaing_callen_wrappers.f90 sourcefile~shaing_callen_integration.f90->sourcefile~fieldline.f90 sourcefile~shaing_callen_wrappers.f90->sourcefile~fieldline.f90 sourcefile~surface_average.f90->sourcefile~fieldline.f90 sourcefile~read_file.f90->sourcefile~make_fieldline.f90

Source Code

module fieldline_mod
    use constants, only: dp, pi

    implicit none
    private

    public :: fieldline_t, flock_of_fieldlines_t

    type :: flock_of_fieldlines_t
        !! Collection of field lines on a flux surface and surface properties.
        type(fieldline_t), allocatable :: fieldlines(:)
        real(dp) :: iota
        real(dp) :: M_pol
        real(dp) :: N_tor
        real(dp) :: nfp
        real(dp) :: iota_p
        real(dp) :: I_ref
        real(dp) :: eta_b
    end type flock_of_fieldlines_t

    type :: fieldline_t
        !! Single magnetic field line: starting label, extrema, and bounce integrals.
        real(dp) :: xi_0
        real(dp) :: theta_0
        real(dp) :: phi_0
        real(dp) :: iota
        real(dp) :: phi_max(2)
        real(dp) :: phi_max_error(2)
        real(dp) :: B_max(2)

        real(dp) :: eta_b
        real(dp) :: delta_eta
        real(dp) :: integral_lambda_b_over_B_squared
        real(dp) :: delta_aspect_ratio
        real(dp) :: integral_one_over_B_squared
        real(dp) :: radial_drift
        real(dp) :: integral_nabla_s_over_B_squared
    contains
        generic :: get_theta => get_theta_scalar, get_theta_array
        procedure, private :: get_theta_scalar
        procedure, private :: get_theta_array
    end type fieldline_t

contains

    function get_theta_scalar(self, phi) result(theta)
        class(fieldline_t), intent(in) :: self
        real(dp) :: phi

        real(dp) :: theta

        theta = (phi - self%phi_0)*self%iota + self%theta_0
    end function get_theta_scalar

    function get_theta_array(self, phi) result(theta)
        class(fieldline_t), intent(in) :: self
        real(dp), dimension(:) :: phi

        real(dp), dimension(size(phi)) :: theta

        theta = (phi - self%phi_0)*self%iota + self%theta_0
    end function get_theta_array

end module fieldline_mod