Thanks for good advice!
Do you mean like this?
subroutine real_view(cp, rp, ierr)
use ISO_C_binding, only: c_f_pointer, c_loc
complex(wp), intent(in), pointer :: cp(:)
real(wp), intent(inout), pointer :: rp(:)
integer, intent(out) :: ierr
if (.not. is_contiguous(cp)) then
ierr = -1
return
end if
if (.not. associated(cp)) then
ierr = -2
return
end if
call c_f_pointer(c_loc(cp), rp, shape=[2*size(cp)])
end subroutine real_view
called like this?
complex(wp), target, allocatable :: c(:)
complex(wp), pointer :: cp(:) => null()
real(wp), pointer :: rp(:) => null()
integer :: ierr
! Create complex 2-element array
allocate(c(2))
c(1) = cmplx(1_wp, 2_wp, wp)
c(2) = cmplx(3_wp, 4_wp, wp)
! Create a 4-element real "view" into the same memory area
cp => c
call real_view(cp, rp, ierr)