代码仓库移植
This commit is contained in:
commit
0f57ba94f3
44 files changed
+7119
No files matched your search
@@ -0,0 +1,59 @@
|
||||
# tests/test_pipe.py
|
||||
import numpy as np
|
||||
import pytest
|
||||
from pipe import Pipe
|
||||
|
||||
|
||||
GAMMA = 1.4
|
||||
R_GAS = 287.0
|
||||
|
||||
|
||||
def test_pipe_uniform_initialization_all_cells_identical():
|
||||
"""
|
||||
Initial state: uniform P, T, u=0 across all N cells.
|
||||
All cells should have identical W. primitives() should round-trip
|
||||
back to u=0 and P=P_init.
|
||||
"""
|
||||
pipe = Pipe(L=1.0, D=5e-3, N=20,
|
||||
P_init=1e5, T_init=300.0,
|
||||
gamma=GAMMA, R_gas=R_GAS)
|
||||
|
||||
# All cells identical
|
||||
for i in range(1, pipe.N):
|
||||
assert np.allclose(pipe.W[:, i], pipe.W[:, 0], rtol=1e-14)
|
||||
|
||||
rho, u, P, a = pipe.primitives()
|
||||
rho_expected = 1e5 / (R_GAS * 300.0)
|
||||
assert np.allclose(u, 0.0)
|
||||
assert np.allclose(P, 1e5, rtol=1e-10)
|
||||
assert np.allclose(rho, rho_expected, rtol=1e-10)
|
||||
|
||||
# Sound speed a = sqrt(gamma * P / rho)
|
||||
a_expected = np.sqrt(GAMMA * 1e5 / rho_expected)
|
||||
assert np.allclose(a, a_expected, rtol=1e-10)
|
||||
|
||||
# Geometric sanity
|
||||
assert pipe.dx == 1.0 / 20
|
||||
assert pipe.x_centers.shape == (20,)
|
||||
assert abs(pipe.x_centers[0] - 0.025) < 1e-14
|
||||
assert abs(pipe.x_centers[-1] - 0.975) < 1e-14
|
||||
|
||||
|
||||
def test_pipe_uniform_state_plus_matching_boundary_flux_is_static():
|
||||
"""
|
||||
If all cells have identical W (so all internal HLL fluxes are
|
||||
identical to the physical flux F(W) = [0, P, 0] for u=0 state),
|
||||
and we pass in boundary fluxes equal to [0, P, 0] as well, then
|
||||
every difference (flux[i+1] - flux[i]) is zero, so W must not
|
||||
change after one step. Verify to machine precision.
|
||||
"""
|
||||
pipe = Pipe(L=1.0, D=5e-3, N=20,
|
||||
P_init=1e5, T_init=300.0,
|
||||
gamma=GAMMA, R_gas=R_GAS)
|
||||
|
||||
W_before = pipe.W.copy()
|
||||
# Boundary flux matching the static interior: [rho*u, rho*u^2+P, u*(E+P)]
|
||||
# with u=0 -> [0, P, 0]
|
||||
flux_boundary = np.array([0.0, 1e5, 0.0])
|
||||
pipe.step(flux_boundary, flux_boundary, dt=1e-5)
|
||||
assert np.allclose(pipe.W, W_before, atol=1e-6, rtol=1e-12)
|
||||
Reference in new issue
Block a user