AIDT 온디바이스 STEM 유체-구조 연성(FSI) 보텍스 유도 진동(VIV) 록인 서보 엔진

폰 카르만 와류 방출 주파수 \\(f_s = St \\cdot U / D\\)와 고유 진동수 동기화(Lock-in), 밴 더 폴 웨이크 오실레이터 10,000Hz C# 엔진

1. 개요: 유체 흐름 속 기계 구조물의 치명적 공진 현상과 동역학적 제어

원형 실린더나 유선형 구조물이 균일한 유체 흐름에 노출되면 후류에 교번하는 폰 카르만 와류 거리(von Kármán Vortex Street)가 형성되며 구조물에 주기적인 횡방향 양력(Lift force)을 유발합니다. 유속이 변화하여 와류 방출 주파수가 구조물의 구조 고유 진동수(\(f_n\)) 근처에 도달하면, 유체 와류 주파수가 구조물의 진동수에 고정되는 동기화(Lock-in / Synchronization) 현상이 발생합니다.

이 록인 영역에서는 진동 진폭이 직경의 수십%까지 급격히 증폭되어 해양 시추 라이저, 교량 케이블, 초음속 미사일 동체 등에 심각한 피로 파괴를 초래합니다. 본 백서에서는 밴 더 폴(van der Pol) 후류 오실레이터와 구조 진동 방정식의 양방향 연성을 모델링하고, 능동 압전 댐퍼로 록인 진동을 억제하는 10,000Hz 0-Alloc C# FSI 서보 엔진을 제시합니다.

2. 밴 더 폴 후류 연성 및 록인(Lock-in) 조건 수식 모델

직경 \(D\), 단위 길이당 질량 \(m\)을 가진 원통의 횡방향 변위 \(y(t)\)와 양력 계수 오실레이터 \(q(t)\)의 연성 미분방정식은 다음과 같습니다:

\\[ m \\ddot{y} + (c_s + c_f) \\dot{y} + k_s y = \\frac{1}{4} \\rho U^2 D C_{L0} q \\]
\\[ \\ddot{q} + \\epsilon \\omega_s (q^2 - 1) \\dot{q} + \\omega_s^2 q = \\frac{A}{D} \\ddot{y} \\]

여기서 \(\\omega_s = 2\\pi f_s = 2\\pi \\frac{St \\cdot U}{D}\)는 정지 실린더의 스트라우스(Strouhal) 와류 주파수(\(St \\approx 0.2\)), \(C_{L0}\)는 정적 양력 진폭, \(\\epsilon, A\)는 실험적 후류 파라미터입니다. 무차원 유속(Reduced Velocity) \(U_r = \\frac{U}{f_n D}\)가 \(4 < U_r < 8\) 범위에 진입하면 자려 진동(Self-excited oscillation) 형태의 록인이 발생하며, 실효 감쇠비가 음수가 되어 진폭이 포화 한계까지 급증합니다.

3. 실시간 FSI 능동 와류 억제 서보 아키텍처 다이어그램

graph TD A[유체 유동 U_inf] --> B[폰 카르만 와류 방출 주파수 f_s = St * U / D] B --> C[구조물 횡진동 y_ddot + 2*zeta*w_n*y_dot + w_n^2*y] C --> D{무차원 유속 4 < U_r < 8 록인 발생?} D -- Yes --> E[대진폭 공진 진동 발생 y / D ~ 0.5] D -- No --> F[미세 감쇠 진동 유지] E --> FSI_Sensors[가속도계 & 표면 압력 센서 측정] FSI_Sensors --> G[10,000Hz 0-Alloc C# 상태 피드백 LQG 제어기] G --> H[능동 질량 댐퍼 TMD & 합성 젯 액추에이터 제어] H --> C

4. 고성능 0-Alloc C# FSI 록인 제어 서보 구현

후류 오실레이터 상태를 룽게-쿠타(RK4)로 실시간 적분하고 능동 감쇠력을 인가하는 0-Alloc C# 클래스입니다:

using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Stem.FluidStructureInteraction
{
    public readonly record struct FsiParameters(
        double CylinderDiameterD, // m (예: 0.1 m)
        double MassPerLengthM,    // kg/m
        double NaturalFreqFn,     // Hz (고유 진동수 예: 5.0 Hz)
        double StructuralDampingZeta, // 구조 감쇠비 ~ 0.01
        double FluidDensityRho,   // kg/m^3 (공기 1.225, 해수 1025)
        double StrouhalSt         // 0.2
    );

    public ref struct FsiServoState
    {
        public double FlowVelocityU;
        public double ReducedVelocityUr;
        public double StrouhalFreqFs;
        public double DisplacementY;
        public double VelocityY;
        public double WakeVariableQ;
        public double ActiveControlForce;
        public bool IsLockedIn;
    }

    public static class VortexInducedVibrationServo
    {
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public static void StepServo(
            in FsiParameters p,
            double flowVelocityU,
            double activeDamperGain,
            double dt,
            ref FsiServoState state)
        {
            state.FlowVelocityU = flowVelocityU;

            // 1. 무차원 유속 및 와류 주파수 계산
            state.ReducedVelocityUr = flowVelocityU / (p.NaturalFreqFn * p.CylinderDiameterD);
            state.StrouhalFreqFs = (p.StrouhalSt * flowVelocityU) / p.CylinderDiameterD;

            // 록인 영역 판정 (Ur: 4.5 ~ 8.0)
            state.IsLockedIn = (state.ReducedVelocityUr >= 4.5 && state.ReducedVelocityUr <= 8.0);

            // 2. 외력: 와류 양력 F_lift = 0.5 * rho * U^2 * D * C_L0 * q
            double dynPressure = 0.5 * p.FluidDensityRho * flowVelocityU * flowVelocityU;
            double liftForce = dynPressure * p.CylinderDiameterD * 0.3 * state.WakeVariableQ;

            // 3. 능동 제어력 (속도 비례 댐핑)
            state.ActiveControlForce = -activeDamperGain * state.VelocityY;

            // 4. 구조 가속도 계산: m * y_ddot = -c * y_dot - k * y + F_lift + F_ctrl
            double omegaN = 2.0 * Math.PI * p.NaturalFreqFn;
            double kStruct = p.MassPerLengthM * omegaN * omegaN;
            double cStruct = 2.0 * p.StructuralDampingZeta * p.MassPerLengthM * omegaN;

            double netForce = -cStruct * state.VelocityY - kStruct * state.DisplacementY + liftForce + state.ActiveControlForce;
            double accelY = netForce / p.MassPerLengthM;

            // 5. 구조 상태 오일러-신플렉틱 수치 적분
            state.VelocityY += accelY * dt;
            state.DisplacementY += state.VelocityY * dt;

            // 6. 밴 더 폴 후류 오실레이터 업데이트: q_ddot + eps * ws * (q^2 - 1) * q_dot + ws^2 * q = (A / D) * accelY
            double omegaS = 2.0 * Math.PI * state.StrouhalFreqFs;
            double eps = 0.3;
            double aConst = 12.0;
            double qAccel = -eps * omegaS * (state.WakeVariableQ * state.WakeVariableQ - 1.0) * state.WakeVariableQ 
                            - (omegaS * omegaS) * state.WakeVariableQ + (aConst / p.CylinderDiameterD) * accelY;

            state.WakeVariableQ += qAccel * dt * 0.1;
            state.WakeVariableQ = Math.Clamp(state.WakeVariableQ, -2.0, 2.0);
        }
    }
}

5. 교육 연수 및 방위 항공/해양 체계 적용 지침

방통대 직무연수 및 국방 비행체/잠수함 잠망경 방호

  • 물리/기계 교과 지도: 유체 동역학의 레이놀즈 수, 와류 박리 주기, 공진과 자려 진동, 능동 동흡진기(Active TMD) 피드백 제어 원리를 3차원 시뮬레이터로 교육.
  • 국방 잠수함 마스트 및 발사관 공력 안정성: 고속 항행 중 잠망경 마스트의 VIV 유기 소음 억제를 통한 수중 음향 피탐율(소나 반사율) 극소화.