Инициализация в Fortran с использованием модулей

Я использую Intel Visual Fortran. Проблема, с которой я имею дело, имеет много ПАРАМЕТРОВ, и я хочу избежать их повторного объявления и инициирования в начале каждой подпрограммы.

Есть ли способ инициализировать эти ПАРАМЕТРЫ с помощью МОДУЛЕЙ?
Конечно, ответ ДА, но некоторые встроенные функции не принимаются в операторе инициализации.
Вот простой пример кода,

    MODULE mod
        IMPLICIT NONE
        REAL, PARAMETER :: x = SQRT ( 4 )
    END MODULE

    PROGRAM prog
        USE mod
        IMPLICIT NONE
        PRINT *, x
    END PROGRAM

После компиляции компилятор показывает мне эту ошибку:

Error #6362: The data types of the argument(s) are invalid.   
[SQRT] Source1.f90

Хотя использование ABS ( ) не сопровождается этой ошибкой, но SIN ( ) приводит.


person Shaqpad    schedule 12.01.2015    source источник


Ответы (1)


Проблема в том, что встроенная функция sqrtsin) требует аргумента с плавающей запятой. Просто есть реализации как с плавающей запятой, так и с целыми числами abs.

Замените 4 на 4. и все должно работать.

person marshall.ward    schedule 12.01.2015
comment
Бог! Что за глупый вопрос! Извините и спасибо за ваш быстрый ответ. - person Shaqpad; 12.01.2015
comment
Я думаю, что в этом случае вы могли бы обвинить ошибку компилятора Intel. Просто в gfortran это оказалось гораздо более явным :). - person marshall.ward; 12.01.2015
comment
В производственном коде нужно определить REAL с KIND. - person Fortranner; 12.01.2015