24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1394  |  回复: 14
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

huruiusst

木虫 (小有名气)

[求助] 增大数组后执行窗口只是一闪

增大数组,如TE(100,5000)改为TE(200,5000)后执行程序时,显示窗口一闪就没有了,没有执行程序中任何语句。是个非常大的程序,加PAUSE也不行。改为TE(100,5000)可以正常执行。不知道什么原因,请教?
回复此楼
SLS,MD,HRSG
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

superhugo

木虫 (正式写手)

【答案】应助回帖

引用回帖:
12楼: Originally posted by huruiusst at 2012-05-15 15:51:42:
但是将动态数组放入全局变量commn当中,编译就出错了?

要使用全局变量,在FORTRAN90和VF6.5中只需在MODULE中定义好,在使用到这些变量的主/子程序中只需USE 该MODULE名即可,在任何一个程序中改变了变量的值,那么在任何一处该变量的值就发生了改变,程序调用中无需传递参数或返回参数值。而局部变量则只在子程序中定义,子程序结束该变量也就无效了。  
要定义动态数组的话,只需在MODULE中定义迟型数组(只知道数组维数不知道大小),而后在程序中USE 该MODULE名,再给该数组分配空间,实现动态数组的定义。在传统有限元编程中,使用两个预先定义好的整型数组和实型数组,确定实际内存空间需要后还要去检查内存需要是否大于预定义数组大小,没有使用动态分配数组方便。  
示例程序(有限元网格信息的获取部分)如下:  
MODULE DATA_MODULE  
  
INTEGER, POINTER :: EL_NODE(:, ! 单元组成节点  
REAL, POINTER :: ND_XY(:, ) ! 节点坐标  
  
   ......  
  
END MODULE  
  
PROGRAM MAIN  
  
  USE DATA_MODULE  
        
  CALL INFO_MESH()  ! 获取有限元网格信息  
  
   ......  
  
END   
  
SUBROUTINE INFO_MESH()  
  
    USE DATA_MODULE  
  
   ! 确定节点、单元总数  
    CALL NUM_ND_EL()   
    ! 分配单元组成节点、节点坐标数组空间  
    ALLOCATE (EL_NODE(3, NELEM), ND_XY(2, NNODE))   
    ! 获得节点坐标、单元组成节点信息  
    CALL INFO_ND_EL()   
   
END  
  
SUBROUTINE NUM_ND_EL()  
  
   USE DATA_MODULE  
  
   ! 顺序读取节点坐标文件,确定总节点数NNODE  
   OPEN (10, DEFAULTFILE='D:/TEST DATA', FILE='NODE1.DAT', ACCESS='SEQUENTIAL', STATUS='OLD', IOSTAT=IV)  
   NNODE=0  
   1 READ (10, FMT=*, END=2, IOSTAT=IV)  
   ! 在此没有读入数据,每执行READ语句一次,文件指针下移一条记录位置,直至文件结束  
   NNODE=NNODE+1  
   GOTO 1  
   2 CLOSE(10)  
  
   ! 顺序读取单元节点文件,确定总单元数NELEM  
   100 OPEN (12, DEFAULTFILE='D:/TEST DATA', FILE='ELEMENT1.DAT', ACCESS='SEQUENTIAL', STATUS='OLD', IOSTAT=IV)  
    NELEM=0  
   3 READ (12, FMT=*, END=4, IOSTAT=IV)  
    NELEM=NELEM+1  
    GOTO 3  
    4 CLOSE(12)  
  
END  
  
SUBROUTINE INFO_ND_EL()  
  
  USE DATA_MODULE  
  
  OPEN (10, DEFAULTFILE='D:/TEST DATA', FILE='NODE1.DAT', ACCESS='SEQUENTIAL', STATUS='OLD', IOSTAT=IV)  
  READ (10, FMT="(I12, 2F12.5)", IOSTAT=IV) (K, (ND_XY(I, J), I=1, 2), J=1, NNODE) ! NNODE为总节点数  
  
  OPEN (12, DEFAULTFILE='D:/TEST DATA', FILE='ELEMENT1.DAT', ACCESS='SEQUENTIAL', STATUS='OLD', IOSTAT=IV)  
  READ (12, FMT="(4I8)", IOSTAT=IV) (K, (EL_NODE(I, J), I=1, 3), J=1, NELEM) ! NELEM为总单元数  
  
END

参考:http://www.baisi.net/thread-767035-1-1.html

» 本帖已获得的红花(最新10朵)

14楼2012-05-15 17:16:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 15 个回答

lurencyj

木虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
内存出错。应该检查TE矩阵元素相关的调用和赋值语句

[ 发自手机版 http://muchong.com/3g ]
很女子很弓虽大
2楼2012-05-10 20:27:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huruiusst

木虫 (小有名气)

引用回帖:
2楼: Originally posted by lurencyj at 2012-05-10 20:27:48:
内存出错。应该检查TE矩阵元素相关的调用和赋值语句

当数组为TE(100,5000)运行时,出现了一个WARNING
"warning LNK4084: total image size 1600692224 exceeds max (268435456); image may not run" 但是可以正常运行。
能具体讲一下吗?
SLS,MD,HRSG
3楼2012-05-10 20:34:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yinds

铁杆木虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
可能是因为 数组太大,总分配数组大小超过了静态分配2G的限制。
4楼2012-05-11 08:57:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见