MoonFluid

    Download zip
    Version
    0.1.0
    License
    Apache-2.0
    Last updated
    10 months ago
    Downloads
    43

    No dependencies

    #MoonFluid - Fluid Mechanics Calculation Library

    MoonFluid is a comprehensive fluid mechanics calculation library written in Moonbit, providing functions for hydrostatics, fluid dynamics, pipe flow, open channel flow, and aerodynamic calculations.


    #Features

    #Fluid Statics

    • Hydrostatic Pressure: Pressure calculation in static fluids (p = p₀ + ρgh)
    • Buoyant Force: Buoyancy calculations (F_b = ρgV)
    • Total Pressure: Pressure on submerged surfaces
    • Pressure Center: Center of pressure on submerged planes
    • Manometry: Fluid pressure measurement calculations


    #Continuity and Bernoulli

    • Continuity Equation: Mass and volume flow rate conservation (Q = A₁v₁ = A₂v₂)
    • Bernoulli Equation: Energy conservation in fluid flow (p/ρg + v²/2g + z = constant)
    • Energy Head: Total head calculations in flow systems
    • Velocity Head: Kinetic energy head calculations


    #Flow Characteristics

    • Reynolds Number: Flow regime classification (Re = ρvD/μ)
    • Flow Regime Analysis: Laminar vs turbulent flow determination
    • Froude Number: Open channel flow regime analysis (Fr = v/√(gh))
    • Critical Flow: Critical flow conditions and analysis


    #Pipe Flow

    • Laminar Flow: Hagen-Poiseuille flow calculations
    • Turbulent Flow: Darcy-Weisbach friction loss calculations
    • Local Losses: Sudden expansion, contraction, and fitting losses
    • Total Head Loss: Combined friction and local losses
    • Pipe Sizing: Flow rate and diameter calculations


    #Open Channel Flow

    • Manning Equation: Open channel flow calculations
    • Hydraulic Radius: Channel geometry calculations
    • Normal Depth: Uniform flow depth calculations
    • Critical Depth: Critical flow depth analysis


    #Aerodynamics and Forces

    • Drag Force: Fluid resistance calculations (F_D = ½ρv²AC_D)
    • Lift Force: Aerodynamic lift calculations (F_L = ½ρv²AC_L)
    • Drag Coefficient: Flow resistance coefficients
    • Lift Coefficient: Aerodynamic lift coefficients


    #Dimensionless Numbers

    • Weber Number: Surface tension effects (We = ρv²L/σ)
    • Mach Number: Compressible flow analysis (Ma = v/a)
    • Euler Number: Pressure difference analysis (Eu = Δp/ρv²)
    • Dimensionless Analysis: Flow similarity and scaling


    #Mathematical Utilities

    • Power Functions: Square, cube, cube root calculations
    • Logarithmic Functions: Base-10 logarithm approximations
    • Trigonometric Functions: Advanced angle calculations
    • Numerical Methods: Approximation and interpolation functions


    #Usage

    #Fluid Statics

    test "hydrostatic pressure" {
    // Water depth 10m, water density 1000 kg/m³
    // p = p0 + ρgh = 101325 + 1000*9.80665*10 = 199391.5 Pa
    let p = hydrostatic_pressure_std(ATMOSPHERIC_PRESSURE, RHO_WATER, 10.0)
    assert_eq(approx_equal(p, 199391.5, 50.0), true)

    // Buoyant force
    let fb = buoyant_force_std(RHO_WATER, 1.0) // 1 m³ water
    assert_eq(approx_equal(fb, 9806.65, 1.0), true)
    }


    #Continuity Equation

    test "continuity equation" {
    // Volume flow rate
    let q = volume_flow_rate(0.1, 2.0) // 0.1 m² * 2 m/s
    assert_eq(q, 0.2)

    // Velocity calculation from flow rate
    let v = velocity_from_flow_rate(0.2, 0.1)
    assert_eq(v, 2.0)

    // Mass flow rate
    let mdot = mass_flow_rate(RHO_WATER, 0.2)
    assert_eq(mdot, 200.0)
    }


    #Bernoulli Equation

    test "bernoulli equation" {
    // Total head: z=5, p/(ρg)=10.19, v²/(2g)=0.459
    let h = bernoulli_total_head_std(5.0, 100000.0, RHO_WATER, 3.0)
    assert_eq(approx_equal(h, 15.65, 0.5), true)

    // Velocity head
    let hv = velocity_head(5.0, G)
    assert_eq(approx_equal(hv, 1.274, 0.01), true)
    }


    #Reynolds Number

    test "reynolds number" {
    // Re = ρvD/μ
    // Water: ρ=1000, v=1 m/s, D=0.1 m, μ=0.001002
    // Re = 1000*1*0.1/0.001002 ≈ 99800
    let re = reynolds_number(RHO_WATER, 1.0, 0.1, MU_WATER_20C)
    assert_eq(approx_equal(re, 99800.0, 500.0), true)

    // Determine flow regime
    assert_eq(is_turbulent_pipe(5000.0), true)
    assert_eq(is_turbulent_pipe(1000.0), false)
    }


    #Laminar Flow

    test "laminar flow" {
    // Laminar flow rate: Q = πΔpR⁴/(8μL)
    // Δp=1000 Pa, μ=0.001, L=10 m, R=0.05 m
    // Q = π*1000*0.05⁴/(8*0.001*10) = π*1000*0.00000625/0.08 = 0.245 m³/s
    let q = laminar_flow_rate(1000.0, MU_WATER_20C, 10.0, 0.05)
    assert_eq(approx_equal(q, 0.245, 0.01), true)

    // Laminar friction factor
    let f = laminar_friction_factor(1000.0)
    assert_eq(f, 0.064)
    }


    #Darcy-Weisbach Equation

    test "darcy weisbach" {
    // Friction head loss
    // f=0.02, L=100 m, D=0.2 m, v=2 m/s
    // hf = 0.02*(100/0.2)*(4/(2*9.81)) = 0.02*500*0.204 = 2.04 m
    let hf = darcy_weisbach_head_loss_std(0.02, 100.0, 0.2, 2.0)
    assert_eq(approx_equal(hf, 2.04, 0.1), true)
    }


    #Local Losses

    test "local losses" {
    // Local head loss
    let hl = local_head_loss_std(0.5, 3.0)
    assert_eq(approx_equal(hl, 0.229, 0.01), true)

    // Sudden expansion loss coefficient
    let k_exp = sudden_expansion_loss_coefficient(0.1, 0.2)
    assert_eq(approx_equal(k_exp, 0.25, 0.01), true)
    }


    #Manning Formula

    test "manning formula" {
    // Rectangular open channel: b=2m, h=1m, n=0.013, S=0.001
    // A = 2*1 = 2 m², P = 2+2*1 = 4 m, R = 2/4 = 0.5 m
    // Q = (1/0.013)*2*0.5^(2/3)*0.001^(1/2)
    let r = hydraulic_radius_rect(2.0, 1.0)
    assert_eq(approx_equal(r, 0.5, 0.01), true)
    let q = manning_flow_rate(0.013, 2.0, 0.5, 0.001)
    assert_eq(q > 0.0, true)
    }


    #Froude Number

    test "froude number" {
    // Fr = v/sqrt(gh)
    // v=2 m/s, h=1 m
    // Fr = 2/sqrt(9.81*1) = 0.639
    let fr = froude_number(2.0, G, 1.0)
    assert_eq(approx_equal(fr, 0.639, 0.01), true)

    // Flow regime classification
    assert_eq(flow_regime(0.5), "subcritical")
    assert_eq(flow_regime(1.0), "critical")
    assert_eq(flow_regime(2.0), "supercritical")
    }


    #Drag and Lift Forces

    test "drag and lift" {
    // Drag force: F_D = 0.5*ρ*v²*A*C_D
    // ρ=1.204, v=10 m/s, A=1 m², C_D=0.5
    // F_D = 0.5*1.204*100*1*0.5 = 30.1 N
    let fd = drag_force(RHO_AIR, 10.0, 1.0, 0.5)
    assert_eq(approx_equal(fd, 30.1, 0.1), true)

    // Lift force: F_L = 0.5*ρ*v²*A*C_L = 0.5*1.204*100*1*0.8 = 48.16 N
    let fl = lift_force(RHO_AIR, 10.0, 1.0, 0.8)
    assert_eq(approx_equal(fl, 48.16, 0.1), true)
    }


    #Dimensionless Numbers

    test "dimensionless numbers" {
    // Weber number
    let we = weber_number(RHO_WATER, 5.0, 0.1, SIGMA_WATER)
    assert_eq(we > 0.0, true)

    // Mach number
    let ma = mach_number(340.0, 340.0)
    assert_eq(ma, 1.0)

    // Euler number: Eu = Δp/(ρv²) = 1000/(1000*25) = 0.04
    let eu = euler_number(1000.0, RHO_WATER, 5.0)
    assert_eq(approx_equal(eu, 0.04, 0.01), true)
    }


    #Mathematical Tools

    test "tools functions" {
    // Square and cube
    assert_eq(square(3.0), 9.0)
    assert_eq(cube(2.0), 8.0)

    // Cube root
    assert_eq(approx_equal(cbrt(27.0), 3.0, 0.0001), true)
    assert_eq(approx_equal(cbrt(8.0), 2.0, 0.0001), true)

    // Logarithm (approximate, with larger tolerance)
    assert_eq(approx_equal(log10_approx(100.0), 2.0, 0.3), true)
    }


    #Parameter Ranges

    #Valid Input Ranges

    • Pressure: 0–10⁸ Pa (fluid pressures)
    • Density: 0.1–2000 kg/m³ (fluid densities)
    • Viscosity: 10⁻⁶–10⁻² Pa·s (dynamic viscosities)
    • Velocity: 0–100 m/s (flow velocities)
    • Length/Diameter: 10⁻⁶–10² m (geometrical dimensions)
    • Flow Rate: 10⁻⁹–10³ m³/s (volumetric flow rates)
    • Reynolds Number: 1–10⁷ (flow regime classification)
    • Froude Number: 0.1–10 (open channel flow)


    #Typical Fluid Properties

    • Water (20°C): ρ = 998.2 kg/m³, μ = 1.002×10⁻³ Pa·s
    • Air (20°C): ρ = 1.204 kg/m³, μ = 1.81×10⁻⁵ Pa·s
    • Standard Gravity: g = 9.80665 m/s²
    • Atmospheric Pressure: p₀ = 101,325 Pa
    • Water Surface Tension: σ = 0.0728 N/m
    • Speed of Sound in Air: a = 343 m/s


    #Testing

    The project includes a comprehensive test suite covering all major functionalities:

    moon test

    #Test Coverage

    • Fluid statics (pressure, buoyancy, pressure centers)
    • Continuity and Bernoulli equations
    • Flow regime analysis (Reynolds, Froude numbers)
    • Pipe flow calculations (laminar, turbulent, losses)
    • Open channel flow (Manning equation, hydraulic radius)
    • Aerodynamic forces (drag, lift coefficients)
    • Dimensionless numbers and similarity
    • Mathematical utility functions
    • Boundary conditions and edge cases


    #Technical Details

    #Physical Principles

    • Conservation Laws: Mass, energy, and momentum conservation
    • Newtonian Fluids: Viscosity and shear stress relationships
    • Pressure Fields: Hydrostatic and hydrodynamic pressure distributions
    • Flow Similarity: Dimensional analysis and scaling laws
    • Boundary Layers: Flow behavior near solid surfaces


    #Mathematical Methods

    • Algebraic Equations: Direct calculations for statics and simple flows
    • Differential Equations: Energy and momentum balance equations
    • Empirical Correlations: Friction factors and loss coefficients
    • Numerical Approximations: Root finding and interpolation methods
    • Statistical Analysis: Uncertainty and error propagation


    #Engineering Standards

    • SI Units: Consistent use of International System of Units
    • Fluid Mechanics Conventions: Standard notation and terminology
    • Engineering Accuracy: Appropriate precision for engineering calculations
    • Safety Margins: Conservative design practices


    #Computational Considerations

    • Numerical Stability: Robust algorithms for wide parameter ranges
    • Physical Limits: Validation of input parameters against physical bounds
    • Unit Consistency: Automatic dimensional analysis
    • Performance Optimization: Efficient calculations for engineering applications


    #Notes

    1. Units: All calculations use SI units (meters, kilograms, seconds, Pascals)
    2. Fluid Properties: Default values provided for common fluids (water, air)
    3. Flow Assumptions: Incompressible, Newtonian fluid assumptions unless specified
    4. Temperature Effects: Standard conditions assumed unless temperature specified
    5. Accuracy: Engineering precision suitable for design calculations
    6. Boundary Conditions: Physical limits enforced to prevent unrealistic results
    7. Convergence: Iterative methods include convergence checks
    8. Validation: Results should be verified against experimental data or established correlations


    #Application Scenarios

    • Hydraulic Engineering: Pipeline design, pump selection, pressure vessel analysis
    • Environmental Engineering: Water distribution systems, wastewater treatment
    • Mechanical Engineering: Fluid machinery design, heat exchangers, ventilation systems
    • Civil Engineering: Open channel flow, drainage systems, hydraulic structures
    • Aerospace Engineering: Aerodynamic analysis, wind tunnel testing, aircraft design
    • Chemical Engineering: Process piping, mixing systems, fluid transport
    • Marine Engineering: Ship hydrodynamics, offshore structures, underwater systems
    • Geotechnical Engineering: Groundwater flow, seepage analysis, dam design
    • Energy Systems: Turbomachinery, renewable energy, power plant design
    • Research Applications: Fluid dynamics research, computational fluid dynamics validation


    #Version Information

    The current version (0.1.0) implements comprehensive fluid mechanics calculation functions including:

    • Fluid statics (pressure, buoyancy, surface forces)
    • Flow analysis (continuity, Bernoulli, energy equations)
    • Flow characteristics (Reynolds, Froude, Mach numbers)
    • Pipe flow (laminar, turbulent, friction losses)
    • Open channel flow (Manning equation, critical flow)
    • Aerodynamic forces (drag, lift, coefficients)
    • Dimensionless analysis (Weber, Euler numbers)
    • Mathematical utilities (power functions, logarithms)

    The library is actively developed and aims to provide comprehensive coverage of fluid mechanics while being optimized for MoonBit.

    ATMOSPHERIC_PRESSURE

    let ATMOSPHERIC_PRESSURE : Double

    标准大气压 (Pa)

    ATM_TO_PA

    let ATM_TO_PA : Double

    1 atm = 101325 Pa

    BAR_TO_PA

    let BAR_TO_PA : Double

    1 bar = 10⁵ Pa

    C_ORIFICE

    let C_ORIFICE : Double

    孔板流量计系数 (典型值)

    C_PITOT

    let C_PITOT : Double

    皮托管系数 (典型值)

    C_VENTURI

    let C_VENTURI : Double

    文丘里流量计系数 (典型值)

    EPSILON

    let EPSILON : Double

    浮点数比较精度

    EPSILON_CAST_IRON

    let EPSILON_CAST_IRON : Double

    铸铁管

    EPSILON_CAST_IRON_OLD

    let EPSILON_CAST_IRON_OLD : Double

    旧铸铁管

    EPSILON_CONCRETE

    let EPSILON_CONCRETE : Double

    混凝土管

    EPSILON_SMOOTH

    let EPSILON_SMOOTH : Double

    光滑管 (玻璃、塑料)

    EPSILON_STEEL_NEW

    let EPSILON_STEEL_NEW : Double

    新钢管

    EPSILON_STEEL_OLD

    let EPSILON_STEEL_OLD : Double

    旧钢管

    E_CONST

    let E_CONST : Double

    自然对数底数
    let G : Double

    标准重力加速度 (m/s²)

    K_BEND_45

    let K_BEND_45 : Double

    45° 弯头

    K_BEND_90

    let K_BEND_90 : Double

    90° 弯头 (标准)

    K_INLET_ROUNDED

    let K_INLET_ROUNDED : Double

    入口 (圆滑)

    K_INLET_SHARP

    let K_INLET_SHARP : Double

    入口 (锐缘)

    K_OUTLET

    let K_OUTLET : Double

    出口

    K_SUDDEN_CONTRACTION_MAX

    let K_SUDDEN_CONTRACTION_MAX : Double

    突然缩小 (A2/A1 → 0)

    K_SUDDEN_EXPANSION_MAX

    let K_SUDDEN_EXPANSION_MAX : Double

    突然扩大 (A2/A1 → 0)

    K_VALVE_HALF

    let K_VALVE_HALF : Double

    阀门 (半开)

    K_VALVE_OPEN

    let K_VALVE_OPEN : Double

    阀门 (全开)

    K_WATER

    let K_WATER : Double

    水的体积模量 (Pa) @ 20°C

    LS_TO_M3S

    let LS_TO_M3S : Double

    1 L/s = 0.001 m³/s

    M3H_TO_M3S

    let M3H_TO_M3S : Double

    1 m³/h = 1/3600 m³/s

    M3S_TO_LS

    let M3S_TO_LS : Double

    1 m³/s = 1000 L/s

    MU_AIR_20C

    let MU_AIR_20C : Double

    空气的动力粘度 (Pa·s) @ 20°C

    MU_WATER_20C

    let MU_WATER_20C : Double

    水的动力粘度 (Pa·s) @ 20°C

    NU_AIR_20C

    let NU_AIR_20C : Double

    空气的运动粘度 (m²/s) @ 20°C

    NU_WATER_20C

    let NU_WATER_20C : Double

    水的运动粘度 (m²/s) @ 20°C

    N_MANNING_BRICK

    let N_MANNING_BRICK : Double

    曼宁粗糙度系数 - 砖砌

    N_MANNING_CONCRETE

    let N_MANNING_CONCRETE : Double

    曼宁粗糙度系数 - 普通混凝土

    N_MANNING_EARTH

    let N_MANNING_EARTH : Double

    曼宁粗糙度系数 - 土渠

    N_MANNING_NATURAL

    let N_MANNING_NATURAL : Double

    曼宁粗糙度系数 - 天然河道

    N_MANNING_SMOOTH_CONCRETE

    let N_MANNING_SMOOTH_CONCRETE : Double

    曼宁粗糙度系数 - 光滑混凝土

    N_MANNING_WEEDY

    let N_MANNING_WEEDY : Double

    曼宁粗糙度系数 - 杂草河道
    let PI : Double

    圆周率

    PSI_TO_PA

    let PSI_TO_PA : Double

    1 psi = 6894.76 Pa

    RE_CRITICAL_CHANNEL

    let RE_CRITICAL_CHANNEL : Double

    明渠流临界雷诺数

    RE_CRITICAL_PIPE

    let RE_CRITICAL_PIPE : Double

    圆管层流临界雷诺数

    RE_CRITICAL_PLATE

    let RE_CRITICAL_PLATE : Double

    平板边界层层流临界雷诺数

    RHO_AIR

    let RHO_AIR : Double

    空气密度 (kg/m³) @ 标准状态 (20°C, 1 atm)

    RHO_DIESEL

    let RHO_DIESEL : Double

    柴油密度 (kg/m³)

    RHO_GASOLINE

    let RHO_GASOLINE : Double

    汽油密度 (kg/m³)

    RHO_MERCURY

    let RHO_MERCURY : Double

    水银密度 (kg/m³)

    RHO_SEAWATER

    let RHO_SEAWATER : Double

    海水密度 (kg/m³) @ 15°C

    RHO_WATER

    let RHO_WATER : Double

    水的密度 (kg/m³) @ 4°C

    SIGMA_WATER

    let SIGMA_WATER : Double

    水的表面张力 (N/m) @ 20°C

    abs

    fn abs(x : Double) -> Double

    计算绝对值

    approx_equal

    fn approx_equal(a : Double, b : Double, tolerance : Double) -> Bool

    判断两个浮点数是否近似相等

    area_from_flow_rate

    fn area_from_flow_rate(flow_rate : Double, velocity : Double) -> Double

    连续性方程 - 计算截面面积 A = Q / v

    array_max

    fn array_max(arr : Array[Double]) -> Double

    数组最大值

    array_mean

    fn array_mean(arr : Array[Double]) -> Double

    数组平均值

    array_min

    fn array_min(arr : Array[Double]) -> Double

    数组最小值

    array_sum

    fn array_sum(arr : Array[Double]) -> Double

    数组求和

    bernoulli_pressure_drop

    fn bernoulli_pressure_drop(v1 : Double, v2 : Double, z1 : Double, z2 : Double, rho : Double, g : Double) -> Double

    伯努利方程 - 两点间压差 p₁ + ½ρv₁² + ρgz₁ = p₂ + ½ρv₂² + ρgz₂ 返回: p₁ - p₂

    bernoulli_total_head

    fn bernoulli_total_head(z : Double, p : Double, rho : Double, g : Double, v : Double) -> Double

    伯努利方程 - 总压头 H = z + p/(ρg) + v²/(2g) 参数: z - 位置水头 (m), p - 压强 (Pa), rho - 密度 (kg/m³), g - 重力加速度 (m/s²), v - 流速 (m/s) 返回: 总压头 (m)

    bernoulli_total_head_std

    fn bernoulli_total_head_std(z : Double, p : Double, rho : Double, v : Double) -> Double

    伯努利方程 - 总压头 (使用标准重力)

    bisection

    fn bisection(f : (Double) -> Double, a : Double, b : Double, tolerance : Double) -> Double

    二分法求根 (f(x) = 0) 函数 f 在 [a, b] 上连续,且 f(a)*f(b) < 0

    blasius_friction_factor

    fn blasius_friction_factor(re : Double) -> Double

    莫迪图 - 光滑管摩擦系数 (Blasius公式,Re < 10⁵) f = 0.316 / Re^0.25

    boundary_layer_thickness_laminar

    fn boundary_layer_thickness_laminar(x : Double, re_x : Double) -> Double

    平板边界层厚度 (层流,Blasius解) δ = 5.0 * x / sqrt(Re_x) 参数: x - 距前缘距离 (m), re_x - 当地雷诺数

    boundary_layer_thickness_turbulent

    fn boundary_layer_thickness_turbulent(x : Double, re_x : Double) -> Double

    平板边界层厚度 (湍流,1/7次方律) δ = 0.37 * x / Re_x^(1/5)

    buoyant_force

    fn buoyant_force(rho : Double, g : Double, volume : Double) -> Double

    计算浮力 F_b = ρgV 参数: rho - 流体密度 (kg/m³), g - 重力加速度 (m/s²), volume - 排开体积 (m³) 返回: 浮力 (N)

    buoyant_force_std

    fn buoyant_force_std(rho : Double, volume : Double) -> Double

    计算浮力 (使用标准重力)

    cbrt

    fn cbrt(x : Double) -> Double

    立方根

    circle_area

    fn circle_area(r : Double) -> Double

    圆形面积

    circle_perimeter

    fn circle_perimeter(r : Double) -> Double

    圆形周长

    clamp

    fn clamp(value : Double, min_val : Double, max_val : Double) -> Double

    限制值在范围内

    colebrook_friction_factor_estimate

    fn colebrook_friction_factor_estimate(re : Double, epsilon : Double, d : Double) -> Double

    科尔布鲁克方程 - 摩擦系数 (隐式,需迭代求解) 1/√f = -2 log₁₀(ε/(3.7D) + 2.51/(Re√f)) 这里提供初始估计值

    critical_depth_rect

    fn critical_depth_rect(q : Double, g : Double) -> Double

    临界水深 (矩形明渠) h_c = (q²/g)^(1/3) 参数: q - 单宽流量 (m²/s), g - 重力加速度

    cube

    fn cube(x : Double) -> Double

    计算立方

    cylinder_drag_coefficient

    fn cylinder_drag_coefficient(re : Double) -> Double

    圆柱绕流阻力系数 (经验值,Re ~ 10³-10⁵)

    darcy_weisbach_head_loss

    fn darcy_weisbach_head_loss(f : Double, l : Double, d : Double, v : Double, g : Double) -> Double

    达西-魏斯巴赫方程 - 摩擦损失水头 h_f = f * (L/D) * (v²/(2g)) 参数: f - 摩擦系数, l - 管长 (m), d - 管径 (m), v - 流速 (m/s), g - 重力加速度

    darcy_weisbach_head_loss_std

    fn darcy_weisbach_head_loss_std(f : Double, l : Double, d : Double, v : Double) -> Double

    达西-魏斯巴赫方程 - 摩擦损失水头 (使用标准重力)

    darcy_weisbach_pressure_drop

    fn darcy_weisbach_pressure_drop(f : Double, l : Double, d : Double, rho : Double, v : Double) -> Double

    达西-魏斯巴赫方程 - 压降 Δp = f * (L/D) * (ρv²/2)

    drag_force

    fn drag_force(rho : Double, v : Double, area : Double, cd : Double) -> Double

    阻力 F_D = ½ * ρ * v² * A * C_D 参数: rho - 密度 (kg/m³), v - 流速 (m/s), area - 迎风面积 (m²), cd - 阻力系数 返回: 阻力 (N)

    euler_number

    fn euler_number(dp : Double, rho : Double, v : Double) -> Double

    计算欧拉数 Eu = Δp / (ρv²)

    flat_plate_friction_coefficient_laminar

    fn flat_plate_friction_coefficient_laminar(re_x : Double) -> Double

    平板摩擦阻力系数 (层流) C_f = 0.664 / sqrt(Re_x)

    flat_plate_friction_coefficient_turbulent

    fn flat_plate_friction_coefficient_turbulent(re_x : Double) -> Double

    平板摩擦阻力系数 (湍流) C_f = 0.0592 / Re_x^(1/5)

    flow_regime

    fn flow_regime(fr : Double) -> String

    判断流动状态 (Fr < 1 缓流, Fr = 1 临界, Fr > 1 急流) 返回: "subcritical", "critical", "supercritical"

    froude_dimensionless

    fn froude_dimensionless(v : Double, g : Double, l : Double) -> Double

    计算弗劳德数 (量纲分析)

    froude_number

    fn froude_number(v : Double, g : Double, h : Double) -> Double

    弗劳德数 Fr = v / sqrt(gh) 参数: v - 流速 (m/s), g - 重力加速度, h - 特征水深 (m)

    froude_similarity

    fn froude_similarity(fr_model : Double, fr_prototype : Double) -> Bool

    检查弗劳德数相似

    fully_rough_friction_factor

    fn fully_rough_friction_factor(epsilon : Double, d : Double) -> Double

    完全粗糙管摩擦系数 (Re 很大时) f = 0.25 / (log₁₀(ε/(3.7D)))²

    hydraulic_diameter

    fn hydraulic_diameter(area : Double, perimeter : Double) -> Double

    水力直径 D_h = 4A / P 参数: area - 过流面积 (m²), perimeter - 湿周 (m)

    hydraulic_radius

    fn hydraulic_radius(area : Double, perimeter : Double) -> Double

    水力半径 R = A / P 参数: area - 过流面积 (m²), perimeter - 湿周 (m)

    hydraulic_radius_rect

    fn hydraulic_radius_rect(b : Double, h : Double) -> Double

    矩形明渠水力半径

    hydraulic_radius_trapezoid

    fn hydraulic_radius_trapezoid(b : Double, h : Double, m : Double) -> Double

    梯形明渠水力半径 参数: b - 底宽 (m), h - 水深 (m), m - 边坡系数 (水平/垂直)

    hydrostatic_pressure

    fn hydrostatic_pressure(p0 : Double, rho : Double, g : Double, h : Double) -> Double

    计算静水压强 p = p₀ + ρgh 参数: p0 - 表面压强 (Pa), rho - 密度 (kg/m³), g - 重力加速度 (m/s²), h - 深度 (m) 返回: 压强 (Pa)

    hydrostatic_pressure_std

    fn hydrostatic_pressure_std(p0 : Double, rho : Double, h : Double) -> Double

    计算静水压强 (使用标准重力)

    is_turbulent

    fn is_turbulent(re : Double, re_critical : Double) -> Bool

    判断流动状态 (层流/湍流) 返回: true 为湍流,false 为层流

    is_turbulent_pipe

    fn is_turbulent_pipe(re : Double) -> Bool

    判断圆管流动状态

    is_zero

    fn is_zero(x : Double) -> Bool

    判断浮点数是否接近零

    jet_force

    fn jet_force(rho : Double, area : Double, velocity : Double) -> Double

    射流冲击力 (垂直冲击平板) F = ρQv = ρAv²

    jet_force_angled

    fn jet_force_angled(rho : Double, area : Double, velocity : Double, angle_rad : Double) -> Double

    射流冲击力 (倾斜冲击平板,角度为法向) F = ρQv * sin(θ)

    laminar_flow_rate

    fn laminar_flow_rate(dp : Double, mu : Double, l : Double, r : Double) -> Double

    圆管层流流量 (Hagen-Poiseuille) Q = πΔpR⁴ / (8μL)

    laminar_friction_factor

    fn laminar_friction_factor(re : Double) -> Double

    圆管层流摩擦系数 f = 64 / Re

    laminar_max_velocity

    fn laminar_max_velocity(dp : Double, mu : Double, l : Double, r : Double) -> Double

    圆管层流最大流速 (管中心)

    laminar_mean_velocity

    fn laminar_mean_velocity(dp : Double, mu : Double, l : Double, r : Double) -> Double

    圆管层流平均流速 v_avg = v_max / 2 = ΔpR² / (8μL)

    laminar_pressure_drop

    fn laminar_pressure_drop(mu : Double, l : Double, v : Double, d : Double) -> Double

    圆管层流压降 Δp = 32μLv / D²

    laminar_velocity_profile

    fn laminar_velocity_profile(dp : Double, mu : Double, l : Double, r : Double, r_pipe : Double) -> Double

    圆管层流速度分布 (抛物线) u(r) = (Δp/(4μL)) * (R² - r²) 参数: dp - 压降 (Pa), mu - 动力粘度 (Pa·s), l - 管长 (m), r - 半径 (m), r_pipe - 管半径 (m) 返回: 流速 (m/s)

    lerp

    fn lerp(a : Double, b : Double, t : Double) -> Double

    线性插值

    lift_force

    fn lift_force(rho : Double, v : Double, area : Double, cl : Double) -> Double

    升力 F_L = ½ * ρ * v² * A * C_L

    linear_interpolate

    fn linear_interpolate(x_values : Array[Double], y_values : Array[Double], x : Double) -> Double

    线性插值表查找 x_values: 自变量数组 (需单调递增) y_values: 因变量数组 x: 待插值的自变量

    ln_approx

    fn ln_approx(x : Double) -> Double

    自然对数近似 (使用级数展开)

    local_head_loss

    fn local_head_loss(k : Double, v : Double, g : Double) -> Double

    局部损失水头 h_l = K * v² / (2g) 参数: k - 局部阻力系数, v - 流速 (m/s), g - 重力加速度

    local_head_loss_std

    fn local_head_loss_std(k : Double, v : Double) -> Double

    局部损失水头 (使用标准重力)

    log10_approx

    fn log10_approx(x : Double) -> Double

    以10为底的对数

    mach_number

    fn mach_number(v : Double, c : Double) -> Double

    计算马赫数 Ma = v / c 参数: v - 流速, c - 声速

    manning_flow_rate

    fn manning_flow_rate(n : Double, area : Double, r : Double, s : Double) -> Double

    曼宁公式 - 流量 Q = (1/n) * A * R^(2/3) * S^(1/2) 参数: n - 曼宁粗糙度系数, area - 过流面积 (m²), r - 水力半径 (m), s - 底坡

    manning_velocity

    fn manning_velocity(n : Double, r : Double, s : Double) -> Double

    曼宁公式 - 流速 v = (1/n) * R^(2/3) * S^(1/2)

    mass_flow_rate

    fn mass_flow_rate(rho : Double, flow_rate : Double) -> Double

    质量流量 ṁ = ρQ = ρAv

    mass_flow_rate_av

    fn mass_flow_rate_av(rho : Double, area : Double, velocity : Double) -> Double

    质量流量 (从面积和流速)

    max

    fn max(a : Double, b : Double) -> Double

    计算最大值

    min

    fn min(a : Double, b : Double) -> Double

    计算最小值

    momentum_force

    fn momentum_force(rho : Double, q : Double, v1 : Double, v2 : Double) -> Double

    动量方程 - 作用力 F = ṁ(v₂ - v₁) = ρQ(v₂ - v₁) 参数: rho - 密度 (kg/m³), q - 流量 (m³/s), v1 - 入口流速 (m/s), v2 - 出口流速 (m/s) 返回: 作用力 (N)

    newton_method

    fn newton_method(f : (Double) -> Double, df : (Double) -> Double, x0 : Double, tolerance : Double) -> Double

    牛顿法求根 f: 函数, df: 导数, x0: 初始值

    orifice_flow_rate

    fn orifice_flow_rate(c : Double, a0 : Double, dh : Double, g : Double) -> Double

    孔板流量计 - 计算流量 Q = C * A₀ * sqrt(2gΔh) 参数: c - 流量系数, a0 - 孔口面积, dh - 压差水头 (m), g - 重力加速度

    pow4

    fn pow4(x : Double) -> Double

    计算四次方

    pow_int

    fn pow_int(x : Double, n : Int) -> Double

    计算 x 的 n 次方 (n 为整数)

    pressure_center_depth

    fn pressure_center_depth(y_c : Double, i_c : Double, area : Double) -> Double

    计算压力中心深度 (矩形平面,垂直放置) y_p = y_c + I_c / (y_c * A) 参数: y_c - 形心深度 (m), i_c - 对形心轴的惯性矩 (m⁴), area - 面积 (m²) 返回: 压力中心深度 (m)

    pressure_center_rect

    fn pressure_center_rect(h_c : Double, b : Double, h : Double) -> Double

    矩形平面压力中心深度 参数: h_c - 形心深度 (m), b - 宽度 (m), h - 高度 (m)

    pressure_head

    fn pressure_head(p : Double, rho : Double, g : Double) -> Double

    伯努利方程 - 压强水头 h_p = p / (ρg)

    rect_area

    fn rect_area(width : Double, height : Double) -> Double

    矩形面积

    reynolds_dimensionless

    fn reynolds_dimensionless(rho : Double, v : Double, l : Double, mu : Double) -> Double

    计算雷诺数 (量纲分析)

    reynolds_number

    fn reynolds_number(rho : Double, v : Double, d : Double, mu : Double) -> Double

    雷诺数 (圆管) Re = ρvD / μ = vD / ν 参数: rho - 密度 (kg/m³), v - 流速 (m/s), d - 管径 (m), mu - 动力粘度 (Pa·s) 返回: 雷诺数 (无量纲)

    reynolds_number_hydraulic_diameter

    fn reynolds_number_hydraulic_diameter(rho : Double, v : Double, d_h : Double, mu : Double) -> Double

    雷诺数 (非圆管,使用水力直径) Re = ρvD_h / μ

    reynolds_number_kinematic

    fn reynolds_number_kinematic(v : Double, d : Double, nu : Double) -> Double

    雷诺数 (使用运动粘度) Re = vD / ν

    reynolds_similarity

    fn reynolds_similarity(re_model : Double, re_prototype : Double) -> Bool

    检查雷诺数相似

    ring_area

    fn ring_area(r_outer : Double, r_inner : Double) -> Double

    圆环面积

    root

    fn root(x : Double, n : Int) -> Double

    计算 x 的 1/n 次方 (n 次根)

    safe_div

    fn safe_div(num : Double, den : Double, fallback : Double) -> Double

    安全除法,分母为零时返回默认值

    sign

    fn sign(x : Double) -> Double

    符号函数

    sphere_drag_coefficient_stokes

    fn sphere_drag_coefficient_stokes(re : Double) -> Double

    球体阻力系数 (Stokes定律,Re < 1) C_D = 24 / Re

    sphere_drag_stokes

    fn sphere_drag_stokes(mu : Double, d : Double, v : Double) -> Double

    球体阻力 (Stokes定律) F_D = 3πμDv

    square

    fn square(x : Double) -> Double

    计算平方

    sudden_contraction_loss_coefficient

    fn sudden_contraction_loss_coefficient(a1 : Double, a2 : Double) -> Double

    突然缩小损失系数 (经验公式) K ≈ 0.5 * (1 - A₂/A₁)

    sudden_expansion_loss_coefficient

    fn sudden_expansion_loss_coefficient(a1 : Double, a2 : Double) -> Double

    突然扩大损失系数 K = (1 - A₁/A₂)²

    total_head_loss

    fn total_head_loss(h_friction : Double, h_local : Double) -> Double

    总水头损失 (摩擦 + 局部)

    total_pressure_plane

    fn total_pressure_plane(rho : Double, g : Double, h_c : Double, area : Double) -> Double

    计算作用在平面上的总压力 F = ρgh_c * A 参数: rho - 密度 (kg/m³), g - 重力加速度 (m/s²), h_c - 形心深度 (m), area - 面积 (m²) 返回: 总压力 (N)

    total_pressure_plane_std

    fn total_pressure_plane_std(rho : Double, h_c : Double, area : Double) -> Double

    计算作用在平面上的总压力 (使用标准重力)

    trapezoid_area

    fn trapezoid_area(a : Double, b : Double, h : Double) -> Double

    梯形面积

    velocity_from_flow_rate

    fn velocity_from_flow_rate(flow_rate : Double, area : Double) -> Double

    连续性方程 - 计算流速 v = Q / A

    velocity_head

    fn velocity_head(v : Double, g : Double) -> Double

    伯努利方程 - 速度水头 h_v = v² / (2g)

    venturi_flow_rate

    fn venturi_flow_rate(c : Double, a1 : Double, a2 : Double, dh : Double, g : Double) -> Double

    文丘里流量计 - 计算流量 Q = C * A₂ * sqrt(2gΔh / (1 - (A₂/A₁)²)) 参数: c - 流量系数, a1 - 上游面积, a2 - 喉部面积, dh - 压差水头 (m), g - 重力加速度

    volume_flow_rate

    fn volume_flow_rate(area : Double, velocity : Double) -> Double

    连续性方程 - 体积流量守恒 Q = A₁v₁ = A₂v₂ 参数: area1 - 截面1面积 (m²), v1 - 截面1流速 (m/s) 返回: 体积流量 (m³/s)

    weber_number

    fn weber_number(rho : Double, v : Double, l : Double, sigma : Double) -> Double

    计算韦伯数 We = ρv²L / σ 参数: rho - 密度, v - 流速, l - 特征长度, sigma - 表面张力

    weir_rectangular_flow

    fn weir_rectangular_flow(c : Double, b : Double, h : Double) -> Double

    矩形薄壁堰流量 (Francis公式) Q = C * b * H^(3/2) 参数: c - 流量系数 (约 1.84), b - 堰宽 (m), h - 堰上水头 (m)

    weir_triangular_flow

    fn weir_triangular_flow(c : Double, theta_deg : Double, h : Double) -> Double

    三角形薄壁堰流量 Q = C * tan(θ/2) * H^(5/2) 参数: c - 流量系数 (约 1.4), theta_deg - 堰口角度 (度), h - 堰上水头 (m)