An abstract effective source interface.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
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). |
The constructor.
The interface of the constructor.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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. |
Routine to set a time window.
The interface of the routine that sets the time window for smooth turn on of the effective source.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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). |
Routine to specify the current state of the particle.
The interface of the routine that sets the state of the particle.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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. |
Routine to evaluate the effective source.
The interface of the routine that evaluates the effective source.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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. |
Routine to get the singular field at a given radius.
The interface of the routine that evaluates the singular field for a given mode and at a given radial coordinate.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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. |
Routine to get the time derivative of the singular field at a given radius.
The interface of the routine that evaluates the time derivative of the singular field for a given mode and at a given radial coordinate.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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. |
Routine to get the radial derivative of the singular field at a given radius.
The interface of the routine that evaluates the radial derivative of the singular field for a given mode and at a given radial coordinate.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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. |
type, abstract :: eff_source
!! An abstract effective source interface.
integer(ip) :: nmodes
!! The number of modes an effective source is provided for.
integer(ip) :: nvars
!! The number of variables an effective source is provided for.
type(cgf), dimension(:,:), allocatable :: source
!! A 2d-array of complex grid functions. When allocated the size is
!! ([[eff_source:nvars]]:[[eff_source:nmodes]]).
contains
procedure (eff_source_init), deferred, pass :: init
!! The constructor.
! procedure (eff_source_set_window), deferred, pass :: set_window
! procedure (eff_source_calc_window), deferred, pass :: calc_window
procedure (eff_source_set_time_window), deferred, pass :: set_time_window
!! Routine to set a time window.
procedure (eff_source_set_particle_pos), deferred, pass :: set_particle_pos
!! Routine to specify the current state of the particle.
procedure (eff_source_evaluate_source), deferred, pass :: evaluate_source
!! Routine to evaluate the effective source.
procedure (eff_source_get_singular), deferred, pass :: get_singular
!! Routine to get the singular field at a given radius.
procedure (eff_source_get_dsingular_dt), deferred, pass :: get_dsingular_dt
!! Routine to get the time derivative of the singular field at a given
!! radius.
procedure (eff_source_get_dsingular_dr), deferred, pass :: get_dsingular_dr
!! Routine to get the radial derivative of the singular field at a given
!! radius.
end type eff_source