Ошибка gfortran: отсутствует начальная левая скобка в строке формата

Я получил ошибки от gfortran:

     write(*,'ERROR in subroutine rddist ')                                
               1

Ошибка: отсутствует начальная левая скобка в строке формата в (1)

io-cfs.f:6574.41:

 >    (nint(MOD(cld_scale*1000000.0, 1000000)) .NE. 0)) THEN               
                                     1

Ошибка: аргументы «a» и «p» встроенной функции «mod» в (1) должны иметь один и тот же тип.

Можете ли вы дать мне знать, что это значит и решения? Большое спасибо.

Майкл


person Kuo-Hsien Chang    schedule 09.05.2012    source источник


Ответы (1)


Во-первых: write(*,'ERROR in subroutine rddist ') не является указанием на запись строки 'ERROR in subroutine rddist '. Вторым аргументом процедуры записи является строка формата, которая должна начинаться с '( и заканчиваться )'. Поскольку ваша строка формата не начинается должным образом, компилятор обнаружил там ошибку. Вероятно, вы хотели написать:

write(*,*) 'ERROR in subroutine rddist '

Теперь проверьте документацию Fortran для «редактировать дескрипторы», чтобы узнать о втором аргументе команды write.

Во-вторых: встроенная функция mod требует, чтобы оба ее аргумента имели одинаковый тип (и вид тоже). Вы дали ему действительное число cld_scale*1000000.0 и целое число 1000000. Приведите один из них к типу другого в соответствии с типом, который вы хотите получить в результате. Для приведения типов проверьте функции real и int.

person High Performance Mark    schedule 09.05.2012
comment
Спасибо. Я также могу вывести *, «ОШИБКА в подпрограмме rddist». Я исправляю 1000000 на 1000000,0, и это работает. Да. Оба его аргумента должны иметь одинаковый тип и вид. - person Kuo-Hsien Chang; 09.05.2012
comment
А как насчет write(*,'("ERROR in subroutine rddist")'). Кроме того, write(*,*) 'ERR...' печатает начальный пробел, а предыдущая версия - нет :) - person Hristo Iliev; 09.05.2012