我正在使用Fortran语言编写的FEM程序。这是一种涉及多组材料的机械分析。重要变量保存在具有以下形式的模块中
MODULE element
implicit none
save
TYPE proel_type
INTEGER:: prop1
INTEGER:: prop2
REAL:: prop3
REAL:: prop4
...
INTEGER, ALLOCATABLE :: list1(:)
REAL, ALLOCATABLE :: array1(:)
...
INTEGER:: LTYPE
...
END TYPE proel_type
TYPE(proel_type), ALLOCATABLE:: proel(:)
INTEGER:: prop1
INTEGER:: prop2
REAL:: prop3
REAL:: prop4
...
INTEGER:: LTYPE
INTEGER:: ISETS
...
END MODULE element
如您所见,proel是一个可分配的数据结构,包含有关材料属性,元素等的一些信息。此数据通过I / O例程(如
)从文本文件中获取SUBROUTINE setdata
USE element
IMPLICIT NONE
ALLOCATE(PROEL(NSETS))
DO ISETS=1,NSETS
... ! here I am loading succefully the string variable STRVAR
! from the text file with data
LTYPE=GETVAL(STRVAR) ! here I retreive the value of LTYPE
PROEL(ISETS)%LTYPE=LTYPE ! here I save the (integer) variable for the set
IF(LTYPE.NE.0)THEN
CALL SETELM
END IF
END DO
END SUBROUTINE
内部子程序SETELM我正在设置程序中使用的一些特定参数,但在某些时候我记得保存在PROEL中的LTYPE
SUBROUTINE SETELM
USE element
IMPLICIT NONE
LTYPE=PROEL(ISETS)%LTYPE
SELECT CASE(LTYPE)
CASE( 1)
...
CASE( 2)
...
CASE DEFAULT
...
END SELECT
END SUBROUTINE
现在,在赋值LTYPE = PROEL(ISETS)%LTYPE和SELECT CASE(LTYPE)之间,变量LTYPE无任何理由地改变值。该值是随机的(从某种意义上说,我不知道它来自哪里,但它不像未初始化的变量),并且中间没有其他操作可以与LTYPE一起使用。
我正在使用VS2008和Fortran,所以我打开了每个警告,但是编译和运行时都没有提供一些可能的提示。
你知道为什么会这样吗?