본문 바로가기
project/openfoam 기반 시뮬레이터

openfoam - 배경지식

by El_Pong 2025. 8. 12.
728x90

목차

제1장: 도입 (Introduction)

  • 솔루션 개요 및 CFD 접근법

제2장: 유체역학 (Fluid Dynamics)

  • 압력, 속도, 표면 유동 (2.1-2.3)
  • 질량보존과 시간 미분 (2.4-2.5)
  • 표면 힘과 운동량 보존 (2.6-2.7)
  • 체적 유동과 보존성 (2.8-2.9)
  • 유체 변형, 와도, 뉴턴 유체 (2.10-2.12)
  • 비압축성 유동과 확산 (2.13-2.15)
  • 온도, 내부 에너지, 열전달 (2.16-2.20)
  • 스케일 유사성과 방정식 요약 (2.21-2.25)

제3장: 수치해법 (Numerical Method)

  • 유한체적 개념과 계산 격자 (3.1-3.6)
  • 라플라시안 및 대류 이산화 (3.7-3.14)
  • 구배 이산화와 시간 적분 (3.15-3.24)

제4장: 경계조건 (Boundary Conditions)

  • 경계 격자와 기본 조건들 (4.1-4.5)
  • 고급 경계조건과 특수 처리 (4.6-4.18)

제5장: 알고리즘과 솔버 (Algorithms and Solvers)

  • 행렬 구조와 반복 방법 (5.1-5.10)
  • 압력-속도 결합과 PIMPLE 알고리즘 (5.11-5.23)

제6장: 난류 입문 (Introduction to Turbulence)

  • Reynolds 실험과 난류 특성 (6.1-6.15)

제7장: Reynolds 평균 난류 모델링

  • k-ε 모델과 벽함수 (7.1-7.15)

제8장: 샘플 문제 (Sample Problems)

  • 실제 공학 문제 해석 사례 (8.1-8.10)

 

내용

2장: CFD 일반 원리 상세 해설

2.1 전산유체역학의 기본 개념

CFD(Computational Fluid Dynamics) 정의

전산유체역학은 수치적 방법과 알고리즘을 사용하여 유체 흐름, 열전달, 질량전달, 화학반응 및 관련 현상을 분석하고 해결하는 과학입니다. CFD는 복잡한 유체 현상을 컴퓨터를 통해 시뮬레이션하여 실험이 어렵거나 불가능한 상황에서도 정확한 예측을 가능하게 합니다. CFD

CFD의 세 가지 기본 원리

모든 CFD 해석은 다음 세 가지 물리 법칙에 기반합니다: Discover Engineering

  1. 질량 보존의 법칙 (연속성 방정식)
    • 질량은 생성되거나 소멸되지 않음
    • 유입 질량 = 유출 질량 + 축적 질량
  2. 운동량 보존의 법칙 (Navier-Stokes 방정식)
    • Newton의 제2법칙을 유체에 적용
    • 힘 = 질량 × 가속도
  3. 에너지 보존의 법칙 (에너지 방정식)
    • 에너지는 형태만 변할 뿐 총량은 보존됨
    • 열전달과 유동의 상호작용 기술

2.2 지배방정식의 수학적 표현

연속성 방정식 (질량보존)

압축성 유동:

 
 
∂ρ/∂t + ∇·(ρu) = 0

비압축성 유동 (ρ = 상수):

 
 
∇·u = 0

Navier-Stokes 방정식 (운동량보존)

 
 
∂u/∂t + (u·∇)u = -1/ρ ∇p + ν∇²u + g + f_body/ρV

여기서:

  • u: 속도 벡터 [m/s]
  • ρ: 밀도 [kg/m³]
  • p: 압력 [Pa]
  • ν: 동점성계수 [m²/s]
  • g: 중력가속도 [m/s²]

에너지 방정식

 
 
∂E/∂t + ∇·(uE) = -∇·(pu)/ρ + ∇·(k∇T) + ∇·(τ·u) + Q/ρ

여기서:

  • E: 총 에너지
  • T: 온도
  • k: 열전도계수
  • τ: 점성 응력 텐서
  • Q: 열원

2.3 유체의 물리적 특성

뉴턴 유체

대부분의 일반적인 유체(물, 공기, 오일 등)는 뉴턴 유체로, 전단응력과 전단률이 선형 관계를 가집니다: WikipediaAnsys

 
 
τ = μ(∂u/∂y)

압축성과 비압축성

  • 압축성 유동: 밀도 변화가 중요한 경우 (Ma > 0.3, 고속 유동)
  • 비압축성 유동: 밀도를 상수로 가정 (Ma < 0.3, 저속 유동)

점성과 무점성

  • 점성 유동: 실제 유체의 점성 효과 고려
  • 무점성 유동: 점성을 무시한 이상적 접근법 (Euler 방정식)

2.4 무차원 수와 유사성 법칙

Reynolds 수: 관성력과 점성력의 비

 
 
Re = ρUL/μ = UL/ν
  • Re < 2300: 층류
  • Re > 4000: 난류

Prandtl 수: 운동량 확산과 열확산의 비

 
 
Pr = ν/α = μcp/k

Mach 수: 유동 속도와 음속의 비

 
 
Ma = U/c

Froude 수: 관성력과 중력의 비

 
 
Fr = U/√(gL)

3장: 수치해석 방법론

3.1 유한체적법의 핵심 개념

보존법칙의 적분형

유한체적법은 보존법칙을 제어체적에 직접 적용합니다: Wikipedia +2

 
 
∂/∂t ∫_V ρφ dV + ∮_S ρφ(v⃗·n⃗) dS = ∮_S Γ∇φ·n⃗ dS + ∫_V Sφ dV

이 방정식의 각 항목:

  • 축적항: 시간에 따른 변화
  • 대류항: 유동에 의한 이동
  • 확산항: 분자 확산에 의한 이동
  • 생성항: 체적 내 생성/소멸

이산화 과정

  1. 공간 이산화: 계산 영역을 유한한 제어체적으로 분할
  2. 적분 근사: 각 체적에서 보존법칙을 적분하여 대수방정식으로 변환
  3. 플럭스 계산: 체적 경계면에서의 유량 계산
  4. 선형 시스템 해결: 연립 대수방정식 해결 CFDAnsys

3.2 공간 이산화 기법

대류항 처리

중앙차분법 (Central Difference):

 
 
φ_face = (φ_P + φ_N)/2
  • 장점: 2차 정확도
  • 단점: 수치 진동 발생 가능

상류차분법 (Upwind):

 
 
φ_face = φ_upwind
  • 장점: 안정성 우수
  • 단점: 수치 확산 발생

QUICK (Quadratic Upwind Interpolation):

 
 
φ_face = φ_U + α(φ_D - φ_U) + β(φ_DD - 2φ_D + φ_U)
  • 3차 정확도의 상류 가중 기법

확산항 처리

중앙차분법이 표준:

 
 
∇φ·n = (φ_N - φ_P)/|d_PN|

3.3 시간 적분 기법

양해법 (Explicit Methods)

Euler 전진법:

 
 
φ^{n+1} = φ^n + Δt·R(φ^n)

음해법 (Implicit Methods)

Euler 후진법:

 
 
φ^{n+1} = φ^n + Δt·R(φ^{n+1})
  • 무조건 안정하지만 큰 선형 시스템 해결 필요 Wikipedia

Crank-Nicolson (2차 정확도):

 
 
φ^{n+1} = φ^n + (Δt/2)[R(φ^n) + R(φ^{n+1})]

Wikipedia

3.4 격자 생성과 품질

격자 유형

  1. 구조격자 (Structured)
    • 규칙적 연결성 (i,j,k 인덱싱)
    • 높은 계산 효율성
    • 복잡한 형상 처리 어려움
  2. 비구조격자 (Unstructured)
    • 임의 형상 처리 가능
    • 적응적 세분화 용이
    • 연결성 테이블 필요
  3. 혼합격자 (Hybrid)
    • 경계층: 육면체/프리즘
    • 내부: 사면체
    • 최적의 계산 효율과 형상 적응성

격자 품질 지표

  • 종횡비 (Aspect Ratio): < 100:1 권장
  • 왜곡도 (Skewness): < 0.85 양호
  • 직교성 (Orthogonality): > 15° 권장
  • 부피 변화율: 인접 셀 간 2:1 이하

4장: OpenFOAM 기본 개념

4.1 OpenFOAM 개요와 철학

Open Field Operation And Manipulation

OpenFOAM은 C++ 기반의 오픈소스 CFD 툴박스 CFD Direct로, 150만 라인 이상의 코드로 구성되어 있습니다. OpenFOAMWikipedia 객체지향 프로그래밍을 통해 편미분방정식의 수학적 형태를 소프트웨어에서 그대로 구현할 수 있는 것이 특징입니다.

핵심 설계 철학

  1. 투명성: 모든 소스 코드 공개로 알고리즘 완전 검증 가능
  2. 확장성: 라이브러리 기반 구조로 새로운 솔버 개발 용이
  3. 이식성: Linux, Windows, macOS 등 다양한 플랫폼 지원
  4. 표준 준수: 유한체적법과 현대 CFD 표준 채택 Wikipedia

4.2 OpenFOAM 아키텍처

디렉토리 구조

 
 
OpenFOAM-v13/
├── src/              # 핵심 라이브러리
├── applications/     # 솔버 및 유틸리티
├── tutorials/        # 예제 케이스
├── doc/             # 문서
└── etc/             # 설정 파일

핵심 네임스페이스

  • fvm: 암시적(implicit) 연산자
  • fvc: 명시적(explicit) 연산자
  • fvMatrix: 선형방정식 시스템 관리 OpenFOAMWiki

방정식 표현 예시

연속성 방정식:

 
 
cpp
fvScalarMatrix pEqn(fvm::laplacian(rAU, p));

운동량 방정식:

 
 
cpp
fvVectorMatrix UEqn
(
    fvm::ddt(U)
  + fvm::div(phi, U)
  - fvm::laplacian(nu, U)
);

OpenFOAM

4.3 모듈형 솔버 시스템

OpenFOAM v11 이후의 통합 솔버

foamRun이 다양한 솔버 모듈을 로드하는 통합 실행기: CFDCFD

 
 
bash
foamRun -solver incompressibleFluid    # 비압축성 유동
foamRun -solver compressibleFluid      # 압축성 유동  
foamRun -solver multiphaseEuler        # 다상 유동
foamRun -solver solid                  # 고체 열전달

주요 솔버 모듈

  1. incompressibleFluid: 비압축성 난류 유동
    • 정상/비정상 상태
    • SIMPLE/PIMPLE 알고리즘
    • 다양한 난류 모델 지원
  2. compressibleFluid: 압축성 유동
    • 밀도 변화 고려
    • 충격파, 초음속 유동
    • 열전달 연성 해석
  3. multiphaseEuler: 다상 유동
    • 기포류, 입자류
    • 상 간 상호작용 모델링

4.4 OpenFOAM 워크플로우

케이스 설정 구조

 
 
case/
├── system/
│   ├── controlDict      # 실행 제어 설정
│   ├── fvSchemes        # 수치 기법 설정
│   ├── fvSolution       # 선형 솔버 설정
│   └── functions        # 후처리 함수
├── constant/
│   ├── polyMesh/        # 격자 정보
│   ├── physicalProperties  # 물성 정보
│   └── turbulenceProperties # 난류 모델 설정
└── 0/                   # 초기/경계 조건
    ├── U                # 속도
    ├── p                # 압력
    └── ...

해석 단계별 프로세스

  1. 전처리
     
     
    bash
    blockMesh              # 기본 격자 생성
    snappyHexMesh         # 복잡 형상 격자 생성
    checkMesh             # 격자 품질 검사
  2. 해석 실행
     
     
    bash
    foamRun -solver incompressibleFluid
    # 또는 레거시 방식
    simpleFoam > log.simpleFoam 2>&1
  3. 후처리
     
     
    bash
    paraFoam              # ParaView 시각화
    foamPostProcess -func surfaces  # 데이터 추출
    sample                # 라인/면 샘플링

SimScale +2

5장: 경계조건과 알고리즘

5.1 경계조건의 분류와 수학적 처리

수학적 경계조건 분류

  1. Dirichlet 경계조건 (제1종)
     
     
    u|_Γ = g(x,t)
    예: 고정 속도, 고정 온도 CadenceResolved Analytics
  2. Neumann 경계조건 (제2종)
     
     
    ∂u/∂n|_Γ = h(x,t)
    예: 열유속 지정, 전단응력 지정 Resolved AnalyticsWikipedia
  3. Robin 경계조건 (제3종)
     
     
    αu + β∂u/∂n|_Γ = γ(x,t)
    예: 대류 열전달 Resolved Analytics +2

OpenFOAM 경계조건 구현

고정값 (fixedValue):

 
 
cpp
inlet
{
    type            fixedValue;
    value           uniform (1 0 0);
}

고정구배 (fixedGradient):

 
 
cpp
wall
{
    type            fixedGradient;
    gradient        uniform 0;
}

5.2 압력-속도 결합 알고리즘

SIMPLE 알고리즘 (Semi-Implicit Method for Pressure-Linked Equations)

  1. 압력 추정값으로 운동량 방정식 해결
  2. 연속성 방정식에서 압력 보정 방정식 유도
  3. 압력과 속도 보정
  4. 수렴까지 반복 Autodesk Knowledge Network

PIMPLE 알고리즘 (PISO + SIMPLE)

비정상 유동을 위한 개선된 알고리즘:

  • PISO의 빠른 수렴성
  • SIMPLE의 안정성 결합
  • 큰 시간 간격 사용 가능 OpenFOAM +2

알고리즘 제어 매개변수

fvSolution의 SIMPLE 설정:

 
 
SIMPLE
{
    nNonOrthogonalCorrectors 0;
    consistent               yes;
    
    residualControl
    {
        p               1e-4;
        U               1e-4;
    }
    
    relaxationFactors
    {
        fields
        {
            p               0.3;
        }
        equations
        {
            U               0.7;
        }
    }
}

5.3 선형 솔버와 수렴 제어

반복 솔버 선택

압력 방정식 (대칭): arXivCOMSOL

 
 
p
{
    solver          PCG;           # Preconditioned Conjugate Gradient
    preconditioner  DIC;           # Diagonal Incomplete Cholesky
    tolerance       1e-06;
    relTol          0.05;
}

속도 방정식 (비대칭): arXivCOMSOL

 
 
U
{
    solver          PBiCGStab;     # Preconditioned BiConjugate Gradient
    preconditioner  DILU;          # Diagonal Incomplete LU
    tolerance       1e-08;
    relTol          0.1;
}

6장: 난류 모델링

6.1 난류의 물리적 특성

Reynolds 실험 (1883년)

Osborne Reynolds가 수행한 유명한 실험으로 난류 천이 현상을 최초로 정량화했습니다: Wikipedia

  • 층류: 질서정연한 유동 (Re < 2300)
  • 천이: 불안정한 중간 상태 (2300 < Re < 4000)
  • 난류: 혼란스러운 3차원 유동 (Re > 4000) Medium

난류의 특징

  1. 비정상성: 시간에 따라 불규칙하게 변화
  2. 3차원성: 모든 방향으로 복잡한 운동
  3. 확산성: 운동량, 열, 물질의 빠른 혼합
  4. 소산성: 운동 에너지를 열로 변환
  5. 다중 스케일: 큰 와동에서 작은 와동까지 광범위한 스케일 IdealSimulations

에너지 캐스케이드

Kolmogorov(1941)의 이론:

  • 에너지 함유 범위: 큰 와동, 기하학적 형상에 의존
  • 관성 부범위: 에너지 전달, k^(-5/3) 법칙
  • 점성 소산 범위: 작은 와동, 점성에 의한 에너지 소산 Fidelis Engineering Associates

6.2 RANS (Reynolds-Averaged Navier-Stokes) 모델링

Reynolds 분해

순간값을 평균값과 변동값으로 분해:

 
 
u = ū + u'
p = p̄ + p'

RANS 방정식

시간 평균된 운동량 방정식:

 
 
∂ū_i/∂t + ū_j ∂ū_i/∂x_j = -1/ρ ∂p̄/∂x_i + ν ∂²ū_i/∂x_j∂x_j - ∂(u'_i u'_j)/∂x_j

마지막 항 -∂(u'_i u'_j)/∂x_j가 Reynolds 응력으로, 모델링이 필요한 부분입니다.

2방정식 k-ε 모델

난류 운동 에너지 (k)와 소산율 (ε) 방정식:

k 방정식:

 
 
∂k/∂t + U_j ∂k/∂x_j = P_k - ε + ∂/∂x_j[(ν + ν_t/σ_k) ∂k/∂x_j]

ε 방정식:

 
 
∂ε/∂t + U_j ∂ε/∂x_j = C_ε1 P_k ε/k - C_ε2 ε²/k + ∂/∂x_j[(ν + ν_t/σ_ε) ∂ε/∂x_j]

난류 점성계수:

 
 
ν_t = C_μ k²/ε

Fidelis Engineering Associates

k-ω SST 모델

Shear Stress Transport 모델로 벽면 근처에서 우수한 성능: ResearchGate

  • k-ω 모델 (벽 근처)와 k-ε 모델 (자유류) 결합
  • 역압력구배에서의 박리 예측 개선
  • 항공 분야에서 널리 사용 Fidelis Engineering Associates

6.3 벽함수와 근벽 처리

벽법칙 (Wall Law)

벽 근처에서의 속도 분포:

점성 하층 (y⁺ < 5):

 
 
u⁺ = y⁺

로그법칙 영역 (30 < y⁺ < 300):

 
 
u⁺ = 1/κ ln(y⁺) + B

여기서 κ = 0.41 (Karman 상수), B = 5.0

y⁺ 값의 중요성

 
 
y⁺ = yu_τ/ν = y√(τ_w/ρ)/ν
  • y⁺ < 1: Low-Re 접근법, 점성 하층까지 해상
  • 30 < y⁺ < 300: 벽함수 사용
  • y⁺ > 300: 부정확한 결과

OpenFOAM 벽함수 설정

 
 
cpp
wall
{
    type            nutkWallFunction;
    value           uniform 0;
}

6.4 고급 난류 해석 기법

LES (Large Eddy Simulation)

큰 난류 구조만 직접 해석하고 작은 구조는 모델링: ResearchGate

DNS (Direct Numerical Simulation)

모든 난류 스케일을 직접 해석:

  • 모델링 없이 Navier-Stokes 방정식 직접 해결
  • 가장 정확하지만 극도로 높은 계산 비용
  • Re⁴에 Wikipedia 비례하는 계산량 Wikipedia +3

7장: 실제 응용 사례

7.1 외부 유동 해석

자동차 공기역학

모터바이크 예제 (motorBike tutorial):

  • 복잡한 3차원 형상 주위 유동
  • snappyHexMesh를 이용한 격자 생성
  • k-ω SST 난류 모델 사용
  • 항력계수, 압력분포 예측 CFD +2

해석 설정:

 
 
bash
# 격자 생성
snappyHexMesh -overwrite

# 병렬 해석 실행  
decomposePar
mpirun -np 4 foamRun -solver incompressibleFluid -parallel

# 결과 병합
reconstructPar

원형 실린더 주위 유동

Reynolds 수에 따른 유동 패턴 변화:

  • Re < 5: 정상 대칭 유동
  • 5 < Re < 40: 정상 비대칭 유동
  • 40 < Re < 200: 주기적 와동 방출 (Kármán vortex street)
  • Re > 200: 3차원 난류 유동

7.2 내부 유동 해석

벤츄리관 유동

수축-확대 관로에서의 압력 회복:

  • Bernoulli 방정식 검증
  • 압력 손실 예측
  • 유량 측정 원리 이해

후방계단 유동 (Backward Facing Step)

박리와 재부착 현상:

  • 박리점에서의 와동 형성
  • 재부착 길이 예측
  • 난류 모델별 성능 비교

7.3 열전달 해석

실내 난방 시스템

자연대류와 강제대류 복합:

  • 부력 효과 (Boussinesq 근사)
  • 복사 열전달 모델링
  • 온도 분포와 유동 패턴 해석

설정 예시:

 
 
cpp
// 부력항 추가
g               uniform (0 -9.81 0);
beta            3e-3;         // 열팽창계수

// Boussinesq 근사
rho             [rho0*(1-beta*(T-T0))];

7.4 다상 유동 해석

댐 붕괴 (Dam Break)

VOF(Volume of Fluid) 방법:

  • 자유 표면 추적
  • 표면 장력 효과
  • 충격파와 공기 연행 현상

interFoam 솔버 사용:

 
 
bash
foamRun -solver incompressibleVoF

기포 상승

부력에 의한 기포 운동:

  • 기포 형상 변화
  • 항력 계수 예측
  • 질량 전달 현상

7.5 터보머시너리 해석

원심 펌프

회전 기계의 특수 처리:

  • Multiple Reference Frame (MRF)
  • Sliding Mesh Interface
  • 회전 좌표계에서의 원심력 및 코리올리 힘
 
 
cpp
// MRF 설정
MRF
{
    rotor
    {
        cellZone        rotor;
        active          yes;
        origin          (0 0 0);
        axis            (0 0 1);
        omega           constant 314.159;  // rad/s
    }
}

8장: 고급 주제와 최적화

8.1 병렬 처리

영역 분할 (Domain Decomposition)

 
 
bash
# 4개 프로세서로 분할
decomposePar -method scotch

# 병렬 실행
mpirun -np 4 foamRun -solver incompressibleFluid -parallel

# 결과 재결합
reconstructPar

분할 방법 선택

  • scotch: 로드 밸런싱 우수
  • simple: 단순한 방향별 분할
  • hierarchical: 계층적 분할

8.2 격자 적응화

동적 격자 세분화

해의 구배가 큰 영역에서 자동 격자 세분화:

 
 
cpp
dynamicFvMesh   dynamicRefineFvMesh;

// 세분화 기준
refinementControls
{
    lowerRefineLevel    0.01;
    upperRefineLevel    0.99;
    unrefineLevel       10;
    nBufferLayers       1;
    maxCells            200000;
}

8.3 사용자 정의 솔버 개발

새로운 솔버 생성

기존 솔버를 복사하여 수정:

 
 
bash
# 솔버 복사
cp -r $FOAM_SOLVERS/incompressibleFluid/simpleFoam mySimpleFoam

# 컴파일
cd mySimpleFoam
wmake

사용자 정의 경계조건

새로운 물리 모델을 위한 경계조건 개발:

 
 
cpp
class myBoundaryCondition
:
    public fixedValueFvPatchScalarField
{
    // 사용자 정의 구현
};

8.4 결과 검증과 불확실성 정량화

격자 독립성 연구

세 가지 격자 레벨에서 GCI(Grid Convergence Index) 계산:

 
 
GCI = 1.25 × |ε₁₂|/(r^p - 1)

실험 데이터와의 비교

공인된 벤치마크 케이스:

  • Ahmed body (자동차 공기역학)
  • Square cylinder (블러프 바디)
  • Channel flow (채널 유동)
  • Periodic hills (주기적 언덕)

댓글