CONTINUOUS_MODEL Bddctwrk ABSTRACT "Ductwork branch. Bidirectional Flow. Diameter and roughness as parameters. Variable number of straight sections and sing. Linear flow below Re-limit, and if LIN. Made by: Mika Vuolle Date: January 2001 Limitations: All sections must have the same diameter. Rectangular ducts are added, but are these equations valid with dHyd?? References? Ver: 0.1 The first version " EQUATIONS /* Calculate shift turbular/laminar at Re = 4000 */ K := T - ABS_ZERO; Rho := RhoMois(T,Hum); RhoDryAir := RhoDry(T,Hum); Dp := P1 - P2 - dz * G * Rho; MassAir := RhoDryAir * vol; /* IF LINEARIZE (1) OR ABS(Dp) < dp0 THEN */ IF LINEARIZE (1) THEN C_tot := c_prov ELSE V := (ABS (M) / RhoDryAir) / a ; Re := V * dHyd / ( 3.46 + 0.05 * K ) * 1E6 * RhoDryAir; IF Re < 4000. THEN C_tmp := c * ABS (LOG10 (raw/3.7/dHyd + 3.289e-3) ) / 0.5 ELSE C_tmp := c * ABS (LOG10 (raw/3.7/dHyd + 5.74/Re**0.9) ) / 0.5 END_IF; C_tot := 1/SQRT(1/(C_tmp * C_tmp) + xi_tot/(2 * a * a * RhoDryAir)) END_IF ; /* powerlaw massflow equation */ M = IF LINEARIZE (1) THEN c_prov * Dp /* ELSE_IF abs (Dp) < dp0 THEN c_lin * Dp */ ELSE_IF abs (Dp) < dp0 THEN c_tot/sqrt (dp0) * Dp ELSE_IF Dp > 0 THEN C_tot * SQRT(Dp) ELSE -C_tot * SQRT(-Dp) END_IF BAD_INVERSES () ; /* Energy balance */ HAir = Enthal(T,Hum); /* MassAir * HAir' = Q1 + Q2; */ (MassAir + numAirmass) * HAir' = Q1 + Q2; /* Fraction balance */ /* MassAir * X' = Xf1 + Xf2; */ (MassAir + numAirmass) * X' = Xf1 + Xf2; /* Hum balance */ /* MassAir * Hum' = Humf1 + Humf2; */ (MassAir + numAirmass) * Hum' = Humf1 + Humf2; LINKS /*type name variables... */ BidirAir terminal_1 P1, POS_IN M, T, POS_IN Q1, X, POS_IN Xf1, Hum, POS_IN Humf1; BidirAir terminal_2 P2, POS_OUT M, T, POS_IN Q2, X, POS_IN Xf2, Hum, POS_IN Humf2; VARIABLES /* type name role def min max description */ MassFlow M OUT 0.0012 -BIG BIG "Massflow through leak" Pressure P1 IN 1298 -BIG BIG "Terminal 1 pressure" Pressure P2 IN 1287 -BIG BIG "Terminal 2 pressure" Temp T OUT 20 ABS_ZERO BIG "Temperature" Enthalpy HAir OUT 18000 -BIG BIG "Enthalpy of air" HeatFlux Q1 IN 1 -BIG BIG "Heat moved by massflow" HeatFlux Q2 IN -1 -BIG BIG "Heat moved by massflow" Fraction_y X OUT 594 0 BIG "Fraction" Fractflow_y Xf1 IN 1 -BIG BIG "Fraction moved by massflow" Fractflow_y Xf2 IN -1 -BIG BIG "Fraction moved by massflow" HumRatio Hum OUT 0.003 0 1 "Abs. humidity" HumFlow Humf1 IN 0.001 -BIG BIG "Hum. moved by massflow" HumFlow Humf2 IN -0.001 -BIG BIG "Hum. moved by massflow" Generic C_tot LOC 0.1123 SMALL BIG "Flow characteristic" Pressure Dp LOC 0.0005 -BIG BIG "Eff pressure diff" Temp_K K LOC 290.3 0 BIG "Temp Kelvin" Generic Re LOC 900 SMALL BIG "Reynolds number" Density Rho LOC 1.2 SMALL BIG "Air density" Density RhoDryAir LOC 1.2 SMALL BIG "Dry air density" Velocity V LOC 0.1298 SMALL BIG "Velocity" Generic C_tmp LOC 0.1123 SMALL BIG "Temporary variable" Mass MassAir LOC 0.0095 SMALL BIG "Mass of dry air" MODEL_PARAMETERS /* type name role def min max description */ INT no_l SMP 1 1 BIGINT "Number of straight sections" INT no_xi SMP 1 0 BIGINT "Number of single losses" PARAMETERS /* type name role def min max description */ /* easy access parameters */ Generic ductShape S_P 0 0 1 "Shape of the duct 0 = circular 1 = rectangular" Length l[no_l] S_P 1 0 BIG "Straight section lengths" Factor xi[no_xi] S_P 0 0 BIG "Single loss coefficients" Length d S_P 0.1 SMALL BIG "Inner diameter" Length dz S_P 0 -BIG BIG "Total rise terminal 1 to 2" Length raw S_P .00015 SMALL BIG "Roughness" Length lenSide1 S_P 0.1 SMALL BIG "Length of one side" Length lenSide2 S_P 0.1 SMALL BIG "Length of adjancent side" Mass numAirmass S_P 30.0 0 BIG "Additional mass to increase numerical robustness" /* derived parameters */ Length dHyd C_P 0.1 SMALL BIG "Hydraulic diameter" Length l_tot C_P 1. SMALL BIG "Total length" Factor xi_tot C_P 0 0 BIG "Total loss coeff" Area a C_P 0.007854 SMALL BIG "Cross section area" Volume vol C_P 0.007854 SMALL BIG "Air volume of the ductwork" Generic c C_P 0.02309 SMALL BIG "Factor for C_tmp " Generic c_prov C_P 0.1123 SMALL BIG "Provisional coefficient" Pressure dp0 C_P 0.002569 SMALL BIG "Pressure lim laminar/turbulent" Generic c_lin C_P 2.216 SMALL BIG "Laminar coefficient" PARAMETER_PROCESSING l_tot := SUM i = 1, no_l l[i] END_SUM; xi_tot:= SUM i = 1, no_xi xi[i] END_SUM; a := IF ductShape < 0.5 THEN PI * d * d / 4. ELSE lenSide1 * lenSide2 END_IF; vol := a * l_tot; dHyd := IF ductShape < 0.5 THEN d ELSE 2 * lenSide1 * lenSide2 /(lenSide1 + lenSide2) END_IF; c := IF l_tot != 0. THEN a * (72 * rho_air * dHyd / l_tot)**0.5 ELSE 0. END_IF ; c_prov := IF l_tot == 0. THEN 0. ELSE_IF raw != 0. THEN c * ABS (LOG10 (raw/3.7/dHyd + 5.74/4000.**0.9) ) / 0.5 ELSE 0. END_IF ; IF c_prov == 0 THEN CALL nmf_error ("parameters missing (l or raw) for duct ") END_IF ; /* Prepare for laminar/turbulent check (at Re = 4000) */ dp0 := (4000. * 1.423E-5 * dHyd / c_prov) ** 2.0; c_lin := c_prov / sqrt (dp0) ; END_MODEL