@@ -732,6 +732,7 @@ Connector with one flow signal of type Real.
732732
733733 partial model Accumulation
734734 extends Physiolibrary.Fluid.Interfaces.CompositionSetup;
735+ extends Medium.SubstancesUseSetup;
735736
736737 parameter Integer nPorts = 0 "Number of hydraulic ports" annotation (
737738 Evaluate = true,
@@ -752,6 +753,8 @@ Connector with one flow signal of type Real.
752753 -20},{-80,20}})));
753754
754755 Medium.ChemicalSolution chemicalSolution(
756+ useFore = useFore,
757+ useRear = useRear,
755758 startSubstanceMasses = m_start,
756759 p = pressure,
757760 h = enthalpy / mass,
@@ -1419,8 +1422,8 @@ The sensor is ideal, i.e., it does not influence the fluid.
14191422 connect (substances.CO2, pCO2_measure.port_a) annotation (Line(points={{-99.9,0.1},
14201423 {-14,0.1},{-14,0},{-8,0}}, color={158,66,200}));
14211424 connect (substances.H, pH_measure.port_a)
1422- annotation (Line(points={{-99.9,0.1},{-40 ,0.1},{-40,-46 },{-48,-46 },{-48,-60 },
1423- {-44,-60}}, color={158,66,200}));
1425+ annotation (Line(points={{-99.9,0.1},{-58 ,0.1},{-58,-44 },{-66,-44 },{-66,-58},{-62,-58} },
1426+ color={158,66,200}));
14241427 annotation (
14251428 Icon(coordinateSystem(preserveAspectRatio = false), graphics={ Text(extent = {{-150, 80}, {150, 120}}, textString = "%name" , lineColor = {162, 29, 33})}),
14261429 Diagram(coordinateSystem(preserveAspectRatio = false)),
@@ -3195,7 +3198,8 @@ The sensor is ideal, i.e., it does not influence the fluid.
31953198 Physiolibrary.Fluid.Sensors.FlowMeasure flowMeasure(redeclare package Medium = Air) annotation (
31963199 Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 270, origin = {-318, 66})));
31973200 Physiolibrary.Fluid.Components.ElasticVessel upperRespiratoryTract(redeclare package Medium = Air, useSubstances = true ,
3198- volume_start= 0.0001 , massFractions_start = Air.reference_X[1 :Air.nS - 1 ], useThermalPort = true , Compliance = TotalCompliance / 100 , ZeroPressureVolume(displayUnit = "ml" ) = 0.0001 , ResidualVolume(displayUnit = "ml" ) = 0.0001 , nPorts = 3 ) annotation (
3201+ volume_start= 0.0001 ,
3202+ massFractions_start= Air.reference_X[1 :Air.nS - 1 ], useThermalPort = true , Compliance = TotalCompliance / 100 , ZeroPressureVolume(displayUnit = "ml" ) = 0.0001 , ResidualVolume(displayUnit = "ml" ) = 0.0001 , nPorts = 3 ) annotation (
31993203 Placement(transformation(extent = {{-328, -10}, {-308, 10}})));
32003204 Physiolibrary.Fluid.Components.Resistor upperRespiratoryTractResistance(redeclare package Medium = Air, Resistance = 0.5 * TracheaResistance) annotation (
32013205 Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 90, origin={-318,34})));
@@ -3216,6 +3220,8 @@ The sensor is ideal, i.e., it does not influence the fluid.
32163220 annotation (Placement(transformation(extent={{-302,-44},{-322,-24}})));
32173221 Physiolibrary.Thermal.Sources.UnlimitedHeat coreHeat(T = system.T_ambient) annotation (
32183222 Placement(transformation(extent = {{-274, -44}, {-294, -24}})));
3223+ Chemical.Processes.Diffusion diffusion annotation (Placement(transformation(extent={{-178,18},{-158,38}})));
3224+ Media.Air.SubstancesPort substancesPort annotation (Placement(transformation(extent={{-236,-26},{-196,14}})));
32193225 equation
32203226 connect (environment.y, flowMeasure.q_in) annotation (
32213227 Line(points = {{-340, 88}, {-318, 88}, {-318, 76}}, color = {127, 0, 0}, thickness = 0.5));
@@ -3249,6 +3255,16 @@ The sensor is ideal, i.e., it does not influence the fluid.
32493255 connect (evaporation.gas_port, upperRespiratoryTract.substances.H2O)
32503256 annotation (Line(points={{-352,-28},{-352,0},{-328,0}}, color={158,66,
32513257 200}));
3258+ connect (diffusion.rear, substancesPort.O2fore)
3259+ annotation (Line(
3260+ points={{-178,28},{-215.9,28},{-215.9,-5.9}},
3261+ color={158,66,200},
3262+ thickness=0.5));
3263+ connect (upperRespiratoryTract.substances, substancesPort)
3264+ annotation (Line(
3265+ points={{-328,0},{-336,0},{-336,-52},{-216,-52},{-216,-6}},
3266+ color={158,66,200},
3267+ thickness=0.5));
32523268 annotation (
32533269 Icon(coordinateSystem(preserveAspectRatio = false)),
32543270 Diagram(coordinateSystem(preserveAspectRatio = false, extent = {{-360, -100}, {100, 100}})),
@@ -4900,6 +4916,92 @@ The sensor is ideal, i.e., it does not influence the fluid.
49004916<p><br><img src=\" modelica://Physiolibrary/Resources/Images/Examples/BloodGasesEquilibrium.bmp\"/></p>
49014917</html>" ));
49024918 end BloodTitrationByNaOH;
4919+
4920+ model AirWaterSaturation_0 "Human respiration model"
4921+ extends Modelica.Icons.Example;
4922+ import Modelica.Units.SI.* ;
4923+ replaceable package Air = Media.Air;
4924+ parameter Physiolibrary.Types.HydraulicResistance TotalResistance = 147099.75 "Total lungs pathways resistance" ;
4925+ parameter Real BronchiResistanceFraction = 0.3 ;
4926+ parameter Real AlveoliDuctResistanceFraction = 0.2 ;
4927+ parameter Real TracheaResistanceFraction = 1 - (BronchiResistanceFraction + AlveoliDuctResistanceFraction) / 2 ;
4928+ parameter Physiolibrary.Types.HydraulicResistance TracheaResistance = TotalResistance * TracheaResistanceFraction "Left Bronchi Resistance" ;
4929+ parameter Physiolibrary.Types.HydraulicCompliance TotalCompliance(displayUnit = "l/cmH2O" ) = 1.0197162129779e-06 "Total lungs compliance" ;
4930+ parameter Temperature CoreTemperature = 310.15 "body temperature" ;
4931+ parameter Temperature EnvironmentTemperature = 298.15 "external air temperature" ;
4932+
4933+ inner Modelica.Fluid.System system(T_ambient = CoreTemperature) "Human body system setting" annotation (
4934+ Placement(transformation(extent = {{60, 66}, {80, 86}})));
4935+
4936+ Physiolibrary.Fluid.Sources.PressureSource environment(redeclare package Medium = Air, temperature_start = EnvironmentTemperature) "External environment" annotation (
4937+ Placement(transformation(extent = {{-360, 78}, {-340, 98}})));
4938+ Physiolibrary.Fluid.Sensors.FlowMeasure flowMeasure(redeclare package Medium = Air) annotation (
4939+ Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 270, origin = {-318, 66})));
4940+ Physiolibrary.Fluid.Components.ElasticVessel upperRespiratoryTract(redeclare package Medium = Air,
4941+ useSubstances= true ,
4942+ volume_start= 0.0001 ,
4943+ massFractions_start= Air.reference_X[1 :Air.nS - 1 ], useThermalPort = true , Compliance = TotalCompliance / 100 , ZeroPressureVolume(displayUnit = "ml" ) = 0.0001 , ResidualVolume(displayUnit = "ml" ) = 0.0001 , nPorts= 2 ,
4944+ substances(useH2Orear= true )) annotation (
4945+ Placement(transformation(extent = {{-328, -10}, {-308, 10}})));
4946+ Physiolibrary.Fluid.Components.Resistor upperRespiratoryTractResistance(redeclare package Medium = Air, Resistance = 0.5 * TracheaResistance) annotation (
4947+ Placement(transformation(extent = {{-10, -10}, {10, 10}}, rotation = 90, origin={-318,34})));
4948+ Physiolibrary.Fluid.Sensors.Temperature Temperature_upperRespiratory(redeclare package Medium = Air) annotation (
4949+ Placement(transformation(extent = {{-298, 30}, {-278, 50}})));
4950+ Physiolibrary.Fluid.Sensors.Temperature Temperature_mouth(redeclare package Medium = Air) annotation (
4951+ Placement(transformation(extent = {{-296, 72}, {-276, 92}})));
4952+ Physiolibrary.Thermal.Components.Conductor cooling(Conductance(
4953+ displayUnit= "W/K" ) = 10 )
4954+ annotation (Placement(transformation(extent={{-302,-44},{-322,-24}})));
4955+ Physiolibrary.Thermal.Sources.UnlimitedHeat coreHeat(T = system.T_ambient) annotation (
4956+ Placement(transformation(extent = {{-274, -44}, {-294, -24}})));
4957+ Chemical.Boundaries.ExternalSubstance externalSubstance(
4958+ substanceDefinition= Chemical.Substances.Liquid.H2O,
4959+ quantity= Chemical.Boundaries.Internal.Types.ConcentrationQuantities.x_molpmol,
4960+ FixedValue= 1 ) annotation (Placement(transformation(extent={{-396,-46},{-376,-26}})));
4961+ Chemical.Processes.GasSolubility gasSolubility annotation (Placement(transformation(extent={{-358,-46},{-338,-26}})));
4962+ Media.Air.SubstancesPort substancesPort(useH2Orear= true ) annotation (Placement(transformation(extent={{-370,-10},{-330,30}})));
4963+ equation
4964+ connect (environment.y, flowMeasure.q_in) annotation (
4965+ Line(points = {{-340, 88}, {-318, 88}, {-318, 76}}, color = {127, 0, 0}, thickness = 0.5));
4966+ connect (flowMeasure.q_out, upperRespiratoryTractResistance.q_out) annotation (
4967+ Line(points={{-318,56},{-318,44}}, color = {127, 0, 0}, thickness = 0.5));
4968+ connect (upperRespiratoryTractResistance.q_in, upperRespiratoryTract.q_in[1 ]) annotation (
4969+ Line(points={{-318,24},{-318,-0.65},{-318.1,-0.65}}, color = {127, 0, 0}, thickness = 0.5));
4970+ connect (cooling.q_out, upperRespiratoryTract.heatPort) annotation (Line(
4971+ points={{-322,-34},{-324,-34},{-324,-10}},
4972+ color={191,0,0},
4973+ thickness=0.5));
4974+ connect (coreHeat.port, cooling.q_in) annotation (Line(
4975+ points={{-294,-34},{-302,-34}},
4976+ color={191,0,0},
4977+ thickness=0.5));
4978+ connect (flowMeasure.q_in, Temperature_mouth.port) annotation (
4979+ Line(points = {{-318, 76}, {-318, 82}, {-298, 82}, {-298, 72}, {-286, 72}}, color = {127, 0, 0}, thickness = 0.5));
4980+ connect (upperRespiratoryTract.q_in[2 ], Temperature_upperRespiratory.port) annotation (
4981+ Line(points={{-318.1,0.65},{-318.1,10},{-318,10},{-318,8},{-288,8},{-288,30}}, color = {127, 0, 0}, thickness = 0.5));
4982+ connect (externalSubstance.fore, gasSolubility.rear) annotation (Line(
4983+ points={{-376,-36},{-358,-36}},
4984+ color={158,66,200},
4985+ thickness=0.5));
4986+ connect (upperRespiratoryTract.substances, substancesPort)
4987+ annotation (Line(
4988+ points={{-328,0},{-328,-16},{-350,-16},{-350,10}},
4989+ color={158,66,200},
4990+ thickness=0.5));
4991+ connect (gasSolubility.fore, substancesPort.H2Orear)
4992+ annotation (Line(
4993+ points={{-338,-36},{-330,-36},{-330,-18},{-376,-18},{-376,10.1},{-349.9,10.1}},
4994+ color={158,66,200},
4995+ thickness=0.5));
4996+ annotation (
4997+ Icon(coordinateSystem(preserveAspectRatio = false)),
4998+ Diagram(coordinateSystem(preserveAspectRatio = false, extent = {{-360, -100}, {100, 100}})),
4999+ experiment(StopTime = 200, __Dymola_Algorithm = "Dassl" ),
5000+ Documentation(info = "<html>
5001+ <p>References:</p>
5002+ <p><br>Mecklenburgh, J. S., and W. W. Mapleson. "Ventilatory assistance and respiratory muscle activity. 1: Interaction in healthy volunteers." <i>British journal of anaesthesia</i> 80.4 (1998): 422-433.</p>
5003+ </html>" ));
5004+ end AirWaterSaturation_0;
49035005 end Examples;
49045006 annotation (
49055007 Documentation(info = "<html>
0 commit comments