Simplify loop on an array of derived type?

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
1 Like