精华内容
下载资源
问答
  • 天然气压缩因子计算

    热门讨论 2011-09-14 13:33:29
    基于AGA8 92DC的天然气压缩因子计算软件
  • 输气管道压缩因子计算,石油大学,输气管道设计与管理
  • 天然气压缩因子计算的软件非常非常的好用哦!
  • 根据ISO12213-2:2009中Fortran程序编写,迭代过程有改动。该标准中混合物能量参数U公式B.6第一项缺少系数2,国标17747.2-1999中是正确的。
  • 天然气压缩机优化运行降本增效2020/6/3 15:05一、概述天然气进厂后分两部分,一部分需经气柜天然气压缩机增压补充燃料气管网,一部分直供电站气炉、常减压工艺炉和食堂。停运前天然气进厂量控制在5万方(36吨)/天,...

    天然气压缩机优化运行降本增效

    2020/6/3 15:05一、概述天然气进厂后分两部分,一部分需经气柜天然气压缩机增压补充燃料气管网,一部分直供电站气炉、常减压工艺炉和食堂。停运前天然气进厂量控制在5万方(36吨)/天,其中常减压和食堂消耗天然气1.3万方(10吨)/天,其余天然气3.7万方(26吨)/天经气柜天然气压缩机增压补充至公司燃料气管网。

    高压瓦斯管网流程示意图

    二、节能思路

    不需增压即可使用天然气作为燃料的电站气炉,目前没有使用天然气,存在停运气柜天然气压缩机的可能性。电站气炉消耗燃料气53吨/天,高于天然气进厂量,可以采用燃料气和天然气共用的运行方式,存在停运气柜天然气压缩机的可行性。

    燃料气管网平衡通过MTBE装置汽化器补碳四控制,可以停运气柜天然气压缩机,气柜天然气压缩机设计功率355千瓦,有显著的节电效果。

    三、实施后的节能效果

    1.节电效果

    天然气压缩机停机后日节电3000度,电价为0.587元/度,计算年节约电费64.28万元。

    2.降低燃料费用

    天然气进厂量日减少26吨,天然气价格2710元/吨,年降低燃料费用2571.79万元。

    四、停天然气压缩机后需注意事项

    1.高压瓦斯管网停止补天然气后,高压瓦斯中的组成发生变化,高压瓦斯用户,需密切关注火嘴燃烧情况及热值变化,及时进行用量调整。

    2.燃料管网平衡能力降低,需操作班组具备应急快速启运天然气压缩机的能力。

    3. 燃料管网平衡能力降低,对装置平稳运行依靠性增强,反之对装置稳定运行影响增大,需生产运行统筹管控。

    5dea62ec0003d9512cab913b6969f82a.png
    3ab558d3cf534a2bf9fedcf3c09c8454.png
    2479a8164978e43a716f5b6d75696e72.png
    展开全文
  • 本文版权归天然气工业杂志社所有未经允许,不得转载徐秀芬1 李泓霏1 刘国豪21....加气站压缩机组效率是合理表征、科学评价加气站能效水平的关键指标之一,但天然气处理和输送系统中通用的压缩机组效率测试和计算...

    41137f7671165fcfe1b05865384efa96.png

    6122c43d1fd2d80d5812b444684f20e0.gif

    本文版权归天然气工业杂志社所有

    未经允许,不得转载

    6122c43d1fd2d80d5812b444684f20e0.gif

    徐秀芬1 李泓霏1 刘国豪2

    1. 东北石油大学机械科学与工程学院

    2. 中国石油天然气股份有限公司管道分公司

    管道科技研究中心

    摘 要    电驱往复式压缩机组是天然气加气站的主要耗能设备,也是加气站开展节能降耗工作的重点所在。加气站压缩机组效率是合理表征、科学评价加气站能效水平的关键指标之一,但天然气处理和输送系统中通用的压缩机组效率测试和计算方法仅适用于压缩机出口压力恒定的工况,并不适用于加气站压缩机出口压力和温度实时变化的工况。为此,根据热力学理论,采用焓差法计算压缩机组输出的有效总能量,用输出的有效总能量与机组耗电量之比计算加气站压缩机组的平均效率,并采用该方法对加气站压缩机组进行现场测试与计算。研究结果表明:①加气站压缩机组效率理论计算方法虽然较为精确,但可操作性较差,现场测试时几乎无法操作;②该加气站压缩机组平均效率的计算方法具有所需测试参数少、计算过程简单、可操作性强等优点,更加适用于现场测试和工程应用。结论认为,相关监测部门可依据该计算方法来测试、计算、评价加气站压缩机组的能效水平,为加气站制订效率提高方案提供理论基础和技术支持,从而加快推进加气站的节能降耗工作。

    关键词   天然气加气站 压缩机组效率 电驱往复式压缩机组 加气站节能 REFPROP 节能降耗 现场测试

    0 引言

    对天然气加气站的总体能耗进行分析发现,电驱往复式压缩机组(天然气加气站)和潜液电泵机组(液化天然气加气站)在整个加气站工艺过程中的能耗最大。压缩机组效率和潜液电泵机组效率作为评价这两种设备能效水平的重要指标[1-2],许多专家都曾对其进行了深入研究和探讨,其中潜液电泵机组效率通常利用泵流量、扬程、重力加速度的乘积与电动机输入功率的比值进行计算[3],目前这种方法在行业内被广泛采用,几乎没有异议;而对于加气站压缩机组效率,至今仍未有准确、可靠、操作性强的计算方法[4]。因此,在明确传统理论计算方法的基础上,首次提出压缩机组平均效率(也称压缩机组效率)的计算方法,并对加气站的多台压缩机组进行了测试与计算,以验证该方法的准确度和可靠性,以期为相关部门对压缩机组效率的计算和监测提供依据。

    1 压缩机组的精确效率计算

    压缩机的指示功是指压缩机中直接消耗于气体的功,即由示功器记录的压力—容积图所对应的功[5]。通常压缩机的实际示功图很复杂,很难直接得到计算公式,理论上可采用机械示功器、电子示功器及计算机采集数据绘制指示图的方法得到压缩机的示功图[5-6],然后利用求积仪或按式(1)~(3)的计算方法计算,得到压缩机的指示功率。压缩机每转的指示功为:

    c51e75405785d1d41a6d4b31ab24d744.png

    式中Wk表示压缩机每转的指示功,kJ Pi 表示第i个时刻压缩机气缸内的压力,Pa A 表示压缩机活塞面积,m2SiSi 1表示第ii 1 个时刻压缩机活塞位移,m m 表示压缩机的一个循环过程按时间被平均划分的份数。

    压缩机的指示功率为:

    c7c78e8cf7367574b215f9086c1d809f.png

    天然气加气站压缩机的特殊之处在于,因储气设施内的压力随压缩机的工作而不断增大,导致压缩机每转的指示功率不完全相等,且压缩机上通常不加装活塞的位置传感器和缸内压力传感器,要准确测试和计算压缩机的指示功率十分困难。因此,这种计算方法在现场测试中较难操作,需研究探索更为简便、准确的方法来对压缩机组的输出能量进行计算。

    2 压缩机组的平均效率计算

    当压缩机对气体做功,将气体注入加气站储气设施(包括车载储气瓶组、埋地储气瓶组和储气井)时,储气设施内的原有气体也会因新注入的高压天然气而有能量的增加。因此,压缩机组输出能量不仅包括储气设施内新增气体携带的能量,还应包括储气设施内原有气体能量的增加值。在计算过程中,首先应确定测试阶段内储气设施内的新增气量以及启动压缩机前储气设施内的原有气量,根据压缩前后气体的焓差[7],计算得到储气设施内所有气体总能量的增加值,即为压缩机组的输出能量。压缩机组的输出能量与耗电量的比值即为该压缩机组的平均效率。

    2.1 测试阶段内的新增气量

    测试阶段内的新增气量是指在测试阶段内加气母站槽车气瓶的新增加气量,或标准站、机械子站及液压活塞子站压缩机组的通过气量。压缩机启机时储气设施中原有气体的状态方程为:

    5e1a82c313cccc26cbcfb59eac7a9a30.png

    式中p1表示启机时储气设施中天然气的绝对压力,Pa Vd表示储气设施的设计容积,m3Z1表示启机时储气设施中气体的压缩因子;n1表示启机时储气设施中存留气体的量,mol R 表示摩尔气体常数,数值约为8.314 5 J /(mol·K);T1表示启机时储气设施中气体的温度,K

    储气设施中原有的n1mol 气体在标准状况(0.1MPa20 ℃)下的状态方程为:

    514b37d1c940a79e6f9022a1e7598296.png

    式中p0表示一个标准大气压,数值为101 325 Pa V1表示n1mol 气体在标准状况下的体积,m3Z0表示标准状况下气体压缩因子,可采用AGA8-92DC 方法[8-10]进行计算;T0表示标准状况下温度,数值为293.15 K

    由式(4)、(5)可得压缩机启机时储气设施中原有气体在标准状况下的体积为:

    e79fca1dce554c6b5de4e42be51a03ad.png

    式中p2表示停机时储气设施中天然气的绝对压力,Pa Z2表示停机时储气设施中气体的压缩因子;n2表示停机时储气设施中所储存气体的量,mol T2表示停机时储气设施中天然气温度,K

    压缩机停机时储气设施中所储存的n2mol 气体在标准状况下的状态方程为:

    67354d20e254870a1dd9a969d8dbeeff.png

    式中V2表示停机时储气设施中所储存气体在标准状况下的体积,m3

    由式(7)、(8)可得压缩机停机时储气设施气体在标准状况下的体积为:

    3f79caaf36eda88f2fbf7686ab627e02.png

    2.2 天然气比焓值计算

    任意工况下实际天然气的比焓值可由两种方法计算:①参照式(11)~(21)进行估算[11] ;②将实测的天然气气体组分输入软件进行计算。天然气视分子质量按下式计算:

    ec91f11f923cbdfa1b952a73a26ca372.png

    式中M 表示天然气视分子质量;Mi 表示天然气第i 组分相对分子质量;xi 表示天然气第i 组分摩尔分数。

    天然气气体常数(Rg)按下式计算:

    0cdd74c0834ef5d76c8cf433a83f2321.png

    式中h0表示天然气比焓值,kJ/kg hi0表示天然气第i 组分的理想气体比焓值,kJ/kg,其值与进(出)口温度有关。各组分的比焓值如图1 所示。

    c58851e5a8a667a634aa48420d07c22a.png

    图1 天然气各组分理想气体比焓值图

    天然气视临界压力按下式计算:

    73cf65d23a9e4a2d97a252f7d941fe6f.png

    式中pc表示天然气视临界压力,MPa pci 表示天然气第i 组分临界压力,MPa,部分烃类及非烃类组分的临界压力如表1 所示。

    天然气进、出口视对比压力按下式计算:

    1ea22d3c604597b29d5b1b6e6697a5f0.png

    式中prinjproutj 表示第j 级压缩机进、出口天然气视对比压力;pinjpoutj 表示第j 级压缩机进、出口压力,MPa

    天然气视临界温度按下式计算:

    999825f9bdecd7c41845e8e2e77f4672.png

    式中Tc表示天然气视临界温度,K Tci 表示天然气第i 组分临界温度,K,部分烃类及非烃类组分的临界温度见表1

    1 部分烃类及非烃类组分的物理化学常数值表

    5a54f56a42df79bd192e410db9c5cb3c.png

    天然气进、出口视对比温度按下式计算:

    c0925a3bbbd1c1050d3629bf6dd87965.png

    f86c6ce0fb612091b6e31bfa5a83669c.png

    图2 实际气体比焓值的修正系数图上述比焓值的计算方法需要读取图中数值,计算复杂且准确度较差;也可采用美国国家标准与技术研究院(National Institute of Standards and TechnologyNIST)研制的REFPROP 软件对不同工况下实际天然气的比焓值进行计算[13],该方法简单方便且准确度较高。首先点击Substance-Define New Mixture, 根据气质分析报告中天然气各组分的摩尔分数(MoleFraction)或质量分数(Mass Fraction)新建天然气流体;点击Calculate-Isoproperty Tables,选择Temperature-Pressure(或Pressure-Temperature),输入该工况下的温度、压力区间及步长,即可得到该气体组分的天然气在给定工况下的实际比焓值(Enthalpy)。同时,也可点击Plot-Setup Pressure vs. Enthalpy Plo(t Temperature vs. Enthalpy Plot),观察该气体在给定压力、温度变化范围内比焓值的变化趋势。

    2.3 计算压缩机组输出总能量

    电驱往复式压缩机组输出总能量即储气设施中因引进天然气而获得的总能量,包括测试阶段内新增加气量的能量增加值(WT1)和压缩机组启机时储气设施中原有气量的能量增加值(WT2)。测试阶段内新增加气量的能量增加值(WT1)可按下式计算:

    69b66894e475e1cb916f5f795229f2ce.png

    式中ρq表示标况下天然气的密度,kg/m3hout表示停机时压缩机出口气体比焓值,kJ/kg hin表示启机时母站或标准站压缩机进口气体比焓值,或测试开始时机械子站、液压活塞子站槽车气瓶中气体比焓值,kJ/kg压缩机组启机时储气设施中原有气量的能量增加值(WT2)按下式计算:d272f2139b1acd77b343443f996f704f.png

    式中V1表示母站压缩机组启机时槽车气瓶中气量,或标准站、机械子站及液压活塞子站储气瓶组(井)中的气量,m3hin1表示启机时母站槽车气瓶中气体比焓值、标准站和机械子站或液压活塞子站储气瓶组(井)中气体比焓值,kJ/kg

    houthin hin1 2.2 中方法计算。电驱往复式压缩机组输出总能量(WT)按下式计算:

    46ba176ecef27617f73918dad7ec3f83.png

    2.4 压缩机组平均效率

    电驱往复式压缩机组平均效率按下式计算:

    6708b983bea8f31b38e4eae76a83ac32.png

    式中ηdq表示电驱往复式压缩机组平均效率;Pdq 表示测试阶段内机组耗电量,kW·h

    3 现场测试与计算方法的应用

    在一定测试阶段内对天然气加气站的多台电驱往复式压缩机组进行现场测试,表2 为某天然气加气母站的气质组成情况,利用2.2 中推荐的REFPROP 软件计算得到压缩机进口气体比焓值hin、停机时压缩机出口气体比焓值hout以及启机时槽车内气体比焓值hin1,该气体比焓值随压力、温度的变化趋势如图3 所示,测试参数及计算结果如表3所示。

    2 天然气气质组成表

    2ac23cd37e5a4667e688a55e8c1a066e.png

    619d1471e493d052370becd6f55a7de4.png

    3 该气体比焓值图

    3 基础参数及计算结果表

    b1c7667687e520c3dd6502ca6be97c34.png

    b671bd9992af0f08b721a51bad5a3eb2.png

    a43acf72cd5ea7c1a0693d18f20da87e.png

    单位加气量电耗是指测试阶段内压缩机组累计耗电量与加气量的比值,经计算该压缩机组的单位加气量电耗为 0.078 19( kW·h)/ m3对测试的多台天然气加气站压缩机组的平均效率和单位加气量电耗进行计算,结果如表4 所示,其变化趋势如图4 所示。由图4 可知,各压缩机组的平均效率与其单位加气量电耗呈反比,单位加气量电耗较低的压缩机组平均效率较高,也可侧面反映平均效率计算方法的科学性与合理性[14-20]

    表4 多台压缩机组平均效率及单位加气量电耗计算结果表

    52fddde7811d901f96cae397e20746eb.png

    fca1dfb1944d06992c5732de172c4d57.png

    图4  各压缩机组平均效率与单位加气量电耗变化趋势图

    4  结论

    通过现场测试与计算,压缩机组平均效率的计算方法较传统的理论计算方法具有所需测试参数少、计算过程简单、可操作性强、结果可靠等优点,相关监测部门和工作人员经测试和计算即可得到压缩机组效率。因此,该加气站压缩机组平均效率的计算方法可为评价压缩机组及加气站的能效水平提供理论支持,从而提高压缩机组的经济性能,全面推进加气站的降本增效。

    参考文献请点击下方“阅读原文”查看

    编 辑 何 明

    论文原载于《天然气工业》2019年第11期

    fae7ab8da64ab3d6879068ace86e047e.png

    基金项目石油天然气行业标准制订项目《天然气加气站耗能设备能耗测试和计算方法》《国家能源局综合司关于下达2018 年能源领域行业标准制(修)订计划及英文版翻译出版计划的通知》[ 国能综通科技(2018)100 号](编号:能源20180205)。

    作者简介徐秀芬,1966 年生,教授,博士;主要从事油气田机械采油、注水以及地面集输系统的节能理论和节能技术方面的研究工作。地址:(163318)黑龙江省大庆市高新技术产业开发区学府街99 号。ORCID: 0000-0002-3593-4650。

    E-mail:1538937270@qq.com

    6122c43d1fd2d80d5812b444684f20e0.gif

    b137f792868c993b08bee234b33bba30.png

    9f9478211e5431c7336c4ddbc05431c6.gif点击

    展开全文
  • 最近有不少工程师朋友和我们分享CAE的经验和知识,...高速往复活塞式压缩机其活塞运动速度高,曲轴转速达1000rpm,结构复杂,活塞杆的最大载荷可达十几吨。如大功率、大排量天然气压缩机为六列活塞对称布置,虽然活塞...

    最近有不少工程师朋友和我们分享CAE的经验和知识,把在平时工作中关于CAE仿真的感悟、心得和技巧通和大家分享,下面是一篇来自石油机械研究院李新年的文章,文中对ANSYS中MBD多体技术的实际应用有着非常好的见解,是一篇非常值得我们借鉴的好文。

    高速往复活塞式压缩机其活塞运动速度高,曲轴转速达1000rpm,结构复杂,活塞杆的最大载荷可达十几吨。如大功率、大排量天然气压缩机为六列活塞对称布置,虽然活塞成对组成,受力平衡对称,但活塞对曲轴的作用点不同,且每列活塞杆的作用力的大小不同,各自呈周期性变化。就对曲轴来说,其受力就比较复杂,在一个转动周期内,各列活塞的作用力大小方向,跟随时刻发生变化。用单纯的静态几何结构进行应力校核计算比较复杂。故需要用刚柔耦合仿真来分析,对运动件进行至少一个周期的时程刚柔耦合求解,来观察运动件受力变化情况及最大应力、应变区域,更为准确地仿真压缩机运动件的受载情况,进而验证其设计性能。

    刚体动力学软件Recurdyn与Ansys软件的技术融合,能在Ansys MBD模块中进行刚体分析,并提取每个时刻步的载荷进行强度分析,也可转到Recurdyn View中来提取各件的运动曲线和其它动力学特性曲线。

    在Ansys软件中对多刚体的动力心关系设置完后,进行求解,导出sdk格式,转入到Recurdyn软件中进行刚柔混合时程分析,求出一个周期内零件的等效应力变化情况,同时找出零件等效应力最大的时刻值。

    在对称布置的二级六列活塞压缩机中,针对二级二列连杆进行仿真分析,在Recurdyn软件中,通过观查一个周期内连杆的最大应力值变化情况,可以找到期间的最大值122.81MPa对应的时刻为0.0845秒,如下图

    511c0aafb2faad702dbcc0abefb0f899.png

    图1 二级二列连杆在运动过程中的应力变化

    还回到ansys软件中,在MBD模块选取二级二列那个连杆实体,再选取(Time Instant for Load Transfer)瞬时时刻点(time=0.0845 sec)来提取载荷。

    Ansys系统会自动建立LT Time Instant=0.0845 sec时刻的静力结构分析模块流程,进入Model界面中,点击LoadTransfer选择 Set FE Boundary Cond来加载上面提取的实体和载荷信息,导入到分析步中。再对连杆进行有限元网格划分,静态结构求解结果,如下图

    d7b65eb009cc03920f8809a708c991f8.png

    图2 二级二列连杆在0.0845秒时等效应力云图

    最大应力值为124.42MPa,这一结果与Recurdyn所计算的结果相差不大,位置也大致相同。

    综述,利用Ansys和Recurdyn软件进行运动结构件的动力学和有限元联合仿真分析,能更好地验证结构零件设计的有效性。

    通过Recurdyn软件的刚柔耦合分析可以得到运动零件在整个运动周期的应力变化与运动情况,可以动态观察零件在运动过程中的应力变化,同时可以对所关注的部位进行特别关注,可对应力突变的部位和时刻进一步用有限元的方法进行校核。

    展开全文
  • 国标 天然气压缩因子计算 GB17747.1-2011
  • 天然气压缩因子计算
  • 计算天然气压缩因子的公式,核实无误,放心使用
  • 天然气压缩因子计算 第3部分:用物性值进行计算
  • SRK方程混合物压缩因子和焓值计算的MATLAB程序
  • 使用c#窗体应用实现天然气压缩因子计算 第2部分:用摩尔组成进行计算,支持修改温压和各成分占比,若使用的单片机内存足够,可进行移植
  • 摘要:介绍了求解 BWRS状态方程中压缩因子的数值方法 ,在求解方面重点介绍了...并结合计算实例对结果进行了分析 ,得出运用推荐的计算压缩因子的算法具有使用简单快捷、 精度高等特点的结论 ,给工程实际计算带来了方便。
  • AGA8压缩因子算法C语言

    千次阅读 热门讨论 2019-12-25 14:18:58
    AGA8算法在天然气计量当中有着举足轻重的地位,本文简要介绍了AGA8算法的计算步骤,按照国标标准,计算所得结果误差在百万分位波动,符合要求。

    一.AGA8算法概述

    工作状态下的压缩因子是天然气最重要的物性参数之一,涉及到天然气的勘探、开发、输送、计量和利用等各个方面。实测天然气压缩因子所需的仪器设备价格高,不易推广,因此计算方法发展很快,主要为经验公式和状态方程计算方法。1992年6月26日,国际标准化组织(ISO)天然气技术委员会(TC193)及分析技术分委员会(TC193/SC1)在挪威斯泰万格(Stavanger)召开了第四次全体会议,会上推荐了两个精度较高的计算工作状态下天然气压缩因子的方程,目PAGA8-92DC方程、SGERG-88方程[1]。随后,国际标准化组织于1994年形成了国际标准草案[2]。
    AGA8-92DC方程来自美国煤气协会(AGA)。美国煤气协会在天然气压缩因子和超压缩因子表的基础上,开展了大量研究,于1992年发表了以状态方程为基础计算压缩因子的AGA No.8报告及AGA8-92DC方程[2]。

    二.2AGA8—92DC方法的计算过程

    1.已知条件

    a)绝对压力P、热力学温度T、组分数N;
    b)各组分的摩尔分数Xi,i = 1~N ;
    c)可查GB/T 17747.2附录B中表B1、B2、B3得到的数据:
    58种物质的状态方程参数an,bn,cn,kn,un,gn,qn,fn,sn,wn;
    21种识别组分的特征参数Mi,Ei,Ki,Gi,Qi,Fi,Si , Wi;
    21种识别组分的二元交互作用参数Eij*,Uij,Kij,Gij 。

    2.待求量

    压缩因子 Z 。

    3.计算步骤

    a)计算第二维利系数B(1个值);
    b)计算系数Cn*,n = 13~58,共46个值;
    c)计算混合物体积参数K(1个值);
    d)形成压力的状态方程;
    e)解压力的状态方程,求得压缩因子Z 。

    三.求解公式

    1.计算第二维利系数B

    二元参数Eij,Gij的计算式为:
    在这里插入图片描述
    在这里插入图片描述
    Bnij*的计算公式为:
    在这里插入图片描述
    B按照下式计算:
    在这里插入图片描述

    2.计算系数Cn

    在这里插入图片描述
    由下式计算:
    在这里插入图片描述
    式(5)中的U,G,Q,F只与天然气的组成有关,按下式计算:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3.计算混合物体积参数K

    在这里插入图片描述

    4.形成压力的状态方程

    在这里插入图片描述
    整理得:
    在这里插入图片描述
    令:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    则上式变形为(式14):
    在这里插入图片描述

    5.解方程,求得压缩因子Z

    方程曲线的形状:
    将上式14左边用f(pm)表示,通过计算,得到若干(pm,f(pm))数对,进行描点,得到方程曲线的形状,见下图。
    在这里插入图片描述
    求解方法的确定:
    式(14)是一个超越方程,求解方法有二分法、牛顿法、近似牛顿法等。经分析,方程解的区间可以确定,采用二分法比较简捷。
    求解步骤:
    1)给出方程解的区间(a,b)
    对一般的p、T条件,Z必然处于0.45和1.2之间。因此,取:
    在这里插入图片描述
    在这里插入图片描述
    2)对有根区间取中值c=(a+b)/2,计算f(pm)的值f©
    由上述系列公式可得:
    在这里插入图片描述
    令:Pcal=cZRT
    式中Pcal----由Z得出的压力的计算值,MPa
    若|P-Pcal|<1.0*e-6,则达到精度,输出Z,计算结束;否则,继续下一步3)。
    3)若f©>0,则将c赋值给b ;否则,将c赋值给a 。
    转向步骤2) 。

    四.程序源码

    /*AGA8_table文件:存储一些固定参数*/
    #ifndef __AGA8_TABLE_H
    #define __AGA8_TABLE_H
    //58种物质的状态方程参数,an,un,bn,cn,kn,gn,qn,fn,sn,wn
    double  an[58] = { 0.1538326,1.341953,-2.998583,-0.04831228,0.3757965,-1.589575,-0.05358847,0.886594630,-0.71023704,-1.471722,1.32185035,-0.78665925,2.29129e-9,0.1576724,-0.4363864,-0.04408159,-0.003433888,0.03205905,0.02487355,0.07332279,-0.001600573,0.6424706,-0.4162601,-0.06689957,0.2791795,-0.6966051,-0.002860589,-0.008098836,3.150547,0.007224479,-0.7057529,0.5349792,-0.07931491,-1.418465,-5.99905e-17,0.1058402,0.03431729,-0.007022847,0.02495587,0.04296818,0.7465453,-0.2919613,7.294616,-9.936757,-0.005399808,-0.2432567,0.04987016,0.003733797,1.874951,0.002168144,-0.6587164,0.000205518,0.009776195,-0.02048708,0.01557322,0.006862415,-0.001226752,0.002850908 };//an
    double  un[58] = { 0.0,0.5,1.0,3.5,-0.5,4.5,0.5,7.5,9.5,6.0,12.0,12.5,-6.0,2.0,3.0,2.0,2.0,11.0,-0.5,0.5,0,4,6,21,23,22,-1,-0.5,7,-1,6,4,1,9,-13,21,8,-0.5,0,2,7,9,22,23,1,9,3,8,23,1.5,5,-0.5,4,7,3,0,1,0 };//un
    int bn[58] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8, 9, 9 };//bn
    int cn[58] = { 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,1 };//cn
    int kn[58] = { 0,0,0,0,0,0,0,0,0,0,0,0,3,2,2,2,4,4,0,0,2,2,2,4,4,4,4,0,1,1,2,2,3,3,4,4,4,0,0,2,2,2,4,4,0,2,2,4,4,0,2,0,2,1,2,2,2,2 };//kn
    int gn[58] = { 0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0 };//gn
    int qn[58] = { 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,1 };//qn
    int fn[58] = { 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };//fn
    int sn[58] = { 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };//sn
    int wn[58] = { 0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };//wn
    //21种识别组分的特种参数Mi,Ei,Ki,Gi,Qi,Fi,Si,Wi
    double Mi[21] = { 16.043, 28.0135, 44.01, 30.07, 44.097, 18.0153, 34.082, 2.0159, 28.01, 31.9988, 58.123, 58.123, 72.15, 72.15, 86.177, 100.204, 114.231, 128.258, 142.285, 4.0026, 39.948 };//Mi
    double Ei[21] = { 151.3183,99.73778,241.9606,244.1667,298.1183,514.0156,296.355,26.95794,105.5348,122.7667,324.0689,337.6389,365.5999,370.6823,402.636293,427.72263,450.325022,470.840891,489.558373,2.610111,119.6299 };//Ei
    double Ki[21] = { 0.4619255,0.4479153,0.4557489,0.5279209,0.583749,0.3825868,0.4618263,0.3514916,0.4533894,0.4186954,0.6406937,0.6341423,0.6738577,0.6798307,0.7175118,0.7525189,0.784955,0.8152731,0.8437826,0.3589888,0.4216551 };//Ki
    double Gi[21] = { 0,0.027815,0.189065,0.0793,0.141239,0.3325,0.0885,0.034369,0.038953,0.021,0.256692,0.281835,0.332267,0.366911,0.289731,0.337542,0.383381,0.427354,0.469659,0,0 };//Gi
    double Qi[21] = { 0,0,0.69,0,0,1.06775,0.633276,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };//Qi
    double Fi[21] = { 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 };                //Fi
    double Si[21] = { 0,0,0,0,0,1.5822,0.39,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };        //Si
    double Wi[21] = { 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };                //Wi
    //21种识别组分的二元交互作用参数Eij,Uij,Kij,Gij   
    double EE[21][21] = {
    	{1,0.971640,0.960644,1,0.994635,0.708218,0.931484,1.170520,0.990126,1,1.019530,0.989844,1.002350,0.999268,1.107274,0.880880,0.880973,0.881067,0.881161,1,1},//1
    	{0.971640,1,1.022740,0.970120,0.945939,0.746954,0.902271,1.086320,1.005710,1.021000,0.946914,0.973384,0.959340,0.945520,1,1,1,1,1,1,1},//2
    	{0.960644,1.022740,1,0.925053,0.960237,0.849408,0.955052,1.281790,1.500000,1,0.906849,0.897362,0.726255,0.859764,0.855134,0.831229,0.808310,0.786323,0.765171,1,1},//3
    	{1,0.970120,0.925053,1,1.022560,0.693168,0.946871,1.164460,1,1,1,1.013060,1,1.005320,1,1,1,1,1,1,1},//4
    	{0.994635,0.945939,0.960237,1.022560,1,1,1,1.034787,1,1,1,1.004900,1,1,1,1,1,1,1,1,1},//5
    	{0.708218,0.746954,0.849408,0.693168,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//6
    	{0.931484,0.902271,0.955052,0.946871,1,1,1,1,1,1,1,1,1,1,1.008692,1.010126,1.011501,1.012821,1.014089,1,1},//7
    	{1.170520,1.086320,1.281790,1.164460,1.034787,1,1,1,1.100000,1,1.300000,1.300000,1,1,1,1,1,1,1,1,1},//8
    	{0.990126,1.005710,1.500000,1,1,1,1,1.100000,1,1,1,1,1,1,1,1,1,1,1,1,1},//9
    	{1,1.021000,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//10
    	{1.019530,0.946914,0.906849,1,1,1,1,1.300000,1,1,1,1,1,1,1,1,1,1,1,1,1},//11
    	{0.989844,0.973384,0.897362,1.013060,1.004900,1,1,1.300000,1,1,1,1,1,1,1,1,1,1,1,1,1},//12
    	{1.002350,0.959340,0.726255,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//13
    	{0.999268,0.945520,0.859764,1.005320,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//14
    	{1.107274,1,0.855134,1,1,1,1.008692,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//15
    	{0.880880,1,0.831229,1,1,1,1.010126,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//16
    	{0.880973,1,0.808310,1,1,1,1.011501,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//17
    	{0.881067,1,0.786323,1,1,1,1.012821,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//18
    	{0.881161,1,0.765171,1,1,1,1.014089,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//19
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//20
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} };//21
    double U[21][21] = {
    	{1,0.886106,0.963827,1,0.990877,1,0.736833,1.15639,1,1,1,0.992291,1,1.00367,1.302576,1.191904,1.205769,1.219634,1.233498,1,1},//1
    	{0.886106,1,0.835058,0.816431,0.915502,1,0.993476,0.408838,1,1,1,0.993556,1,1,1,1,1,1,1,1,1},//2
    	{0.963827,0.835058,1,0.96987,1,1,1.04529,1,0.9,1,1,1,1,1,1.06638,1.077634,1.088178,1.098291,1.108021,1,1},//3
    	{0.990877,0.816431,0.96987,1,1.065173,1,0.971926,1.61666,1,1,1.25,1.25,1.25,1.25,1,1,1,1,1,1,1},//4
    	{0.990877,0.915502,1,1.065173,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//5
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//6
    	{0.736833,0.993476,1.04529,0.971926,1,1,1,1,1,1,1,1,1,1,1.028973,1.033754,1.038338,1.042735,1.046966,1,1},//7
    	{1.15639,0.408838,1,1.61666,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//8
    	{1,1,0.9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//9
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//10
    	{1,1,1,1.25,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//11
    	{0.992291,0.993556,1,1.25,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//12
    	{1,1,1,1.25,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//13
    	{1.00367,1,1,1.25,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//14
    	{1.302576,1,1.06638,1,1,1,1.028973,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//15
    	{1.191904,1,1.077634,1,1,1,1.033754,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//16
    	{1.205769,1,1.088178,1,1,1,1.038338,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//17
    	{1.219634,1,1.098291,1,1,1,1.042735,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//18
    	{1.233498,1,1.108021,1,1,1,1.046966,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//19
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//20
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//21
    };
    double K[21][21] = {
    	{1,1.00363,0.995933,1,1.007619,1,1.00008,1.02326,1,1,1,0.997596,1,1.002529,0.982962,0.983565,0.982707,0.981848,0.980991,1,1},//1
    	{1.00363,1,0.982361,1.00796,1,1,0.942596,1.03227,1,1,1,1,1,1,1,1,1,1,1,1,1},//2
    	{0.995933,0.982361,1,1.00851,1,1,1.00779,1,1,1,1,1,1,1,0.910183,0.895362,0.881152,0.86752,0.854406,1,1},//3
    	{1,1.00796,1.00851,1,0.986893,1,0.999969,1.02034,1,1,1,1,1,1,1,1,1,1,1,1,1},//4
    	{1.007619,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//5
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//6
    	{1.00008,0.942596,1.00779,0.999969,1,1,1,1,1,1,1,1,1,1,0.96813,0.96287,0.957828,0.952441,0.948338,1,1},//7
    	{1.02326,1.03227,1,1.02034,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//8
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//9
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//10
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//11
    	{0.997596,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//12
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//13
    	{1.002529,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//14
    	{0.982962,1,0.910183,1,1,1,0.96813,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//15
    	{0.983565,1,0.895362,1,1,1,0.96287,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//16
    	{0.982707,1,0.881152,1,1,1,0.957828,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//17
    	{0.981848,1,0.86752,1,1,1,0.952441,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//18
    	{0.980991,1,0.854406,1,1,1,0.948338,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//19
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//20
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//21
    };
    double GG[21][21] = {
    	{1,1,0.807653,1,1,1,1,1.95731,1,1,1,1,1,1,1,1,1,1,1,1,1},//1
    	{1,1,0.982746,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//2
    	{0.807653,0.982746,1,0.370296,1,1.67309,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//3
    	{1,1,0.370296,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//4
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//5
    	{1,1,1.67309,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//6
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//7
    	{1.95731,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//8
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//9
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//10
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//11
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//12
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//13
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//14
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//15
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//16
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//17
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//18
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//19
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//20
    	{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//21
    };
    /*下为国标上给出的六种气体组分*/
    double table3[6][17] = {
    	{0.965,0.003,0.006,0.018,0.0045,0,0,0,0,0,0.001,0.001,0.0005,0.0003,0.0007,0,0},//1
    	{0.907,0.031,0.005,0.045,0.0084,0,0,0,0,0,0.001,0.0015,0.0003,0.0004,0.0004,0,0},//2
    	{0.859,0.01,0.015,0.085,0.023,0,0,0,0,0,0.0035,0.0035,0.0005,0.0005,0,0,0},//3
    	{0.735,0.1,0.016,0.033,0.0074,0,0,0.095,0.01,0,0.0012,0.0012,0.0004,0.0004,0.0002,0.0001,0.0001},//4
    	{0.812,0.057,0.076,0.043,0.009,0,0,0,0,0,0.0015,0.0015,0,0,0,0,0},//5
    	{0.826,0.117,0.011,0.035,0.0075,0,0,0,0,0,0.0012,0.0012,0.0004,0.0004,0.0002,0.0001,0},//6
    };
    #endif 
    
    /*AGA8.h文件:声明一些函数及变量*/
    #ifndef __AGA8_H
    #define __AGA8_H
    #define NUM 17                         //定义当前气体组分数
    
    typedef  unsigned char u8;             //定义u8
    typedef  unsigned short int u16;       //定义u16
    typedef  unsigned int u32;             //定义u32
    
    #define R  8.31451e-3                  //定义气体常数
    constexpr auto TT = 280;               //定义绝对温度
    constexpr auto P = 12;                  //定义绝对压力
    
    void Caculate_fix_parameter(void);    //计算获得固定参数,只需要计算一次(执行前)
    void Caculate_x_parameter(void);      //计算获得与输入气体组分X有关的参数,只需要计算一次(执行中)
    double f_pm(double pm);              //形成压力的状态方程
    /***********************************计算与X组分相关的参数数组**************************************/
    extern double X[NUM];                  //外部声明X
    extern double X_SQUARE[NUM];           //外部声明X平方计算结果
    extern double XIXI[NUM][NUM];          //外部声明XIXI计算结果
    extern double XIXJ[NUM][NUM];          //外部声明XIXJ计算结果
    void X_Caculate(double x[]);                   //定义与输入的相关组分的X的计算函数
    /***********************************第一步:计算第二维利系数B(1个值)**************************************/
    extern double B_parameter[NUM][NUM];          //外部声明第二维利系数B参数计算结果
    void B_Caculate_parameter(void);              //声明第二维利系数B参数计算函数
    double B_Caculate(void);                      //第一步:计算第二维利系数B(1个值)
    /***********************************第二步:计算系数Cn,n = 13~58,共46个值**************************************/
    extern double G_parameter[NUM][NUM];
    extern double U_parameter[NUM][NUM];
    extern double E_parameter[NUM];
    extern double T_parameter[58];
    void Cn_Caculate_parameter(void);           //计算与Cn有关的固定参数
    double Cn_Caculate(u8 n);                   //计算Cn,与X有关
    /***********************************第三步:计算混合物体积参数K(1个值)**************************************/
    extern double K_parameter[NUM][NUM];
    extern double KK_parameter[NUM];
    void K_Caculate_parameter(void);          //计算与K有关的固定参数
    double K_Caculate(void);                  //计算K,与X有关
    /***********************************第四步:计算压力的状态方程的预先参数**************************************/
    extern double K1;
    extern double A1;
    extern double PM_parameter;
    extern double A2_parameter[58];
    extern double A3_parameter[58];
    extern double A4_parameter[58];
    void FPM_Caculate(void);            //计算压力的状态方程的预先参数
    
    #endif
    
    /*AGA8.c文件:定义一些函数及变量*/
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    #include "AGA8.h"
    #include "AGA8_table.h"
    /****************************************计算获得固定参数,只需要计算一次(执行前)*************************************************/
    void Caculate_fix_parameter(void)
    {
    	B_Caculate_parameter();               //1.计算与B的相关固定系数
    	Cn_Caculate_parameter();              //2.计算与Cn有关的固定参数
    	K_Caculate_parameter();               //3.计算与K有关的固定参数
    }
    /****************************************计算获得与输入气体组分X有关的参数,只需要计算一次(执行中)*******************************/
    double K1 = 0;
    double A1 = 0;
    void Caculate_x_parameter(void)              
    {
    	int n, i;
    	double x[17] = { 0 };                        //定义数组x缓存区用于存放被测气体组分
    	for (i = 0; i < 17; i++)
    		x[i] = table3[5][i];                     //将表格中数据放到x缓存区中
    	X_Caculate(x);                               //0.计算得出气体组分相关参数                     
    	double B1 = B_Caculate();                    //1.计算出第二维利系数B(1个值)
    	K1 = K_Caculate();                           //3.计算出混合物体积参数K
    	for (n = 12; n < 18; n++)
    		A1 = A1 + Cn_Caculate(n);                //2.计算系数Cn
    	A1 = B1 - K1*K1*K1*A1;
    	FPM_Caculate();                              //4.计算压力的状态方程的预先参数
    }
    /***************************************形成压力的状态方程****************************************************/
    double f_pm(double pm)
    {
    	int n;
    	double f_pm = pm + A1 * pm*pm + PM_parameter;
    	for (n = 12; n < 58; n++)
    		f_pm = f_pm + pm * A2_parameter[n]*(bn[n] - A3_parameter[n] * pow(pm, kn[n]))*pow(pm, bn[n])*exp(A4_parameter[n]*pow(pm,kn[n]));
    	return f_pm;
    };
    /***********************************第0步:计算与X组分相关的参数数组**************************************/
    double X[NUM] = { 0 };                  //定义X平方计算结果
    double X_SQUARE[NUM] = { 0 };           //定义X平方计算结果
    double XIXI[NUM][NUM] = { 0 };          //定义XIXI计算结果
    double XIXJ[NUM][NUM] = { 0 };          //定义XIXJ计算结果
    void X_Caculate(double x[])                    //定义与输入的相关组分的X的计算函数
    {
    	u8 i, j;
    	for (i = 0; i < NUM; i++)
    	{
    		X[i] = x[i];
    		X_SQUARE[i] = x[i] * x[i];             //计算得出X平方计算结果
    	}
    	for (i = 0; i < NUM; i++)
    		for (j = 0; j < NUM; j++)
    			XIXI[i][j] = x[i] * x[j];          //计算得出XIXI计算结果
    	for (i = 0; i < NUM - 1; i++)
    		for (j = i + 1; j < NUM; j++)
    			XIXJ[i][j] = x[i] * x[j];          //计算得出XIXJ计算结果
    }
    /***********************************第1步:计算第二维利系数B(1个值)**************************************/
    /*计算思想是:把累加符号调换位置*/
    double B_parameter[NUM][NUM] = { 0 };          //定义第二维利系数B参数计算结果
    void B_Caculate_parameter(void)                //计算与B有关的固定参数
    {
    	u8 i, j, n;
    	double G[21][21];
    	double B_n[21][21];
    	double E_n[21][21];
    	double K[21][21];
    	for (i = 0; i < NUM; i++)
    		for (j = 0; j < NUM; j++)
    		{
    			for (n = 0; n < 18; n++)
    			{
    				G[i][j] = (GG[i][j] * (Gi[i] + Gi[j])) / 2;
    				B_n[i][j] = (pow((G[i][j] + 1 - gn[n]), gn[n]))*(pow((Qi[i] * Qi[j] + 1 - qn[n]), qn[n]))*(pow((pow(Fi[i], 0.5) * pow(Fi[j], 0.5) + 1 - fn[n]), fn[n]))*(pow((Si[i] * Si[j] + 1 - sn[n]), sn[n]))*(pow((Wi[i] * Wi[j] + 1 - wn[n]), wn[n]));
    				E_n[i][j] = pow(EE[i][j] * pow(Ei[i] * Ei[j], 0.5), un[n]);
    				K[i][j] = pow(Ki[i] * Ki[j], 1.5);
    				B_parameter[i][j] = B_parameter[i][j] + an[n] * (pow(TT, -un[n]))*B_n[i][j] * E_n[i][j] * K[i][j];
    			}
    		}
    }
    //计算第二维利系数B(1个值),与X有关
    double B_Caculate(void)        //计算B,与X有关
    {
    	u8 i, j;
    	double B_total = 0;
    	for (i = 0; i < NUM; i++)
    		for (j = 0; j < NUM; j++)
    			B_total = B_total + XIXI[i][j] * B_parameter[i][j];
    	return B_total;
    }
    /***********************************第2步:计算系数Cn,n = 13~58,共46个值**************************************/
    double G_parameter[NUM][NUM] = { 0 };
    double U_parameter[NUM][NUM] = { 0 };
    double E_parameter[NUM] = { 0 };
    double T_parameter[58] = { 0 };
    void Cn_Caculate_parameter(void)  //计算与Cn有关的固定参数
    {
    	int i = 0, j = 0;
    	for (i = 0; i < NUM - 1; i++)
    		for (j = i + 1; j < NUM; j++)
    		{
    			G_parameter[i][j] = (GG[i][j] - 1)*(Gi[i] + Gi[j]);
    			U_parameter[i][j] = 2 * (pow(U[i][j], 5) - 1)*pow(Ei[i] * Ei[j], 2.5);
    		}
    	for (i = 0; i < NUM; i++)
    		E_parameter[i] = pow(Ei[i], 2.5);
    	for (i = 12; i < 58; i++)
    		T_parameter[i] = an[i] * pow(TT, -un[i]);
    }
    double Cn_Caculate(u8 n)        //计算Cn,与X有关
    {
    	int i = 0, j = 0;
    	double G = 0, Q = 0, F = 0, U_5 = 0, U = 0, Cn=0;
    	for (i = 0; i < NUM - 1; i++)
    		for (j = i + 1; j < NUM; j++)
    		{
    			G = G + XIXJ[i][j] * G_parameter[i][j];
    			U_5 = U_5 + XIXJ[i][j] * U_parameter[i][j];
    		}
    	for (i = 0; i < NUM; i++)
    	{
    		G = G + X[i] * Gi[i];       //求出G
    		Q = Q + X[i] * Qi[i];       //求出Q
    		F = F + X_SQUARE[i] * Fi[i];//求出F
    		U = U + X[i] * E_parameter[i];
    	}
    	U = pow(U * U+ U_5,0.2);               //求出U
    	Cn = pow(G + 1 - gn[n], gn[n])*pow(Q*Q + 1 - qn[n], qn[n])*pow(F + 1 - fn[n], fn[n])*pow(U, un[n])*T_parameter[n];
    	return Cn;
    }
    /***********************************第3步:计算混合物体积参数K(1个值)**************************************/
    double K_parameter[NUM][NUM] = { 0 };
    double KK_parameter[NUM] = { 0 };
    void K_Caculate_parameter(void)  //计算与K有关的固定参数
    {
    	int i = 0, j = 0;
    	for (i = 0; i < NUM - 1; i++)
    		for (j = i + 1; j < NUM; j++)
    			K_parameter[i][j] = 2 * (pow(K[i][j], 5) - 1)*pow(Ki[i] * Ki[j], 2.5);
    	for (i = 0; i < NUM; i++)
    			KK_parameter[i] = pow(Ki[i], 2.5);
    }
    double K_Caculate(void)        //计算K,与X有关
    {
    	int i = 0, j = 0;
    	double K_5 = 0;
    	for (i = 0; i < NUM; i++)
    		K_5 = K_5 + X[i] * KK_parameter[i];
    	K_5 = K_5 * K_5;
    	for (i = 0; i < NUM - 1; i++)
    		for (j = i + 1; j < NUM; j++)
    			K_5 = K_5 + XIXJ[i][j] * K_parameter[i][j];
    	K_5 = pow(K_5, 0.2);
    	return K_5;
    }
    /***********************************第4步:计算压力的状态方程的预先参数**************************************/
    double PM_parameter = 0;
    double A2_parameter[58] = { 0 };
    double A3_parameter[58] = { 0 };
    double A4_parameter[58] = { 0 };
    void FPM_Caculate(void)            //计算压力的状态方程的预先参数
    {
    	u8 i = 0;
    	PM_parameter= - P / (R*TT);
    	for (i = 12; i < 58; i++)
    	{
    		A2_parameter[i] = Cn_Caculate(i)*pow(K1, 3 * bn[i]);
    		A3_parameter[i] = cn[i] * kn[i] * pow(K1, 3 * kn[i]);
    		A4_parameter[i] = -cn[i] * pow(K1, 3 * kn[i]);
    	}
    }
    
    //main.c文件:调用函数,计算输出压缩因子Z
    #include <stdio.h>
    #include <stdlib.h>
    #include<time.h>            //为了支持clock()函数
    #include "AGA8.h"
    int main()
    {
    		int k = 0;
    		Caculate_fix_parameter();          //计算获得固定参数,只需要计算一次(执行前)
    		double a = 0.833*P / (R*TT), b = 2.5*P / (R*TT), c, f_c, Z, Pcal;
    		long start_time = clock();         //获取此程序段开始执行时间
    		Caculate_x_parameter();            //计算获得与输入气体组分X有关的参数,只需要计算一次(执行中)
    	mark:c = (a + b) / 2;
    		f_c = f_pm(c);
    		Z = (f_c + P / (R*TT)) / c;
    		Pcal = c * Z*R*TT;
    		k += 1;
    		if (P - Pcal > -1e-6 && P - Pcal < 1e-6)//满足条件,循环结束
    		{
    			printf("Z=%.15lf\n", P / (c*R*TT));
    			printf("k=%d\n", k);
    		}
    		else
    		{
    			if (f_c > 0)
    				b = c;
    			else a = c;
    			goto mark;
    		}
    		long end_time = clock();        //获取此程序段开始执行时间
    		long t = end_time - start_time; //获取程序执行时间
    		printf("clock run time is:%d ms\n", t);  //输出时间
    		system("pause");
    		return 0;
    };
    
    展开全文
  • 我要用VB6.0编程计算气体的压缩因子,计算模型已经有了,由于本人愚钝,不知道如何编写,请求各位高手指导。计算模型如下: [img=https://img-bbs.csdn.net/upload/201305/15/1368586100_423607.jpg][/img] 在此先行谢...
  • Aspen Plus 的学习经验ASPEN是做平衡态模拟,模拟的本质就是计算,根据化工原理,热力学等等化工公式做计算而已,模拟只是因为它的程序界面,并且能做大的流程的计算Aspenplus 的手册有很多, 其中比较重要的是单元...
  • 乙氧基乙醇物性的输入由于AspenPlus软件自带的物性数据库中很难查乙基2-乙氧基乙醇的物性参数,使模拟分离、确定工艺条件的过程中遇到困难,所以采用物性估算的功能对乙基2-乙氧基乙醇计算。已知:最简式:(C6H14O3)...
  • 乙氧基乙醇物性的输入由于AspenPlus软件自带的物性数据库中很难查乙基2-乙氧基乙醇的物性参数,使模拟分离、确定工艺条件的过程中遇到困难,所以采用物性估算的功能对乙基2-乙氧基乙醇计算。已知:最简式:(C6H14O3)...
  • 第三章ASPEN PLUS的物性数据库及其应用化工过程分析与合成基于ASPEN PLUS的应用万辉第三章 ASPEN PLUS的物性数据库及其应用3.1 基础物性数据库3.2 ASPEN PLUS的物性方法和模型3.3 性质集3.4 物性计算与分析...
  • PR方程计算相平衡

    2017-12-18 15:40:23
    PR方程计算混合轻烃压缩因子,使用牛顿迭代和割线法计算压缩因子Z的值。
  • 流量,流速换算.rar

    2020-01-30 22:14:52
    实现天然气密度计算、压缩因子计算等内容,对流量、流速等进行运行状况、标准状况计算和换算。公布源代码和exe文件。
  • 由于本章内容繁杂,篇幅较长,故分成了四部分来讲解,各部分主要内容分别为:...这里是第四部分,主要讲解在SIMPLE算法基础上衍生出的其他SIMPLE家族算法、最佳欠松弛因子、Rhie-Chow插值对不同项的处理、代码讲解。
  • 主成分分析 基本思想:实质上是将多个指标综合成少数几个指标的...主成份分析的主要目的是压缩指标个数、简化数据,但常常与回归分析、因子分析、聚类分析、判别分析等等套用。基本步骤 计算相关系数阵,检验待分析...
  • 将再生锁模光纤激光器(RMLFL)输出的约5.8 ps脉宽的高质量无啁啾双曲正割脉冲,通过掺铒光纤放大器(EDFA)放大后注入4.28 km长的色散平坦光纤(DFF)中,利用二阶孤子压缩效应成功地将...虽然压缩因子不大,但基本能满足需求。
  • 数据压缩实验六

    2017-07-05 23:36:52
    对各个子带每12个样点进行一次比例因子计算。先定出12个 样点中绝对值的最大值。查比例因子表中比这个最大值大的 最小值作为比例因子。用6比特表示。第2层的一帧对应36个子带样值,是第1层的三倍,原 则上要传三个比例...
  • 稀疏矩阵:非零元多,在矩阵中随机出现假设 m 行 n 列的矩阵含 t 个非零元素,则称δ=t/(m*n)为稀疏因子。 通常认为 δ<=0.05 的矩阵为稀疏矩阵。常规存储方法缺点:1) 零值元素占了很大空间;2) 计算中进行了很多和...
  • 通过实验数据分析和理论推导,提出了一种综合气体动力黏度和压缩因子影响及克氏效应的煤层瓦斯渗透率计算方法。通过比较传统的拟压力法计算结果,考虑克氏效应方法在理论上和数据处理结果上更合理、更准确。研究结果...
  • 其次,根据断裂力学理论对单轴压缩荷载下的单个节理尖端应力强度因子计算方法进行了研究,得出了应力强度因子KⅠ、KⅡ的计算公式;同时考虑多节理间的相互作用给出了单组单排及多排非贯通节理应力强度因子计算公式。...
  • 不幸的是,这是JPEG压缩的一个特性,并且没有严格的反函数(如果您想要大规模的效率,可以用数学方法计算)。在但是,您可以低效地强行进行计算,并使用以下方法使其接近。如果您不想要相同的尺寸,只需将质量更改为...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 175
精华内容 70
关键字:

压缩因子计算