Я только начал работать с foran95; Мне дали код, и я его изучаю; Я наткнулся на подпрограмму, которая вызывает функцию, но я не понимаю, что на выходе:
вот подпрограмма:
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 нет намерения (OUT)?