#arrays #fortran
Вопрос:
У меня есть переменная длина (L), которая изменяется для каждой частицы в группе из нескольких сотен тысяч частиц с каждым временным шагом. Я пытаюсь добавить код, который сообщит мне среднюю длину частиц на каждом временном шаге модели. Я продолжаю получать эту ошибку: «В этом контексте для моего уравнения среднего значения требуется аргумент, возвращающий массив». Что это значит? Похоже, у него возникла проблема с моей переменной длины, которую я извлек из модели с помощью get_state. Вот мой код:
function checkstatus(ng,g,time) result(validsim)
use utilities
implicit none
logical :: validsim
integer, intent(in) :: ng
type(igroup), intent(in) :: g(ng)
real(sp), intent(in) :: time
real(sp), pointer :: L(:)
real(sp), dimension(ng) :: mean
integer, pointer :: istatus(:)
integer, allocatable :: mark(L)
integer :: n,NI
integer, save :: dumphead = 0
do n=1,ng
NI = g(n)%Nind
call get_state('L',g(n),L)
mean(NI) = sum(L(NI)) / size(L(NI))
end do
write(*,103)time,mean(NI)
Комментарии:
1.
L(NI)
это не массив, это один элемент, одно число. Вы не можете запросить размер этого числа. Вероятно, есть какой-то дубликат.2. У нас достаточно информации, чтобы сказать вам, что происходит не так, но недостаточно информации, чтобы помочь вам найти то, что вы должны делать вместо этого. Что ты пытаешься сделать? Каковы все ваши переменные? Что же
get_state
делать?
Ответ №1:
В вашем коде L
это указатель на одномерный real
массив, а L(NI)
также скаляр real
. Внутренние sum
компоненты и size
принимают аргументы массива, поэтому оператор sum(L(NI)) / size(L(NI))
недействителен.
Комментарии:
1. Спасибо. Невозможно ли взять среднее значение моих длин, когда они находятся в этой форме, или мне просто нужно написать для этого другой код?
2. Проблема в том, что мне далеко не ясно, что вы хотите сделать.
Sum( L ) / Size( L )
даст среднее значение значений, содержащихся в массиве L, это то, что вы хотите?