24小时热门版块排行榜    

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

鸿影惊天下

金虫 (小有名气)

[求助] 主程序中未分配的可变数组,如何在子程序中调用?

请前辈们帮忙,自己编的一段程序:
Program test_main
    implicit none
    integer NP,ele_n,NE,NNE,npt,num
    integer,pointer :: ele_concentrate( : ),ele_c( : )
    double precision,pointer::vcl( : , : )                           
   
    interface
    subroutine new_node(NP,ele_n,NE,NNE,ele_concentrate,ele_c,vcl,npt,num)
    implicit none
    integer NP,ele_n,NE,NNE,npt,num
    integer,allocatable :: ele_concentrate(NE),ele_c(NNE)
    double precision,allocatable :: vcl(2,npt)
    end subroutine new_node

    subroutine zhaobian_gj01(NP,ele_n,NE,NNE,ele_concentrate,ele_c,vcl,npt,num)
    implicit none
    integer NP,ele_n,NE,NNE,npt,num
    integer :: ele_concentrate(NE),ele_c(NNE)
    double precision ::vcl(2,npt)
    end subroutine zhaobian_gj01
    end interface   

call zhaobian_gj01(NP,ele_n,NE,NNE,ele_concentrate,ele_c,vcl,npt,num)   
call new_node(NP,ele_n,NE,NNE,ele_concentrate,ele_c,vcl,npt,num)
end

后面的zhaobian_gj01, new_node是子程序经调试没有错误,但是主程序在调试过程中总报错。
一个错误是可变数组ele_concentrate,ele_c,vcl:ALLOCATABLE or POINTER attribute dictates a deferred-shape-array  
另外一个错误是An allocatable dummy argument may only be argument associated with an allocatable actual argument.   同样也是可变数组出错。
两个错误都出在interface块。



求有经验的前辈帮忙指点一二!谢谢

[ Last edited by 鸿影惊天下 on 2014-3-4 at 15:06 ]
回复此楼
你所能经历的最大冒险,就是过你梦想的生活
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

鸿影惊天下

金虫 (小有名气)

引用回帖:
5楼: Originally posted by btx97 at 2014-03-04 18:04:47
double precision,allocatable :: vcl( :,: )动态数组申请的时候只需要给出rank,就是是几维的就行了...

谢谢你!我明白了,那就是说在interface块中所有的动态数组只要写成(:,: )这样的形式就可以了对吗?我把这一段改过来之后,错误提示变成了调用两个子程序时动态数组出错,错误的信息是
error #7976: An allocatable dummy argument may only be argument associated with an allocatable actual argument.   [ELE_CONCENTRATE]       

之后应该怎么修改呢?
你所能经历的最大冒险,就是过你梦想的生活
6楼2014-03-04 20:27:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 10 个回答

btx97

金虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
鸿影惊天下: 金币+10, ★★★很有帮助, 谢谢! 2014-03-05 14:25:43
double precision,allocatable :: vcl(2,npt)

这里不用allocatable,因为你后面已经给定数组大小了,不需要申请可变数组了。
2楼2014-03-04 16:07:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

鸿影惊天下

金虫 (小有名气)

引用回帖:
2楼: Originally posted by btx97 at 2014-03-04 16:07:33
double precision,allocatable :: vcl(2,npt)

这里不用allocatable,因为你后面已经给定数组大小了,不需要申请可变数组了。

对不起我不是很明白,你的意思是vcl这个数组定义成(2,: )是已经给定了大小吗?我把interface块改成这样:
interface
    subroutine new_node(NP,ele_n,NE,NNE,ele_concentrate,ele_c,vcl,npt,num)
    implicit none
    integer NP,ele_n,NE,NNE,npt,num
    integer,allocatable :: ele_concentrate(NE),ele_c(NNE)
    double precision :: vcl(2,npt)
    end subroutine new_node
    end interface
   
    interface
    subroutine zhaobian_gj01(NP,ele_n,NE,NNE,ele_concentrate,ele_c,vcl,npt,num)
    implicit none
    integer NP,ele_n,NE,NNE,npt,num
    integer,allocatable :: ele_concentrate(NE),ele_c(NNE)
    double precision ::vcl(2,npt)
    end subroutine zhaobian_gj01
    end interface

之后,vcl数组不再提示错误,但是其他两个数组还是会报原来的错误。但是如果把interface里申请可变数组的allocatable都去掉,错误提示就会变成:error #8000:  There is a conflict between local interface block and external interface block.   [ELE_CONCENTRATE]        位置是在interface里zhaobian_gj01(NP,ele_n,NE,NNE,ele_concentrate,ele_c,vcl,npt,num)这一句。

这是为什么呢?
你所能经历的最大冒险,就是过你梦想的生活
3楼2014-03-04 17:02:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

btx97

金虫 (小有名气)

引用回帖:
3楼: Originally posted by 鸿影惊天下 at 2014-03-04 10:02:28
对不起我不是很明白,你的意思是vcl这个数组定义成(2,: )是已经给定了大小吗?我把interface块改成这样:
interface
    subroutine new_node(NP,ele_n,NE,NNE,ele_concentrate,ele_c,vcl,npt,num)
    imp ...

double precision,allocatable :: vcl(:,就行了,确定大小用allocate(vcl(2,npt))
4楼2014-03-04 18:03:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 什么时候开奖? +10 CrisMessi 2026-08-18 11/550 2026-08-24 06:50 by 开心的小狮子
[基金申请] 范进中举一文的中心思想 +5 炎黄贵胄 2026-08-22 6/300 2026-08-24 06:34 by sincosx
[基金申请] 建议基金发布提前给出明确的时间点 +11 kulium 2026-08-21 14/700 2026-08-24 02:12 by 流流伤
[基金申请] 2026年的国家社科基金项目通讯评审的新规则与新动向、新挑战 +4 process2012 2026-08-23 5/250 2026-08-23 19:58 by jurkat.1640
[教师之家] 跳槽后在研项目怎么办? +5 简单化xn 2026-08-22 10/500 2026-08-23 12:38 by 简单化xn
[基金申请] 今天放榜吗? +15 布布和一二 2026-08-19 16/800 2026-08-23 09:55 by 张春生
[基金申请] 93BebMhtakh前后11位开头都是大写 +7 且听虎啸 2026-08-17 8/400 2026-08-22 21:55 by 医学老男孩
[基金申请] filecode,4个jtjc了 +13 ziyangfang 2026-08-19 16/800 2026-08-22 17:08 by WH3796
[基金申请] 今天基金会出结果吗?20260819 +16 kkkl_v 2026-08-19 17/850 2026-08-22 16:12 by 阿布Abu
[基金申请] 时间戳今天,20号变了 +5 archvillain 2026-08-20 5/250 2026-08-22 06:12 by hui_daxiao
[基金申请] 放榜前的不淡定 40+4 snowwithsea 2026-08-19 14/700 2026-08-21 23:51 by cratir
[基金申请] 科研孤儿太难了 +17 我4大白菜 2026-08-20 18/900 2026-08-21 20:57 by zhangev
[基金申请] 看来今天不会放榜了? +8 chengyan1220 2026-08-21 11/550 2026-08-21 17:52 by dcqxinyang
[基金申请] 时间戳又变了 +13 wuchongjun 2026-08-20 19/950 2026-08-21 17:21 by 紫杉醇
[基金申请] 我面上完蛋了 +7 且听虎啸 2026-08-20 8/400 2026-08-21 12:31 by 酷酷墨镜
[基金申请] 今天放榜没戏了吧 +9 yuleib84 2026-08-19 11/550 2026-08-21 10:06 by gltch
[基金申请] 基金啊基金 +4 longfie172 2026-08-20 4/200 2026-08-21 08:58 by mark mao
[基金申请] 时间戳变了,能看出什么问题? +18 基诺咪客 2026-08-17 23/1150 2026-08-20 17:19 by Godzela
[基金申请] 重要消息,中午系统在维护 +11 yuleib84 2026-08-18 12/600 2026-08-20 11:09 by xskun
[基金申请] 明天放榜? +5 Shxjjxjkx 2026-08-18 5/250 2026-08-18 18:14 by -大大大大大-
信息提示
请填处理意见