Perform the 4D integration.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(integration_class_4d), | intent(inout) | :: | me | |||
real(kind=wp), | intent(out) | :: | ans | |||
integer, | intent(out) | :: | ierr | |||
real(kind=wp), | intent(out) | :: | err |
subroutine integrate_4d (me, ans, ierr, err)
implicit none
class(integration_class_4d),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%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%iq%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%fxyzq(x,me%iy%val,me%iz%val,me%iq%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
end subroutine integrate_4d