На аналогичный вопрос ответили в Предупреждение времени выполнения Fortran: временный массив . Однако решения не совсем помогают мне в моем случае.
Внутри подпрограммы у меня есть вызов подпрограммы:
subroutine initialize_prim(prim)
real(kind=wp), dimension(2, -4:204), intent(out) :: prim
call double_gaussian(prim(1, :))
end subroutine initialize_prim
subroutine double_gaussian(y)
real(kind=wp), dimension(-4:204), intent(out) :: y
integer :: i
do i = -4, 204
y(i) = 0.5 * ( &
exp(-((r(i) - r0))**2) + exp(-((r(i) + r0)/std_dev)**2))
end do
end subroutine double_gaussian
Это дает сообщение об ошибке, говорящее, что fortran создает временный массив для "y" в "double_gaussian". Прочитав немного о случайных массивах, я понимаю, почему появляется эта ошибка.
Теперь, глядя на всю мою программу, было бы очень утомительно инвертировать порядок массивов для «prim», так что решение на самом деле невозможно.
Для создания предполагаемых фигур в "double_gaussian" я попытался сделать,
real(kind=wp), dimension(:), intent(out) :: y
integer :: i
do i = -4, 204
y(i) = 0.5 * ( &
exp(-((r(i) - r0))**2) + exp(-((r(i) + r0)/std_dev)**2))
end do
end subroutine double_gaussian
Это, однако, приводит к сбою fortran с сообщением об ошибке
«Индекс -4» измерения 1 массива «у» ниже нижней границы 1 ».
Похоже, что для формата предполагаемой формы индексация, тем не менее, начинается с 1, тогда как она начинается с -4, как в моем случае.
Есть ли способ решить эту проблему?