Here is a simple example of an elemental function operating on an array of a derived type.
program elemental_example
implicit none
type derived
real :: x=0.0
integer :: i=2
end type derived
integer i
type(derived) :: data(10)
real, allocatable :: y(:)
do i = 1, size(data)
data(i) = derived(x=real(i))
end do
y = f(data)
write(*,'(*(f6.1,:,1x))') y
contains
real elemental function f(der)
type(derived), intent(in) :: der
f = der%x**der%i
end function f
end program elemental_example