//! Heat Exchanger Framework
//!
//! This module provides a pluggable heat exchanger framework supporting multiple
//! calculation models (LMTD, ε-NTU) for thermodynamic simulations.
//!
//! ## Architecture
//!
//! The framework uses the Strategy Pattern for heat transfer calculations:
//!
//! - [`HeatTransferModel`]: Trait for pluggable calculation strategies
//! - [`LmtdModel`]: Log Mean Temperature Difference method
//! - [`EpsNtuModel`]: Effectiveness-NTU method
//! - [`HeatExchanger`]: Generic heat exchanger component
//!
//! ## Components
//!
//! - [`Condenser`]: Refrigerant condensing (phase change) on hot side
//! - [`Evaporator`]: Refrigerant evaporating (phase change) on cold side (DX style)
//! - [`FloodedEvaporator`]: Flooded/recirculation evaporator (two-phase outlet)
//! - [`FloodedCondenser`]: Flooded/accumulation condenser (subcooled liquid outlet)
//! - [`EvaporatorCoil`]: Air-side evaporator (finned coil)
//! - [`CondenserCoil`]: Air-side condenser (finned coil)
//! - [`Economizer`]: Internal heat exchanger with bypass support
//! - [`BphxExchanger`]: Brazed Plate Heat Exchanger with geometry-based correlations
//!
//! ## BPHX Components (Story 11.5)
//!
//! - [`BphxExchanger`]: Brazed plate heat exchanger component
//! - [`BphxGeometry`]: Geometry specification for BPHX
//! - [`BphxCorrelation`]: Heat transfer correlation selection
//!
//! ## BPHX Evaporator (Story 11.6)
//!
//! - [`BphxEvaporator`]: Plate evaporator (DX only, superheat-controlled outlet)
//!
//! ## BPHX Condenser (Story 11.7)
//!
//! - [`BphxCondenser`]: Plate condenser with subcooled liquid outlet
//!
//! ## Example
//!
//! ```rust
//! use entropyk_components::heat_exchanger::{HeatExchanger, LmtdModel, FlowConfiguration};
//!
//! // Create a heat exchanger with LMTD model
//! let model = LmtdModel::new(5000.0, FlowConfiguration::CounterFlow);
//! // Heat exchanger would be created with connected ports
//! ```

pub mod air_cooled_condenser;
pub mod bphx_condenser;
pub mod bphx_correlation;
pub mod bphx_dp;
pub mod bphx_evaporator;
pub mod bphx_exchanger;
pub mod bphx_geometry;
pub mod condenser;
pub mod condenser_coil;
pub mod correlation_registry;
pub mod economizer;
pub mod eps_ntu;
pub mod evaporator;
pub mod evaporator_coil;
pub mod exchanger;
pub mod fan_coil_unit;
pub mod fin_coil_condenser;
pub mod flooded_condenser;
pub mod flooded_evaporator;
pub mod flow_regularization;
pub mod gas_cooler;
pub mod lmtd;
pub mod mchx_condenser_coil;
pub mod model;
pub mod moving_boundary_hx;
pub mod phase_change_entu;
pub mod pool_boiling;
pub mod sat_domain;
pub mod shell_and_tube;
pub mod tube_dp;
pub mod two_phase_dp;

pub use air_cooled_condenser::AirCooledCondenser;
pub use bphx_condenser::BphxCondenser;
pub use bphx_correlation::{
    BphxCorrelation, CorrelationEvaluation, CorrelationParams, CorrelationResult,
    CorrelationSelector, ValidityStatus,
};
pub use bphx_dp::{evaluate_channel_pressure_drop, BphxDpCorrelation, BphxDpEval};
pub use bphx_evaporator::BphxEvaporator;
pub use bphx_exchanger::BphxExchanger;
pub use bphx_geometry::{BphxGeometry, BphxGeometryBuilder, BphxGeometryError, BphxType};
pub use condenser::{Condenser, CondenserRating};
pub use condenser_coil::CondenserCoil;
pub use correlation_registry::{
    assess_candidate, correlation_metadata, registered_correlations, select_correlation,
    ApplicabilityDomain, BoundaryProximity, BoundedQuantity, BoundedQuantityKind,
    CandidateAssessment, CandidateRejection, CorrelationId, CorrelationMetadata,
    CorrelationPurpose, CorrelationSelectionError, DomainInputError, DomainStatus,
    EvidenceMetadata, ExchangerGeometryType, FlowRegime, LimitViolation, OperatingPoint,
    RefrigerantApplicability, RefrigerantEvidenceStatus, SelectionContext, SelectionOutcome,
    ValidationEvidence,
};
pub use economizer::Economizer;
pub use eps_ntu::{EpsNtuModel, ExchangerType};
pub use evaporator::Evaporator;
pub use evaporator_coil::EvaporatorCoil;
pub use exchanger::{HeatExchanger, HeatExchangerBuilder, HxSideConditions};
pub use fan_coil_unit::{FanCoilRating, FanCoilRatingInput, FanCoilUnit};
pub use fin_coil_condenser::{CoilGeometry, FinCoilCondenser, FinType};
pub use flooded_condenser::FloodedCondenser;
pub use flooded_evaporator::{
    EvaporatorRating, FloodedEvaporator, FloodedPoolBoilingConfig, UaMode,
};
pub use flow_regularization::{
    blend_transport_partials, blend_transport_residual, effective_duty, flow_activity,
    flow_activity_derivative, smooth_mass_magnitude, smooth_mass_magnitude_derivative,
    DEFAULT_M_EPS_KG_S, DEFAULT_M_SCALE_KG_S,
};
pub use gas_cooler::{is_supercritical, pettersen_htc, GasCooler, GasCoolerInput};
pub use lmtd::{FlowConfiguration, LmtdModel};
pub use mchx_condenser_coil::MchxCondenserCoil;
pub use model::HeatTransferModel;
pub use phase_change_entu::{
    condenser_duty, d_eps_c_d_c, evaporator_duty, phase_change_effectiveness,
};
pub use pool_boiling::{
    assess_cooper_domain, cooper_1984, cooper_metadata, flooded_shell_htc, mostinski_1963,
    palen_bundle_factor, thome_robinson_oil_factor, ua_from_two_side_htc, PoolBoilingInput,
};
pub use shell_and_tube::{
    bell_delaware_factors, default_tube_params, shell_and_tube_ua, shell_side_htc, tube_side_htc,
    BellDelawareFactors, BellDelawareGeometry, ShellAndTubeHx,
};
pub use two_phase_dp::{
    acceleration_drop, assess_friedel_domain, assess_msh_domain, calibrate_quadratic_k,
    default_refrigerant_pressure_drop_coeff, friedel_gradient, friedel_metadata,
    friedel_multiplier, friedel_pressure_drop, msh_gradient, msh_metadata, msh_pressure_drop,
    parse_dp_model_name, quadratic_drop, quadratic_drop_dm, tube_two_phase_delta_p,
    zivi_void_fraction, FriedelInput, SatTransportProps, TubeChannelGeometry,
    TwoPhaseDpCorrelation, DEFAULT_N_PARALLEL_TUBES, DEFAULT_REFRIGERANT_DP_NOMINAL_PA,
    DEFAULT_REFRIGERANT_M_NOMINAL_KG_S, DEFAULT_TUBE_DIAMETER_M, DEFAULT_TUBE_LENGTH_M,
};
