Я не совсем понимаю вашу проблему, то, что вы делаете, должно работать, поскольку в этом случае передается только ссылка на массив.
program test
integer :: nx, ny
real, pointer :: abc(:)
nx = 2
ny = 3
allocate(abc(nx**3))
call my_sub(abc, nx, ny)
write(*,*) abc
end program
subroutine my_sub(abc, nx, ny)
integer :: nx, ny
real :: abc(nx,ny)
abc = 1.0
end subroutine
Чтобы узнать, как передаются массивы, вы можетепрочитайте эту страницу.Внизу вы можете найти таблицу с возможными ситуациями.Здесь применяется нижний левый регистр.