비점성 Burgers 방정식을 보존형으로 쓰면
∂t∂u+∂x∂f(u)=0,f(u)=2u2
이다. 길이 Δx인 셀의 평균값 uj를 면을 지나는 유속(flux) Fj+1/2로 갱신한다.
ujn+1=ujn−ΔxΔt(Fj+1/2−Fj−1/2).
면 유속은 Rusanov(local Lax–Friedrichs) 유속으로 계산한다.
Fj+1/2=2f(uj)+f(uj+1)−2aj+1/2(uj+1−uj),aj+1/2=max(∣uj∣,∣uj+1∣).
함수 burgers_fv_step(u, dx, dt)를 완성해 한 step 뒤의 셀 평균 배열을 반환한다. 경계는 주기 경계다(마지막 셀의 오른쪽 이웃은 첫 셀). 입력 배열 u는 바꾸지 않는다.
테스트는 다음을 확인한다.
- 상수 상태는 변하지 않는다.
- 전체 질량 ∑jujΔx가 반올림 오차 수준으로 보존된다.
- CFL 수 max∣u∣Δt/Δx≤1에서 새로운 극값이 생기지 않는다.
- 계단 초기조건에서 충격파가 이론 속도 (uL+uR)/2로 움직인다.
힌트: np.roll(u, -1)이 오른쪽 이웃 uj+1이다. 면 유속 배열 F의 j번째 원소를 Fj+1/2로 두면 Fj−1/2는 np.roll(F, 1)이다.