В вашей подпрограмме у вас есть утверждение implicit none
. Это очень хорошо и считается хорошей практикой программирования.
При этом вы должны специально объявлять любые пользовательские функции с их типом возвращаемого значения так же, как вы объявляете свои переменные.
Мы действительно не можем видеть, что это за переменная sv% Fm, так как она, вероятно, определена в одном из тех модулей, которые вы используете. Для ответа предположим, что Fm-компонент sv является вещественным (8) (подсказка в сообщении об ошибке): Вы должны объявить функцию следующим образом:
real(8) :: get_fm
Вы могли бы сделать это наверху с остальными объявлениями переменных.
Второе сообщение об ошибке Error: Function ‘get_fm’ at (1) has no IMPLICIT type
, по сути, говорит о том, что вы не объявляли тип возврата вашей функции, когда нет неявной типизации.
Первое сообщение об ошибке Error: Return type mismatch of function ‘get_fm’ at (1) (UNKNOWN/REAL(8))
всегда перечисляет 2 типа. Первый тип находится в программном модуле using, а второй тип является типом возвращаемого значения в самой функции. Так как вы не объявили функцию в своей подпрограмме, она сообщает «неизвестно» для этой. Если, например, вы случайно объявили ее как целочисленную функцию, она будет иметь (integer / real (8)) там, и это немного более понятно из-за несоответствия типов.
Таким образом, добавление объявления 1 устраняет обе ошибки.