关于Fortran语句的问题

问题描述:

关于Fortran语句的问题
do ir=1,maxtri
read(1,*) mat_number(ir),npotri(1,ir),npotri(2,ir),npotri(3,ir)
call atclxx(npotri(1,ir),x)
-------------------------------------------------------------
subroutine atclxx(node,x)
implicit real*8 (a-h),real*8 (o-z)
dimension node(1),x(2,1)
ax=x(1,node(2))-x(1,node(1))
ay=x(2,node(2))-x(2,node(1))
bx=x(1,node(3))-x(1,node(2))
by=x(2,node(3))-x(2,node(2))
主程序第二行中读取文件1中的4个值给四个变量
然后调用atclxx函数,只把npotri(1,ir)的值传递给了子程序,但为什么子程序的node里面会有npotri(1,ir),npotri(2,ir),npotri(3,ir) 三个值
注:x是一个点的横纵坐标,npotri(1,ir),npotri(2,ir),npotri(3,ir)分别是三角形的三个顶点

你确定你的程序没有报错?
你这段代码前后矛盾.
首先你定义一个node(1),这是一个容量只有1个的一维数组,它根本不是数组就是一个数.
这从语法上来讲没什么错误,但是你在后面又用node(2),node(3),这就超出数组边界了.
再看数组x,本身是个二维的,但是你把第二维的容量定义成一位,那它就只能等效成一个一维数组了.
你确定你给的程序能正确编译出来?我猜测应该是用了use module 语句了吧,如果代码有点年代了可能是common 语句.这些语句都可以让数据在相应的程序间共享的,不需要通过地址传递.主程序开头用了use imsl 语句

我主要是不理解子函数中只传递了一个数给node,怎么回出现node(2),node(3)
node 不是common变量
大神可以留下你的联系方式吗,向您请教据我看来你这段代码就是错的,跑都跑不起来。单考虑数值传递,子程序有use imsl吗?如果没有,仅仅根据以上的来看,我也不觉得那数值能传递进子程序。

不好意思,怕骚扰,不想在网上留下联系方式