У меня есть простая функция, которая возвращает объект времени на основе строки времени:
FUNCTION getTime(timeStr)RESULT(time)
IMPLICIT NONE
CHARACTER(LEN=19),INTENT(IN) :: timeStr
TYPE timeType
INTEGER :: yyyy,mo,dd,hh,mm,ss
ENDTYPE timeType
TYPE(timeType) :: time
READ(UNIT=timeStr( 1: 4),'(I4)')time%yyyy
READ(UNIT=timeStr( 6: 7),'(I2)')time%mo
READ(UNIT=timeStr( 9:10),'(I2)')time%dd
READ(UNIT=timeStr(12:13),'(I2)')time%hh
READ(UNIT=timeStr(15:16),'(I2)')time%mm
READ(UNIT=timeStr(18:19),'(I2)')time%ss
ENDFUNCTION getTime
Я называю это из родительской процедуры как:
umwmTime1=getTime(umwmStartTimeStr)
umwmTime2=getTime(umwmStopTimeStr)
, где umwmTime 1 и 2 объявлены как:
TYPE timeType
INTEGER :: yyyy,mo,dd,hh,mm,ss
ENDTYPE timeType
TYPE(timeType) :: umwmTime1,umwmTime2
Я получаю сообщение об ошибке компиляции:
PGF90-S-0099-Illegal use of derived type (ESMF_interface_UMWM.F90: 282)
PGF90-S-0099-Illegal use of derived type (ESMF_interface_UMWM.F90: 283)
0 inform, 0 warnings, 2 severes, 0 fatal for umwm_component_run
Строки 282 и 283 точки являются вызовами функций в родительской подпрограмме.
Однако, если я использую подпрограмму (вместо функции), чтобы получить umwmTime1 и umwmTime2 в качестве аргументов INTENT (OUT), у меня не возникнет проблем. Что я делаю не так с функцией?