# 입자 기반 유체 시뮬레이션 (SPH)

입자 기반 유체 시뮬레이션(Particle-Based Fluid Simulation)은 스머드 입자 유체(Smoothed Particle Hydrodynamics, SPH)라는 방법론을 통해 구현된다. SPH는 Lagrangian 접근법으로, 유체를 고정된 그리드가 아닌 개별 입자로 표현한다. 이 입자들은 물리적 속성을 가지고 있으며, 서로 상호작용하여 전체적인 유체 거동을 시뮬레이션 한다.

#### 기본 개념 및 정의

SPH 방법론에서 유체는 개별 입자의 집합으로 모델링되며, 각 입자는 위치, 속도, 밀도 및 질량과 같은 속성을 갖는다. 이러한 입자 상태는 시간에 따라 변화하며, 이 변화를 다루기 위해 주요 방법론이 사용된다.

**밀도 추정**

각 입자의 밀도는 주변 입자들의 기여로 결정된다. 밀도 추정 식은 다음과 같다:

$$
ho\_i = \sum\_{j} m\_j W(\mathbf{r\_i} - \mathbf{r\_j}, h)
$$

여기서:

* $\rho\_i$는 입자 $i$의 밀도
* $m\_j$는 입자 $j$의 질량
* $W(\mathbf{r\_i} - \mathbf{r\_j}, h)$는 입자 $i$와 입자 $j$ 사이의 거리 및 스무딩 길이 $h$를 이용한 커널 함수

**커널 함수**

커널 함수 $W(\mathbf{r}, h)$는 두 입자 사이의 거리에 따라 가중치를 제공하며, 전체 유체의 매끄러운 분포를 보장한다. 자주 사용되는 커널 함수의 예는 Poly6 커널, Spiky 커널 등이 있다.

$$
W(r, h) = \alpha \left( 1 - \frac{r^2}{h^2} \right)^3 \text{ for } 0 \le r \le h
$$

여기서:

* $\alpha$는 정규화 상수
* $r = |\mathbf{r\_i} - \mathbf{r\_j}|$
* $h$는 스무딩 길이

#### 힘 계산

입자 사이의 힘 계산은 네비에-스토크스 방정식을 기반으로 하며, 압력과 점성, 외부 힘을 포함하여 시뮬레이션 된다.

**압력 힘**

압력 힘은 입자 간의 압력 차이에 의해 발생하며, 다음과 같이 주어진다:

$$
\mathbf{f\_i}^{pressure} = -\sum\_{j} m\_j \left(\frac{p\_i}{\rho\_i^2} + \frac{p\_j}{\rho\_j^2}\right) \nabla W(\mathbf{r\_i} - \mathbf{r\_j}, h)
$$

여기서 $p\_i$는 입자 $i$의 압력이다. 압력은 종종 상태 방정식을 사용하여 계산된다:

$$
p\_i = k (\rho\_i - \rho\_0)
$$

여기서 $k$는 상수, $\rho\_0$는 기준 밀도이다.

**점성 힘**

점성 힘은 유체 내의 마찰력을 나타내며, 다음과 같이 계산된다:

$$
\mathbf{f\_i}^{viscosity} = \mu \sum\_{j} m\_j \frac{\mathbf{v\_j} - \mathbf{v\_i}}{\rho\_j} \nabla^2 W(\mathbf{r\_i} - \mathbf{r\_j}, h)
$$

여기서:

* $\mu$는 점성 계수
* $\mathbf{v\_i}$는 입자 $i$의 속도

**외부 힘**

외부 힘은 중력과 같은 외부 요인에 의해 발생하며, 다음과 같이 표현된다:

$$
\mathbf{f\_i}^{external} = \mathbf{g} \cdot m\_i
$$

여기서 $\mathbf{g}$는 중력 가속도이다.

#### 입자 업데이트

각 입자의 위치와 속도는 시간에 따라 업데이트 된다. 이를 위해 시간 적분 방법이 사용된다. 가장 일반적인 방법은 다음과 같다:

**시간 적분**

보통 Explicit Euler, Semi-implicit Euler, 또는 Verlet 적분 방법이 사용된다. Semi-implicit Euler 방법을 예로 들어 설명하면:

1. **속도 업데이트**:

$$
\mathbf{v\_i}^{t+\Delta t} = \mathbf{v\_i}^t + \Delta t \cdot \frac{\mathbf{f\_i}}{m\_i}
$$

여기서 $\mathbf{f\_i}$는 전체 힘(압력, 점성, 외부 힘의 합)이다.

2. **위치 업데이트**:

$$
\mathbf{r\_i}^{t+\Delta t} = \mathbf{r\_i}^t + \Delta t \cdot \mathbf{v\_i}^{t+\Delta t}
$$

#### 충돌 처리

입자 기반 유체 시뮬레이션에서는 입자가 서로 또는 경계와 충돌하는 상황도 처리해야 한다.

**입자 간 충돌**

입자 간의 직접 충돌은 별도로 처리되지 않으며, SPH 방법론의 점도 항이 간접적으로 이를 모델링한다. 하지만 고체 경계와의 충돌은 일반적으로 반발력 모델이나 경계 조건을 사용하여 처리된다.

**경계 조건**

경계 조건은 입자들이 시뮬레이션 도메인 외부로 나가는 것을 방지한다. 물리적 반발력이나 고체 경계의 가상 입자를 사용하여 경계 효과를 모델링할 수 있다.

$$
\mathbf{f\_i}^{boundary} = \sum\_{j \in boundary} k \cdot (\mathbf{r\_i} - \mathbf{r\_j})
$$

여기서 $k$는 경계 반발 상수이다.

#### 응용 및 한계

**응용**

SPH는 다음과 같은 다양한 응용 분야에서 사용된다:

* 게임 및 애니메이션에서의 유체 시뮬레이션
* 공학 시뮬레이션(예: 유체 동역학)
* 천체 물리학에서의 성간 물질 및 별 형성 시뮬레이션

**한계**

하지만 SPH는 다음과 같은 한계를 갖는다:

* 계산 비용: 입자 간의 모든 쌍을 고려해야 하기 때문에, 수천에서 수백만 입자를 다룰 때 계산 비용이 급격히 증가한다.
* 경계 조건의 처리: 경계와의 상호작용을 다루기 위한 견고한 방법이 필요하다.
* 물리적 정확성: 분해능 및 입자의 개수에 따라 시뮬레이션 정확도가 달라질 수 있다.

이상으로 SPH 기법의 기본 개념과 구현, 그리고 응용에 대해 설명드렸다. 추가적인 질문이 있거나 특정 부분에 대해 더 알고 싶으시면 말씀해 주세요.
