field_base.f90 Source File


This file depends on

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

Files dependent on this one

sourcefile~~field_base.f90~~AfferentGraph sourcefile~field_base.f90 field_base.f90 sourcefile~boozer_field.f90 boozer_field.f90 sourcefile~boozer_field.f90->sourcefile~field_base.f90 sourcefile~coefficients.f90 coefficients.f90 sourcefile~coefficients.f90->sourcefile~field_base.f90 sourcefile~deviation.f90 deviation.f90 sourcefile~coefficients.f90->sourcefile~deviation.f90 sourcefile~deviation.f90->sourcefile~field_base.f90 sourcefile~field_along_fieldline.f90 field_along_fieldline.f90 sourcefile~field_along_fieldline.f90->sourcefile~field_base.f90 sourcefile~field_checks.f90 field_checks.f90 sourcefile~field_checks.f90->sourcefile~field_base.f90 sourcefile~field_checks.f90->sourcefile~field_along_fieldline.f90 sourcefile~fieldline_integrals.f90 fieldline_integrals.f90 sourcefile~fieldline_integrals.f90->sourcefile~field_base.f90 sourcefile~fieldline_integrands.f90 fieldline_integrands.f90 sourcefile~fieldline_integrals.f90->sourcefile~fieldline_integrands.f90 sourcefile~fieldline_integrands.f90->sourcefile~field_base.f90 sourcefile~fourier_field.f90 fourier_field.f90 sourcefile~fourier_field.f90->sourcefile~field_base.f90 sourcefile~make_fieldline.f90 make_fieldline.f90 sourcefile~make_fieldline.f90->sourcefile~field_base.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~shaing_callen.f90 shaing_callen.f90 sourcefile~shaing_callen.f90->sourcefile~field_base.f90 sourcefile~shaing_callen.f90->sourcefile~fieldline_integrands.f90 sourcefile~shaing_callen_wrappers.f90 shaing_callen_wrappers.f90 sourcefile~shaing_callen.f90->sourcefile~shaing_callen_wrappers.f90 sourcefile~shaing_callen_wrappers.f90->sourcefile~field_base.f90 sourcefile~shaing_callen_wrappers.f90->sourcefile~fieldline_integrands.f90 sourcefile~main.f90 main.f90 sourcefile~main.f90->sourcefile~boozer_field.f90 sourcefile~main.f90->sourcefile~coefficients.f90 sourcefile~main.f90->sourcefile~make_fieldline.f90 sourcefile~main.f90->sourcefile~shaing_callen.f90 sourcefile~read_file.f90 read_file.f90 sourcefile~main.f90->sourcefile~read_file.f90 sourcefile~read_file.f90->sourcefile~make_fieldline.f90

Source Code

module field_base
    use constants, only: dp
    implicit none
    private

    public :: field_t

    type, abstract :: field_t
        !! Abstract base type for magnetic fields in Boozer coordinates.
        !!
        !! Concrete implementations supply B_mod, sqrt(g), gradients, and covariant components.
    contains
        procedure(compute_B_sqrtg_dB_dx), deferred :: compute_B_sqrtg_dB_dx
        procedure(compute_B_and_dB_dx), deferred :: compute_B_and_dB_dx
        procedure(compute_B_mod), deferred :: compute_B_mod
        procedure(compute_nabla_s), deferred :: compute_nabla_s
        procedure(rel_accuracy_B), deferred :: rel_accuracy_B
        procedure(get_covariant_components), deferred :: get_covariant_components
    end type field_t

    interface
        subroutine compute_B_sqrtg_dB_dx(self, theta, phi, B_mod, sqrtg, dB_dx)
            import :: field_t, dp
            class(field_t), intent(in) :: self
            real(dp), intent(in) :: theta, phi
            real(dp), intent(out) :: B_mod, sqrtg, dB_dx(3)
        end subroutine
    end interface

    interface
        subroutine compute_B_and_dB_dx(self, theta, phi, B_mod, dB_dx)
            import :: field_t, dp
            class(field_t), intent(in) :: self
            real(dp), intent(in) :: theta, phi
            real(dp), intent(out) :: B_mod, dB_dx(3)
        end subroutine
    end interface

    interface
        subroutine compute_B_mod(self, theta, phi, B_mod)
            import :: field_t, dp
            class(field_t), intent(in) :: self
            real(dp), intent(in) :: theta, phi
            real(dp), intent(out) :: B_mod
        end subroutine
    end interface

    interface
        subroutine compute_nabla_s(self, theta, phi, nabla_s)
            import :: field_t, dp
            class(field_t), intent(in) :: self
            real(dp), intent(in) :: theta, phi
            real(dp), intent(out) :: nabla_s
        end subroutine
    end interface

    interface
        !> Relative accuracy of B_mod evaluations for this field representation.
        real(dp) function rel_accuracy_B(self)
            import :: field_t, dp
            class(field_t), intent(in) :: self
        end function
    end interface

    interface
        !> Covariant components of B (flux-surface constants in Boozer coordinates).
        subroutine get_covariant_components(self, B_theta_covariant, B_phi_covariant)
            import :: field_t, dp
            class(field_t), intent(in) :: self
            real(dp), intent(out) :: B_theta_covariant, B_phi_covariant
        end subroutine
    end interface

end module field_base