Скажем, я хочу написать функцию, которая принимает в качестве входных данных массив x одного измерения и возвращает на его основе другой массив y того же измерения (чтобы проиллюстрировать это, я с помощью функции, которая умножает его на 2). У меня есть два варианта этого кода:
function times2(x) result(y)
real, intent(in) :: x(:)
real, allocatable :: y(:)
allocate(y(size(x))
y = 2*x
end function
or
function times2(x,n) result(y)
real, intent(in) :: x(n)
integer, intent(in) :: n
real :: y(n)
y = 2*x
end function
Лично я предпочитаю первый, потому что его проще использовать для вызывающей стороны, но я не уверен, что лучше с точки зрения памяти, предположим, что массив x может быть огромным, я не знаю если лучше быть отложенным массивом или автоматическим массивом. В любом случае, как лучше всего это сделать на современном Фортране?
sqrt
— это функция, это означает, что вы можете вычислять такие выражения, какsqrt(1/(1 + sqrt(x))
. Представьте, чтоsqrt
была подпрограммой... - person Manuel Pena   schedule 22.02.2019cross(u,v,n)
? (извините, если я вас не понял @roygvib) - person Manuel Pena   schedule 22.02.2019y(size(x))
оставался сx(:)
(что, я признаю, я думал, что вы сделали: я, вероятно, пропустил фактический код, основываясь на самой минимальной разнице между автоматическим и отложенным). - person francescalus   schedule 22.02.2019