Ввод-вывод в чистых процедурах Фортрана

Я пытаюсь включить проверку ошибок в чистую процедуру, которую я пишу. Я бы хотел что-то вроде:

pure real function func1(output_unit,a)
    implicit none
    integer :: a, output_unit

    if (a < 0) then
        write(output_unit,*) 'Error in function func1: argument must be a nonnegative integer. It is ', a
    else
    func1 = a/3

    endif
    return
end function func1

Однако чистым функциям не разрешается иметь операторы ввода-вывода для внешних файлов, поэтому я попытался передать функции номер единицы, например output_unit = 6 , что является выходом по умолчанию. Гфортран до сих пор считает это незаконным. Это можно обойти? Можно ли сделать функцию производным типом (вместо внутреннего типа вещественным здесь), который выводит строку в случае ошибки?

7
задан Vladimir F 25 February 2018 в 11:23
поделиться