effective_source Module

Module that defines the abstract interface of an effective source class.


Uses

  • module~~effective_source~~UsesGraph module~effective_source effective_source module~grid_function grid_function module~effective_source->module~grid_function module~world_tube world_tube module~effective_source->module~world_tube module~kinds kinds module~effective_source->module~kinds iso_c_binding iso_c_binding module~effective_source->iso_c_binding module~grid_function->module~kinds module~element element module~grid_function->module~element module~world_tube->module~grid_function module~world_tube->module~kinds module~element->module~kinds

Used by

  • module~~effective_source~~UsedByGraph module~effective_source effective_source module~scalar_schw_eff scalar_schw_eff module~scalar_schw_eff->module~effective_source proc~sobs_init sobs_init proc~sobs_init->module~effective_source module~singular_observer singular_observer module~singular_observer->module~effective_source module~singuler_observer_implementation singuler_observer_implementation module~singuler_observer_implementation->module~singular_observer module~scalar_schw scalar_schw module~scalar_schw->module~scalar_schw_eff module~scalar_schw_eff_implementation scalar_schw_eff_implementation module~scalar_schw_eff_implementation->module~scalar_schw_eff program~test test program~test->module~scalar_schw_eff program~test->module~singular_observer program~test->module~scalar_schw module~self_force_observer self_force_observer program~test->module~self_force_observer proc~scal_schw_eff_init scal_schw_eff_init proc~scal_schw_eff_init->module~scalar_schw module~scalar_schw_implementation scalar_schw_implementation module~scalar_schw_implementation->module~scalar_schw module~self_force_observer->module~scalar_schw proc~scal_schw_save_globals_2 scal_schw_save_globals_2 proc~scal_schw_save_globals_2->module~self_force_observer module~self_force_observer_implementation self_force_observer_implementation module~self_force_observer_implementation->module~self_force_observer

Contents


Abstract Interfaces

abstract interface

  • public subroutine eff_source_init(this, nmodes, nvars, l, m, mass)

    The interface of the constructor.

    Arguments

    Type IntentOptional AttributesName
    class(eff_source), intent(inout) :: this

    On return, the constructed object.

    integer(kind=ip), intent(in) :: nmodes

    The number of modes.

    integer(kind=ip), intent(in) :: nvars

    The number of variables.

    integer(kind=c_int), intent(in), dimension(nmodes):: l

    A 1d array of size nmodes containing the -values of the modes.

    integer(kind=c_int), intent(in), dimension(nmodes):: m

    A 1d array of size nmodes containing the m-values of the modes.

    real(kind=wp), intent(in) :: mass

    The mass of the black hole.

abstract interface

  • public subroutine eff_source_set_time_window(this, tfac, dtfac_dt, d2tfac_dt2, do_smooth_after_lmax)

    The interface of the routine that sets the time window for smooth turn on of the effective source.

    Arguments

    Type IntentOptional AttributesName
    class(eff_source), intent(inout) :: this

    The routine is called on this object.

    real(kind=wp), intent(in) :: tfac

    The current value for the time window.

    real(kind=wp), intent(in) :: dtfac_dt

    The current value for the time derivative of the time window.

    real(kind=wp), intent(in) :: d2tfac_dt2

    The current value for the second time derivative of the time window.

    integer(kind=ip), intent(in) :: do_smooth_after_lmax

    If do_smooth_after_lmax use tfac=1, dtfac_dt=0, d2tfac_dt2=0. This allows for smooth turn on of the effective source for the modes with do_smooth_after_lmax, while the rest gets turned on instantaneously (e.g. when external initial data is available).

abstract interface

  • public subroutine eff_source_set_particle_pos(this, r, phi, ur, En, Lz, ar, aphi, dardt, daphidt, d2ardt2, d2aphidt2)

    The interface of the routine that sets the state of the particle.

    Arguments

    Type IntentOptional AttributesName
    class(eff_source), intent(inout) :: this

    The routine is called on this object.

    real(kind=wp), intent(in) :: r

    The radial coordinate of the particle (in Schwarzschild coordinates), .

    real(kind=wp), intent(in) :: phi

    The azimuthal angle of the particle, .

    real(kind=wp), intent(in) :: ur

    The radial component of the 4-velocity, .

    real(kind=wp), intent(in) :: En

    The energy per unit mass of the particle, .

    real(kind=wp), intent(in) :: Lz

    The angular momentum per unit mass of the particle .

    real(kind=wp), intent(in) :: ar

    The radial component of the 4-acceleration, .

    real(kind=wp), intent(in) :: aphi

    The -component of the 4-acceleration, .

    real(kind=wp), intent(in) :: dardt

    The derivative of with respect to Schwarzschild coordinate time.

    real(kind=wp), intent(in) :: daphidt

    The derivative of with respect to Schwarzschild coordinate time.

    real(kind=wp), intent(in) :: d2ardt2

    The second derivative of with respect to Schwarzschild coordinate time.

    real(kind=wp), intent(in) :: d2aphidt2

    The second derivative of with respect to Schwarzschild coordinate time.

abstract interface

  • public subroutine eff_source_evaluate_source(this, r, wt)

    The interface of the routine that evaluates the effective source.

    Read more…

    Arguments

    Type IntentOptional AttributesName
    class(eff_source), intent(inout) :: this

    The routine is called on this object.

    type(rgf), intent(in) :: r

    A real values grid function that contain the radial coordinate (in Schwarzschild coordinates).

    type(wtube), intent(in) :: wt

    A world-tube object that ensures that the effective source is only non-zero inside the world-tube.

abstract interface

  • public subroutine eff_source_get_singular(this, r, mode, psi)

    The interface of the routine that evaluates the singular field for a given mode and at a given radial coordinate.

    Arguments

    Type IntentOptional AttributesName
    class(eff_source), intent(inout) :: this

    The routine is called on this object.

    real(kind=wp), intent(in) :: r

    The radial coordinate (Schwarzschild coordinates).

    integer(kind=ip), intent(in) :: mode

    The mode.

    complex(kind=wp), intent(out), dimension(:):: psi

    A 1d-array of size nvars of complex values that on return contains the singular field for all variables.

abstract interface

  • public subroutine eff_source_get_dsingular_dt(this, r, mode, dpsidt)

    The interface of the routine that evaluates the time derivative of the singular field for a given mode and at a given radial coordinate.

    Arguments

    Type IntentOptional AttributesName
    class(eff_source), intent(inout) :: this

    The routine is called on this object.

    real(kind=wp), intent(in) :: r

    The radial coordinate (Schwarzschild coordinates).

    integer(kind=ip), intent(in) :: mode

    The mode.

    complex(kind=wp), intent(out), dimension(:):: dpsidt

    A 1d-array of size nvars of complex values that on return contains the time derivative of the singular field for all variables.

abstract interface

  • public subroutine eff_source_get_dsingular_dr(this, r, mode, dpsidr)

    The interface of the routine that evaluates the radial derivative of the singular field for a given mode and at a given radial coordinate.

    Arguments

    Type IntentOptional AttributesName
    class(eff_source), intent(inout) :: this

    The routine is called on this object.

    real(kind=wp), intent(in) :: r

    The radial coordinate (Schwarzschild coordinates).

    integer(kind=ip), intent(in) :: mode

    The mode.

    complex(kind=wp), intent(out), dimension(:):: dpsidr

    A 1d-array of size nvars of complex values that on return contains the radial derivative of the singular field for all variables.


Derived Types

type, public, abstract :: eff_source

An abstract effective source interface.

Components

TypeVisibility AttributesNameInitial
integer(kind=ip), public :: nmodes

The number of modes an effective source is provided for.

integer(kind=ip), public :: nvars

The number of variables an effective source is provided for.

type(cgf), public, dimension(:,:), allocatable:: source

A 2d-array of complex grid functions. When allocated the size is (nvars:nmodes).

Type-Bound Procedures

procedure(eff_source_init), public, pass :: init

The constructor.

procedure(eff_source_set_time_window), public, pass :: set_time_window

Routine to set a time window.

procedure(eff_source_set_particle_pos), public, pass :: set_particle_pos

Routine to specify the current state of the particle.

procedure(eff_source_evaluate_source), public, pass :: evaluate_source

Routine to evaluate the effective source.

procedure(eff_source_get_singular), public, pass :: get_singular

Routine to get the singular field at a given radius.

procedure(eff_source_get_dsingular_dt), public, pass :: get_dsingular_dt

Routine to get the time derivative of the singular field at a given radius.

procedure(eff_source_get_dsingular_dr), public, pass :: get_dsingular_dr

Routine to get the radial derivative of the singular field at a given radius.