В контексте численного решения адвекции я пытаюсь реализовать следующую формулу повторения во временном цикле:
Как видите,Мне нужно второе предыдущее значение времени для (j-1) и предыдущее (j) значение, чтобы вычислить (j + 1) временное значение.
Я не знаю, как реализовать эту формулу повторения.Здесь ниже моя попытка в python, где u
представляет массив значений T
для каждой итерации:
l = 1
# Time loop
for i in range(1,nt+1):
# Leapfrog scheme
# Store (i-1) value for scheme formula
if (l < 2):
atemp = copy(u)
l = l+1
elif (l == 2):
btemp = copy(atemp)
l = 1
u[1:nx-1] = btemp[1:nx-1] - cfl*(u[2:nx] - u[0:nx-2])
t=t+dt
Коэффициент cfl
равен s
.
Норезультаты моделирования не дают в полной мере хороших результатов.Я думаю, что мой способ сделать это не правильно.
Кто-нибудь может помочь мне реализовать эту повторяемость?, То есть, в основном, как сохранить значение (j-1) вовремя, чтобы ввести его в формулу для вычисления (j +1)?
ОБНОВЛЕНИЕ 1:
в формуле:
индекс времени j
имеетчтобы начать с j=1
, поскольку у нас есть термин T_(i,j-1)
.
Sor для первой итерации, мы имеем:
T_i,2 = T_i,0 - s (T_(i+1),1 - T_(i-1),1)
Тогда, если только виспользовать временной цикл (а не пространственный цикл таким образом, я не могу вычислить dudx[i]=T[i+1]-T[i-1])
, как я могу вычислить (T_(i+1),1 - T_(i-1),1)
, я имею в виду, без предварительного вычисления dudx[i] = T_(i+1),1 - T_(i-1),1
?
Это был трюк, который я пытаюсьЧтобы реализовать в моем первоначальном вопросе, можете ли вы увидеть мою проблему? Основная проблема заключается в том, что я вынужден использовать только временной цикл.
Код был бы проще, если бы я мог использовать 2D-массив с элементом T[i][j]
,i
для пространственного и j
для временного периода, но мне не разрешено использовать 2D-массив в моем экзамене.
Спасибо за вашу помощь