Сообщение об ошибке об аргументах массива в коде для среднего

#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, это то, что вы хотите?