Changeset 1951

Show
Ignore:
Timestamp:
12/05/2008 10:23:47 AM (5 weeks ago)
Author:
rfranke
Message:

add nTubes parameter to all pipe models

Location:
Modelica_Fluid/branches/StreamConnector/Modelica_Fluid
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • Modelica_Fluid/branches/StreamConnector/Modelica_Fluid/Examples/AST_BatchPlant.mo

    r1950 r1951  
    12911291              fillColor={85,170,255}, 
    12921292              fillPattern=FillPattern.Solid), 
    1293             Line(points={{-200,100},{-200,-100},{0,-100},{0,100}}, color={0,0,0}), 
     1293            Line(points={{-200,100},{-200,-100},{0,-100},{0,100}}, color={0,0,0}),  
     1294 
    12941295            Text( 
    12951296              extent={{-198,74},{0,38}}, 
     
    20512052              lineColor={0,0,0}, 
    20522053              textString=DynamicSelect(" ", realString( 
    2053                     level, 
    2054                     1, 
     2054                    level,  
     2055                    1,  
    20552056                    3))), 
    20562057            Line( 
  • Modelica_Fluid/branches/StreamConnector/Modelica_Fluid/Pipes.mo

    r1950 r1951  
    44 
    55  model StaticPipe "Basic pipe flow model without storage of mass or energy" 
     6 
    67    extends Modelica_Fluid.Pipes.BaseClasses.PartialPipe( 
    7           redeclare model HeatTransfer=BaseClasses.HeatTransfer.PipeHT_ideal); 
     8          redeclare model HeatTransfer=BaseClasses.HeatTransfer.PipeHT_none(nTubes=nTubes)); 
    89 
    910    replaceable PressureDrop pressureDrop( 
     
    1718            final p_a_start=p_a_start, 
    1819            final p_b_start=p_b_start, 
    19             final m_flow_start=m_flow_start, 
     20            final m_flow_start=m_flow_start/nTubes, 
    2021            final roughness=roughness, 
    2122            diameter=4*crossArea/perimeter, 
     
    2728            rotation=0))); 
    2829  equation 
    29     port_a.m_flow = pressureDrop.m_flow[1]; 
     30    port_a.m_flow = pressureDrop.m_flow[1]*nTubes; 
    3031    0 = port_a.m_flow + port_b.m_flow; 
    3132    port_a.h_outflow = inStream(port_b.h_outflow); 
     
    5152 
    5253    // Extend here to get right ordering in parameter box 
    53     extends Modelica_Fluid.Pipes.BaseClasses.PartialPipe( 
    54       final isCircular=true, 
    55       final perimeter=Modelica.Constants.pi*diameter, 
    56       final crossArea=Modelica.Constants.pi*diameter*diameter/4); 
     54    extends Modelica_Fluid.Pipes.BaseClasses.PartialPipe; 
    5755 
    5856     //Initialization 
     
    7876      redeclare final package Medium = Medium, 
    7977      final n=1, 
     78      final nTubes=nTubes, 
    8079      diameter=4*crossArea/perimeter, 
    8180      area=perimeter*length, 
     
    8382      final length=length, 
    8483      state={volume.medium.state}, 
    85       m_flow = {0.5*(port_a.m_flow - port_b.m_flow)}, 
     84      m_flow = {0.5*(port_a.m_flow - port_b.m_flow)}/nTubes, 
    8685      final useFluidHeatPort=true) "Edit heat transfer parameters"  
    8786      annotation (editButton=true, Placement(transformation(extent={{-11,14},{ 
     
    9190      redeclare package Medium = Medium, 
    9291      allowFlowReversal=allowFlowReversal, 
     92      nTubes=nTubes, 
    9393      length=length/2, 
     94      roughness=roughness, 
     95      diameter=diameter, 
     96      perimeter=perimeter, 
     97      crossArea=crossArea, 
    9498      height_ab=height_ab/2, 
    95       roughness=roughness, 
    9699      m_flow_start=m_flow_start, 
    97       diameter=diameter, 
    98100      redeclare final model PressureDrop = PressureDrop)  
    99101      annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}, 
     
    117119      redeclare package Medium = Medium, 
    118120      allowFlowReversal=allowFlowReversal, 
     121      nTubes=nTubes, 
    119122      length=length/2, 
     123      roughness=roughness, 
     124      diameter=diameter, 
     125      perimeter=perimeter, 
     126      crossArea=crossArea, 
    120127      height_ab=height_ab/2, 
    121       roughness=roughness, 
    122128      m_flow_start=m_flow_start, 
    123       diameter=diameter, 
    124129      redeclare final model PressureDrop = PressureDrop)   annotation (Placement(transformation(extent={{40,-40}, 
    125130              {60,-20}},         rotation=0))); 
     
    184189      Qs_flow = heatTransfer.Q_flow*nTubes); 
    185190 
    186     // Note: define nTubes as Real to support inverse calculations 
    187     parameter Real nTubes(min=1)=1 "Number of parallel tubes"  
    188      annotation(Dialog(group="Geometry")); 
    189  
    190191    // extending PartialPipe 
    191192    extends Modelica_Fluid.Pipes.BaseClasses.PartialPipe( 
     
    231232            final p_a_start=p_a_start, 
    232233            final p_b_start=p_b_start, 
    233             final m_flow_start=m_flow_start, 
     234            final m_flow_start=m_flow_start/nTubes, 
    234235            final roughness=roughness, 
    235236            diameter=4*crossArea/perimeter, 
     
    258259      redeclare each final package Medium = Medium, 
    259260      final n=n, 
     261      final nTubes=nTubes, 
    260262      diameter=4*crossArea/perimeter, 
    261263      area=perimeter*length, 
     
    283285 
    284286    // Source/sink terms for mass and energy balances 
    285     fluidVolume=fill(V/n*nTubes, n); 
     287    fluidVolume=fill(V/n, n); 
    286288    Ws_flow=zeros(n); 
    287289    for i in 1:n loop 
     
    347349        flowState[2:n+1] = medium[1:n].state; 
    348350        flowState[n+2] = state_b; 
    349         //m_flow = pressureDrop.m_flow; 
     351        //m_flow = pressureDrop.m_flow*nTubes; 
    350352        for i in 1:n+1 loop 
    351           m_flow[i] = pressureDrop.m_flow[i]; 
     353          m_flow[i] = pressureDrop.m_flow[i]*nTubes; 
    352354        end for; 
    353355      elseif modelStructure == ModelStructure.av_b then 
    354356        flowState[1:n] = medium[1:n].state; 
    355357        flowState[n+1] = state_b; 
    356         //m_flow[2:n+1] = pressureDrop.m_flow; 
     358        //m_flow[2:n+1] = pressureDrop.m_flow*nTubes; 
    357359        for i in 2:n+1 loop 
    358360          m_flow[i] = pressureDrop.m_flow[i-1]*nTubes; 
     
    362364        flowState[1] = state_a; 
    363365        flowState[2:n+1] = medium[1:n].state; 
    364         //m_flow[1:n] = pressureDrop.m_flow; 
     366        //m_flow[1:n] = pressureDrop.m_flow*nTubes; 
    365367        for i in 1:n loop 
    366368          m_flow[i] = pressureDrop.m_flow[i]*nTubes; 
     
    369371      else // avb 
    370372        flowState[1:n] = medium[1:n].state; 
    371         //m_flow[2:n] = pressureDrop.m_flow[1:n-1]; 
     373        //m_flow[2:n] = pressureDrop.m_flow[1:n-1]*nTubes; 
    372374        for i in 2:n loop 
    373375          m_flow[i] = pressureDrop.m_flow[i-1]*nTubes; 
     
    455457      extends Modelica_Fluid.Interfaces.PartialTwoPort; 
    456458 
    457        //Initialization 
     459      // Initialization 
    458460      parameter Medium.AbsolutePressure p_a_start=system.p_start 
    459461        "Start value of pressure at port a"  
     
    466468         annotation(Evaluate=true, Dialog(tab = "Initialization")); 
    467469 
    468       //Geometry 
     470      // Geometry 
     471 
     472      // Note: define nTubes as Real to support inverse calculations 
     473      parameter Real nTubes(min=1)=1 "Number of parallel tubes"  
     474        annotation(Dialog(group="Geometry")); 
    469475      parameter SI.Length length "Length"   annotation(Dialog(tab="General", group="Geometry")); 
    470       parameter SI.Length roughness(min=0)=2.5e-5 
    471         "Average height of surface asperities (default = smooth steel pipe)"  
    472           annotation(Dialog(group="Geometry",enable=WallFriction.use_roughness)); 
    473       parameter SI.Diameter diameter "Diameter of circular pipe"      annotation(Dialog(group="Geometry", enable=isCircular)); 
    474476      parameter Boolean isCircular=true 
    475477        "= true if cross sectional area is circular"  
    476478        annotation (Evaluate, Dialog(tab="General", group="Geometry")); 
     479      parameter SI.Diameter diameter "Diameter of circular pipe"      annotation(Dialog(group="Geometry", enable=isCircular)); 
    477480      parameter SI.Length perimeter=Modelica.Constants.pi*diameter 
    478481        "Inner perimeter"                                                                                       annotation(Dialog(tab="General", group="Geometry", enable=not isCircular)); 
    479482      parameter SI.Area crossArea=Modelica.Constants.pi*diameter*diameter/4 
    480483        "Inner cross section area"            annotation(Dialog(tab="General", group="Geometry", enable=not isCircular)); 
    481       final parameter SI.Volume V=crossArea*length "volume size"; 
     484      final parameter SI.Volume V=crossArea*length*nTubes "volume size"; 
     485      parameter SI.Length roughness(min=0)=2.5e-5 
     486        "Average height of surface asperities (default = smooth steel pipe)"  
     487          annotation(Dialog(group="Geometry",enable=WallFriction.use_roughness)); 
    482488 
    483489      // Static head 
     
    785791      replaceable package Medium=Modelica.Media.Interfaces.PartialMedium; 
    786792      parameter Integer n=1 "Number of heat transfer segments"; 
     793      parameter Real nTubes "Number of parallel tubes, used for HeatPorts only"; 
    787794      parameter SI.Length length "Pipe length"; 
    788795      parameter SI.Length diameter 
     
    796803 
    797804      // Output defined by heat transfer model 
    798       output SI.HeatFlowRate[n] Q_flow "Heat flow rates"; 
     805      output SI.HeatFlowRate[n] Q_flow "Heat flow rates per tube"; 
    799806 
    800807      // Heat ports 
     
    821828    equation 
    822829      T = Medium.temperature(state); 
     830      wallHeatPort.Q_flow = Q_flow*nTubes; 
    823831      if useFluidHeatPort then 
    824         prescribedHeatFlow.Q_flow = Q_flow; 
     832        prescribedHeatFlow.Q_flow = Q_flow*nTubes; 
    825833      else 
    826834        prescribedHeatFlow.port.T = T; 
    827835      end if; 
     836 
     837      connect(prescribedHeatFlow.port, fluidHeatPort) annotation (Line( 
     838          points={{-1.83697e-015,-20},{0,-20},{0,-60}}, 
     839          color={191,0,0}, 
     840          smooth=Smooth.None)); 
     841 
    828842      annotation (Icon(coordinateSystem(preserveAspectRatio=true,  extent={{-100, 
    829843                  -100},{100,100}}), graphics={Ellipse( 
     
    840854Base class for heat transfer models that can be used in distributed pipe models. 
    841855</html>"), 
    842         Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100}, 
    843                   {100,100}}), 
     856        Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{ 
     857                100,100}}), 
    844858                        graphics)); 
    845       connect(prescribedHeatFlow.port, fluidHeatPort) annotation (Line( 
    846           points={{-1.83697e-015,-20},{0,-20},{0,-60}}, 
    847           color={191,0,0}, 
    848           smooth=Smooth.None)); 
    849859    end PartialPipeHeatTransfer; 
    850860 
     
    867877      Re = CharacteristicNumbers.ReynoldsNumber(m_flow, diameter, crossArea, eta); 
    868878      Nu = CharacteristicNumbers.NusseltNumber(alpha, diameter, lambda); 
    869       wallHeatPort.Q_flow=Q_flow; 
    870       wallHeatPort.Q_flow=alpha.*area.*(wallHeatPort.T - T); 
     879      Q_flow=alpha.*area.*(wallHeatPort.T - T); 
    871880        annotation (Documentation(info="<html> 
    872881Base class for heat transfer models that are expressed in terms of the Nusselt number and which can be used in distributed pipe models. 
    873882</html>")); 
    874883    end PartialPipeHT_Nu; 
     884 
     885    model PipeHT_none 
     886        "PipeHT_none: No heat transfer assuming perfect isolation" 
     887      extends PartialPipeHeatTransfer; 
     888    equation 
     889      Q_flow = zeros(n); 
     890      annotation(Documentation(info="<html> 
     891Ideal heat transfer without thermal resistance. 
     892</html>")); 
     893    end PipeHT_none; 
    875894 
    876895    model PipeHT_ideal 
     
    879898    equation 
    880899      T = wallHeatPort.T; 
    881       Q_flow = wallHeatPort.Q_flow; 
    882900      annotation(Documentation(info="<html> 
    883901Ideal heat transfer without thermal resistance. 
     
    894912</html>")); 
    895913    equation 
    896       wallHeatPort.Q_flow = alpha0*area/n*(wallHeatPort.T - T); 
    897       wallHeatPort.Q_flow = Q_flow; 
     914      Q_flow = alpha0*area/n*(wallHeatPort.T - T); 
    898915    end PipeHT_constAlpha; 
    899916    annotation (Documentation(info="<html> 
     
    10461063        redeclare final package Medium = Medium, 
    10471064        final n=1, 
     1065        final nTubes=1, 
    10481066        diameter=4*crossArea/perimeter, 
    10491067        area=perimeter*length, 
     
    11881206       redeclare final package Medium = Medium, 
    11891207       final n=nNodes, 
     1208       final nTubes=1, 
    11901209       diameter=4*crossArea/perimeter, 
    11911210       area=perimeter*length, 
     
    13871406      redeclare each final package Medium = Medium, 
    13881407      final n=n, 
     1408      final nTubes=1, 
    13891409      diameter=4*crossArea/perimeter, 
    13901410      area=perimeter*length, 
     
    16491669              fillColor={0,0,0}, 
    16501670              fillPattern=FillPattern.Solid)}), 
    1651     Diagram(coordinateSystem(preserveAspectRatio=true,  extent={{-100,-100},{100, 
    1652                 100}}, 
     1671    Diagram(coordinateSystem(preserveAspectRatio=true,  extent={{-100,-100},{ 
     1672                100,100}}, 
    16531673            grid={1,1}), 
    16541674            graphics), 
  • Modelica_Fluid/branches/StreamConnector/Modelica_Fluid/Volumes.mo

    r1950 r1951  
    657657            lineColor={0,0,0}, 
    658658            textString=DynamicSelect(" ", realString( 
    659                 level, 
    660                 1, 
     659                level,  
     660                1,  
    661661                3))), 
    662662          Line(