강성구 충돌 알고리즘을 좀 아는 글입니다.

[208/8/6 추기] "LS-DYNA의 CPM을 파악하기 위해"조사한 결과, LS-DYNA가 이 글에서 소개한 전제(완전 탄력적 충돌)는 성립되지 않았다.2 물체의 인터넷 에너지는 저장되지만 운동량과 Translate kinetic 에너지는 저장되지 않았다.
이 기사가 LS-DYNA의 CPM법에 대한 설명이 될 수 없다는 점을 말하고 싶다는 것이다.순전히 강체구 충돌 알고리즘으로 읽어주세요.
LS-DYNACorpuscular Particle Method (CPM)를 사용하지만 여러 기체를 혼합할 때 입자 수비의 영향(Translate energy가 Total의 Internal energy에 비해 입자 수비에 따라 다르다→Part/Partical Proesse와 CMPsensor의 값은 입자 수비에 따라 달라진다.(입자 수비에 상관없이 Airbag Proessure는 일정하다))목표에서 상당히 멀리 떨어진 내용이지만 강성구 충돌에 대한 지식을 배웠다.
몇 번째 부쳤는지 (Qita에도 @yotapoon씨, @NatsukiLab씨가 각자 쓴 기사) 이해한 내용을 정리하고 싶습니다.

1. 강성구/원반 충돌 알고리즘


다음 그림에서 보여준 시뮬레이션을 하는 방법.(그림 인용위키피디아의 Kinetic theory of gases 조사 결과 게임 프로그래밍 등도 사용되고 있음을 발견했다.
기체분자동력학 분석에서도 사용됐는데, 위키백과의 Baltzmann distribution 기사에서 입자가 충돌한 결과 입자의 속도 분포가 맥스웰볼츠맨 분포로 수렴된다.
자신의 동력으로서 기체 분자의 속도 분포를 계산하고 기체가 혼합될 때 각 기체의 동력이 어떻게 변화하는지 이해하고자 한다.

2. 전제와 수학적 이해


우선 다음 두 가지가 전제다.특히 커다란 사이즈가 랜덤 운동을 실현하는 관건이다.
1) 공/원반은 지름, 속도 및 질량을 가진다
2) 공/원반 균일속 직선운동 = 충돌 이외 속도 불변
한편, 본 보도는 thermosimgithub의 원본 파일을 대상으로 해설을 진행한다.
소스 파일은 이른바 Time-Step 에뮬레이션을 사용합니다.(잘 알고 있습니다.https://qiita.com/NatsukiLab/items/476e00fea40b86ece31f
또한 참고 문헌에도 유사/유사한 수법이 기재되어 있어 일반적인 수법이라고 할 수 있다.

2.1.충돌 판정


입자 i.j의 좌표는 $r(t)$, 속도는 $v(t)$, 질량은 $m, 지름은 $d입니다.
우선 아래 공식을 통해 현재 충돌이 발생한 입자 목록을 얻을 수 있다.
|r_i(t) - r_j(t)|\leq\frac{1}{2}(d_i+d_j)
키모는 충돌이 발생했습니다. 현재 단계 (시간 $t$) 에서 접촉한 입자를 접촉하기 전에, 회전할 때의 속도와 좌표에서 속도 벡터를 업데이트합니다.(이전 단계에서 접촉하지 않음 보장)
부딪힌 입자가 발견되면 다음은 언제 부딪혔는지 계산한다.
우선, 상대 속도와 상대 위치 벡터는 다음과 같이 정의된다.또한 시간 $t=0달러를 이전 시간으로 합니다.
v_{ij}=v_i-v_j\\
r_{ij}=r_i(0)-r_j(0)\\
입자가 고른 속도로 직선운동을 하기 때문에, 위에서 충돌까지의 시간은 $t$입니다c$c로서 충돌할 때의 좌표는 다음과 같다.
r_i(t_c)=r_i(0)+v_i(t)・t_c\\
r_j(t_c)=r_j(0)+v_j(t)・t_c\\
이상, $i(t) - r_j(t)|=\racc{1}(d i+d j)가 $가 될 때 시간$tc달러는 아래와 같다.(실제로 이전 단계의 시간은 0이기 때문에 $tc는 이전 단계와 충돌하는 시간 차이가 같다.)
t_c=\frac{-r_{ij}・v_{ij}-\sqrt{(r_{ij}・v_{ij})^2-v_{ij}^2(r_{ij}^2-0.25(d_i+d_j)^2)}}{v_{ij}^2}
이상은 단순i(t) - r_j(t)|=\rac{1} {2}(di+d j)가 $2의 양쪽 제곱이면 $tc$2의 2차 방정식이기 때문에 풀이된 방정식에서 내보냅니다.또 두 개의 해가 있는데 +의 해(비교적 큰 해)는 입자가 관통된 후 접촉하는 시간이다.

2.2 충돌 후 속도 업데이트


충돌 전후물체 의 중심 이 등속 직선 운동 을 하다도 성질을 이용하여 중심 시스템의 속도와 i, j의 상대 속도를 이용하여 충돌 후의 속도를 계산한다.
(여기에 절차에 따라 설명하고 참고 문헌(특히 Wikipedia의 문장은 직관적으로 이해하기 쉽다)
충돌 전후에 운동량이 저장됩니다.
m_iv_i+m_jv_j=m_iv_i'+m_jv_j'
.거부 계수가 $e이면
e=-\frac{v_i'-v_j'}{v_i-v_j}
그래서
v_i'=V-e\frac{m_j}{m_i+m_j}v_{ij}\\
v_j'=V+e\frac{m_i}{m_i+m_j}v_{ij}\\
여기 있다
V=\frac{m_iv_i+m_jv_j}{m_i+m_j}
중심의 속도를 나타냅니다.
또한 완전 탄성 충돌 시($e=1$)의 관계도는 다음과 같다.

* dvfdv는 3장 소스 코드의 변수입니다.코드는 이해하기 어려워요.

3. 설치(thermsim.py/def collide 기준)


3.1. 충돌 판정


thermosim.py
    from scipy.spatial.distance import squareform,pdist
    # Find colliding particles
    D = squareform(pdist(self.r))
    ind1, ind2 = np.where(D < .5*np.add.outer(self.d, self.d))
    unique = (ind1 < ind2)
    ind1 = ind1[unique]
    ind2 = ind2[unique]
self.r와self.d는 각각 좌표와 직경의np이다.aray계산squareform(pdist(self.r))현재 입자 간의 거리.5*np.add.outer(self.d, self.d)입자가 접촉할 때의 거리.입자의 수가 n이면 nxn의aray를 되돌려줍니다.unique = (ind1 < ind2)는 상삼각 성분(대각 제외)만 있으면 된다는 정보다.

3.2. 충돌 시 좌표 계산하기


thermosim.py
            ru = np.dot(dv, dr)/ndv
            ds = ru + sqrt(ru**2 + .25*(d1+d2)**2 - np.dot(dr, dr))
            if np.isnan(ds):
                1/0

            # Time since collision
            dtc = ds/ndv

            # New collision parameter
            drc = dr - dv*dtc
dtc: 2.1달러 - tc$c와 뜻이 같고 같은 계산 방법입니다.drc는 충돌할 때의 상대적인 위치 방향량이어야 한다.

속도 업데이트


thermosim.py
            # Center of mass velocity
            vcm = (m1*v1 + m2*v2)/(m1+m2)

            # Velocities after collision
            dvf = dv - 2.*drc * np.dot(dv, drc)/np.dot(drc, drc)
            v1f = vcm - dvf * m2/(m1+m2)
            v2f = vcm + dvf * m1/(m1+m2)
dvf 무엇을 의미하는지 제2장 충돌시의 그림을 참조하세요.

좌표 업데이트


thermosim.py
            # Backtracked positions
            r1f = r1 + (v1f-v1)*dtc
            r2f = r2 + (v2f-v2)*dtc
이것 괜찮아요?생각 중이야.

참고 문헌

  • https://github.com/pierrethibault/thermosim

  • 이것은 강체구의 대규모 수치를 계산하고 싶은 인생이다 , @NatsukiLab

  • 대규모 강성구 시스템의 고속 시뮬레이션 , @yotapoon

  • 강체 원반 분자동력학 시뮬레이션에서의 대규모 계산과 고속화 방법, Iso부아청, 물성연구, 72(1), pp.21-4199-04
  • 운동량 보존 법칙이 성립되었을 때의 중심 운동
  • 두 공의 충돌
  • Wikipedia: Elastic collision
  • 좋은 웹페이지 즐겨찾기