2015-06-05 2 views
0

Мне очень хотелось бы иметь возможность определять некоторые параметры в модуле Fortran, чтобы они были доступны для основной программы и всех ее подпрограмм.Как установить параметр mpreal внутри модуля Fortran

Проблема заключается в том, что даже когда я пытаюсь объявить их в теле программы, такие как:

type (mp_real), parameter :: p1 = 1.98342E+5 !(or say 1.1d0) 

я получаю следующее сообщение об ошибке:

Error: Can't convert REAL(4) to TYPE(mp_real) at (1)

В принципе у меня нет постановки задачи значение параметра в теле программы, но если я попытаюсь сделать это внутри области объявления переменных, gfortran не понравится. И это мешает мне определить их в модуле. Есть ли способ установить значение параметров внутри модуля с mpreal или я должен переработать всю программу?

ответ

1

Я думаю, вы используете библиотеку mpfun, которая определяет тип mp_real именно так, как вы его используете.

Затем они перегружают оператор присваивания, чтобы иметь возможность конвертировать типы. Этот оператор недоступен во время компиляции, что приводит к ошибке, которую вы получаете.

Ниже приведен пример, иллюстрирующий это:

module test_mod 

    type my_type 
    integer :: val 
    end type 

    interface assignment (=) 
    module procedure my_assign 
    end interface 

contains 

    subroutine my_assign(t, v) 
    type(my_type),intent(out) :: t 
    integer, intent(in)  :: v 
    end subroutine 
end module 

program test 
    use test_mod 

    type(my_type),parameter :: t = 1 
end program 

Насколько мне известно, это не представляется возможным использовать производные типы в порядке, вы предлагаете. Однако вы могли бы хранить p1 в качестве реального и использовать инициализирующую подпрограмму ...

+0

Да, я также подумал, что это может быть проблемой, потому что, когда я использую mpreal (1.1d0) в объявлении параметра, он сообщает мне «Ошибка: функция« mpreal »в выражении инициализации в (1) должна быть неотъемлемой функцией « Благодарим вас за ответ. Тогда мне придется переработать код. –

Смежные вопросы