swarm_simulate — DRIVE swarmflow op

• 데이터 종류: 없음 → table(인자만으로 정해지는 연산자 —— 이미지나 데이터 입력을 받지 않습니다)

• 호출: import fullseye as fs; fs.ledger.swarm_simulate(obstacle=None, speed: 'float' = 1.0, box=(8.0, 5.0), spacing: 'float' = 0.15, h_factor: 'float' = 1.3, tau: 'float' = 0.1, c: 'float' = 10.0, alpha: 'float' = 0.5, t_warm: 'float' = 2.0, n_frames: 'int' = 20, frame_dt: 'float' = 0.06, noise: 'float' = 0.0, seed: 'int' = 0) -> 'dict'(구현을 직접 호출하려면 import swarmflow; swarmflow.swarm_simulate(obstacle=None, speed: 'float' = 1.0, box=(8.0, 5.0), spacing: 'float' = 0.15, h_factor: 'float' = 1.3, tau: 'float' = 0.1, c: 'float' = 10.0, alpha: 'float' = 0.5, t_warm: 'float' = 2.0, n_frames: 'int' = 20, frame_dt: 'float' = 0.06, noise: 'float' = 0.0, seed: 'int' = 0) -> 'dict', 원장에서 가져오려면 opsdrive.get("swarm_simulate"))

사용법

장애물이 있는 주기적 유로를 흐르는 무리(SPH 약압축성 유체로 움직이는 개체). 장애물은 개체에게 "부딪히는 벽"으로만 작용합니다.

개체 i 의 가속도 = (U e_x − v_i)/τ(자유류 속도로 복귀)− Σ_j m (p_i/ρ_i² + p_j/ρ_j²) ∇W_ij(압력 = 서로 밀어냄) − Σ_j m Π_ij ∇W_ij(Monaghan 인공 점성, 가까워지는 쌍에만)+ 요동(표준편차 noise [m/s²] 의 백색).

벽: 원 안쪽에 들어간 개체는 표면으로 되돌리고, 안쪽 방향 속도만 지운다(미끄럼 벽). 주기 경계(x 도 y 도). 적분은 symplectic Euler, 간격은 CFL 0.25 h/(c + U). U τ ≪ R, c ≫ U 일 때 정상 흐름은 원기둥 주위의 포텐셜 흐름에 가깝다(module docstring 의 유도).

Args:

obstacle: (xc, yc, R) [m] 또는 None(장애물 없음).

speed: 자유류 속도 U [m/s].

box: 유로의 크기 (Lx, Ly) [m], 중심이 원점.

spacing: 초기 격자 간격 [m] (개체 간격).

h_factor: h = h_factor × spacing.

tau: 속도로 돌아가는 시상수 [s].

c: 음속 [m/s] (밀어내기의 강성).

alpha: 인공 점성 계수.

t_warm: 기록 전에 흘리는 시간 [s] (정상 상태에 가깝게).

n_frames: 기록할 프레임 수(≥ 2).

frame_dt: 프레임 간격 [s].

noise: 가속도의 요동 [m/s²].

seed: 난수 시드.

Returns:

dict: frames (T, N, 2) 위치 [m] (상자 안으로 되접음 완료), velocities (T, N, 2), t (T,), box,

obstacle, h, dt, rho0, density_range(기록 중 ρ/ρ₀ 의 1~99 % 점), n_agents,

t_total(흘린 시간), t_wake_reenters(장애물 뒤의 빈 공간이 상자의 오른쪽 끝에서 왼쪽 끝으로 돌아 들어오기 시작하는 시각

(Lx/2 − x_c − R)/U. 이보다 오래 흘리면 상류 끝에 빈 공간의 개체가 들어와 자유류가 오염된다).

★장애물 뒤에는 개체가 들어가지 않는 빈 공간이 길게 늘어난다(밀어내는 압력은 끌어당기지 못할 만큼 약하고, 저항으로 U 로 돌아갈 뿐이므로옆에서 메워지지 않는다). 부감 영상에서는 장애물 자리의 "구멍"과 빈 공간 자체가 보인다 —— 속도만으로 추정한다는 주장은, 추정이 이 구멍을 쓰지 않는다(속도장의 결측으로 버린다)는 의미이지, 영상에 장애물의 단서가 없다는 의미가 아니다.

참고(샘플 데이터·문헌)

• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.

• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.

• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.

실행 가능한 예제(이 연산자를 실제로 호출하는 검증된 샘플)

• poc_swarm_obstacle_from_flow — py -3.11 examples/poc_swarm_obstacle_from_flow.py

타입이 이어지는 다음 연산자(table 를 입력으로 받는 것)

course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same

같은 카테고리(swarmflow)

sph_kernel · sph_density_pressure · swarm_render_overhead · swarm_field_from_tracks · swarm_field_from_piv · potential_flow_cylinder · velocity_deficit_map · stagnation_from_centerline


*Provenance: swarmflow.py — DRIVE 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.