24小时热门版块排行榜    

查看: 2966  |  回复: 9
本帖产生 1 个 程序强帖 ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

li_clifff

银虫 (正式写手)

[求助] 请教一个fortran小程序编译出错的问题,谢谢

如下程序编译不成功,不知道问题出在哪里,mesh.dat文件格式是第一行是numnp, numel的数值,第二行到最后是mesh的各个四边形的具体坐标。错误信息是:Error: A specification expression object must be a dummy argument, a COMMON block object, or an object accessible through host or use association   [NUMNP]  integer*4 numnp, numel   
还有G:\Program Files\Microsoft Visual Studio\MyProjects\mesh\pmesh.for(22) : Error: An automatic object is invalid in a main program.   [X] dimension x(2,numnp),ia(numnp),请多多指教,谢谢                        


  PROGRAM pmesh
c
c-----------------------------------------------------------------
c     purpose : to eliminate the string from existed mesh data
c               warning : the mesh has to be made out of quadrangles only
c     in :c
c     out :
c             x     : array containing node coordinates
c             ia    : nodes reference number
c             ien   : list of element nodes
c             mat   : material ref. numbers for all elements
c             in    : element sides ref. number
cc-----------------------------------------------------------------------
c
      implicit real*8 (a-h,o-z)
      real xreal,yreal
      integer*4 numnp, numel                           
      dimension x(2,numnp),ia(numnp)
      dimension ien(4,numel),mat(numel),in(4,numel)
   
      open(57,file='pmesh1.dat')
      open(58,file='pmesh2.dat')
      
         call sizemesh(numnp, numel)
         open(21,file='mesh.dat')
          read(21,*)
          do 300 i=1,numnp                   
          read(21,2100)idum,xreal,yreal,ia(i)
              x(1,i) = xreal
              x(2,i) = yreal
          write(57,*)idum,xreal,yreal,ia(i)
300    continue
          do 500 n=1,numel
          read(21,2300)ndum,(ien(i,n),i=1,4),(in(i,n),i=1,4)
          write(58,*)ndum,(ien(i,n),i=1,4),(in(i,n),i=1,4)
500    continue
          close(21)

2100  format(i5,2x,e15.5,2x,e12.5,2x,i2)
2300  format(5(i5,2x),4(i2,2x))
          end
c**************************************************************


     subroutine sizemesh(numnp,numel)

        integer numnp, numel

      open(21,file='mesh.dat')
      read(21,*) numnp,numel
     close(21)
     return
     end
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

li_clifff

银虫 (正式写手)

我发现早期f77程序,对数组没有动态赋值,都是先定义一个大的数组比如
x(nnpmax),nnpmax在parameter.inc文件里,而实际上子程序里的大小nnp是变化的,但只要不超过nnpmax就行,这样的方式也不错。
9楼2011-09-28 11:46:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 10 个回答

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★
余泽成(金币+2): 谢谢参与应助! 2011-08-24 16:26:52
ben_ladeng: 专家考核存档 2011-09-28 11:39:50
你主程中的 numnp 和 numel 必须赋值,否则必须使用动态数组,那么你的 x, ia, ien, mat, in 等数组就需要用 allocatable 之类的关键词重新声明,然后在调用子程序 sizemesh 之后,用 allocated 来分配内存。
2楼2011-08-24 11:13:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★
li_clifff(金币+20): 确实是这样,动态数组,学习了,谢谢 2011-08-24 11:36:10
余泽成(金币+3): 辛苦了! 2011-08-24 16:27:14
dubo(金币+5, 程序强帖+1): 多谢应猪 2011-08-27 16:42:39
ben_ladeng: 专家考核存档 2011-09-28 11:40:00
上面错了一点儿,不是用 allocated,而是用 allocate 来分配内存。下面是修改后的程序:
CODE:
      PROGRAM pmesh
c
c-----------------------------------------------------------------
c     purpose : to eliminate the string from existed mesh data
c               warning : the mesh has to be made out of quadrangles only
c     in :c
c     out :
c             x     : array containing node coordinates
c             ia    : nodes reference number
c             ien   : list of element nodes
c             mat   : material ref. numbers for all elements
c             in    : element sides ref. number
cc-----------------------------------------------------------------------
c
      implicit real*8 (a-h,o-z)
      real xreal,yreal
      integer*4 numnp, numel                           
      real, allocatable :: x(:,:)
      integer*4, allocatable :: ien(:,:), ia(:), mat(:), in(:,:)
!     dimension x(2,numnp),ia(numnp)
!     dimension ien(4,numel),mat(numel),in(4,numel)
   
      open(57,file='pmesh1.dat')
      open(58,file='pmesh2.dat')
      
         call sizemesh(numnp, numel)
         allocate(x(2,numnp),ia(numnp),ien(4,numel),mat(numel),
     +             in(4,numel))
         open(21,file='mesh.dat')
          read(21,*)
          do 300 i=1,numnp                  
          read(21,2100)idum,xreal,yreal,ia(i)
              x(1,i) = xreal
              x(2,i) = yreal
          write(57,*)idum,xreal,yreal,ia(i)
300    continue
          do 500 n=1,numel
          read(21,2300)ndum,(ien(i,n),i=1,4),(in(i,n),i=1,4)
          write(58,*)ndum,(ien(i,n),i=1,4),(in(i,n),i=1,4)
500    continue
          close(21)

2100  format(i5,2x,e15.5,2x,e12.5,2x,i2)
2300  format(5(i5,2x),4(i2,2x))
          end
c**************************************************************


      subroutine sizemesh(numnp,numel)

        integer numnp, numel

      open(21,file='mesh.dat')
      read(21,*) numnp,numel
      close(21)
      return
      end

3楼2011-08-24 11:26:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

li_clifff

银虫 (正式写手)


dubo(金币+1): 欢迎讨论 2011-08-27 16:41:30
但是我真看到有的f77程序主程序不用allocatable,直接调用子程序生成的numnp, numel就可以,就是按我那样开始写的,不知道自己按那样的方式怎么行不通了
4楼2011-08-24 12:53:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] filecode,4个jtjc了 +4 ziyangfang 2026-08-19 5/250 2026-08-19 11:19 by ziyangfang
[基金申请] 2027广东省杰青 +4 奶牛小黑 2026-08-15 10/500 2026-08-19 11:02 by wanfengnew
[基金申请] 朋友圈看到的 +6 wangzilk 2026-08-18 8/400 2026-08-19 10:55 by Haru815
[基金申请] 时间戳变了,能看出什么问题? +10 基诺咪客 2026-08-17 14/700 2026-08-19 10:34 by 基诺咪客
[基金申请] 今天基金会出结果吗?20260819 +7 kkkl_v 2026-08-19 7/350 2026-08-19 10:28 by pfeng
[基金申请] 快农历七夕节了,轻松一下,男人悄悄话,女施主请不要进来。 +6 Tide man 2026-08-14 7/350 2026-08-19 09:56 by ZJTJZ
[基金申请] 欢迎发来filecode的Mz6后的代码验证其规律 +52 医学老男孩 2026-08-13 114/5700 2026-08-19 09:38 by 医学老男孩
[基金申请] 什么时候开奖? +6 CrisMessi 2026-08-18 6/300 2026-08-19 08:06 by Equinoxhua
[基金申请] 结合人工智能,周易传统文化,filecode打分制来了,3分以上希望很大。 +4 Tide man 2026-08-12 5/250 2026-08-19 07:41 by 201120518022
[教师之家] 为什么余额宝的年化利率越来越低?主要原因有哪些? +3 瞬息宇宙 2026-08-15 3/150 2026-08-18 21:40 by xiaohuixin
[基金申请] 明天放榜? +5 Shxjjxjkx 2026-08-18 5/250 2026-08-18 18:14 by -大大大大大-
[论文投稿] 投稿咨询 +4 wwm09 2026-08-17 6/300 2026-08-18 15:36 by wwm09
[基金申请] 时间戳又变了8-15 +14 archvillain 2026-08-15 26/1300 2026-08-18 13:37 by phantomgost
[基金申请] 今天维护系统维护 祝所有人 高中 +8 gjjjzhong 2026-08-18 9/450 2026-08-18 13:01 by 家与远方
[基金申请] 哪位老哥知道今年的国自然具体哪一天放榜? +13 Ldrop2023 2026-08-13 16/800 2026-08-18 12:25 by 淀粉搬运工
[基金申请] 感觉是下周放榜了 +6 angus9576 2026-08-17 11/550 2026-08-17 23:57 by angus9576
[基金申请] filecode=后面第一个是大写字母 +8 wangze12014 2026-08-14 10/500 2026-08-17 17:05 by xter9665
[精细化工] 招聘 金属平磨液,抛光液研发工程师 +3 小天0311 2026-08-14 3/150 2026-08-16 07:31 by H9PLUS
[基金申请] 各位道友,我要去昆明玩几天,回来见。 +7 Tide man 2026-08-14 8/400 2026-08-15 01:11 by arzu_hma
[基金申请] 重要来源:本周末出结果 +10 瞬息宇宙 2026-08-12 10/500 2026-08-13 15:46 by likettle
信息提示
请填处理意见