24小时热门版块排行榜    

查看: 3405  |  回复: 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的回帖

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的回帖

btx97

金虫 (小有名气)

引用回帖:
4楼: Originally posted by btx97 at 2014-03-04 11:03:06
double precision,allocatable :: vcl(:,就行了,确定大小用allocate(vcl(2,npt))...

double precision,allocatable :: vcl( :,: )动态数组申请的时候只需要给出rank,就是是几维的就行了
5楼2014-03-04 18:04:47
已阅   回复此楼   关注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的回帖

btx97

金虫 (小有名气)

引用回帖:
6楼: Originally posted by 鸿影惊天下 at 2014-03-04 13:27:33
谢谢你!我明白了,那就是说在interface块中所有的动态数组只要写成(:,: )这样的形式就可以了对吗?我把这一段改过来之后,错误提示变成了调用两个子程序时动态数组出错,错误的信息是
error #7976: An allo ...

错误信息已经写的很清楚了。
子程序里的 dummy argument 的属性是allocatable的,你引用子程序时的参数(actual argument)的属性也得是allocatable的。
7楼2014-03-05 16:06:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

鸿影惊天下

金虫 (小有名气)

引用回帖:
7楼: Originally posted by btx97 at 2014-03-05 16:06:38
错误信息已经写的很清楚了。
子程序里的 dummy argument 的属性是allocatable的,你引用子程序时的参数(actual argument)的属性也得是allocatable的。...

谢谢!这一段已经调通了,但是新的问题又产生了。我之前已经调通的子程序段new_node在整个程序调用时出现断点,我检查了以后发现是zhaobian_gj01这个子程序里生成的,ele_concentrate,ele_c这两个数组的值没有正确传入new_node里。
zhaobian_gj01里定义的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 ele_concentrate(NE),ele_c(NNE)
    double precision vcl(2,npt)
    end subroutine new_node
    end interface
是这里有什么问题吗?
你所能经历的最大冒险,就是过你梦想的生活
8楼2014-03-07 10:45:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

btx97

金虫 (小有名气)

引用回帖:
8楼: Originally posted by 鸿影惊天下 at 2014-03-07 03:45:53
谢谢!这一段已经调通了,但是新的问题又产生了。我之前已经调通的子程序段new_node在整个程序调用时出现断点,我检查了以后发现是zhaobian_gj01这个子程序里生成的,ele_concentrate,ele_c这两个数组的值 ...

你既然知道是两个数组值没有正确传入的原因,就认真找下为什么没正确传入嘛。确认下参数是否完全一致,一致的话不会有你说的传值错误问题的。
9楼2014-03-07 16:14:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

btx97

金虫 (小有名气)

引用回帖:
8楼: Originally posted by 鸿影惊天下 at 2014-03-07 03:45:53
谢谢!这一段已经调通了,但是新的问题又产生了。我之前已经调通的子程序段new_node在整个程序调用时出现断点,我检查了以后发现是zhaobian_gj01这个子程序里生成的,ele_concentrate,ele_c这两个数组的值 ...

还有,我不知道你说的断点是指什么。自己搜了一下,断点应该是程序员设置的用于程序调试的一个特殊状态,它不是错误吧。
10楼2014-03-07 16:19:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 鸿影惊天下 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] E0414, 我的本子有没有希望? +7 布布和一二 2026-06-17 9/450 2026-06-21 19:29 by 布布和一二
[教师之家] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +3 9skg9htng1 2026-06-20 3/150 2026-06-21 18:58 by q1p9ixelzp
[公派出国] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +3 9skg9htng1 2026-06-20 3/150 2026-06-21 18:00 by q1p9ixelzp
[考研] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +3 9skg9htng1 2026-06-20 4/200 2026-06-21 17:45 by q1p9ixelzp
[论文投稿] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +3 9skg9htng1 2026-06-20 3/150 2026-06-21 17:40 by q1p9ixelzp
[论文投稿] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +3 9skg9htng1 2026-06-20 3/150 2026-06-21 17:37 by q1p9ixelzp
[公派出国] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +4 vlfdw50o0u 2026-06-20 4/200 2026-06-21 17:25 by ky8v3skvft
[考博] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +4 vlfdw50o0u 2026-06-20 5/250 2026-06-21 17:20 by ky8v3skvft
[博后之家] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +4 vlfdw50o0u 2026-06-20 6/300 2026-06-21 17:05 by ky8v3skvft
[公派出国] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +4 vlfdw50o0u 2026-06-20 5/250 2026-06-21 17:00 by ky8v3skvft
[教师之家] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +5 vlfdw50o0u 2026-06-20 7/350 2026-06-21 16:57 by ky8v3skvft
[论文投稿] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +3 vlfdw50o0u 2026-06-20 5/250 2026-06-21 16:45 by ky8v3skvft
[教师之家] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +4 vlfdw50o0u 2026-06-20 7/350 2026-06-21 16:40 by ky8v3skvft
[论文投稿] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +4 vlfdw50o0u 2026-06-20 9/450 2026-06-21 16:37 by ky8v3skvft
[基金申请] 青A35岁以下通知答辩了吗 +3 暨阳一只柴 2026-06-17 3/150 2026-06-21 09:39 by kudofaye
[考博] 【全奖博士/科研助理/博后招生】新加坡南洋理工大学机械与航空航天学院 +3 robohaha 2026-06-15 4/200 2026-06-21 00:36 by lanbing1
[硕博家园] 一篇论文同时出现在两个期刊,一模一样,这算不算学术不端,请各位老师斧正。 +11 mahl005 2026-06-14 12/600 2026-06-18 17:01 by 770904134
[基金申请] 希望面上有个好结果 +7 碧水00 2026-06-16 7/350 2026-06-18 12:18 by wuke100666
[论文投稿] 三区计算机方向期刊推荐 +5 1457340941 2026-06-15 5/250 2026-06-17 13:16 by 会议编辑
[论文投稿] sci论文二审求助 +5 潘倍倍 2026-06-15 5/250 2026-06-16 10:15 by xs74101122
信息提示
请填处理意见