Changeset 1951
- Timestamp:
- 12/05/2008 10:23:47 AM (5 weeks ago)
- Location:
- Modelica_Fluid/branches/StreamConnector/Modelica_Fluid
- Files:
-
- 3 modified
-
Examples/AST_BatchPlant.mo (modified) (2 diffs)
-
Pipes.mo (modified) (28 diffs)
-
Volumes.mo (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
Modelica_Fluid/branches/StreamConnector/Modelica_Fluid/Examples/AST_BatchPlant.mo
r1950 r1951 1291 1291 fillColor={85,170,255}, 1292 1292 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 1294 1295 Text( 1295 1296 extent={{-198,74},{0,38}}, … … 2051 2052 lineColor={0,0,0}, 2052 2053 textString=DynamicSelect(" ", realString( 2053 level, 2054 1, 2054 level, 2055 1, 2055 2056 3))), 2056 2057 Line( -
Modelica_Fluid/branches/StreamConnector/Modelica_Fluid/Pipes.mo
r1950 r1951 4 4 5 5 model StaticPipe "Basic pipe flow model without storage of mass or energy" 6 6 7 extends Modelica_Fluid.Pipes.BaseClasses.PartialPipe( 7 redeclare model HeatTransfer=BaseClasses.HeatTransfer.PipeHT_ ideal);8 redeclare model HeatTransfer=BaseClasses.HeatTransfer.PipeHT_none(nTubes=nTubes)); 8 9 9 10 replaceable PressureDrop pressureDrop( … … 17 18 final p_a_start=p_a_start, 18 19 final p_b_start=p_b_start, 19 final m_flow_start=m_flow_start ,20 final m_flow_start=m_flow_start/nTubes, 20 21 final roughness=roughness, 21 22 diameter=4*crossArea/perimeter, … … 27 28 rotation=0))); 28 29 equation 29 port_a.m_flow = pressureDrop.m_flow[1] ;30 port_a.m_flow = pressureDrop.m_flow[1]*nTubes; 30 31 0 = port_a.m_flow + port_b.m_flow; 31 32 port_a.h_outflow = inStream(port_b.h_outflow); … … 51 52 52 53 // 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; 57 55 58 56 //Initialization … … 78 76 redeclare final package Medium = Medium, 79 77 final n=1, 78 final nTubes=nTubes, 80 79 diameter=4*crossArea/perimeter, 81 80 area=perimeter*length, … … 83 82 final length=length, 84 83 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, 86 85 final useFluidHeatPort=true) "Edit heat transfer parameters" 87 86 annotation (editButton=true, Placement(transformation(extent={{-11,14},{ … … 91 90 redeclare package Medium = Medium, 92 91 allowFlowReversal=allowFlowReversal, 92 nTubes=nTubes, 93 93 length=length/2, 94 roughness=roughness, 95 diameter=diameter, 96 perimeter=perimeter, 97 crossArea=crossArea, 94 98 height_ab=height_ab/2, 95 roughness=roughness,96 99 m_flow_start=m_flow_start, 97 diameter=diameter,98 100 redeclare final model PressureDrop = PressureDrop) 99 101 annotation (Placement(transformation(extent={{-60,-40},{-40,-20}}, … … 117 119 redeclare package Medium = Medium, 118 120 allowFlowReversal=allowFlowReversal, 121 nTubes=nTubes, 119 122 length=length/2, 123 roughness=roughness, 124 diameter=diameter, 125 perimeter=perimeter, 126 crossArea=crossArea, 120 127 height_ab=height_ab/2, 121 roughness=roughness,122 128 m_flow_start=m_flow_start, 123 diameter=diameter,124 129 redeclare final model PressureDrop = PressureDrop) annotation (Placement(transformation(extent={{40,-40}, 125 130 {60,-20}}, rotation=0))); … … 184 189 Qs_flow = heatTransfer.Q_flow*nTubes); 185 190 186 // Note: define nTubes as Real to support inverse calculations187 parameter Real nTubes(min=1)=1 "Number of parallel tubes"188 annotation(Dialog(group="Geometry"));189 190 191 // extending PartialPipe 191 192 extends Modelica_Fluid.Pipes.BaseClasses.PartialPipe( … … 231 232 final p_a_start=p_a_start, 232 233 final p_b_start=p_b_start, 233 final m_flow_start=m_flow_start ,234 final m_flow_start=m_flow_start/nTubes, 234 235 final roughness=roughness, 235 236 diameter=4*crossArea/perimeter, … … 258 259 redeclare each final package Medium = Medium, 259 260 final n=n, 261 final nTubes=nTubes, 260 262 diameter=4*crossArea/perimeter, 261 263 area=perimeter*length, … … 283 285 284 286 // Source/sink terms for mass and energy balances 285 fluidVolume=fill(V/n *nTubes, n);287 fluidVolume=fill(V/n, n); 286 288 Ws_flow=zeros(n); 287 289 for i in 1:n loop … … 347 349 flowState[2:n+1] = medium[1:n].state; 348 350 flowState[n+2] = state_b; 349 //m_flow = pressureDrop.m_flow ;351 //m_flow = pressureDrop.m_flow*nTubes; 350 352 for i in 1:n+1 loop 351 m_flow[i] = pressureDrop.m_flow[i] ;353 m_flow[i] = pressureDrop.m_flow[i]*nTubes; 352 354 end for; 353 355 elseif modelStructure == ModelStructure.av_b then 354 356 flowState[1:n] = medium[1:n].state; 355 357 flowState[n+1] = state_b; 356 //m_flow[2:n+1] = pressureDrop.m_flow ;358 //m_flow[2:n+1] = pressureDrop.m_flow*nTubes; 357 359 for i in 2:n+1 loop 358 360 m_flow[i] = pressureDrop.m_flow[i-1]*nTubes; … … 362 364 flowState[1] = state_a; 363 365 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; 365 367 for i in 1:n loop 366 368 m_flow[i] = pressureDrop.m_flow[i]*nTubes; … … 369 371 else // avb 370 372 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; 372 374 for i in 2:n loop 373 375 m_flow[i] = pressureDrop.m_flow[i-1]*nTubes; … … 455 457 extends Modelica_Fluid.Interfaces.PartialTwoPort; 456 458 457 //Initialization459 // Initialization 458 460 parameter Medium.AbsolutePressure p_a_start=system.p_start 459 461 "Start value of pressure at port a" … … 466 468 annotation(Evaluate=true, Dialog(tab = "Initialization")); 467 469 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")); 469 475 parameter SI.Length length "Length" annotation(Dialog(tab="General", group="Geometry")); 470 parameter SI.Length roughness(min=0)=2.5e-5471 "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));474 476 parameter Boolean isCircular=true 475 477 "= true if cross sectional area is circular" 476 478 annotation (Evaluate, Dialog(tab="General", group="Geometry")); 479 parameter SI.Diameter diameter "Diameter of circular pipe" annotation(Dialog(group="Geometry", enable=isCircular)); 477 480 parameter SI.Length perimeter=Modelica.Constants.pi*diameter 478 481 "Inner perimeter" annotation(Dialog(tab="General", group="Geometry", enable=not isCircular)); 479 482 parameter SI.Area crossArea=Modelica.Constants.pi*diameter*diameter/4 480 483 "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)); 482 488 483 489 // Static head … … 785 791 replaceable package Medium=Modelica.Media.Interfaces.PartialMedium; 786 792 parameter Integer n=1 "Number of heat transfer segments"; 793 parameter Real nTubes "Number of parallel tubes, used for HeatPorts only"; 787 794 parameter SI.Length length "Pipe length"; 788 795 parameter SI.Length diameter … … 796 803 797 804 // 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"; 799 806 800 807 // Heat ports … … 821 828 equation 822 829 T = Medium.temperature(state); 830 wallHeatPort.Q_flow = Q_flow*nTubes; 823 831 if useFluidHeatPort then 824 prescribedHeatFlow.Q_flow = Q_flow ;832 prescribedHeatFlow.Q_flow = Q_flow*nTubes; 825 833 else 826 834 prescribedHeatFlow.port.T = T; 827 835 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 828 842 annotation (Icon(coordinateSystem(preserveAspectRatio=true, extent={{-100, 829 843 -100},{100,100}}), graphics={Ellipse( … … 840 854 Base class for heat transfer models that can be used in distributed pipe models. 841 855 </html>"), 842 Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100}, 843 {100,100}}),856 Diagram(coordinateSystem(preserveAspectRatio=true, extent={{-100,-100},{ 857 100,100}}), 844 858 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));849 859 end PartialPipeHeatTransfer; 850 860 … … 867 877 Re = CharacteristicNumbers.ReynoldsNumber(m_flow, diameter, crossArea, eta); 868 878 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); 871 880 annotation (Documentation(info="<html> 872 881 Base class for heat transfer models that are expressed in terms of the Nusselt number and which can be used in distributed pipe models. 873 882 </html>")); 874 883 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> 891 Ideal heat transfer without thermal resistance. 892 </html>")); 893 end PipeHT_none; 875 894 876 895 model PipeHT_ideal … … 879 898 equation 880 899 T = wallHeatPort.T; 881 Q_flow = wallHeatPort.Q_flow;882 900 annotation(Documentation(info="<html> 883 901 Ideal heat transfer without thermal resistance. … … 894 912 </html>")); 895 913 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); 898 915 end PipeHT_constAlpha; 899 916 annotation (Documentation(info="<html> … … 1046 1063 redeclare final package Medium = Medium, 1047 1064 final n=1, 1065 final nTubes=1, 1048 1066 diameter=4*crossArea/perimeter, 1049 1067 area=perimeter*length, … … 1188 1206 redeclare final package Medium = Medium, 1189 1207 final n=nNodes, 1208 final nTubes=1, 1190 1209 diameter=4*crossArea/perimeter, 1191 1210 area=perimeter*length, … … 1387 1406 redeclare each final package Medium = Medium, 1388 1407 final n=n, 1408 final nTubes=1, 1389 1409 diameter=4*crossArea/perimeter, 1390 1410 area=perimeter*length, … … 1649 1669 fillColor={0,0,0}, 1650 1670 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}}, 1653 1673 grid={1,1}), 1654 1674 graphics), -
Modelica_Fluid/branches/StreamConnector/Modelica_Fluid/Volumes.mo
r1950 r1951 657 657 lineColor={0,0,0}, 658 658 textString=DynamicSelect(" ", realString( 659 level, 660 1, 659 level, 660 1, 661 661 3))), 662 662 Line(
