Ответ 1
Да, в Фортране смешные массивы указателей.
Проблема в том, что это:
TYPE(domain),DIMENSION(:),POINTER :: dom
не определяет массив указателей, как вы могли бы подумать, но указатель на массив. В Fortran есть много интересных вещей, которые вы можете сделать с этими вещами, - указав на кусочки больших массивов, даже с шагами - но это определенно указатель на массив, а не массив указателей.
Единственный способ получить массивы указателей в Fortran - это определить тип:
type domainptr
type(domain), pointer :: p
end type mytype
type(domainptr), dimension(3) :: dom
dom(1)%p => d01
dom(2)%p => d02
dom(3)%p => d03
и т.д.. Насколько я могу судить, единственной реальной причиной, которую вы должны сделать в Fortran, является синтаксис. Я бы хотел, чтобы это зафиксировано в более поздней версии стандарта.