вызовов MPI не ожидают INTEGER(4)
и INTEGER(8)
, они ожидают только INTEGER
.И, как всегда, помните, что на самом деле означают эти (4)
и (8)
Фортран: целое число * 4 против целого числа (4) против целого числа (род = 4)
С -i8
вы меняете то, что означает INTEGER
, какому типу оно соответствует.Вы можете сделать это, но вы должны скомпилировать библиотеку MPI с теми же настройками.Библиотека может или не может быть подготовлена для такой компиляции, но теоретически это должно быть возможно.
Вы также можете попробовать передать integer(int32)
вместо integer
в MPI.Если это правильный тип, который соответствует виду библиотеки MPI по умолчанию, проверки TKR и все другие проверки должны пройти ОК.Но это не рекомендуется.
Чтобы строго придерживаться стандарта Фортрана, когда вы продвигаете целочисленный вид по умолчанию, вы также должны продвигать действительный и логический тип по умолчанию.
Чтобы оставаться переносимым, используйте целые числакоторые соответствуют API библиотеки, которую вы используете, и убедитесь, что библиотека предназначена для использования с этим конкретным компилятором и с этой конкретной конфигурацией компилятора.
Обычно для переносимости не следует полагаться на продвижение типов по умолчаниюно следует использовать определенные виды, которые соответствуют данной цели в конкретной части кода.