У меня есть подпрограмма, которая не ведет себя так, как ожидалось, и я не могу понять, почему.Ошибка сравнения FORTRAN 90 MINVAL
SUBROUTINE CHECK_INPUT_2D(VNAME,X,MIN_VAL)
CHARACTER(LEN=*) :: VNAME
REAL(KIND=JPRB),INTENT(INOUT) :: X(:,:)
REAL(KIND=JPRB),INTENT(IN),OPTIONAL :: MIN_VAL
LOGICAL :: L_MIN
CHARACTER(LEN=128) :: PRO_NAME='CHECK_INPUT_2D'
L_MIN= .FALSE.
IF (PRESENT(MIN_VAL)) THEN
IF (ANY(X < MIN_VAL)) THEN
L_MIN = .TRUE.
WHERE (X < MIN_VAL)
X = MIN_VAL
END WHERE
END IF
END IF
IF(L_MIN) WRITE(*,*) 'WARNING:'//PRO_NAME//'MIN VAL:'//TRIM(VNAME)//,MINVAL(X),' SET: ',MIN_VAL
END SUBROUTINE CHECK_INPUT_2D
Подпрограмма вызывается с установкой MIN_VAL в 0.0, но эта процедура все еще генерирует предупреждение. Почему это, когда значения X меньше 0.0? Как решить эту ошибку?
Эта подпрограмма находится в модуле со следующим заголовком:
MODULE MOD_UTILS
USE KIND1 ,ONLY : JPIM ,JPRB
IMPLICIT NONE
INTERFACE CHECK_INPUT
MODULE PROCEDURE CHECK_INPUT_1D,CHECK_INPUT_2D,CHECK_INPUT_3D
END INTERFACE
CONTAINS
и подпрограмма вызывается из другого модуля со следующим заголовком:
MODULE MOD_SIM
#include "defs.h"
USE MOD_SIM_TYPES
USE MOD_SIMULATOR
USE KIND1 ,ONLY : JPIM, JPRB
IMPLICIT NONE
CONTAINS
В MOD_SIM является охуевать, что просто содержит: CALL CHECK_INPUT_2D (VNAME, X, MIN_VAL)
Цените свою помощь в этом.
Имеет ли эта подпрограмма явный интерфейс, определяемый там, где вы его вызываете? – casey
Нет, это не так. Должен ли я добавить его? Как это вызывает/предотвращает эту проблему? – Shejo284