SimpleExpansionContraction

model SimpleExpansionContraction "Sudden Expansion / Contraction"
    import HydraulicsByFluidon.Media.Base.FluidInterface;

    parameter Modelica.SIunits.Length D1 = 0.016 "Diameter 1";
    parameter Modelica.SIunits.Length D2 = 0.05 "Diameter 2";

    extends HydraulicsByFluidon.Components.Base.HydTwoPortVertical;

protected
    Real zeta;
    Real zetaoO;
    Real zetaOo;
    Real my;
    Real beta;
    Real A1 = 0.25 * (D1 * D1 * Modelica.Constants.pi);
    Real A2 = 0.25 * (D2 * D2 * Modelica.Constants.pi);
    Real signDp;
    Real pMax;
    Real dp;
equation
    if D1 < D2 then 
        if noEvent(0 < dp) then 
            zeta = zetaOo;
        else 
            zeta = zetaoO;
        end if;
    else 
        if noEvent(0 < dp) then 
            zeta = zetaoO;
        else 
            zeta = zetaOo;
        end if;
    end if;
    fluidPortA.mFlow + fluidPortB.mFlow = 0;
    beta = min(D1, D2) / max(D1, D2);
    dp = fluidPortB.p - fluidPortA.p;
    my = 0.614 + 0.133 * beta ^ 2 - 0.261 * beta ^ 4 + 0.511 * beta ^ 6;
    pMax = max(fluidPortA.p, fluidPortB.p);
    signDp = noEvent(sign(dp));
    zetaOo = 1.5 * ((1 - my) / my) ^ 2;
    zetaoO = (1 - min(A1, A2) / max(A1, A2)) ^ 2;
    fluidPortB.mFlow = sqrt(2 / zeta) * min(A1, A2) * sqrt(abs(dp) * FluidInterface.calcRho(fluidId, pMax, fluidPortB.fluidTemperature)) * signDp;

    annotation (
        Icon(
            coordinateSystem(
                preserveAspectRatio = true,
                extent = {
                    {-100, -100}, 
                    {100, 100}}),
            graphics = {
                Rectangle(extent = {
                    {-30, -90}, 
                    {30, 0}}), 
                Rectangle(extent = {
                    {-50, 90}, 
                    {50, 0}}), 
                Text(
                    origin = {0, -68},
                    lineColor = {0, 0, 255},
                    fillColor = {0, 0, 255},
                    extent = {
                        {-78, -20}, 
                        {78, 20}},
                    textString = "1"), 
                Text(
                    origin = {0, 68},
                    lineColor = {0, 0, 255},
                    fillColor = {0, 0, 255},
                    extent = {
                        {-78, -20}, 
                        {78, 20}},
                    textString = "2")}),
        Documentation(info = "<html>\n            <p>\n                The component ExpansionContraction is a model of a cross section enlargement (diffusor) or a cross section reduction (nozzle). It\n                depends on the flow direction.\n            </p>\n            <p>\n                The component computes the loss number zeta\n            </p>\n            <p>\n                <center><img align=\"middle\" src=\"modelica://HydraulicsByFluidon/Resources/Images/Components/Resistors/Zeta.png\"></center>\n            </p>\n            <p>\n                 according to the following equations:\n            </p>\n            <p>\n                <center><img align=\"middle\" src=\"modelica://HydraulicsByFluidon/Resources/Images/Components/Lines/ExpansionContractionExpansion.png\"></center>\n            </p>\n            <p>\n                 Borda-Carnot Equation\n            </p>\n            <p>\n                <center><img align=\"middle\" src=\"modelica://HydraulicsByFluidon/Resources/Images/Components/Lines/ExpansionContractionZetaExpansion.png\"></center>\n            </p>\n            <p>\n                <center><img align=\"middle\" src=\"modelica://HydraulicsByFluidon/Resources/Images/Components/Lines/ExpansionContractionContraction.png\"></center>\n            </p>\n            <p>\n                <center><img align=\"middle\" src=\"modelica://HydraulicsByFluidon/Resources/Images/Components/Lines/ExpansionContractionBeta.png\"></center>\n                <center><img align=\"middle\" src=\"modelica://HydraulicsByFluidon/Resources/Images/Components/Lines/ExpansionContractionMy.png\"></center>\n                <center><img align=\"middle\" src=\"modelica://HydraulicsByFluidon/Resources/Images/Components/Lines/ExpansionContractionZetaContraction.png\"></center>\n            </p>\n            <p>\n                Formulas are taken from E. Truckenbrodt, Fluidmechanik, Band 1: Grundlagen und elementare Str&ouml;mungsvorg&auml;nge dichtebest&auml;ndiger Fluide, 4. Auflage, 2008.\n            </p></html>"));
end SimpleExpansionContraction;