Perform the 6D integration.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integration_class_6d), | intent(inout) | :: | me | |||
real(kind=wp), | intent(out) | :: | ans | |||
integer, | intent(out) | :: | ierr | |||
real(kind=wp), | intent(out) | :: | err |
subroutine integrate_6d (me, ans, ierr, err)
implicit none
class(integration_class_6d),intent(inout) :: me
real(wp),intent(out) :: ans
integer,intent(out) :: ierr
real(wp),intent(out) :: err
! set the functions to the contained wrappers:
me%is%fun => f_of_s
me%ir%fun => f_of_r
me%iq%fun => f_of_q
me%iz%fun => f_of_z
me%iy%fun => f_of_y
me%ix%fun => f_of_x
! call the low-level routine:
call me%is%integrate(ans, ierr, err)
contains
function f_of_x(ix,x) result(f)
class(integration_class_1d),intent(inout) :: ix
real(wp), intent(in) :: x
real(wp) :: f
f = me%fxyzqrs(x,me%iy%val,me%iz%val,me%iq%val,me%ir%val,me%is%val)
end function f_of_x
function f_of_y(iy,y) result(f)
class(integration_class_1d),intent(inout) :: iy
real(wp), intent(in) :: y
real(wp) :: f
iy%val = y
call me%ix%integrate(f, ierr, err)
end function f_of_y
function f_of_z(iz,z) result(f)
class(integration_class_1d),intent(inout) :: iz
real(wp), intent(in) :: z
real(wp) :: f
iz%val = z
call me%iy%integrate(f, ierr, err)
end function f_of_z
function f_of_q(iq,q) result(f)
class(integration_class_1d),intent(inout) :: iq
real(wp), intent(in) :: q
real(wp) :: f
iq%val = q
call me%iz%integrate(f, ierr, err)
end function f_of_q
function f_of_r(ir,r) result(f)
class(integration_class_1d),intent(inout) :: ir
real(wp), intent(in) :: r
real(wp) :: f
ir%val = r
call me%iq%integrate(f, ierr, err)
end function f_of_r
function f_of_s(is,s) result(f)
class(integration_class_1d),intent(inout) :: is
real(wp), intent(in) :: s
real(wp) :: f
is%val = s
call me%ir%integrate(f, ierr, err)
end function f_of_s
end subroutine integrate_6d