init_grid Function

public function init_grid(nxg, nyg, nzg, xmax, ymax, zmax)

setup grid

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: nxg

number of voxels in each cardinal direction for fluence grid

integer, intent(in) :: nyg

number of voxels in each cardinal direction for fluence grid

integer, intent(in) :: nzg

number of voxels in each cardinal direction for fluence grid

real(kind=wp), intent(in) :: xmax

half size of each dimension in fluence grid.

real(kind=wp), intent(in) :: ymax

half size of each dimension in fluence grid.

real(kind=wp), intent(in) :: zmax

half size of each dimension in fluence grid.

Return Value type(cart_grid)


Source Code

    type(cart_grid) function init_grid(nxg, nyg, nzg, xmax, ymax, zmax)
    !! setup grid
        !> number of voxels in each cardinal direction for fluence grid
        integer,       intent(IN) :: nxg, nyg, nzg
        !> half size of each dimension in fluence grid. 
        real(kind=wp), intent(IN) :: xmax, ymax, zmax
        
        integer :: i

        init_grid%nxg = nxg
        init_grid%nyg = nyg
        init_grid%nzg = nzg

        init_grid%xmax = xmax
        init_grid%ymax = ymax
        init_grid%zmax = zmax

        allocate(init_grid%xface(nxg + 1), init_grid%yface(nyg + 1), init_grid%zface(nzg + 2))

        init_grid%xface = 0._wp
        init_grid%yface = 0._wp
        init_grid%zface = 0._wp

        ! Set small distance for use in optical depth integration routines 
        ! for roundoff effects when crossing cell walls
        init_grid%delta = 1.e-8_wp * min(((2._wp*xmax)/nxg), ((2._wp*ymax)/nyg), ((2._wp*zmax)/nzg))


        do i = 1, nxg + 1
            init_grid%xface(i) = (i - 1) * 2._wp * xmax/nxg
        end do

        do i = 1, nyg + 1
            init_grid%yface(i) = (i - 1) * 2._wp * ymax/nyg
        end do

        do i = 1, nzg + 2
            init_grid%zface(i) = (i - 1) * 2._wp * zmax/nzg
        end do

    end function init_grid