Глядя на код, интерфейс histwrite
разрешается в следующую подпрограмму для qrp
:
SUBROUTINE histwrite_r2d (idf,pvarname,pitau,pdata,nbindex,nindex)
!---------------------------------------------------------------------
IMPLICIT NONE
!-
INTEGER,INTENT(IN) :: idf,pitau,nbindex
INTEGER,DIMENSION(nbindex),INTENT(IN) :: nindex
REAL,DIMENSION(:,:),INTENT(IN) :: pdata
CHARACTER(LEN=*),INTENT(IN) :: pvarname
!---------------------------------------------------------------------
CALL histw_rnd (idf,pvarname,pitau,nbindex,nindex,pdata_2d=pdata)
!---------------------------
END SUBROUTINE histwrite_r2d
Пустой аргумент pdata
(связывается с фактическим qrp
)является массивом предполагаемой формы, но не может быть выделенЭто означает, что применяется параграф 7 раздела 15.5.2.4 действующего стандарта Фортрана :
За исключением ссылок на встроенные функции запроса, если фиктивный аргумент неоптимален и фактический аргумент может быть выделен, соответствующий фактический аргумент должен быть выделен .
Другими словами, передача невыделенного qrp
в histwrite
недопустима в Fortran, потому что компилятор не может связать несуществующий массив с существующим.
Я считаю, что внутренне gfortranпросто передает нулевой указатель, после чего необязательный аргумент pdata_2d
при вызове histw_rnd
отображается как не присутствует . Но я подозреваю, что это скорее совпадение, чем дизайн.
Вы мало что можете сделать;это проблема кода. Вам необходимо исправить это самостоятельно, возможно, используя непосредственно histw_rnd
(в обход histwrite
) без каких-либо необязательных аргументов или выделив qrp
. Я не думаю, что есть волшебный вариант компилятора для PGI, который просто решил бы это для вас.