module bianchi_sky_mod ! Uses use s2_types_mod use s2_sky_mod use s2_error_mod use bianchi_error_mod ! Types public type bianchi_sky ! Variables integer, public, parameter :: BIANCHI_SKY_QUAD_DIRECT = 1 integer, public, parameter :: BIANCHI_SKY_QUAD_QTRAP = 2 integer, public, parameter :: BIANCHI_SKY_QUAD_QSIMP = 3 logical, private, parameter :: BIANCHI_DISABLE_PLM1TABLE = .false. real (kind=s2_dp), private, parameter :: BIANCHI_CMB_T = 1d0 ! Subroutines and functions public function bianchi_sky_init (omega0, x, zE, s12H, s13H, rhand, nside, quad, N) result (b) public function bianchi_sky_init_alm (omega0, x, zE, s12H, s13H, rhand, lmax, quad_AB, quad_IAB, N, alpha, beta, gamma) result (b) public subroutine bianchi_sky_free (b) public subroutine bianchi_sky_param_write (b) public subroutine bianchi_sky_compute_map (b, nside) public subroutine bianchi_sky_compute_alm (b, lmax, mmax) public subroutine bianchi_sky_get_alm (b, alm) public subroutine bianchi_sky_apply_beam (b, fwhm, lmax) public subroutine bianchi_sky_write (b, filename, file_type, comment) public subroutine bianchi_sky_rotate (b, alpha, beta, gamma) private function bianchi_sky_comp_s (tau, tau0, theta0, h) result (s) private function bianchi_sky_comp_psi (tau, tau0, theta0, h) result (psi) private function bianchi_sky_comp_c1 (omega0, x) result (c1) private function bianchi_sky_comp_c2 (sE, zE) result (c2) private function bianchi_sky_comp_c3 (omega0, h) result (c3) private function bianchi_sky_comp_A (theta, tauE, tau0, h, zE, c1, c3, quad, N) result (Atheta) private function bianchi_sky_comp_B (theta, tauE, tau0, h, zE, c1, c3, quad, N) result (Btheta) private function bianchi_sky_comp_IA (tauE, tau0, h, zE, c1, c3, l, quad_AB, quad_IAB, N, A_grid) result (IA) private function bianchi_sky_comp_IB (tauE, tau0, h, zE, c1, c3, l, quad_AB, quad_IAB, N, B_grid) result (IB) private function bianchi_sky_integrand_A (tau, tau0, theta0, h) result (integrand) private function bianchi_sky_integrand_B (tau, tau0, theta0, h) result (integrand) private function bianchi_sky_integrand_IA (theta, tauE, tau0, h, zE, c1, c3, l, quad_AB, N, A_grid) result (integrand) private function bianchi_sky_integrand_IB (theta, tauE, tau0, h, zE, c1, c3, l, quad_AB, N, B_grid) result (integrand) private subroutine trapzd_a (func, tau0, theta0, h, a, b, s, n) private function qtrap_a (func, tau0, theta0, h, a, b) result (integral) private function qsimp_a (func, tau0, theta0, h, a, b) result (integral) private subroutine trapzd_ia (func, tauE, tau0, h, zE, c1, c3, l, quad_AB, a, b, s, n, N_quad) private function qtrap_ia (func, tauE, tau0, h, zE, c1, c3, l, quad_AB, a, b, N_quad) result (integral) private function qsimp_ia (func, tauE, tau0, h, zE, c1, c3, l, quad_AB, a, b, N_quad) result (integral) private function plgndr (l, m, x) private function asinh (x) result (y) end module bianchi_sky_modProvides functionality to simulate a Bianchi VII_h model of the CMB. Uses the s2_sky module to create healpix sky maps.
Author: J. D. McEwen (mcewen@mrao.cam.ac.uk)
Version: 0.1 June 2005
public type bianchi_sky private logical :: init = .false. real (kind=s2_dp) :: omega0 = 0.0d0 real (kind=s2_dp) :: x = 0.0d0 real (kind=s2_dp) :: zE = 0.0d0 real (kind=s2_dp) :: s12H = 0.0d0 real (kind=s2_dp) :: s13H = 0.0d0 logical :: rhand = .true. real (kind=s2_dp) :: wH = 0.0d0 real (kind=s2_dp) :: h = 0.0d0 real (kind=s2_dp) :: tau0 = 0.0d0 real (kind=s2_dp) :: tauE = 0.0d0 type (s2_sky) :: sky end type bianchi_sky
integer, public, parameter :: BIANCHI_SKY_QUAD_DIRECT = 1Quadrature type: Direct (rectangular).
integer, public, parameter :: BIANCHI_SKY_QUAD_QTRAP = 2Quadrature type: Trapezium rule.
integer, public, parameter :: BIANCHI_SKY_QUAD_QSIMP = 3Quadrature type: Simpson's rule.
logical, private, parameter :: BIANCHI_DISABLE_PLM1TABLE = .false.
real (kind=s2_dp), private, parameter :: BIANCHI_CMB_T = 1d0
public function bianchi_sky_init (omega0, x, zE, s12H, s13H, rhand, nside, quad, N) result (b) real (kind=s2_dp), intent(in) :: omega0 real (kind=s2_dp), intent(in) :: x real (kind=s2_dp), intent(in) :: zE real (kind=s2_dp), intent(in) :: s12H real (kind=s2_dp), intent(in) :: s13H logical, intent(in) :: rhand integer, intent(in) :: nside integer, intent(in) :: quad integer, optional, intent(in) :: N type (bianchi_sky) :: b ! Calls: bianchi_error, in_ring, pix2ang_ring end function bianchi_sky_initInitialise bianchi object by performing a bianchi simulation, computed in real space, with the specified parameters.
Variables:
Author: J. D. McEwen
Version: 0.1 June 2005
bianchi_sky_init_alm
public function bianchi_sky_init_alm (omega0, x, zE, s12H, s13H, rhand, lmax, quad_AB, quad_IAB, N, alpha, beta, gamma) result (b) real (kind=s2_dp), intent(in) :: omega0 real (kind=s2_dp), intent(in) :: x real (kind=s2_dp), intent(in) :: zE real (kind=s2_dp), intent(in) :: s12H real (kind=s2_dp), intent(in) :: s13H logical, intent(in) :: rhand integer, intent(in) :: lmax integer, intent(in) :: quad_AB integer, intent(in) :: quad_IAB integer, optional, intent(in) :: N real (kind=s2_sp), optional, intent(in) :: alpha real (kind=s2_sp), optional, intent(in) :: beta real (kind=s2_sp), optional, intent(in) :: gamma type (bianchi_sky) :: b ! Calls: bianchi_error, s2_dl_beta_operator end function bianchi_sky_init_almInitialise bianchi object by performing a bianchi simulation, computed in harmonic space, with the specified parameters.
Notes:
Author: J. D. McEwen
Version: 0.1 July 2005
bianchi_sky_free
public subroutine bianchi_sky_free (b) type (bianchi_sky), intent(inout) :: b ! Calls: bianchi_error, s2_sky_free end subroutine bianchi_sky_freeFree all memory associated with a bianchi object.
Variables:
Author: J. D. McEwen
Version: 0.1 June 2005
bianchi_sky_param_write
public subroutine bianchi_sky_param_write (b) type (bianchi_sky), intent(in) :: b end subroutine bianchi_sky_param_writeWrite parameters of the Bianchi simulation to standard output.
Variables:
Author: J. D. McEwen
Version: 0.1 June 2005
bianchi_sky_compute_map
public subroutine bianchi_sky_compute_map (b, nside) type (bianchi_sky), intent(inout) :: b integer, intent(in) :: nside ! Calls: bianchi_error, s2_sky_compute_map end subroutine bianchi_sky_compute_mapCompute the map of the bianchi sky, assuming the alms are already defined.
Variables:
Author: J. D. McEwen
Version: 0.1 July 2005
bianchi_sky_compute_alm
public subroutine bianchi_sky_compute_alm (b, lmax, mmax) type (bianchi_sky), intent(inout) :: b integer, intent(in) :: lmax integer, intent(in) :: mmax ! Calls: bianchi_error, s2_sky_compute_alm end subroutine bianchi_sky_compute_almCompute the alm of the bianchi sky, assuming the map is already defined.
Variables:
Author: J. D. McEwen
Version: 0.1 July 2005
bianchi_sky_get_alm
public subroutine bianchi_sky_get_alm (b, alm) type (bianchi_sky), intent(in) :: b complex (kind=s2_spc), intent(out), dimension (:,:) :: alm ! Calls: bianchi_error, s2_sky_get_alm end subroutine bianchi_sky_get_almGet alms contained in a bianchi sky object. Alms must already be computed.
Notes:
Author: J. D. McEwen
Version: 0.1 July 2005
bianchi_sky_apply_beam
public subroutine bianchi_sky_apply_beam (b, fwhm, lmax) type (bianchi_sky), intent(inout) :: b real (kind=s2_sp), intent(in) :: fwhm integer, intent(in) :: lmax ! Calls: s2_pl_free, s2_sky_conv end subroutine bianchi_sky_apply_beamApply Gaussian beam with specified FWHM. (FWHM must be passed in arcmin.)
Notes:
Author: J. D. McEwen
Version: 0.1 July 2005
bianchi_sky_write
public subroutine bianchi_sky_write (b, filename, file_type, comment) type (bianchi_sky), intent(inout) :: b character (len=*), intent(in) :: filename integer, intent(in) :: file_type character (len=*), optional, intent(in) :: comment ! Calls: bianchi_error, s2_error, s2_sky_io_fits_write, s2_sky_write_map_file end subroutine bianchi_sky_writeWrite the bianchi simulated sky to a file.
Variables:
Author: J. D. McEwen
Version: 0.1 June 2005
bianchi_sky_rotate
public subroutine bianchi_sky_rotate (b, alpha, beta, gamma) type (bianchi_sky), intent(inout) :: b real (kind=s2_sp) :: alpha real (kind=s2_sp) :: beta real (kind=s2_sp) :: gamma ! Calls: bianchi_error, s2_sky_rotate end subroutine bianchi_sky_rotateRotate the simulated sky of the bianchi object.
Variables:
Author: J. D. McEwen
Version: 0.1 June 2005
bianchi_sky_comp_s
private function bianchi_sky_comp_s (tau, tau0, theta0, h) result (s) real (kind=s2_dp), intent(in) :: tau real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: theta0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp) :: s end function bianchi_sky_comp_sCompute s variable in bianchi sky simulation.
Variables:
Author: J. D. McEwen
Version: 0.1 June 2005
bianchi_sky_comp_psi
private function bianchi_sky_comp_psi (tau, tau0, theta0, h) result (psi) real (kind=s2_dp), intent(in) :: tau real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: theta0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp) :: psi end function bianchi_sky_comp_psiCompute psi variable in bianchi sky simulation.
Variables:
Author: J. D. McEwen
Version: 0.1 June 2005
bianchi_sky_comp_c1
private function bianchi_sky_comp_c1 (omega0, x) result (c1) real (kind=s2_dp), intent(in) :: omega0 real (kind=s2_dp), intent(in) :: x real (kind=s2_dp) :: c1 end function bianchi_sky_comp_c1Compute c1 variable in bianchi sky simulation.
Variables:
Author: J. D. McEwen
Version: 0.1 June 2005
bianchi_sky_comp_c2
private function bianchi_sky_comp_c2 (sE, zE) result (c2) real (kind=s2_dp), intent(in) :: sE real (kind=s2_dp), intent(in) :: zE real (kind=s2_dp) :: c2 end function bianchi_sky_comp_c2Compute c2 variable in bianchi sky simulation.
Variables:
Author: J. D. McEwen
Version: 0.1 June 2005
bianchi_sky_comp_c3
private function bianchi_sky_comp_c3 (omega0, h) result (c3) real (kind=s2_dp), intent(in) :: omega0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp) :: c3 end function bianchi_sky_comp_c3Compute c3 variable in bianchi sky simulation.
Variables:
Author: J. D. McEwen
Version: 0.1 June 2005
bianchi_sky_comp_A
private function bianchi_sky_comp_A (theta, tauE, tau0, h, zE, c1, c3, quad, N) result (Atheta) real (kind=s2_dp), intent(in) :: theta real (kind=s2_dp), intent(in) :: tauE real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp), intent(in) :: zE real (kind=s2_dp), intent(in) :: c1 real (kind=s2_dp), intent(in) :: c3 integer, intent(in) :: quad integer, optional, intent(in) :: N real (kind=s2_dp) :: Atheta ! Calls: bianchi_error end function bianchi_sky_comp_ACompute A(theta) for Bianchi simulation.
Variables:
Author: J. D. McEwen
Version: 0.1 July 2005
bianchi_sky_comp_B
private function bianchi_sky_comp_B (theta, tauE, tau0, h, zE, c1, c3, quad, N) result (Btheta) real (kind=s2_dp), intent(in) :: theta real (kind=s2_dp), intent(in) :: tauE real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp), intent(in) :: zE real (kind=s2_dp), intent(in) :: c1 real (kind=s2_dp), intent(in) :: c3 integer, intent(in) :: quad integer, optional, intent(in) :: N real (kind=s2_dp) :: Btheta ! Calls: bianchi_error end function bianchi_sky_comp_BCompute B(theta) for Bianchi simulation.
Variables:
Author: J. D. McEwen
Version: 0.1 July 2005
bianchi_sky_comp_IA
private function bianchi_sky_comp_IA (tauE, tau0, h, zE, c1, c3, l, quad_AB, quad_IAB, N, A_grid) result (IA) real (kind=s2_dp), intent(in) :: tauE real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp), intent(in) :: zE real (kind=s2_dp), intent(in) :: c1 real (kind=s2_dp), intent(in) :: c3 integer, intent(in) :: l integer, intent(in) :: quad_AB integer, intent(in) :: quad_IAB integer, optional, intent(in) :: N real (kind=s2_dp), optional, intent(in), dimension (0:) :: A_grid real (kind=s2_dp) :: IA ! Calls: bianchi_error end function bianchi_sky_comp_IACompute IA_l integral required in Bianchi simulation.
Variables:
Author: J. D. McEwen
Version: 0.1 July 2005
bianchi_sky_comp_IB
private function bianchi_sky_comp_IB (tauE, tau0, h, zE, c1, c3, l, quad_AB, quad_IAB, N, B_grid) result (IB) real (kind=s2_dp), intent(in) :: tauE real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp), intent(in) :: zE real (kind=s2_dp), intent(in) :: c1 real (kind=s2_dp), intent(in) :: c3 integer, intent(in) :: l integer, intent(in) :: quad_AB integer, intent(in) :: quad_IAB integer, optional, intent(in) :: N real (kind=s2_dp), optional, intent(in), dimension (0:) :: B_grid real (kind=s2_dp) :: IB ! Calls: bianchi_error end function bianchi_sky_comp_IBCompute IB_l integral required in Bianchi simulation.
Variables:
Author: J. D. McEwen
Version: 0.1 July 2005
bianchi_sky_integrand_A
private function bianchi_sky_integrand_A (tau, tau0, theta0, h) result (integrand) real (kind=s2_dp), intent(in) :: tau real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: theta0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp) :: integrand end function bianchi_sky_integrand_ACompute integrand of A integral.
Variables:
Author: J. D. McEwen
Version: 0.1 June 2005
bianchi_sky_integrand_B
private function bianchi_sky_integrand_B (tau, tau0, theta0, h) result (integrand) real (kind=s2_dp), intent(in) :: tau real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: theta0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp) :: integrand end function bianchi_sky_integrand_BCompute integrand of B integral.
Variables:
Author: J. D. McEwen
Version: 0.1 June 2005
bianchi_sky_integrand_IA
private function bianchi_sky_integrand_IA (theta, tauE, tau0, h, zE, c1, c3, l, quad_AB, N, A_grid) result (integrand) real (kind=s2_dp), intent(in) :: theta real (kind=s2_dp), intent(in) :: tauE real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp), intent(in) :: zE real (kind=s2_dp), intent(in) :: c1 real (kind=s2_dp), intent(in) :: c3 integer, intent(in) :: l integer, intent(in) :: quad_AB integer, optional, intent(in) :: N real (kind=s2_dp), optional, intent(in), dimension (0:) :: A_grid real (kind=s2_dp) :: integrand ! Calls: bianchi_error end function bianchi_sky_integrand_IACompute integrand of IA_l integral.
Notes:
Author: J. D. McEwen
Version: 0.1 July 2005
bianchi_sky_integrand_IB
private function bianchi_sky_integrand_IB (theta, tauE, tau0, h, zE, c1, c3, l, quad_AB, N, B_grid) result (integrand) real (kind=s2_dp), intent(in) :: theta real (kind=s2_dp), intent(in) :: tauE real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp), intent(in) :: zE real (kind=s2_dp), intent(in) :: c1 real (kind=s2_dp), intent(in) :: c3 integer, intent(in) :: l integer, intent(in) :: quad_AB integer, optional, intent(in) :: N real (kind=s2_dp), optional, intent(in), dimension (0:) :: B_grid real (kind=s2_dp) :: integrand ! Calls: bianchi_error end function bianchi_sky_integrand_IBCompute integrand of IB_l integral.
Notes:
Author: J. D. McEwen
Version: 0.1 July 2005
trapzd_a
private subroutine trapzd_a (func, tau0, theta0, h, a, b, s, n) interface func function func (tau, tau0, theta0, h) result (integrand) real (kind=s2_dp), intent(in) :: tau real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: theta0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp) :: integrand end function func end interface func real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: theta0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp), intent(IN) :: a real (kind=s2_dp), intent(IN) :: b real (kind=s2_dp), intent(INOUT) :: s integer, intent(IN) :: n end subroutine trapzd_aComputes nth stage of refinement of extended trapezoidal rule. Adapted from numerical recipes for the application at hand. For use in computing integrals required to compute A(theta) and B(theta).
Notes:
Author: J. D. McEwen
Version: 0.1 June 2005
qtrap_a
private function qtrap_a (func, tau0, theta0, h, a, b) result (integral) interface func function func (tau, tau0, theta0, h) result (integrand) real (kind=s2_dp), intent(in) :: tau real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: theta0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp) :: integrand end function func end interface func real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: theta0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp), intent(IN) :: a real (kind=s2_dp), intent(IN) :: b real (kind=s2_dp) :: integral ! Calls: bianchi_error, trapzd_a end function qtrap_aComputes the integral of the function func from a to b using the trapezoid method. Adapted from numerical recipes for the application at hand. For use in computing integrals required to compute A(theta) and B(theta).
Notes:
Author: J. D. McEwen
Version: 0.1 June 2005
qsimp_a
private function qsimp_a (func, tau0, theta0, h, a, b) result (integral) interface func function func (tau, tau0, theta0, h) result (integrand) real (kind=s2_dp), intent(in) :: tau real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: theta0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp) :: integrand end function func end interface func real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: theta0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp), intent(IN) :: a real (kind=s2_dp), intent(IN) :: b real (kind=s2_dp) :: integral ! Calls: bianchi_error, trapzd_a end function qsimp_aComputes the integral of the function func from a to b using Simpson's rule. Adapted from numerical recipes for the application at hand. For use in computing integrals required to compute A(theta) and B(theta).
Notes:
Author: J. D. McEwen
Version: 0.1 June 2005
trapzd_ia
private subroutine trapzd_ia (func, tauE, tau0, h, zE, c1, c3, l, quad_AB, a, b, s, n, N_quad) interface func function func (theta, tauE, tau0, h, zE, c1, c3, l, quad, N, AB_grid) result (integrand) real (kind=s2_dp), intent(in) :: theta real (kind=s2_dp), intent(in) :: tauE real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp), intent(in) :: zE real (kind=s2_dp), intent(in) :: c1 real (kind=s2_dp), intent(in) :: c3 integer, intent(in) :: l integer, intent(in) :: quad integer, optional, intent(in) :: N real (kind=s2_dp), optional, intent(in), dimension (0:) :: AB_grid real (kind=s2_dp) :: integrand end function func end interface func real (kind=s2_dp), intent(in) :: tauE real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp), intent(in) :: zE real (kind=s2_dp), intent(in) :: c1 real (kind=s2_dp), intent(in) :: c3 integer, intent(in) :: l integer, intent(in) :: quad_AB real (kind=s2_dp), intent(IN) :: a real (kind=s2_dp), intent(IN) :: b real (kind=s2_dp), intent(INOUT) :: s integer, intent(IN) :: n integer, optional, intent(in) :: N_quad end subroutine trapzd_iaComputes nth stage of refinement of extended trapezoidal rule. Adapted from numerical recipes for the application at hand. For use in computing integrals IA_l and IB_l (although function name is only give the a subscript).
Notes:
Author: J. D. McEwen
Version: 0.1 July 2005
qtrap_ia
private function qtrap_ia (func, tauE, tau0, h, zE, c1, c3, l, quad_AB, a, b, N_quad) result (integral) interface func function func (theta, tauE, tau0, h, zE, c1, c3, l, quad, N, AB_grid) result (integrand) real (kind=s2_dp), intent(in) :: theta real (kind=s2_dp), intent(in) :: tauE real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp), intent(in) :: zE real (kind=s2_dp), intent(in) :: c1 real (kind=s2_dp), intent(in) :: c3 integer, intent(in) :: l integer, intent(in) :: quad integer, optional, intent(in) :: N real (kind=s2_dp), optional, intent(in), dimension (0:) :: AB_grid real (kind=s2_dp) :: integrand end function func end interface func real (kind=s2_dp), intent(in) :: tauE real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp), intent(in) :: zE real (kind=s2_dp), intent(in) :: c1 real (kind=s2_dp), intent(in) :: c3 integer, intent(in) :: l integer, intent(in) :: quad_AB real (kind=s2_dp), intent(IN) :: a real (kind=s2_dp), intent(IN) :: b integer, optional, intent(in) :: N_quad real (kind=s2_dp) :: integral ! Calls: bianchi_error, trapzd_ia end function qtrap_iaComputes the integral of the function func from a to b using the trapezoid method. Adapted from numerical recipes for the application at hand. For use in computing integrals IA_l and IB_l (although function name is only give the a subscript).
Notes:
Author: J. D. McEwen
Version: 0.1 July 2005
qsimp_ia
private function qsimp_ia (func, tauE, tau0, h, zE, c1, c3, l, quad_AB, a, b, N_quad) result (integral) interface func function func (theta, tauE, tau0, h, zE, c1, c3, l, quad, N, AB_grid) result (integrand) real (kind=s2_dp), intent(in) :: theta real (kind=s2_dp), intent(in) :: tauE real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp), intent(in) :: zE real (kind=s2_dp), intent(in) :: c1 real (kind=s2_dp), intent(in) :: c3 integer, intent(in) :: l integer, intent(in) :: quad integer, optional, intent(in) :: N real (kind=s2_dp), optional, intent(in), dimension (0:) :: AB_grid real (kind=s2_dp) :: integrand end function func end interface func real (kind=s2_dp), intent(in) :: tauE real (kind=s2_dp), intent(in) :: tau0 real (kind=s2_dp), intent(in) :: h real (kind=s2_dp), intent(in) :: zE real (kind=s2_dp), intent(in) :: c1 real (kind=s2_dp), intent(in) :: c3 integer, intent(in) :: l integer, intent(in) :: quad_AB real (kind=s2_dp), intent(IN) :: a real (kind=s2_dp), intent(IN) :: b integer, optional, intent(in) :: N_quad real (kind=s2_dp) :: integral ! Calls: bianchi_error, trapzd_ia end function qsimp_iaComputes the integral of the function func from a to b using Simpson's rule. Adapted from numerical recipes for the application at hand. For use in computing integrals IA_l and IB_l (although function name is only give the a subscript).
Notes:
Author: J. D. McEwen
Version: 0.1 June 2005
plgndr
private function plgndr (l, m, x) integer :: l integer :: m real (kind=s2_dp) :: x real (kind=s2_dp) :: plgndr end function plgndrComputes the associated Legendre function for l and m. Adapted from numerical recipes
Notes:
Author: J. D. McEwen
Version: 0.1 June 2005
asinh
private function asinh (x) result (y) real (kind=s2_dp), intent(in) :: x real (kind=s2_dp) :: y end function asinhImplementation of asinh, since no intrinsic Fortran function.
Variables:
Author: J. D. McEwen
Version: 0.1 June 2005