【发布时间】:2015-02-18 17:14:21
【问题描述】:
我刚开始使用 fotran95;我得到了一个代码,我正在研究它;我遇到了一个调用函数的子例程,但我不明白输出是什么:
这里是子程序:
SUBROUTINE collisione(vga, ga, vgb, gb)
IMPLICIT NONE
DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: ga, gb
DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: vga, vgb
DOUBLE PRECISION, DIMENSION(3) :: r, ra, rb, r_r
ra = pos_ini(ga)
rb = pos_ini(gb)
END SUBROUTINE
这里是函数:
FUNCTION pos_ini(g)
IMPLICIT NONE
DOUBLE PRECISION, DIMENSION(3) :: pos_ini
DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: g
DOUBLE PRECISION, DIMENSION(3) :: es, eg, es_p
DOUBLE PRECISION :: rnd, b, kos, ang
CALL RANDOM_NUMBER(rnd)
b = 1.D0 - 2.D0*rnd
kos = SQRT(1.D0 - b*b)
CALL RANDOM_NUMBER(rnd)
ang = pi2 * rnd
es(1) = kos * COS(ang)
es(2) = kos * SIN(ang)
es(3) = b
eg = g / SQRT(DOT_PRODUCT(g,g))
es_p = es - DOT_PRODUCT(es,eg) * eg
pos_ini = d * es_p/SQRT(DOT_PRODUCT(es_p,es_p)) ! IS THIS THE OUTPUT THAT GIVES THE VALUE OF ra and rb???????
END FUNCTION
(阅读评论)。所以我的问题来了:在子程序中,我看到变量 ra 和 rb 是在使用函数 pos_ini 后定义的,其中输入是向量 ga em> 或 gb。
但是在函数 pos_ini 中,我不明白输出是什么;是pos_ini = d * es_p/SQRT(DOT_PRODUCT(es_p,es_p)) 吗?如果是,为什么?函数pos_ini怎么没有intent(OUT)?
【问题讨论】:
-
另见stackoverflow.com/q/27827878,虽然不是紧密重复。
标签: function fortran subroutine fortran95