{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "CFD.Lab",
  "home_page_url": "https://tech-blog.dev",
  "feed_url": "https://tech-blog.dev/feed.json",
  "description": "CFD 엔지니어를 위한 기술 저널 — 수식, 코드, 인터랙티브 시각화",
  "language": "ko",
  "authors": [
    {
      "name": "CFD.Lab",
      "url": "https://tech-blog.dev/about"
    }
  ],
  "items": [
    {
      "id": "https://tech-blog.dev/posts/2026-04-21-reynolds-number-scale-fluid-mechanics",
      "url": "https://tech-blog.dev/posts/2026-04-21-reynolds-number-scale-fluid-mechanics",
      "title": "벌레는 꿀 속에서 헤엄친다 — Reynolds 수가 바꾸는 유동의 세계",
      "summary": "무차원화로 드러나는 Reynolds 수, 스케일이 만드는 유동의 차이",
      "content_text": "박테리아는 수영을 할 수 없다. 정확히 말하면, 우리가 \"수영\"이라고 부르는 관성 기반 추진은 박테리아에게 통하지 않는다. 꼬리를 저어 관성으로 앞으로 나가는 우리와 달리, 박테리아는 관성이 사라진 세계 — 마치 투명한 꿀 속 같은 곳 — 에서 살기 때문이다. 이 포스트는 같은 Navier–Stokes 방정식이 왜 스케일에 따라 완전히 다른 세상을 만드는지, 그리고 그 차이를 한 숫자로 요약하는 Reynolds 수(관성력/점성력 비) 가 어떻게 유체역학의 \"숨겨진 문법\"이 되는지 살펴본다. 끝에는 무차원화(방정식의 단위를 벗겨 구조만 남기는 작업)가 왜 유체역학의 첫 문법인지도 함께 짚는다.\n\n같은 방정식, 다른 세상\n\n대왕고래는 바다에서 헤엄친다. 물 분자는 물론 같은 물이다. 그런데 1 μm 박테리아에게 물은 전혀 다른 물질처럼 느껴진다. 같은 Navier–Stokes 방정식을 써도 스케일이 바뀌면 지배하는 항이 바뀌기 때문이다.\n\n비압축 Navier–Stokes는 이렇게 생겼다.\n\n[equation]\n\n[math]는 밀도, [math]는 속도장, [math]는 압력, [math]는 점성계수다. 좌변은 관성(질량 × 가속도), 우변의 [math]는 점성(내부 마찰) 항이다. 이 두 힘이 매 순간 싸운다. 누가 이기는가.\n\n방정식의 옷을 벗겨라: 무차원화\n\n답은 스케일이 정한다. 이를 보이려면 방정식을 무차원화해야 한다. 대표 길이 [math], 대표 속도 [math], 대표 시간 [math], 대표 압력 [math]로 모든 양을 나눈다.\n\n[equation]\n\n변수 하나하나의 의미는 \"그 물리량을 자기 자신의 자연스러운 크기로 측정한 것\"이다. 이 정의를 Navier–Stokes에 대입해 정리하면 단위가 전부 사라진 깔끔한 식이 남는다.\n\n[equation]\n\n모든 물리 단위가 사라지고 딱 하나의 숫자 [math]만 남는다. 이것이 Reynolds 수다.\n\n[equation]\n\n[math]는 동점성계수(kinematic viscosity)다. [math], [math], [math]이 클수록 관성이, [math]가 클수록 점성이 이긴다. 같은 물이라도 [math]이 작아지면 [math]는 선형으로 떨어진다. 결국 세상을 지배하는 항이 바뀐다.\n\n스케일이 Reynolds 수를 바꾼다\n\n숫자로 느껴보자. 물의 동점성계수 [math]를 기준으로 대표 생명체들의 [math]는 아래와 같다.\n\n[code block]\n\n가장 큰 값과 가장 작은 값이 무려 13자릿수 차이다. 같은 물 안에서다. Reynolds 수는 단순한 숫자가 아니라, 같은 유체 안에서도 서로 다른 \"세상\"을 라벨링하는 주소다.\n\n박테리아처럼 [math]인 영역에서는 무차원 방정식의 관성 항이 사실상 사라지고, 양변에 [math]를 곱하면 Stokes 방정식 [math]이 된다. 시간 미분이 없다. 즉 박테리아의 유동은 \"과거를 기억하지 못한다\". 힘을 빼는 순간 속도도 0이 된다.\n\n시각화로 직관 만들기\n\n아래 시뮬레이션에서 직접 Reynolds 수를 조작해보자.\n\nReynolds를 10 근처로 낮추면 벡터장이 빗처럼 정돈된다. 점성이 모든 교란을 빠르게 소멸시키기 때문이다. 반대로 1000까지 올리면 벡터가 불규칙하게 흔들리기 시작한다. 이것이 난류의 전조다.\n\n다음은 원통 뒤의 유동이다. 관찰 포인트는 카르만 와열(Von Kármán vortex street, 원통 뒤에서 주기적으로 떨어져 나가는 와) 의 형성 여부다.\n\n[math]에서는 원통 뒤가 좌우 대칭으로 붙어 있다. 40을 넘기면 위아래 와가 번갈아 박리되어 \"꼬리가 주기적으로 흔들리는\" 무늬가 보인다. 깃발이 펄럭이고, 전깃줄이 울고, 바람에 긴 다리가 진동하는 이유가 모두 같은 카르만 와열이다. 자연 현상의 주파수는 Strouhal 수 [math]로 묶여 있어, [math]와 [math]만 알면 울음의 음높이까지 추정할 수 있다.\n\n박테리아는 왜 '꿀 속'인가\n\n[math]에서는 관성이 0에 가깝다. 수영을 멈추는 순간 정지한다. 더 놀라운 결과도 있다.\n\n> 시간 가역 동작으로는 앞…",
      "date_published": "2026-04-21T00:00:00.000Z",
      "tags": [
        "유체역학",
        "유동현상",
        "Reynolds",
        "무차원화"
      ],
      "_reading_time": "10 min read",
      "_word_count": 1864
    },
    {
      "id": "https://tech-blog.dev/posts/2026-04-20-discontinuous-galerkin-method-cfd",
      "url": "https://tech-blog.dev/posts/2026-04-20-discontinuous-galerkin-method-cfd",
      "title": "불연속 갈레르킨법(DGM): 비정렬 격자 압축성 유동 해석의 고정밀 이산화",
      "summary": "DGM의 약형식 유도부터 Gauss 구적법, 비정렬 격자 구현까지 단계별 정리",
      "content_text": "불연속 갈레르킨법(Discontinuous Galerkin Method, DGM)은 유한요소법(FEM)과 유한체적법(FVM)의 장점을 결합한 수치해석 기법입니다. 셀 내부에서는 고차 다항식 기저함수를 사용하고, 셀 경계에서는 수치 플럭스로 정보를 교환합니다. 비정렬 격자에서 압축성 유동을 고정밀로 해석할 때 강력한 선택지입니다.\n\n지배방정식과 플럭스 분리\n\n압축성 유동의 보존 방정식:\n\n[equation]\n\n여기서\n- [math]: 보존 변수 벡터\n- [math]: 대류(convective) 플럭스\n- [math]: 점성(viscous) 플럭스\n- [math]: 소스항\n\n기저함수 전개와 약형식 유도\n\n셀 [math] 내부에서 해를 기저함수의 선형결합으로 근사합니다:\n\n[equation]\n\n[math]는 셀 내 자유도 수로, 근사 다항식 차수 [math]에 따라 결정됩니다 ([math] in 3D).\n\n시험함수 [math]를 곱하고 [math]에서 적분하면:\n\n[equation]\n\nGreen 공식(부분 적분)을 적용하면 체적 적분과 경계 적분으로 나뉩니다:\n\n[equation]\n\n경계면의 [math]는 인접 셀 정보를 이용한 수치 플럭스입니다 (Roe, HLLC 등).\n\n질량 행렬과 시간 적분\n\n[math] 번째 기저함수 계수에 대한 ODE로 정리하면:\n\n[equation]\n\n여기서 질량 행렬(mass matrix)은:\n\n[equation]\n\n직교 기저함수(Taylor basis 또는 Legendre 다항식 등)를 사용하면 [math]이 대각행렬이 되어 역행렬 계산 비용이 없어집니다. 잔차 벡터 [math]은 체적 적분항과 면 플럭스항의 합입니다:\n\n[equation]\n\nGauss 구적법 적용\n\n체적·면 적분은 Gauss-Legendre 구적법으로 수치 계산합니다. 차수 [math]의 다항식을 정확히 적분하려면 최소 [math] 차 이상의 적분이 필요합니다.\n\n셀 유형별 Gauss 포인트 개수 (대표 차수별):\n\n| 셀 유형     | 1차 | 2차 | 3차 |\n|------------|-----|-----|-----|\n| Tetrahedron | 1  | 4   | 10  |\n| Hexahedron  | 1  | 8   | 27  |\n| Prism       | 3  | 9   | 18  |\n| Pyramid     | 1  | 5   | 15  |\n\n면(face) 유형에 대해서는 셀 포인트의 3배(3D 투영)를 사용합니다.\n\n알고리즘 구현 순서\n\n실제 구현에서는 다음 순서로 진행합니다:\n\n1. 셀·면 분류: 테트라/헥사/프리즘/피라미드/폴리헤드론\n2. 기저함수 준비: 각 셀 유형 × 근사 차수에 맞는 [math], [math] 계산\n3. Gauss 포인트 캐시: 참조 요소(reference element) 좌표와 가중치를 메모리에 저장\n4. 변수 초기화: [math] 설정 (자유흐름 조건 등)\n5. 루프(시간 전진):\n   - 체적 적분: [math] — 각 Gauss 포인트에서 플럭스 계산 후 합산\n   - 면 플럭스: [math] — 수치 플럭스 산정\n   - RK 업데이트: SSP-RK3 등 명시적 시간 적분\n\n[code block]\n\n수치 플럭스 선택 — 실무 주의사항\n\nDGM에서 수치 플럭스는 안정성과 정확도에 직결됩니다.\n\n- Roe 플럭스: 접촉 불연속을 잘 포착하지만, 엔트로피 수정이 없으면 팽창 충격파(expansion shock)를 유발할 수 있음.\n- HLLC: Roe보다 안정적이나 희귀한 경우 과도한 소산 발생.\n- LxF(Lax-Friedrichs): 구현 단순, 소산이 크므로 고차 이득이 줄어듦.\n\n흔한 실수:\n1. Gauss 포인트 수 부족 — 비선형 플럭스에서 차수가 줄어드는 aliasing 오류 발생.\n2. 질량 행렬 비대각화 무시 — 일반 FEM 기저함수 사용 시 매 스텝마다 선형계 풀이 필요, 비효율적.\n3. 면 법선 방향 불일치 — 공유면에서 인접 셀의 법선 부호 반대임을 항상 확인.\n\n정확도 검증 — Taylor-Green Vortex\n\n[equation]\n\n비압축성 해석해와…",
      "date_published": "2026-04-20T00:00:00.000Z",
      "tags": [
        "CFD",
        "FEM",
        "DGM",
        "고차 정확도",
        "압축성 유동"
      ],
      "_reading_time": "7 min read",
      "_word_count": 1286
    },
    {
      "id": "https://tech-blog.dev/posts/2026-04-20-fem-rigid-body-dynamics-quaternion",
      "url": "https://tech-blog.dev/posts/2026-04-20-fem-rigid-body-dynamics-quaternion",
      "title": "강체 역학을 위한 FEM: 쿼터니언 기반 회전 처리와 관성 텐서",
      "summary": "FEM 강체 시뮬레이션에서 쿼터니언으로 회전을 표현하고 관성 텐서를 다루는 방법",
      "content_text": "강체 역학의 기본 방정식\n\n유체-구조 연성(FSI) 해석이나 DEM(Discrete Element Method) 시뮬레이션에서 강체의 운동을 정확히 기술하는 것은 필수적이다. 강체는 변형이 없는 물체로, 임의의 두 점 사이 거리가 항상 일정하게 유지된다.\n\n강체 내 임의의 입자 [math]의 속도는 다음과 같이 분해된다.\n\n[equation]\n\n여기서 [math]은 질량 중심의 속도, [math]는 각속도, [math]는 질량 중심으로부터 입자 [math]까지의 변위 벡터이다.\n\n선형 모멘텀과 각 모멘텀\n\n전체 선형 모멘텀은 뉴턴 제2법칙으로부터\n\n[equation]\n\n여기서 [math]는 전체 질량이다. 질량 중심의 가속도는\n\n[equation]\n\n전체 각 모멘텀은\n\n[equation]\n\n여기서 [math]는 관성 텐서(inertia tensor), [math]는 전체 토크(torque)다.\n\n관성 텐서\n\n관성 텐서는 질량 중심을 기준으로\n\n[equation]\n\n연속체로 확장하면\n\n[equation]\n\n여기서 [math]는 단위 텐서이고, [math]은 외적(outer product)이다.\n\n물체가 회전하면 관성 텐서는 방위 행렬(orientation matrix) [math]에 의해 변환된다.\n\n[equation]\n\n여기서 [math]는 물체 좌표계(body frame)에서의 초기 관성 텐서로, 시뮬레이션 시작 시 한 번만 계산하면 된다.\n\n쿼터니언을 이용한 회전 표현\n\n오일러 각(Euler angles)으로 회전을 표현하면 짐벌 락(gimbal lock) 문제가 발생한다. 이를 피하기 위해 쿼터니언(quaternion)을 사용한다.\n\n쿼터니언 [math]는 스칼라 부분과 벡터 부분으로 구성된다.\n\n[equation]\n\n단위 축 [math]에 대해 각도 [math]만큼의 회전은\n\n[equation]\n\n두 쿼터니언 [math], [math]의 합성 회전은 곱으로 표현된다.\n\n[equation]\n\n이를 이용하면 방위 행렬 [math]은 쿼터니언 성분으로 명시적으로 표현된다.\n\n[equation]\n\n쿼터니언의 시간 미분은 각속도 [math]와 연결된다.\n\n[equation]\n\nFEM 이산화와 사면체 형상 함수\n\nFEM에서 강체의 변위장을 이산화할 때, 사면체 요소의 형상 함수(shape function)는\n\n[equation]\n\n여기서 [math]는 무차원 체적 좌표(barycentric coordinates)이며 [math] 조건을 만족한다.\n\n선형 사면체 요소에서 변위 보간은\n\n[equation]\n\n강체 구속 조건을 적용하면 자유도는 6개(선형 3 + 회전 3)로 줄어든다.\n\nPython 구현 예시\n\n[code block]\n\n실무 주의사항\n\n1. 쿼터니언 정규화 망각\n수치 적분이 반복되면 [math]이 되어 회전 행렬이 비직교(non-orthogonal)가 된다. 매 타임스텝마다 q /= norm(q) 를 반드시 수행해야 한다.\n\n2. 관성 텐서의 좌표계 혼동\n[math]는 물체 고정 좌표계(body frame)에서 정의된다. 월드 좌표계(world frame)에서 토크를 계산했다면 [math]로 변환 후 적용해야 한다.\n\n3. 타임스텝 선택\n강체의 최고 고유진동수 [math]에 대해 [math] 조건(CFL 유사 조건)을 만족해야 수치 안정성이 보장된다. 고속 회전 물체일수록 작은 [math]가 필요하다.\n\n4. 쿼터니언 보간 (SLERP)\n두 방위 사이를 보간할 때는 선형 보간(LERP) 대신 구면 선형 보간(SLERP)을 사용해야 등속 회전이 보장된다.\n\n[equation]\n\n강체 역학과 FEM의 결합은 FSI, DEM, 다물체 동역학 시뮬레이션의 기반이 된다. 쿼터니언 기반 회전 표현을 올바르게 구현하면 짐벌 락 없이 임의의 3차원 회전을 안정적으로 시뮬레이션할 수 있다.",
      "date_published": "2026-04-20T00:00:00.000Z",
      "tags": [
        "FEM",
        "강체역학",
        "쿼터니언",
        "CFD"
      ],
      "_reading_time": "7 min read",
      "_word_count": 1346
    },
    {
      "id": "https://tech-blog.dev/posts/2026-03-28-dean-flow-analytical-solution",
      "url": "https://tech-blog.dev/posts/2026-03-28-dean-flow-analytical-solution",
      "title": "Dean 유동: 나선형 관의 이차 유동 해석해와 CFD 검증",
      "summary": "곡선 관에서 원심력이 만드는 한 쌍의 Dean 와류 — 해석해 유도부터 수치 검증까지",
      "content_text": "나선형 증기발생기(Helical Steam Generator) 설계에서 빠지지 않는 질문이 있다.\n\"직관 대비 얼마나 열전달이 좋아지는가?\"\n그 답의 핵심이 Dean 와류(Dean vortices) — 곡선 관에서 원심력이 만들어내는 한 쌍의 나선형 이차 유동이다.\n\n1928년 W. R. Dean이 처음 기술한 이 유동은 핵공학, 화학공학, 생체역학에 걸쳐 반복 등장하는 고전 문제다. 오늘은 Dean의 섭동 전개를 직접 유도하고, Python으로 시각화한 뒤, 유한차분법으로 검증해본다.\n\n---\n\n1. 문제 설정\n\n곡률 반경 [math]인 원호형 관(관 반경 [math])을 생각하자. 원통 좌표계 [math]를 관 단면에 잡고, [math]를 관 축 방향 호 좌표로 정의한다.\n\n[equation]\n\n비압축성 Navier-Stokes 방정식을 곡선 좌표계로 표현하면, 관 축방향 운동량에 원심력 항이 추가된다.\n\n[equation]\n\n원심력이 없다면 ([math]) 이것은 곧바로 포아즈이유 유동으로 환원된다.\n\n---\n\n2. 해석해 유도\n\n2-1. 무차원화\n\n특성 속도 [math] (Poiseuille 중심 속도)로 무차원화하면:\n\n[equation]\n\n0차 해(Poiseuille)는:\n\n[equation]\n\n2-2. Dean 수 정의\n\nDean은 다음 무차원수를 도입했다:\n\n[equation]\n\n현대적으로는 관 직경 [math] 기준으로 쓰기도 한다:\n\n[equation]\n\n2-3. 섭동 전개 (Dean 1928)\n\n[math] 조건에서 스트림 함수 [math]를 [math]으로 전개한다:\n\n[equation]\n\n1차 이차 유동 스트림 함수:\n\n[equation]\n\n이차 유동 속도 성분 ([math]에서 유도):\n\n[equation]\n\n축방향 속도의 1차 보정:\n\n[equation]\n\n최종 축방향 속도 (2차 근사):\n\n[equation]\n\n---\n\n3. 물리적 해석\n\n- 이차 유동: [math] 의존성 → 바깥쪽(outer wall, [math])으로 유체가 쏠리고 양측에서 되돌아오는 한 쌍의 와류\n- 축방향 속도 왜곡: 원심력으로 고속 코어가 바깥쪽으로 치우침 → 속도 프로파일 비대칭\n- 전단응력 증가: 이차 유동이 경계층을 교란 → 열전달 계수 향상 (Nusselt 수 ↑)\n\n열전달 향상 상관식 (Dittus-Boelter 대비):\n\n[equation]De = Red\\sqrt{\\frac{d}{2R}} = Red\\sqrt{\\frac{0.012}{2 \\times 2.3}} \\approx 0.051 \\cdot Red$[math]Red \\approx 10{,}000[math]De \\approx 510$.\n이 영역에서 Dean 와류가 완전 발달하여 열전달 계수가 직관 대비 3060% 향상된다.\n\n그런데 비등(boiling)이 동반되면 이야기가 달라진다 — 원심력이 기포를 관 안쪽 벽면(inner wall)으로 밀어 국소 건도(void fraction) 불균형이 생긴다. 이것이 DNB(임계열속) 예측을 어렵게 만드는 핵심 원인이다. 1D 상관식이 통하지 않는 이유가 바로 이 3차원 이차 유동 때문이다.\n\n---\n\n더 읽을거리\n\n- Dean, W. R. (1928). The stream-line motion of fluid in a curved pipe. Phil. Mag. 5, 673–695.\n- Ito, H. (1959). Friction factors for turbulent flow in curved pipes. J. Basic Eng. 81, 123–134.\n- Berger, S. A., Talbot, L., & Yao, L.-S. (1983). Flow in curved pipes. Annu. Rev. Fluid Mech. 15, 461–512.\n- Naphon, P. & Wongwises, S. (2006). A review of flow and heat transfer characteristics in curved tubes. Renew. Sust. Energy Rev. 10, 463–490.",
      "date_published": "2026-03-28T00:00:00.000Z",
      "tags": [
        "해석해",
        "고전유동",
        "CFD검증",
        "Dean유동",
        "이차유동",
        "나선형관"
      ],
      "_reading_time": "11 min read",
      "_word_count": 2135
    },
    {
      "id": "https://tech-blog.dev/posts/2026-03-28-poiseuille-flow-analytical-solution",
      "url": "https://tech-blog.dev/posts/2026-03-28-poiseuille-flow-analytical-solution",
      "title": "포아즈이유 유동: 해석해 유도와 유한차분 검증",
      "summary": "가장 단순한 점성 유동의 완전 해석해를 손으로 유도하고, FD 코드로 수치 정확도를 검증하는 CFD 입문 벤치마크",
      "content_text": "포아즈이유 유동(Poiseuille flow)은 두 평행 평판 사이 또는 원형 관 내부에서 일정한 압력 구배에 의해 구동되는 완전 발달 층류다.\n정확한 해석해가 존재하기 때문에 CFD 코드 검증의 첫 번째 테스트 케이스로 전 세계 어느 교과서에나 등장한다.\n\n오늘은 채널 유동(2D 평판 사이)을 대상으로 해석해를 단계별로 유도하고, 간단한 유한차분 코드를 작성해 수렴 차수를 확인한다.\n\n문제 설정\n\n형상 및 경계 조건\n\n두 무한 평행 평판 사이의 완전 발달 층류 유동을 고려한다.\n\n- 채널 반폭: [math] (평판은 [math]에 위치)\n- 유동 방향: [math] (무한히 길다고 가정)\n- 경계 조건: 양 벽면에서 no-slip [math] [math]\n- 구동력: 일정한 압력 구배 [math]은 상수)\n\n지배 방정식\n\n완전 발달 유동이므로 [math], [math]이다. [math]-방향 나비에–스토크스 방정식:\n\n[equation]\n\n완전 발달 조건([math], [math])을 적용하면:\n\n[equation]\n\n해석해 유도\n\n1단계: ODE로 단순화\n\n[equation]\n\n2단계: 1차 적분\n\n[equation]\n\n3단계: 2차 적분\n\n[equation]\n\n4단계: 경계 조건 적용\n\n[math]:\n\n[equation]\n\n[math]:\n\n[equation]\n\n(1) [math] (2): [math] (대칭)\n\n(1) [math] (2): [math]\n\n최종 해석해\n\n[equation]\n\n채널 중심([math])에서 최대 속도:\n\n[equation]\n\n물리적 해석\n\n속도 프로파일\n\n해석해는 포물선(parabola) 분포다. 벽면 마찰이 유동 단면 전체에 균일하게 전달되어, 중심에서 최대, 벽에서 0이 된다.\n\n무차원 속도 [math]는 채널 반폭 [math]나 점도 [math]에 무관한 보편적 프로파일이다.\n\n벽면 전단 응력\n\n[equation]\n\n(크기: [math]) 압력 구배가 클수록, 채널이 넓을수록 벽 마찰이 커진다.\n\n체적 유량\n\n[equation]\n\n이를 Hagen-Poiseuille 법칙의 2D 버전이라 부른다. 유량이 [math]에 비례하므로, 채널이 두 배 넓어지면 유량은 여덟 배 증가한다.\n\nPython으로 해석해 시각화\n\n[code block]\n\n유한차분법으로 수치 검증\n\nFD 이산화\n\n[math]를 2차 중앙차분으로 이산화한다. 균일 격자 [math]:\n\n[equation]\n\n경계 조건: [math].\n\n이를 삼대각 행렬(tridiagonal) 연립방정식으로 쓰면:\n\n[equation]\n\nPython 구현\n\n[code block]\n\n수렴 결과\n\n| [math] | [math] | [math] 오차 | 수렴 차수 |\n|----:|-----------|------------|----------|\n| 4 | 0.4000 | 2.78e-16 | — |\n| 8 | 0.2222 | 1.67e-16 | 2.0 |\n| 16 | 0.1176 | 2.22e-16 | 2.0 |\n| 32 | 0.0606 | 2.78e-16 | 2.0 |\n| 64 | 0.0308 | 2.22e-16 | 2.0 |\n\n> 참고: 포아즈이유 유동은 2차 다항식이므로 2차 중앙차분으로 기계적 정밀도(machine precision) 수준의 정확도를 얻는다. 실제 오차는 [math] 비례가 아니라 부동소수점 반올림 오차 수준에서 포화된다.\n\n이것이 포아즈이유 유동이 CFD 검증에 이상적인 이유다 — 낮은 격자 해상도에서도 거의 완벽한 답을 내놓아, 코드의 기본 정확성을 빠르게 확인할 수 있다.\n\n해석 결과 비교 플롯\n\n[code block]\n\nOpenFOAM 설정 힌트\n\n포아즈이유 유동을 OpenFOAM icoFoam으로 설정할 때 핵심 파라미터:\n\n0/U — 속도 경계 조건\n\n[code block]\n\n0/p — 압력 경계 조건\n\n[code block]\n\nconstant/transportProperties\n\n[code block]\n\n검증 체크리스트\n\n1. 완전 발달 조건: 채널 길이가 입구 발달 길이([math])보다 충분히 길어야 …",
      "date_published": "2026-03-28T00:00:00.000Z",
      "tags": [
        "해석해",
        "고전유동",
        "CFD검증",
        "포아즈이유",
        "유한차분"
      ],
      "_reading_time": "10 min read",
      "_word_count": 1875
    },
    {
      "id": "https://tech-blog.dev/posts/2026-03-27-simpleFoam-pressure-divergence",
      "url": "https://tech-blog.dev/posts/2026-03-27-simpleFoam-pressure-divergence",
      "title": "[CFD Q&A] simpleFoam 압력 잔차가 수렴하지 않을 때",
      "summary": "실무에서 만난 SIMPLE 알고리즘 발산 해결기 — relaxation factor 설정이 핵심이었다",
      "content_text": "지난주에 꽤 시간을 잡아먹은 문제가 있었다. simpleFoam을 돌리다가 pressure residual이 1e-3 아래로 떨어지지 않고 오히려 올라가기 시작했다. 처음엔 메시 문제인가 싶었는데, 결론은 relaxation factor였다.\n\n문제 상황\n\n- 소프트웨어: OpenFOAM v2312\n- 형상: 2D 직사각형 채널, inlet–outlet 경계\n- 난류 모델: k-ε (standard)\n- 솔버: simpleFoam (정상 상태)\n\n처음 2030 iteration은 잘 내려가다가 갑자기 pressure residual이 튀기 시작했다.\n\n[code block]\n\nvelocity는 잘 수렴하는데 pressure만 계속 이상하다. 전형적인 압력-속도 커플링 불안정 패턴이다.\n\n원인 분석 과정\n\n1단계: 메시 품질 확인\n\n일단 checkMesh부터 돌렸다.\n\n[code block]\n\n최대 non-orthogonality 32도, max skewness 0.8 — 나쁘지 않다. 메시 문제는 아닌 것 같다.\n\n2단계: 경계 조건 점검\n\ninlet에서 pressure를 zeroGradient, outlet을 fixedValue 0으로 설정했다. 이건 표준 설정이라 문제없다.\n\n근데 초기 p 필드를 확인해보니 inlet 쪽에 이상하게 큰 값이 들어가 있었다. 처음에 funkySetFields로 뭔가 실험하다가 남은 흔적이었다.\n\n3단계: fvSolution 확인\n\n[code block]\n\nU=0.9는 꽤 공격적인 값이다. SIMPLE에서 velocity relaxation을 높이면 수렴 속도는 빠르지만 pressure 업데이트가 따라가지 못하면 발산한다.\n\n원인 두 가지가 겹쳤다:\n1. relaxation factor가 과도하게 높음\n2. 초기 p 필드에 잘못된 값이 남아 있음\n\n해결책\n\nrelaxation factor 낮추기\n\n[code block]\n\n처음 실행할 때는 보수적으로 시작하는 게 맞다. 수렴이 확인되면 조금씩 올린다.\n\n초기 p 필드 초기화\n\n[code block]\n\n아니면 직접 0/p 파일 열어서 internalField uniform 0;으로 맞춰주면 된다.\n\n[code block]\n\n검증\n\n수정 후 다시 돌리면 이렇게 나온다.\n\n[code block]\n\n200 iteration 정도에서 pressure residual이 1e-4 수준으로 안정적으로 내려왔다.\n\n일반화된 교훈\n\nsimpleFoam 수렴 체크리스트 — 이 순서로 확인하면 대부분 잡힌다:\n\n1. 초기 조건 먼저: 0/ 디렉토리의 p, U 필드가 의도한 값인지 확인. 이전 실험 잔재가 남아 있으면 반드시 초기화.\n\n2. relaxation factor 보수적으로: 첫 실행은 U=0.7, p=0.3 기본값으로 시작. 수렴 확인 후 올리는 게 안전하다. p relaxation은 특히 낮게 잡아야 SIMPLE 루프가 안정된다.\n\n3. velocity 수렴 vs. pressure 수렴 분리해서 보기: U residual은 낮은데 p만 발산하면 relaxation 문제일 가능성이 높다. 둘 다 발산하면 메시나 경계 조건을 먼저 본다.\n\n4. GAMG iteration 수 보기: 같은 iteration에서 p를 풀 때 필요한 inner iteration이 갑자기 늘어난다면 수렴 방향이 잘못된 것.\n\nSIMPLE 알고리즘은 pressure correction 루프의 특성상 relaxation에 매우 민감하다. 첫 실행은 항상 보수적으로 — 느려도 안정적으로 수렴하는 걸 확인한 뒤에 가속하는 게 결국 빠르다.\n\n---\n\n비슷한 문제를 겪고 있다면 댓글로 환경(버전, 형상, 난류 모델)을 알려주세요. 케이스별로 다를 수 있습니다.",
      "date_published": "2026-03-27T00:00:00.000Z",
      "tags": [
        "CFD실무",
        "QA",
        "OpenFOAM",
        "SIMPLE",
        "수렴"
      ],
      "_reading_time": "6 min read",
      "_word_count": 1081
    },
    {
      "id": "https://tech-blog.dev/posts/2026-03-26-openfoam-backward-facing-step",
      "url": "https://tech-blog.dev/posts/2026-03-26-openfoam-backward-facing-step",
      "title": "[OpenFOAM 튜토리얼] 후방 계단 유동 해석 — simpleFoam으로 재순환 영역 포착하기",
      "summary": "OpenFOAM simpleFoam으로 후방 계단(Backward Facing Step) 비압축성 유동을 단계별로 해석하는 가이드",
      "content_text": "이 튜토리얼에서는 후방 계단(Backward Facing Step) 형상에서 재순환 유동을 simpleFoam으로 시뮬레이션합니다.\n계단 하류에 형성되는 재순환 영역(recirculation zone)과 재부착 지점(reattachment point)을 직접 확인하는 것이 목표입니다.\n\n---\n\n선행 조건\n\n- OpenFOAM 버전: v2312 이상 (OpenFOAM.com 또는 OpenFOAM.org 모두 가능)\n- 사전 지식: 기본 터미널 명령어, OpenFOAM 케이스 구조(0/constant/system) 이해\n- 필요 소프트웨어: ParaView 5.x 이상 (결과 시각화)\n\n---\n\n1단계: 케이스 디렉토리 생성\n\n[code block]\n\n케이스 구조는 다음과 같습니다.\n\n[code block]\n\n[code block]\n\n---\n\n2단계: 격자 생성 — blockMeshDict\n\nsystem/blockMeshDict는 계단 형상을 직육면체 블록 조합으로 정의합니다.\n아래는 단순화된 2D 케이스 예시입니다 (계단 높이 H = 0.1 m).\n\n[code block]\n\n[code block]\n\n예상 출력:\n[code block]\n\n---\n\n3단계: 경계 조건 설정\n\n0/U — 속도 경계 조건\n\n[code block]\n\n0/p — 압력 경계 조건\n\n[code block]\n\n0/k — 난류 운동에너지\n\n[code block]\n\n---\n\n4단계: 물성치 및 난류 모델 설정\n\nconstant/transportProperties\n\n[code block]\n\nconstant/turbulenceProperties\n\n[code block]\n\n---\n\n5단계: 수치 기법 설정\n\nsystem/fvSchemes\n\n[code block]\n\nsystem/fvSolution\n\n[code block]\n\n---\n\n6단계: 해석 실행\n\n[code block]\n\n예상 출력 (수렴 과정):\n[code block]\n\n수렴 기준은 모든 변수의 residual이 1e-4 이하가 될 때입니다.\n\n---\n\n7단계: 결과 시각화 (ParaView)\n\n[code block]\n\nParaView에서 다음 순서로 결과를 확인합니다.\n\n1. Coloring 드롭다운 → U 선택 → Magnitude로 속도 크기 표시\n2. Glyph 필터 추가 → 벡터 방향 시각화 (재순환 영역 확인)\n3. Stream Tracer 필터 → 유선 그리기\n\nfoamToVTK로 파일 변환 후 후처리:\n\n[code block]\n\nPython으로 재부착 길이 자동 추출:\n\n[code block]\n\n---\n\n흔한 오류와 해결책\n\n오류 1: FOAM FATAL ERROR: Cannot find file \"0/epsilon\"\n\n[code block]\n\n원인: 0/epsilon 파일 누락.\n해결: k 파일과 동일한 형식으로 0/epsilon을 생성합니다.\n\n[code block]\n\n---\n\n오류 2: 해석 발산 (Floating point exception)\n\n[code block]\n\n원인: 완화계수가 너무 크거나 격자가 조밀하지 않아 발산.\n해결: fvSolution에서 완화계수를 낮춥니다.\n\n[code block]\n\n---\n\n오류 3: residual이 감소하지 않고 진동\n\n원인: nNonOrthogonalCorrectors가 0이지만 격자 비직교성이 높은 경우.\n해결: 보정 횟수를 늘립니다.\n\n[code block]\n\n---\n\n예상 결과 정리\n\n| 항목 | 값 |\n|------|-----|\n| Reynolds 수 ([math]) | 1,000 |\n| 재부착 길이 ([math]) | 6–8 |\n| 최대 역방향 속도 | [math] m/s |\n| 수렴 반복 횟수 | 300–600회 |\n\n재부착 길이는 [math]에 따라 달라지며, [math] 실험값(Armaly et al., 1983)과 비교하면 약 6H로 일치합니다.\n\n[equation]\n\n---\n\n다음 단계 제안\n\n- 격자 독립성 검토: blockMeshDict에서 격자 수를 2배로 늘려 결과 비교\n- 난류 모델 비교: kEpsilon →…",
      "date_published": "2026-03-26T00:00:00.000Z",
      "tags": [
        "OpenFOAM",
        "튜토리얼",
        "simpleFoam",
        "후방계단",
        "난류"
      ],
      "_reading_time": "11 min read",
      "_word_count": 2109
    },
    {
      "id": "https://tech-blog.dev/posts/2026-03-25-reynolds-flow-transition-visualization",
      "url": "https://tech-blog.dev/posts/2026-03-25-reynolds-flow-transition-visualization",
      "title": "시각화로 이해하는 Reynolds 수와 유동 천이",
      "summary": "인터랙티브 시각화로 이해하는 Reynolds 수와 층류-난류 천이 현상",
      "content_text": "Reynolds 수란 무엇인가\n\n유체 유동을 이해할 때 가장 중요한 무차원수 중 하나가 Reynolds 수(Re)다. 이 수는 관성력과 점성력의 비를 나타낸다.\n\n[equation]\n\n여기서:\n- [math]: 유체 밀도 [math]\n- [math]: 특성 속도 [math]\n- [math]: 특성 길이 [math]\n- [math]: 동점성 계수 [math]\n- [math]: 동점도 [math]\n\n유동 체계의 구분\n\n| Reynolds 수 범위 | 유동 체계 | 특징 |\n|------------------|-----------|------|\n| [math] | 크리프 유동(Stokes flow) | 점성 지배, 완전 층류 |\n| [math] | 난류 (Turbulent) | 불규칙적 혼합, 높은 에너지 소산 |\n\n유동 천이의 물리적 메커니즘\n\n층류에서 난류로의 천이는 켈빈-헬름홀츠(Kelvin-Helmholtz) 불안정성에서 시작된다. 속도 구배가 존재하는 경계에서 작은 교란이 증폭되면서 와류(vortex)가 형성되고, 이것이 연쇄적으로 에너지 캐스케이드를 일으킨다.\n\n속도 프로파일의 변화를 수식으로 표현하면:\n\n[equation]\n\nNavier-Stokes 방정식에서 좌변의 비선형 항 [math]가 관성을 담당하고, 우변의 [math]가 점성 감쇠를 담당한다. Reynolds 수는 이 두 항의 상대적 크기를 나타낸다.\n\n속도장 시각화: Reynolds 수에 따른 유동 변화\n\n아래 시뮬레이션을 통해 Reynolds 수 변화에 따른 속도장의 변화를 직접 확인해보세요:\n\n관찰 포인트:\n- 저 Re (Re ≈ 150): 벡터가 부드럽고 규칙적으로 배열됨 — 점성이 교란을 즉시 감쇠\n- 중간 Re (Re ≈ 100500): 장애물 후류에서 비대칭성 출현 — 관성력이 점성력에 필적\n- 고 Re (Re > 1000): 벡터 방향이 불규칙해지고 와류 구조가 발달\n\n원기둥 주위 유선: 카르만 소용돌이길\n\n원기둥(cylinder)을 지나는 유동에서 Reynolds 수가 증가하면 주기적인 와류 방출 현상인 카르만 와열(Kármán vortex street)이 나타난다.\n\n방출 주파수는 Strouhal 수 [math]로 정규화된다:\n\n[equation]\n\n여기서 [math]는 와류 방출 주파수, [math]는 원기둥 직경, [math]는 자유류 속도다. 원기둥의 경우 [math] ([math]Re[math]Re[math]Re^{9/4}$로 스케일되므로, 고 Re 유동에는 난류 모델이 필수\n\n다음 주에는 유한체적법(FVM)을 이용해 이 Navier-Stokes 방정식을 어떻게 이산화하는지, 그리고 업윈드 vs 중앙차분 스킴이 정확도에 미치는 영향을 다룬다.",
      "date_published": "2026-03-25T00:00:00.000Z",
      "tags": [
        "시각화",
        "Reynolds",
        "유동천이",
        "유체역학"
      ],
      "_reading_time": "6 min read",
      "_word_count": 1074
    },
    {
      "id": "https://tech-blog.dev/posts/2026-03-24-paper-review-pinn-turbulence-modeling",
      "url": "https://tech-blog.dev/posts/2026-03-24-paper-review-pinn-turbulence-modeling",
      "title": "[논문 리뷰] Physics-Informed Neural Networks for Turbulence Modeling",
      "summary": "물리 법칙을 손실 함수에 직접 내장한 신경망으로 희소 데이터에서 유동장을 재구성하는 새로운 접근법",
      "content_text": "논문 정보\n\n- 저자: Raissi, M., Perdikaris, P., Karniadakis, G. E.\n- 학술지: Journal of Computational Physics, Vol. 378, pp. 686–707, 2019\n- DOI: 10.1016/j.jcp.2018.10.045\n- arXiv: 1711.10561\n\n---\n\n한 줄 요약\n\nNavier-Stokes 방정식을 신경망의 손실 함수에 직접 내장(Physics-Informed)하여, 압력 센서 몇 개만으로 전체 속도장을 역산하는 방법을 제안했다.\n\n---\n\n연구 배경\n\n기존 CFD는 두 가지 극단 사이 어딘가에 있다.\n\n전통적 방법 (k-ε, k-ω SST): 경험적 클로저 계수에 의존한다. Reynolds 수나 형상이 바뀌면 계수를 다시 튜닝해야 한다. 일반화 능력이 제한적이다.\n\n순수 데이터 기반 딥러닝: 대량의 라벨 데이터가 필요하고, 학습된 모델이 질량 보존이나 운동량 보존을 보장하지 않는다. 물리적으로 말이 안 되는 예측을 내놓아도 손실 함수가 모른다.\n\nPINNs는 이 간극을 메우는 시도다. 데이터가 희소해도 물리 법칙이 정규화(regularizer) 역할을 한다.\n\n---\n\n핵심 방법론\n\nPINN의 총 손실 함수는 두 항의 합이다.\n\n[equation]\n\n데이터 손실 [math]는 관측값(예: 압력 센서)과 신경망 예측의 차이다.\n\n물리 손실 [math]는 비압축성 Navier-Stokes 방정식의 잔차(residual)다.\n\n[equation]\n\n두 번째 항은 연속 방정식(질량 보존)이다. 신경망이 이 잔차를 0으로 만들도록 훈련되므로, 예측값은 항상 N-S 방정식을 근사적으로 만족한다.\n\n미분은 PyTorch/TensorFlow의 자동 미분(automatic differentiation)으로 계산한다. 별도의 수치 이산화가 필요 없다.\n\n---\n\n주요 결과\n\n| 케이스 | 조건 | 결과 |\n|--------|------|------|\n| 2D 원형 실린더 주위 유동 | Re=100, 압력 센서만 사용 | 속도장 재구성 오차  한 줄 평: \"CFD와 딥러닝의 접점을 정의한 논문. 지금 당장 OpenFOAM을 대체하진 못하지만, 역문제와 희소 데이터 재구성에서는 이미 실용적이다.\"",
      "date_published": "2026-03-24T00:00:00.000Z",
      "tags": [
        "논문리뷰",
        "CFD",
        "PINN",
        "딥러닝",
        "난류모델"
      ],
      "_reading_time": "6 min read",
      "_word_count": 1151
    },
    {
      "id": "https://tech-blog.dev/posts/mach-architect",
      "url": "https://tech-blog.dev/posts/mach-architect",
      "title": "Mach Architect: 노즐을 설계하며 배우는 압축성 유동",
      "summary": "수렴-확산 노즐의 형상과 배압을 직접 조절하며 등엔트로피 유동, 초크, 수직 충격파를 체험하는 인터랙티브 시뮬레이터입니다.",
      "content_text": "Mach Architect\n\n교과서에서 수렴-확산(C-D) 노즐 유동을 배울 때, 단면적비 [math]와 배압비 [math]에 따른 유동 레짐 변화를 그래프로만 보면 직관이 잘 잡히지 않습니다.\n\n직접 노즐을 설계하고, 배압을 돌려보세요. 4개의 레벨을 클리어하면 1D 압축성 노즐 유동의 핵심을 체득할 수 있습니다.\n\n---\n\n---\n\n조작법\n\n- 노즐 형상: SVG 위의 파란 원(control point)을 위아래로 드래그하여 단면적을 조절합니다\n- 배압: 우측 슬라이더로 [math]를 조절합니다\n- 레벨 선택: 상단 LV1LV4 버튼으로 전환합니다\n\n---\n\n레벨 해설\n\nLevel 1: Subsonic Acceleration\n\n가장 기본적인 문제입니다. 수렴 노즐에서 아음속 유동은 단면적이 줄어들수록 가속됩니다.\n등엔트로피 관계식:\n\n[equation]\n\n[math]이므로 [math]가 감소하면 [math]이 증가합니다. 목표는 출구 마하수 0.450.55입니다.\n\nLevel 2: Choking\n\n유동이 초크(choke)되면 throat에서 [math]이 됩니다. 이 상태에서는 배압을 더 낮춰도 throat 상류의 질량 유량이 변하지 않습니다.\n\n임계 압력비 ([math]):\n\n[equation]\n\n배압을 이 값 아래로 낮추거나, throat를 충분히 좁게 만드세요.\n\nLevel 3: Supersonic Nozzle Design\n\n수렴-확산 노즐에서 throat 이후 단면적이 다시 넓어지면 초음속으로 가속됩니다. [math]를 달성하려면:\n\n[equation]\n\n그리고 배압을 설계 압력(Pbdesign)까지 낮춰야 충격파 없이 완전 초음속 유동이 됩니다.\n\nLevel 4: Shock Positioning\n\n배압이 설계 압력보다 높지만 임계 압력보다 낮으면, 노즐 내부에 수직 충격파(normal shock)가 발생합니다.\n\n충격파 전후의 관계:\n\n[equation]\n\n[equation]\n\n배압을 조절하면 충격파 위치가 이동합니다. 배압이 높을수록 충격파가 throat 가까이, 낮을수록 출구 가까이 이동합니다. 목표는 [math] 구간에 배치하는 것입니다.\n\n---\n\n시뮬레이터의 물리 모델\n\n이 시뮬레이터는 다음 가정에 기반합니다:\n\n1. 1D 준1차원(quasi-1D) 유동: 단면적 변화만 고려, 점성/열전달 무시\n2. 등엔트로피 유동 (충격파 제외): [math], [math] 보존\n3. 칼로릭 완전 기체: [math] (공기)\n4. 수직 충격파: Rankine-Hugoniot 관계식 적용\n5. 노즐 형상: Hermite 보간으로 매끄러운 단면적 분포 생성\n\n충격파 위치는 출구 압력 조건을 만족시키는 위치를 이산적으로 탐색합니다. 충격파 전방은 등엔트로피 초음속, 후방은 전체 압력 손실을 반영한 등엔트로피 아음속으로 계산합니다.\n\n---\n\n더 알아보기\n\n- 압축성 다상유동 CFD 입문 - 이 시뮬레이터의 물리가 다상유동으로 확장되면 어떤 어려움이 생기는지\n- Riemann 문제부터 Godunov 기법까지 - 수직 충격파를 수치적으로 포착하는 Riemann solver\n- FDM vs FEM vs FVM - 이 1D 문제를 실제로 이산화하는 세 가지 접근법",
      "date_published": "2026-03-11T00:00:00.000Z",
      "tags": [
        "CFD",
        "Compressible-Flow",
        "Interactive",
        "Isentropic",
        "Nozzle"
      ],
      "_reading_time": "5 min read",
      "_word_count": 865
    },
    {
      "id": "https://tech-blog.dev/posts/rhie-chow-multiphase",
      "url": "https://tech-blog.dev/posts/rhie-chow-multiphase",
      "title": "압축성 다상유동을 위한 Rhie-Chow 보간법 총정리",
      "summary": "Collocated 격자의 체커보드 문제부터 balanced-force 다상유동까지, Rhie-Chow 보간의 수학적 본질과 OpenFOAM 구현을 체계적으로 정리합니다.",
      "content_text": "Rhie-Chow 보간: 왜 필요하고, 다상유동에서 왜 까다로운가\n\nRhie-Chow 보간(momentum-weighted interpolation, MWI)은 collocated 격자에서 체커보드 압력 진동을 억제하기 위해 face 속도를 보정하는 핵심 기법입니다. 단상 유동에서는 비교적 간단하지만, 다상유동으로 확장할 때 압력, 중력, 표면장력, 비정상 보정항의 일관된 처리가 결정적으로 중요해집니다.\n\n이 글은 Rhie & Chow(1983)의 원본부터 Bartholomew et al.(2018)의 통합 프레임워크, 그리고 OpenFOAM의 interFoam/compressibleInterFoam 구현까지를 다룹니다.\n\n---\n\n1. 반이산화 운동량 방정식에서 Face 속도 도출\n\n모든 Rhie-Chow 변형의 출발점은 셀 중심 [math]에서의 반이산화(semi-discretized) 운동량 방정식입니다:\n\n[equation]\n\n- [math]: 대각 계수 (시간 미분, 대류, 확산 기여 포함)\n- [math]: 이웃 셀 기여 + 명시적 소스\n\n셀 중심 속도를 풀면:\n\n[equation]\n\n문제: 체커보드 진동\n\n이 셀 중심 속도를 단순 선형 보간으로 face에 가져오면, 압력 구배가 [math]과 [math]만 연결하고 [math]를 건너뛰어 odd-even decoupling(체커보드)이 발생합니다.\n\nRhie-Chow의 해법\n\nFace에서 운동량 방정식 자체를 재구성하여, 넓은 스텐실의 보간된 압력 구배를 좁은(compact) face 중심 압력 구배로 대체합니다:\n\n[equation]\n\n여기서 [math]는 인접 셀 값으로 직접 계산한 face 구배이고, overbar는 셀 중심 값의 선형 보간입니다.\n\n압력 보정항 [math]는 [math]에 비례하는 저역통과 필터로 작용하여 체커보드를 억제합니다.\n\n---\n\n2. 핵심 논문별 기여\n\nRhie & Chow (1983): 원본\n\nAIAA Journal에 발표된 원본은 정상 유동 SIMPLE 알고리즘 전용이었습니다:\n\n[equation]\n\n[math]는 압력 구배를 제거한 의사속도, [math]입니다. 압력 보정항만 포함하며, 비정상항이나 이완(relaxation)항 처리가 없었습니다. 이후 Majumdar(1988)가 수렴된 해의 이완 계수 의존성을, Choi(1999)가 비정상 유동에서의 시간 간격 의존성을 지적했습니다.\n\nJasak (1996): OpenFOAM의 토대 - H/A 접근법\n\nImperial College 박사논문으로, 비정렬 다면체 격자 유한체적법을 체계화했습니다. Rhie-Chow를 명시적 보정항 없이 암묵적으로 구현한 것이 특징입니다:\n\n[equation]\n\nHbyA = H/A는 압력 영향이 제거된 속도 예측자이며, 압력 방정식은 [math]로 유도됩니다. Rhie-Chow 효과는 Laplacian 이산화(face snGrad)와 속도 보정의 구배(Gauss 정리)가 서로 다른 스텐실을 사용하는 데서 자연스럽게 발생합니다.\n\n비정상 보정은 fvc::ddtCorr로 처리하지만, 완전히 일관적이지 않아 시간 간격 의존성이 남습니다.\n\nCubero & Fueyo (2007): Compact Momentum Interpolation (CMI)\n\n시간 간격과 이완 계수 모두에 독립적인 face 속도 공식을 제안했습니다. 운동량 방정식의 각 계수를 개별적으로 일관되게 보간하는 것이 핵심입니다:\n\n[equation]\n\n- [math]: 시간 계수\n- [math]: 이완 계수\n- [math]: 공간 계수\n\n수렴 시 [math]이고 [math]이므로 비정상/이완 보정항이 자동 소멸합니다. 정상 해가 [math]와 이완 계수에 무관해지는 것이 보장됩니다.\n\nBartholomew et al. (2018): 통합 프레임워크\n\nJCP 375에서 구조/비구조 격자 모두에 적용 가능한 통합 MWI 공식을 제시했습니다. 세 가지 핵심 기여:\n\n1) MWI 계수는 공간 계수만으로 구성해야 합니다. 시간 미분 계수 [math]를 분모에 포함하면 [math]일 때 …",
      "date_published": "2026-03-10T00:00:00.000Z",
      "tags": [
        "CFD",
        "Multiphase",
        "Rhie-Chow",
        "OpenFOAM",
        "Numerical-Methods"
      ],
      "_reading_time": "19 min read",
      "_word_count": 3775
    },
    {
      "id": "https://tech-blog.dev/posts/fdm-fem-fvm",
      "url": "https://tech-blog.dev/posts/fdm-fem-fvm",
      "title": "FDM vs FEM vs FVM: 세 가지 이산화 기법의 본질적 차이",
      "summary": "유한차분법(FDM), 유한요소법(FEM), 유한체적법(FVM)의 수학적 출발점, 장단점, 그리고 각각이 빛을 발하는 영역을 비교합니다.",
      "content_text": "같은 PDE, 세 가지 길\n\n편미분방정식(PDE)을 컴퓨터로 풀려면 연속적인 공간을 이산화(discretization)해야 합니다.\n같은 방정식이라도 어떤 철학으로 이산화하느냐에 따라 완전히 다른 수치 기법이 됩니다.\n\n간단한 1D 이류-확산 방정식을 예시로 잡겠습니다:\n\n[equation]\n\n이 하나의 방정식에 대해 FDM, FEM, FVM이 각각 어떻게 접근하는지 살펴봅시다.\n\n---\n\n1. 유한차분법 (Finite Difference Method, FDM)\n\n핵심 아이디어\n\n> 미분을 차분(difference)으로 직접 근사한다.\n\n가장 직관적인 접근입니다.\n격자점(node)에서의 함수값을 Taylor 전개하여 도함수를 근사합니다.\n\n수학적 출발: Taylor 전개\n\n점 [math]에서의 Taylor 전개:\n\n[equation]\n\n이로부터 차분 근사를 유도합니다:\n\n전방 차분 (Forward):\n[equation]\n\n중앙 차분 (Central):\n[equation]\n\n2차 도함수:\n[equation]\n\n이류-확산 방정식에 적용\n\n중앙 차분을 사용하면:\n\n[equation]\n\n격자점의 미지수 [math]에 대한 연립 ODE 시스템이 됩니다.\n\n장단점\n\n장점:\n- 개념이 단순하고 구현이 쉬움\n- 구조 격자(structured grid)에서 매우 효율적\n- 고차 정확도 달성이 용이 (compact scheme, spectral-like scheme)\n- 직교 격자에서 행렬 구조가 깔끔 (band matrix)\n\n단점:\n- 비정렬 격자(unstructured grid) 적용이 어려움 - 이것이 치명적\n- 복잡한 형상에 대한 격자 생성이 까다로움\n- 보존 법칙을 자동으로 만족시키지 않음\n\n대표 적용 분야\n\n- DNS/LES (직교 격자 기반 난류 시뮬레이션)\n- 기상/해양 모델 (구조 격자)\n- 지진파 전파 시뮬레이션\n- Compact scheme 기반 고정밀 계산\n\n---\n\n2. 유한요소법 (Finite Element Method, FEM)\n\n핵심 아이디어\n\n> 해를 기저함수(basis function)의 선형결합으로 근사하고,\n> 가중 잔차(weighted residual)를 최소화한다.\n\nFEM은 미분 방정식을 풀지 않습니다.\n대신 약형식(weak formulation)이라 불리는 적분 형태로 변환합니다.\n\n수학적 출발: 약형식 (Weak Form)\n\n원래 PDE(강형식, strong form)에 시험함수(test function) [math]를 곱하고 적분합니다:\n\n[equation]\n\n확산항에 부분 적분(integration by parts)을 적용하면:\n\n[equation]\n\n이것이 약형식입니다. 핵심 변화를 주목하세요:\n\n- 원래 2차 도함수가 필요했지만, 부분 적분 후 1차 도함수만 필요\n- 해의 연속성 요구사항이 완화됨 ([math])\n- 경계 조건이 자연스럽게 포함됨 (Neumann BC = 우변)\n\nGalerkin 근사\n\n해를 기저함수 [math]의 선형결합으로 표현합니다:\n\n[equation]\n\nGalerkin 방법에서는 시험함수와 기저함수를 같은 공간에서 택합니다 ([math]):\n\n[equation]\n\n행렬 형태로:\n\n[equation]\n\n- [math]: 질량 행렬 (mass matrix)\n- [math]: 강성 행렬 (stiffness matrix)\n- [math]: 경계/소스 벡터\n\n기저함수의 선택\n\n가장 많이 쓰이는 것은 라그랑주 다항식(Lagrange polynomial) 기반 요소입니다:\n\n| 요소 | 차수 | 절점 수 (2D 삼각형) | 특징 |\n|------|------|:---:|------|\n| P1 (Linear) | 1차 | 3 | 가장 기본, 저비용 |\n| P2 (Quadratic) | 2차 | 6 | 곡면 형상 표현 가능 |\n| P3 (Cubic) | 3차 | 10 | 고정밀, 비용 증가 |\n\n장단점\n\n장점:\n- 비정렬 격자에 자연스러움 - 삼각형/사면체 메시로 복잡한 형상 처리\n- 수학적으로 엄밀한 오차 추정(a priori / a posteriori error es…",
      "date_published": "2026-03-09T00:00:00.000Z",
      "tags": [
        "CFD",
        "FDM",
        "FEM",
        "FVM",
        "Numerical-Methods"
      ],
      "_reading_time": "13 min read",
      "_word_count": 2474
    },
    {
      "id": "https://tech-blog.dev/posts/numerical-dungeon",
      "url": "https://tech-blog.dev/posts/numerical-dungeon",
      "title": "Numerical Dungeon: 게임으로 배우는 수치해석",
      "summary": "CFL 조건부터 압축성 다상유동까지, 5단계 던전을 클리어하며 수치해석의 핵심 개념을 마스터해보세요.",
      "content_text": "Numerical Dungeon\n\n수치해석을 책으로만 배우면 지루합니다.\n5개의 스테이지를 클리어하며 핵심 개념을 체득해보세요.\n\nRules\n\n- HP 3칸 - 오답 시 HP가 1 감소합니다. HP가 0이 되면 Game Over!\n- XP - 정답마다 XP를 획득합니다. 뒤로 갈수록 보상이 큽니다.\n- 난이도 - Stage 12는 기본, 34는 핵심 이론, 5는 최종 보스입니다.\n\n각 스테이지에서는 먼저 개념 설명을 읽고, 이어지는 퀴즈에 답합니다.\n틀려도 상세한 해설을 제공하니 배움의 기회로 삼으세요.\n\n---\n\n---\n\nStage별 더 알아보기\n\n위 던전을 클리어했다면, 각 주제를 더 깊이 공부해보세요:\n\nStage 1: CFL Condition\nCFL 조건은 domain of dependence 개념과 직결됩니다.\n물리적 정보의 전파 속도보다 수치적 정보의 전파 속도가 빨라야 합니다.\n암시적(implicit) 스킴은 CFL 제한이 없지만, 비선형 시스템을 풀어야 하는 대가가 있습니다.\n\nStage 2: Numerical Diffusion\n수치 확산을 줄이려면 고차 스킴을 써야 하지만,\nGodunov 정리에 의해 비선형 제한자(limiter)가 필요합니다.\n대표적인 limiter: minmod, van Leer, superbee, MC limiter.\n\nStage 3: Godunov's Theorem\n이 정리가 TVD(Total Variation Diminishing), ENO, WENO 등\n현대 수치 기법의 발전을 촉발했습니다.\n핵심은 \"비선형성(nonlinearity)이 곧 고차+안정의 열쇠\"라는 것입니다.\n\nStage 4: Riemann Problem\nSod, Lax, Shu-Osher 등의 표준 테스트 문제로 Riemann solver를 검증할 수 있습니다.\n이 블로그의 Riemann 문제부터 Godunov 기법까지 글을 참고하세요.\n\nStage 5: Multiphase Pressure Oscillation\nAbgrall의 조건은 다상유동 수치해석의 출발점입니다.\n5-Equation Model 구현 가이드에서 실제 코드로 확인해보세요.",
      "date_published": "2026-03-08T00:00:00.000Z",
      "tags": [
        "CFD",
        "Numerical-Methods",
        "Interactive",
        "Education"
      ],
      "_reading_time": "3 min read",
      "_word_count": 486
    },
    {
      "id": "https://tech-blog.dev/posts/five-equation-model",
      "url": "https://tech-blog.dev/posts/five-equation-model",
      "title": "5-Equation Model 구현 가이드: Python으로 만드는 다상유동 솔버",
      "summary": "5-equation diffuse interface model을 Python으로 직접 구현하며, 1D 충격파-버블 상호작용 문제를 시뮬레이션합니다.",
      "content_text": "5-Equation Model 직접 구현하기\n\n이론만으로는 감이 오지 않는 법입니다.\n이 글에서는 1D 5-equation diffuse interface model을 Python으로 직접 구현하고,\n충격파가 기체 버블을 관통하는 문제를 시뮬레이션합니다.\n\n지배 방정식 정리\n\n1D 5-equation model의 보존 변수와 플럭스:\n\n[equation]\n\n5번째 방정식 ([math])은 비보존형이므로 별도 처리합니다:\n\n[equation]\n\n상태방정식: Stiffened Gas EOS\n\n두 유체 모두 stiffened gas EOS를 사용합니다:\n\n[equation]\n\n혼합 규칙(mixture rule)으로 전체 압력을 구합니다:\n\n[equation]\n\nPython 구현\n\n초기 설정과 EOS\n\n[code block]\n\nHLLC Flux 계산\n\n[code block]\n\n시간 적분 (1st order)\n\n[code block]\n\n초기 조건: 충격파-기체 버블\n\n[code block]\n\n주의사항\n\n1. [math]의 범위 제한\n\n[math]이 정확히 0이나 1이 되면 EOS 계산에서 division by zero가 발생합니다.\n항상 [math] ([math])으로 clipping합니다.\n\n2. 혼합 음속: Wood의 공식\n\n혼합 영역에서의 음속은 직관과 다르게 매우 낮아질 수 있습니다.\n이는 물리적으로 올바른 현상이며, CFL 조건에 영향을 줍니다.\n\n[equation]\n\n[math] 근처에서 [math]는 두 유체의 음속보다 훨씬 작아집니다.\n\n3. 고차 정확도로의 확장\n\n위 코드는 1차 정확도입니다. 실제 연구에서는:\n\n- MUSCL 재구성 + slope limiter로 2차\n- WENO 재구성으로 5차 이상\n- Runge-Kutta 시간 적분으로 시간 정확도 향상\n\n결과 해석\n\n시뮬레이션을 실행하면 충격파가 기체 버블을 압축하면서:\n\n1. 투과 충격파(transmitted shock)가 버블 뒤쪽으로 진행\n2. 반사 팽창파(reflected rarefaction)가 좌측으로 이동\n3. 버블이 급격히 압축되며 내부 압력 상승\n4. 후방 벽에서 제트(jet) 형성 (2D/3D에서)\n\n이 현상은 수중 폭발, 충격파 쇄석술 등에서 핵심적인 물리입니다.\n\n다음 단계\n\n다음 글에서는 수치해석의 기본 개념들을 게임처럼 배워보는\n인터랙티브 콘텐츠를 준비했습니다. 수치 안정성, CFL 조건 등을\n직접 체험해볼 수 있습니다.",
      "date_published": "2026-03-07T00:00:00.000Z",
      "tags": [
        "CFD",
        "Multiphase",
        "Diffuse-Interface",
        "Python",
        "Implementation"
      ],
      "_reading_time": "7 min read",
      "_word_count": 1346
    },
    {
      "id": "https://tech-blog.dev/posts/interface-capturing",
      "url": "https://tech-blog.dev/posts/interface-capturing",
      "title": "계면 포착 기법 비교: VOF vs Level Set vs Diffuse Interface",
      "summary": "압축성 다상유동에서 계면을 추적하는 세 가지 대표 기법의 원리, 장단점, 그리고 적용 사례를 비교합니다.",
      "content_text": "계면을 어떻게 다룰 것인가\n\n압축성 다상유동 시뮬레이션에서 가장 근본적인 질문 중 하나는\n\"두 유체 사이의 계면(interface)을 수치적으로 어떻게 표현할 것인가\"입니다.\n\n크게 세 가지 계열의 방법이 존재합니다:\n\n1. Volume of Fluid (VOF)\n2. Level Set\n3. Diffuse Interface (확산 계면)\n\n1. Volume of Fluid (VOF)\n\n원리\n\n각 셀에서 특정 유체가 차지하는 체적 분율(volume fraction) [math]를 추적합니다.\n\n[equation]\n\n[math]이면 해당 셀이 유체 A로 가득 차 있고,\n[math]이면 유체 B, [math]: 유체 A\n- [math]: 유체 B\n- [math]: 계면\n\nRe-initialization\n\n이류(advection) 과정에서 [math]는 부호 거리 함수의 성질([math])을 잃어갑니다.\n이를 복원하기 위해 re-initialization 방정식을 풉니다:\n\n[equation]\n\n여기서 [math]는 가상 시간(pseudo-time)입니다.\n\n곡률과 표면장력\n\nLevel Set의 큰 장점은 기하학적 양의 계산이 자연스럽다는 것입니다:\n\n[equation]\n\n표면장력은 CSF(Continuum Surface Force) 모델로 체적력으로 변환됩니다:\n\n[equation]\n\n장단점\n\n- 장점: 곡률/법선 계산 용이. 위상 변화(topology change) 자연스럽게 처리\n- 단점: 질량 보존 실패. Re-initialization 과정에서 계면 위치가 이동 가능\n\nCLSVOF: 두 방법의 결합\n\nVOF의 질량 보존 + Level Set의 기하학적 장점을 합친 Coupled Level Set and VOF (CLSVOF)\n방법이 많이 사용됩니다.\n\n3. Diffuse Interface Method (확산 계면)\n\n철학의 전환\n\n앞의 두 방법이 계면을 날카로운(sharp) 것으로 보는 반면,\n확산 계면법은 계면이 본질적으로 유한한 두께를 갖는다고 봅니다.\n\n이 접근에서는 별도의 계면 추적 방정식이 필요 없고,\n체적 분율이 보존 법칙 시스템의 일부로 포함됩니다.\n\n5-equation Model (Allaire et al., 2002; Kapila et al., 2001)\n\n가장 널리 사용되는 reduced model입니다:\n\n[equation]\n\n[equation]\n\n[equation]\n\n[equation]\n\n[equation]\n\n마지막 방정식이 핵심입니다. [math]의 이류 방정식이 비보존형(non-conservative)이라는 점.\n이것이 바로 계면에서의 압력 진동을 방지하는 열쇠입니다.\n\n왜 비보존형이 필요한가?\n\n[math]을 보존형으로 풀면:\n\n[equation]\n\n우변의 [math] 항이 이산화 과정에서 적절히 처리되지 않으면\nEOS mixing에 의한 비물리적 압력 진동이 발생합니다.\n\n비보존형 이류는 [math]이 계면에서 sharp하게 유지되면서도\n압력/속도 평형을 만족시킵니다.\n\n7-equation Model (Baer-Nunziato type)\n\n각 상이 독립적인 압력과 속도를 가질 수 있는 완전 비평형 모델입니다:\n\n[equation]\n\n이완(relaxation) 과정을 통해 압력/속도 평형으로 수렴시킵니다.\n수학적으로 가장 완전하지만 계산 비용이 높습니다.\n\n비교 요약\n\n| 기법 | 질량 보존 | 계면 선명도 | 위상 변화 | 구현 복잡도 | 압축성 적합도 |\n|------|:---------:|:----------:|:---------:|:----------:|:------------:|\n| VOF (PLIC) | O | 높음 | 어려움 | 높음 | 보통 |\n| Level Set | X | 높음 | 자연스러움 | 보통 | 보통 |\n| CLSVOF | O | 높음 | 자연스러움 | 매우 높음 | 보통 |\n| 5-eq Diffuse | O | 보통 | 자연스러움 | 낮음 | 매우 좋음 |\n| 7-eq Diffuse | O | 보통 | 자연스러움 | 높음 | 매우 좋음 |\n\n결론\n\n압축성 다…",
      "date_published": "2026-03-06T00:00:00.000Z",
      "tags": [
        "CFD",
        "Multiphase",
        "VOF",
        "Level-Set",
        "Diffuse-Interface"
      ],
      "_reading_time": "7 min read",
      "_word_count": 1294
    },
    {
      "id": "https://tech-blog.dev/posts/riemann-solvers",
      "url": "https://tech-blog.dev/posts/riemann-solvers",
      "title": "Riemann 문제부터 Godunov 기법까지 - 수치 플럭스의 핵심",
      "summary": "CFD의 심장부인 Riemann 문제를 파헤치고, Exact/Approximate Riemann Solver가 어떻게 수치 플럭스를 결정하는지 알아봅니다.",
      "content_text": "Riemann 문제: CFD의 심장\n\n유한체적법(Finite Volume Method)에서 셀 경계의 수치 플럭스(numerical flux)를\n어떻게 계산하느냐가 해의 정확도와 안정성을 좌우합니다.\n이 수치 플럭스를 결정하는 열쇠가 바로 Riemann 문제입니다.\n\nRiemann 문제란?\n\n초기 조건이 하나의 불연속면을 사이에 두고 좌우로 다른 상수 상태를 갖는 초기값 문제입니다:\n\n[equation]\n\n1차원 Euler 방정식에 대해 이 문제의 해석해는 세 개의 파(wave)로 구성됩니다:\n\n1. 좌향 파 (rarefaction 또는 shock)\n2. 접촉 불연속 (contact discontinuity)\n3. 우향 파 (rarefaction 또는 shock)\n\nGodunov의 아이디어 (1959)\n\nGodunov의 핵심 통찰은 간단하지만 강력합니다:\n\n> 셀 경계에서의 플럭스를 구하려면, 인접한 두 셀의 평균값을 좌우 상태로 놓고\n> Riemann 문제를 풀면 된다.\n\n유한체적법의 업데이트 공식:\n\n[equation]\n\n여기서 [math]가 바로 Riemann 문제의 해로부터 결정되는 수치 플럭스입니다.\n\nExact Riemann Solver\n\n정확한 Riemann 풀이는 Newton-Raphson 반복법으로 star region의 압력 [math]를 구합니다.\n좌우 파의 종류(shock/rarefaction)에 따라 Rankine-Hugoniot 관계식 또는\n등엔트로피 관계식을 적용합니다.\n\nShock wave 관계식 ([math], [math] or [math]):\n\n[equation]\n\n여기서 [math], [math] 입니다.\n\nRarefaction wave 관계식 ([math]):\n\n[equation]\n\n[math]는 다음 조건을 만족합니다:\n\n[equation]\n\nApproximate Riemann Solver: 왜 필요한가?\n\nExact solver는 반복 계산이 필요하므로 비쌉니다.\n실제 CFD 코드에서는 대부분 근사 Riemann 풀이(approximate Riemann solver)를 사용합니다.\n\nRoe Solver (1981)\n\nRoe는 비선형 Riemann 문제를 선형화(linearization)하여\n행렬 [math]에 대한 선형 Riemann 문제로 바꿉니다:\n\n[equation]\n\nRoe 평균(Roe average)을 사용하여 [math]를 구성합니다:\n\n[equation]\n\n장점: 접촉 불연속을 정확히 포착. 단점: 엔트로피 조건 위배 가능 (entropy fix 필요).\n\nHLLC Solver (Toro, 1994)\n\nHLL 풀이를 개선하여 접촉 불연속(Contact)을 복원한 것이 HLLC입니다.\n세 개의 파속(wave speed) [math], [math], [math]을 추정합니다:\n\n[equation]\n\nstar region 플럭스:\n\n[equation]\n\nHLLC는 구현이 간단하면서도 robust하여 압축성 다상유동 코드에서 가장 널리 사용됩니다.\n\nAUSM+ (Liou, 1996)\n\nAUSM 계열은 플럭스를 대류항(convective)과 압력항(pressure)으로 분리합니다:\n\n[equation]\n\n여기서 [math]은 셀 경계 질량 유량, [math]는 대류되는 양입니다.\n저마하 유동에서도 안정적이어서 all-speed scheme으로 확장하기 좋습니다.\n\n다상유동으로의 확장\n\n다상유동에서는 계면 양쪽의 EOS가 다르기 때문에,\nRiemann solver를 multi-material 버전으로 일반화해야 합니다.\n\n대표적인 접근:\n\n- Ghost Fluid Method: 계면 근처에서 상대편 유체의 ghost cell을 구성하고,\n  각 상에서 독립적인 single-material Riemann 문제를 품\n- HLLC for multi-material: star region에서 양쪽 EOS를 각각 적용하여\n  [math], [math]를 결정\n\n다음 글에서는 계면 포착 기법(VOF, Level Set, Diffuse Interface)을 비교합니다.",
      "date_published": "2026-03-05T00:00:00.000Z",
      "tags": [
        "CFD",
        "Riemann-Solver",
        "Godunov",
        "Numerical-Methods"
      ],
      "_reading_time": "5 min read",
      "_word_count": 938
    },
    {
      "id": "https://tech-blog.dev/posts/compressible-multiphase-intro",
      "url": "https://tech-blog.dev/posts/compressible-multiphase-intro",
      "title": "압축성 다상유동 CFD 입문: 왜 어렵고, 왜 중요한가",
      "summary": "압축성 다상유동 수치해석이 단상 유동과 근본적으로 다른 이유, 그리고 이 분야가 왜 아직도 활발한 연구 주제인지를 정리합니다.",
      "content_text": "압축성 다상유동이란?\n\n유체역학에서 다상유동(multiphase flow)은 두 가지 이상의 상(phase)이 공존하는 흐름을 말합니다.\n물과 공기, 연료 액적과 고온 가스, 수중 폭발에서의 기체 버블 등이 대표적입니다.\n\n여기에 압축성(compressibility)이 더해지면 문제가 급격히 복잡해집니다.\n각 상이 서로 다른 상태방정식(EOS)을 가지며, 계면(interface)을 사이에 두고\n충격파(shock wave)가 발생하고 반사, 투과, 굴절됩니다.\n\n단상 압축성 유동과의 차이\n\n단상 Euler 방정식은 다음과 같습니다:\n\n[equation]\n\n여기서 보존 변수 [math]이고,\n단일 EOS (예: ideal gas [math])로 시스템이 닫힙니다.\n\n다상유동에서는 계면을 경계로 EOS가 바뀝니다.\n기체 영역에서는 [math]인 ideal gas를,\n액체 영역에서는 stiffened gas EOS를 쓴다고 하면:\n\n[equation]\n\n문제는 수치적으로 계면 근처에서 두 EOS가 혼합(mixing)될 때 발생합니다.\n보존 변수 기반으로 단순히 평균을 내면 비물리적인 압력 진동(pressure oscillation)이 생깁니다.\n\n왜 어려운가: 핵심 난제 세 가지\n\n1. 계면에서의 압력 진동\n\n가장 유명한 문제입니다. 1994년 Abgrall이 지적한 이래,\n이 문제를 해결하는 것이 다상유동 수치 기법의 출발점이 되었습니다.\n\n> \"압축성 다상유동 수치해석의 역사는 곧 압력 진동과의 싸움의 역사이다.\"\n\n단순한 보존형 유한체적법(conservative finite volume)은 계면에서\n[math]가 중간값을 갖게 되면서 spurious oscillation을 만들어냅니다.\n\n2. 상태방정식의 다양성\n\n실제 문제에서는 ideal gas만으로 부족합니다.\n물은 Tait EOS 또는 stiffened gas EOS,\n고압 상태에서는 Jones-Wilkins-Lee (JWL) EOS,\n반응성 유동에서는 화학 반응과 결합된 EOS가 필요합니다.\n\n각 EOS에 대해 Riemann solver를 일반화해야 하므로 구현 복잡도가 크게 올라갑니다.\n\n3. 계면 추적 vs 계면 포착\n\n계면을 어떻게 다룰 것인가는 크게 두 가지 접근이 있습니다:\n\n| 접근법 | 방법 | 장점 | 단점 |\n|--------|------|------|------|\n| Sharp interface | Ghost Fluid, Front Tracking | 계면이 선명 | 위상 변화 처리 어려움 |\n| Diffuse interface | 5-equation, 6-equation model | 위상 변화 자연스럽게 처리 | 계면 스미어링 |\n\n왜 중요한가\n\n압축성 다상유동 시뮬레이션은 다양한 공학 분야에서 핵심입니다:\n\n- 수중 폭발(UNDEX): 함정 생존성 평가\n- 초음속 연소: 스크램젯 엔진 내부의 연료 분사/혼합\n- 의료 분야: 충격파 쇄석술(lithotripsy)에서의 기포 거동\n- 우주 추진: 극저온 추진제의 슬로싱(sloshing)\n\n다음 글에서는\n\n이 분야의 핵심 도구인 Riemann 문제와 Godunov 기법을 다룹니다.\n단상 Euler 방정식의 Riemann 문제를 먼저 이해한 뒤,\n이것이 다상유동으로 어떻게 확장되는지 살펴보겠습니다.",
      "date_published": "2026-03-04T00:00:00.000Z",
      "tags": [
        "CFD",
        "Multiphase",
        "Compressible-Flow",
        "Introduction"
      ],
      "_reading_time": "5 min read",
      "_word_count": 824
    },
    {
      "id": "https://tech-blog.dev/posts/draft-post",
      "url": "https://tech-blog.dev/posts/draft-post",
      "title": "[비공개] 아직 작성 중인 포스트",
      "summary": "이 포스트는 메인 목록에 나타나지 않아야 하며, 비밀번호로만 미리 볼 수 있습니다.",
      "content_text": "비밀 포스트\n\n이 내용은 관리자 비밀번호를 입력해야만 보입니다!\n\n[equation]",
      "date_published": "2026-03-04T00:00:00.000Z",
      "tags": [
        "Draft",
        "Test"
      ],
      "_reading_time": "1 min read",
      "_word_count": 31
    },
    {
      "id": "https://tech-blog.dev/posts/hello-blog",
      "url": "https://tech-blog.dev/posts/hello-blog",
      "title": "Contentlayer & LaTeX 블로그 시작하기",
      "summary": "Next.js 16와 Contentlayer를 이용한 기술 블로그 구축 가이드",
      "content_text": "안녕하세요!\n\n이 블로그는 Next.js와 Contentlayer를 사용하여 만들어졌습니다.\n\n수식 테스트 (LaTeX)\n\n인라인 수식: [math]\n\n블록 수식:\n[equation]\n\n코드 테스트\n\n[code block]",
      "date_published": "2026-03-03T00:00:00.000Z",
      "tags": [
        "Next.js",
        "Contentlayer",
        "MDX",
        "LaTeX"
      ],
      "_reading_time": "1 min read",
      "_word_count": 71
    }
  ]
}