integrate_3d Subroutine

private subroutine integrate_3d(me, ans, ierr, err)

Perform the 3D integration.

Arguments

TypeIntentOptionalAttributesName
class(integration_class_3d), intent(inout) :: me
real(kind=wp), intent(out) :: ans
integer, intent(out) :: ierr
real(kind=wp), intent(out) :: err

Contents

Source Code


Source Code

    subroutine integrate_3d (me, ans, ierr, err)

    implicit none

    class(integration_class_3d),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%iz%fun => f_of_z
    me%iy%fun => f_of_y
    me%ix%fun => f_of_x

    ! call the low-level routine:
    call me%iz%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%fxyz(x,me%iy%val,me%iz%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

    end subroutine integrate_3d