精华内容
下载资源
问答
  • 根据ISO12213-2:2009中Fortran程序编写,迭代过程有改动。该标准中混合物能量参数U公式B.6第一项缺少系数2,国标17747.2-1999中是正确的。
  • 本发明涉及天然气流量计量,尤其是一种天然气压缩因子计算方法。背景技术:随着天然气工业的飞速发展,特别是输气管网的大规模建设,用于贸易计量的天然气流量仪表日益增多,其工作压力不断提高,流量范围也不断增大...

    本发明涉及天然气流量计量,尤其是一种天然气压缩因子计算方法。

    背景技术:

    随着天然气工业的飞速发展,特别是输气管网的大规模建设,用于贸易计量的天然气流量仪表日益增多,其工作压力不断提高,流量范围也不断增大。天然气流量计量是多参数、多组分气体的连续测量,其量值测量具有不可回复性,其测量准确度受众多因素影响。

    只有在低压、高温下实际气体才可以近似被看作理想气体,由于实际气体与理想气体的差异,使得对气体流量测量中的精确度和可靠性难以评价,特别是低温、高压管道气体流量的测量。在这种情况下,管道中的被测气质就不能用理想气体状态方程来进行描述和处理。

    实际气体与理想气体的这种偏差,可以采用PV与RT的比值来说明,这个比值被称为压缩因子,压缩因子的定义为:在规定压力和温度下,任意质量气体的体积与该气体在相同条件下按理想气体定律计算的气体体积的比值。压缩因子以字母Z来表示,如果Z>1,则在相同的温度和压力下实际气体的体积大于等量的理想气体的体积;如果Z<1,则在相同的温度和压力下实际气体的体积小于等量理想气体的体积。

    计算压缩因子有多种方法,美国燃气协会发表的AGA8报告,通过气体组分来计算天然气及其他相关烃类气体的压缩因子,AGA8-92DC方法就是其中一种非常重要的方法,该计算方法较为繁琐,设计多次求偏导数以及积分计算,同时由于气体流量计的成本控制,流量计内置的单片机核心计算能力一般,面对高强度、高频率的计算要求时效率低下。

    技术实现要素:

    本发明所要解决的技术问题是针对上述现有技术存在的问题,提供一种简单、快捷又准确的天然气压缩因子计算方法。

    本发明解决上述技术问题所采用的技术方案为:一种天然气压缩因子计算方法,其特征在于:包括如下步骤:

    1)确定管道内的天然气气质;

    2)在管道内采样得到所述天然气气质的气质温度t和气质压力p,其中t的范围为0℃~60℃,p的范围为50KPa~4000KPa;

    3)根据公式z=s1t2+s2pt+s3t+s4p+c得到天然气压缩因子z,其中s4是由天然气气质决定的参量,c是常数,s1=A1s4+B1,s2=A2s4+B2,s3=A3s4+B3,其中A1、B1、A2、B2、A3、B3均为常数。

    为了使得天然气压缩因子的计算误差最小,s1=9.707×10-2s4-2.944×10-7,s2=-8.115×10-3s4+3.136×10-8,s3=-5.007s4+3.214×10-5,由此z=(9.707×10-2s4-2.944×10-7)t2+(-8.115×10-3s4+3.136×10-8)pt+(-5.007s4+3.214×10-5)t+s4p+0.9986。

    系数s4通过如下步骤得到:

    1)首先利用现有的天然气压缩因子公式计算出所述天然气气质温度在选定的标准气质温度,标准气质压力p0下的标准天然气压缩因子值z0;

    2)将计算得到的标准天然气压缩因子值z0以及对应的标准气质压力p0与标准气质温度t0代入系数s4的计算公式而得到:

    与现有技术相比,本发明的优点在于:适用于家用燃气流量计算,能精确、高效的计算出当下的天然气压缩因子,运用到当下主流的气体流量计当中,能提高工作效率。

    附图说明

    图1为本发明的计算方法的流程图。

    具体实施方式

    以下结合附图实施例对本发明作进一步详细描述。

    一种天然气压缩因子计算方法,考虑到实际的应用,选取气质温度的主要变化范围为0℃至60℃,气质压力的主要变化范围为50KPa至4000KPa的环境下,提供一种简易的天然气压缩因子计算公式,克服AGA8号报告中提出的AGA8-92DC方程存在的求解繁琐的问题,并以现行的AGA8-92DC方程为基准,将本发明公式计算结果的相对误差控制在0.5%以内。

    具体地,天然气压缩因子z是关于气质温度与气质压力的二次多项式,其中只含有一个待标定系数s4,公式的形式为:z=s1t2+s2pt+s3t+s4p+c。其中p是待测天然气的气质压力,t是待测天然气的气质温度,系数c是与待测天然气气质无关的常数项,系数s4是与待测天然气气质有关的量。进一步说明,系数s1、s2、s3均可用与系数s4有关的线性关系式表示,s1=A1s4+B1,s2=A2s4+B2,s3=A3s4+B3,其中A1、B1、A2、B2、A3、B3均为常数。

    为了使得天然气压缩因子的计算误差最小,在本实施例中,c=0.9986,s1=9.707×10-2s4-2.944×10-7,s2=-8.115×10-3s4+3.136×10-8,s3=-5.007s4+3.214×10-5。

    系数s4的确定可通过以下方式:在气质组成成分已知的条件下,利用美国燃气协会8号报告AGA8提出的AGA8-92DC方程计算在特定气质压力p0与特定气质温度t0下的天然气压缩因子大小z0,将计算得到的z0以及对应的p0、t0代入下式中便可得到s4系数的值。

    因此,本发明计算方法的具体形式为:

    z=(9.707×10-2s4-2.944×10-7)t2+(-8.115×10-3s4+3.136×10-8)pt+(-5.007s4+3.214×10-5)t+s4p+0.9986

    实施例一

    以美国燃气协会8号报告所提到的气样1为例,该气样的主要成分摩尔百分比见附表1。

    表1各种气质主要成分摩尔百分比(%)

    同时,得到针对于该气样1的压缩因子计算公式的流程可见图1:

    1)首先利用美国燃气协会8号报告提出的AGA8-92DC方程计算出在气质温度t0为10℃,气质压力p0为1000KPa下的标准天然气压缩因子值z0。(计算z0时,选取其他的气质温度与气质压力作为标准参考值也均可),得到天然气压缩因子值z0=0.97744;在此步骤中,也可以用其他天然气压缩因子计算方法得到标准天然气压缩因子值z0;

    2)将计算得到的天然气压缩因子值z0以及对应的气质压力p0与气质温度t0代入系数s4的计算公式:

    从而计算得到系数s4=-2.478×10-5;

    3)确定了系数s4的值后,将系数s4代入本发明公式中修正压缩因子计算公式:

    z=(9.707×10-2s4-2.944×10-7)t2+(-8.115×10-3s4+3.136×10-8)pt+(-5.007s4+3.214×10-5)t+s4p+0.9986

    由此,便可以得到针对于气样1的压缩因子计算公式,即:

    z=-2.699×10-6t2+2.324×10-7pt+1.562×10-4t-2.478×10-5p+0.9986

    此时,为了验证得到关于气样1的压缩因子计算公式的可行性,可进行相关的误差分析。在选取一系列气质温度与气质压力情况下,以美国燃气协会8号报告AGA8提出的AGA8-92DC方程的计算结果为基准,计算本发明公式的相对误差大小。具体情况可见表2。

    表2气样1计算比较

    实施例二

    为了进一步说明本发明的可行性,这里又选取了5种美国燃气协会8号报告所提到的气样,这5种气样的具体成分摩尔百分比可见表1。

    首先对不同气样的压缩因子值进行采样,考虑到压缩因子的实际应用,故取气质温度从0℃至60℃变化,5℃为步长;气质压力取从50KPa到2000KPa变化,取其中50KPa至300KPa以50KPa为步长,300KPa至2000KPa以200KPa为步长,利用AGA8报告中提出的AGA8-92DC方程对5种气样进行不同气质温度与气质压力下的压缩因子值采样。由于数据采样点比较多,表3至表7分别截取了5种气样在一部分采样点上的压缩因子值。

    同时,通过图1的步骤,确定对应于不同气样的压缩因子计算公式(这里我们选择特定气质压力为1000KPa,特定气质温度为10℃)。根据得到的公式计算上述5种气样在各个采样点上的压缩因子值,同样由于数据采样点较多,表3至表7分别截取了5种气样在一部分采样点上的压缩因子值。

    以现行的AGA8报告提出的AGA8-92DC方程为基准,得到通过该方程的压缩因子值计算结果z1,并计算出本发明提出的天然气压缩因子计算公式的计算结果z2。并根据相对误差计算公式计算得到对应的相对误差大小。

    表3至表7分别截取了5种气样在一部分采样点上的相对误差大小,可见相对误差均控制在了0.5%以下,证明发明公式具有较强的可行性。

    表3气样2计算比较

    表4气样3计算比较

    表5气样4计算比较

    表6气样5计算比较

    表7气样6计算比较

    上文中例举了一组系数s1、s2、s3,而系数s1、s2、s3还可以有其他替代方案,满足相对误差均控制在0.5%以下的要求:如

    s1=9.711×10-2s4-2.931×10-7

    s2=-8.125×10-3s4+3.105×10-8

    s3=-5.018s4+3.178×10-5

    z=(9.711×10-2s4-2.931×10-7)t2+(-8.125×10-3s4+3.105×10-8)pt+(-5.018s4+3.178×10-5)t+s4p+0.9986

    又如:

    s1=9.7×10-2s4-2.955×10-7

    s2=-8.114×10-3s4+3.139×10-8

    s3=-4.998s4+3.229×10-5

    z=(9.7×10-2s4-2.955×10-7)t2+(-8.114×10-3s4+3.139×10-8)pt+(-4.998s4+3.229×10-5)t+s4p+0.9986

    又如:

    s1=9.696×10-2s4-3.056×10-7

    s2=-8.11×10-3s4+3.184×10-8

    s3=-5.000s4+3.283×10-5

    z=(9.696×10-2s4-3.056×10-7)t2+(-8.11×10-3s4+3.184×10-8)pt+(-5.000s4+3.283×10-5)t+s4p+0.9986

    展开全文
  • 基于21中摩尔成分进行操作状态下天然气压缩因子计算
  • 输气管道压缩因子计算,石油大学,输气管道设计与管理
  • 国标 天然气压缩因子计算 GB17747.1-2011
  • 天然气压缩因子计算
  • 天然气压缩因子计算

    热门讨论 2011-09-14 13:33:29
    基于AGA8 92DC的天然气压缩因子计算软件
  • using System; namespace MPD_Z_AGA8_92DC_NS//AGA8—92DC { public static class Z_CAL { public unsafe static double Z_result_ZhongMianNG(double XiangDuiYaLi, double WenDu, double ...

    中缅线组分 昆明

    using System;
    namespace MPD_Z_AGA8_92DC_NS//AGA8—92DC
    {
    
        public static class Z_CAL
        {
            public unsafe static double Z_result_ZhongMianNG(double XiangDuiYaLi, double WenDu, double localAtmosphericPressure_kPa)
            {
                double TT, D, Z, BMIX;
                // Gas compositions for example calculations组分,中缅组分
                double[] ex1 =
                    { 0.9907,//CH4
                      0.0019,//N2
                      0.0050,//CO2
                      0.0012,//C2H6
                      0.0003,//C3H8
                      0.0000,//H2O
                      0.0000,//H2S
                      0.0000,//H2
                      0.0000,//CO
                      0.0000,//O2
                      0.0001,//iC4H10
                      0.0000,//nC4H10
                      0.0000,//iC5H12
                      0.0000,//nC5H12
                      0.0000,//nC6H14
                      0.0000,//nC7H16
                      0.0000,//nC8H18
                      0.0008,//nC9H20
                      0.0000,//nC10h22
                      0.0000,//He
                      0.0000 //Ar
                      };
                // Temperatures for example calculations工况温度
                // Pressures for example calculations工况压力
                double DaQi_YaLi = localAtmosphericPressure_kPa / 1000;// 0.0808;//昆明大气压
                double p = XiangDuiYaLi + DaQi_YaLi;// Pressures for example calculations工况压力MPa,YaLi为相对压力,需要转换成绝对压力;
                MDP_Z.DCAGA(ex1);
                TT = WenDu + 273.15;
                MDP_Z.DZOFPT(&p, &TT, &D, &Z, &BMIX);
                return Z;
            }
            //后期接口,开放组分时用的
            unsafe static double Z_result_QiTq_NG(double[] ZuFen, double YaLi, double WenDu)
            {
                double TT, D, Z, BMIX;
                double DaQi_YaLi = 0.0808;//昆明大气压
                // Gas compositions for example calculations组分
                double[] ex1 = { 0.9650, 0.0030, 0.0060, 0.0180, 0.0045, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0010, 0.0010, 0.0005, 0.0003, 0.0007, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000 };
                double p = YaLi + DaQi_YaLi;// Pressures for example calculations工况压力MPa,YaLi为相对压力,需要转换成绝对压力;
                MDP_Z.DCAGA(ex1);
                TT = WenDu + 273.15;// Temperatures for example calculations工况温度℃,需要转换成热力学温度;
                MDP_Z.DZOFPT(&p, &TT, &D, &Z, &BMIX);
                return Z;
            }
        }
    
        public static class MDP_Z
        {
    
            static double[] A = { 0.153832600, 1.341953000, -2.998583000, -0.048312280, 0.375796500, -1.589575000, -0.053588470, 0.886594630, -0.710237040, -1.471722000,
                                  1.321850350, -0.786659250, 0.2291290e-8, 0.157672400, -0.436386400, -0.044081590, -0.003433888, 0.032059050, 0.024873550, 0.073322790,
                                 -0.001600573, 0.642470600, -0.416260100, -0.066899570, 0.279179500, -0.696605100, -0.002860589, -0.008098836, 3.150547000, 0.007224479,
                                 -0.705752900, 0.534979200, -0.079314910, -1.418465000, -0.599905e-16, 0.105840200, 0.034317290, -0.007022847, 0.024955870, 0.042968180,
                                  0.746545300, -0.291961300, 7.294616000, -9.936757000, -0.005399808, -0.243256700, 0.049870160, 0.003733797, 1.874951000, 0.002168144,
                                 -0.658716400, 0.000205518, 0.009776195, -0.020487080, 0.015573220, 0.006862415, -0.001226752, 0.002850908 };
    
            static double[] B = { 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 };
            static double[] C = { 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 };
            static double[] K = { 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 };
            static double[] G = { 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 };
            static double[] Q = { 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 };
            static double[] F = { 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 };
            static double[] S = { 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 };
            static double[] W = { 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 };
    
            static double[] U = { 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.0, 4.0, 6.0, 21.0, 23.0, 22.0, -1.0, -0.5, 7.0,
                                 -1.0, 6.0, 4.0, 1.0, 9.0, -13.0, 21.0, 8.0, -0.5, 0.0, 2.0, 7.0, 9.0, 22.0, 23.0, 1.0, 9.0, 3.0, 8.0, 23.0, 1.5, 5.0, -0.5, 4.0, 7.0, 3.0, 0.0, 1.0, 0.0 };
    
            static double[] MW = { 16.0430, 28.0135, 44.0100, 30.0700, 44.0970, 18.0153, 34.0820, 2.0159, 28.0100, 31.9988, 58.1230, 58.1230, 72.1500, 72.1500, 86.1770, 100.2040, 114.2310, 128.2580, 142.2850, 4.0026, 39.9480 };
    
            static double[] EI = { 151.318300, 99.737780, 241.960600, 244.166700, 298.118300, 514.015600, 296.355000, 26.957940, 105.534800, 122.766700, 324.068900,
                                   337.638900, 365.599900, 370.682300, 402.636293, 427.722630, 450.325022, 470.840891, 489.558373, 2.610111, 119.629900 };
    
            static double[] KI = { 0.4619255, 0.4479153, 0.4557489, 0.5279209, 0.5837490, 0.3825868, 0.4618263, 0.3514916, 0.4533894, 0.4186954, 0.6406937,
                                   0.6341423, 0.6738577, 0.6798307, 0.7175118, 0.7525189, 0.7849550, 0.8152731, 0.8437826, 0.3589888, 0.4216551 };
    
            static double[] GI = { 0.000000, 0.027815, 0.189065, 0.079300, 0.141239, 0.332500, 0.088500, 0.034369, 0.038953, 0.021000, 0.256692,
                                   0.281835, 0.332267, 0.366911, 0.289731, 0.337542, 0.383381, 0.427354, 0.469659, 0.000000, 0.000000 };
    
            static double[] QI = { 0.0, 0.0, 0.69, 0.0, 0.0, 1.06775, 0.633276, 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 };
    
            static double[] FI = { 0.0, 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, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
    
            static double[] SI = { 0.0, 0.0, 0.0, 0.0, 0.0, 1.5822, 0.390, 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 };
    
            static double[] WI = { 0.0, 0.0, 0.0, 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, 0.0, 0.0, 0.0, 0.0 };
    
            static double[,] EIJ = {
                                   { 1.000000, 0.971640, 0.960644, 1.000000, 0.994635, 0.708218, 0.931484, 1.170520, 0.990126, 1.000000, 1.019530, 0.989844, 1.002350, 0.999268, 1.107274, 0.880880, 0.880973, 0.881067, 0.881161, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 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.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 0.925053, 0.960237, 0.849408, 0.955052, 1.281790, 1.500000, 1.000000, 0.906849, 0.897362, 0.726255, 0.859764, 0.855134, 0.831229, 0.808310, 0.786323, 0.765171, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.022560, 0.693168, 0.946871, 1.164460, 1.000000, 1.000000, 1.000000, 1.013060, 1.000000, 1.005320, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.034787, 1.000000, 1.000000, 1.000000, 1.004900, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.008692, 1.010126, 1.011501, 1.012821, 1.014089, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.100000, 1.000000, 1.300000, 1.300000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 } };
    
            static double[,] UIJ = {
                                   { 1.000000, 0.886106, 0.963827, 1.000000, 0.990877, 1.000000, 0.736833, 1.156390, 1.000000, 1.000000, 1.000000, 0.992291, 1.000000, 1.003670, 1.302576, 1.191904, 1.205769, 1.219634, 1.233498, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 0.835058, 0.816431, 0.915502, 1.000000, 0.993476, 0.408838, 1.000000, 1.000000, 1.000000, 0.993556, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 0.969870, 1.000000, 1.000000, 1.045290, 1.000000, 0.900000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.066638, 1.077634, 1.088178, 1.098291, 1.108021, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.065173, 1.000000, 0.971926, 1.616660, 1.000000, 1.000000, 1.250000, 1.250000, 1.250000, 1.250000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.028973, 1.033754, 1.038338, 1.042735, 1.046966, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 } };
    
            static double[,] KIJ = {
                                   { 1.000000, 1.003630, 0.995933, 1.000000, 1.007619, 1.000000, 1.000080, 1.023260, 1.000000, 1.000000, 1.000000, 0.997596, 1.000000, 1.002529, 0.982962, 0.983565, 0.982707, 0.981849, 0.980991, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 0.982361, 1.007960, 1.000000, 1.000000, 0.942596, 1.032270, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.008510, 1.000000, 1.000000, 1.007790, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.910183, 0.895362, 0.881152, 0.867520, 0.854406, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 0.986893, 1.000000, 0.999969, 1.020340, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.968130, 0.962870, 0.957828, 0.952441, 0.948338, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 } };
    
            static double[,] GIJ = {
                                   { 1.000000, 1.000000, 0.807653, 1.000000, 1.000000, 1.000000, 1.000000, 1.957310, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 0.982746, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 0.370296, 1.000000, 1.673090, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 },
                                   { 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000 } };
    
    
            static double RGAS = 8.31451e-3;
            static double[] BI = new double[18];
            static double[] CNS = new double[58];
            static double K1;
            public static void DCAGA(double[] XJ)
            {
                long I, J, N;
                double[] XI = new double[21];
                double SUM = 0.0, U1 = 0.0, G1 = 0.0, Q1 = 0.0, F1 = 0.0, E1 = 0.0;
                double XIJ, EIJ0, GIJ0, BN;
    
                for (J = 0; J <= 20; J++) XI[J] = XJ[J];
    
                /*.....Normalize mole fractions */
                for (I = 0; I <= 20; I++) SUM += XI[I];
                for (I = 0; I <= 20; I++) XI[I] /= SUM;
    
                /*.....Calculate molecular weight */
                RGAS = 8.31451e-3;
    
                for (N = 0; N <= 17; N++) BI[N] = 0.0;
    
                K1 = 0.0;
    
                for (I = 0; I < 21; I++)
                {
                    K1 += XI[I] * Math.Pow(KI[I], 2.5);// B.11
                    U1 += XI[I] * Math.Pow(EI[I], 2.5);// B.6
                    G1 += XI[I] * GI[I];// B.7
                    Q1 += XI[I] * QI[I];// B.8
                    F1 += XI[I] * XI[I] * FI[I];// B.9
                    E1 += XI[I] * EI[I];//???
                }
                K1 *= K1;// B.11
                U1 *= U1;// B.6
                /* for I := 1 to 8 do begin */
                /*  for J := I+1 to 19 do begin */
                for (I = 0; I < 20; I++)
                {
                    for (J = I + 1; J < 21; J++)
                    {
                        XIJ = XI[I] * XI[J];
                        if (XIJ != 0)
                        {
                            K1 += 2.0 * XIJ * (Math.Pow(KIJ[I, J], 5.0) - 1.0) * Math.Pow(KI[I] * KI[J], 2.5);// B.11
                            U1 += 2.0 * XIJ * (Math.Pow(UIJ[I, J], 5.0) - 1.0) * Math.Pow(EI[I] * EI[J], 2.5);// B.6 ??? 2*
                            G1 += XIJ * (GIJ[I, J] - 1.0) * (GI[I] + GI[J]);
                        }
                    }
                }// B.7
                for (I = 0; I < 21; I++)
                {
                    for (J = I; J < 21; J++)
                    {
                        XIJ = XI[I] * XI[J];
                        if (XIJ != 0)
                        {
                            if (I != J) XIJ = 2 * XIJ;
                            EIJ0 = EIJ[I, J] * Math.Sqrt(EI[I] * EI[J]);// B.3
                            GIJ0 = GIJ[I, J] * (GI[I] + GI[J]) / 2.0;// B.4
                            for (N = 0; N <= 17; N++)
                            {
                                BN = Math.Pow(GIJ0 + 1.0 - G[N], (double)G[N]) * 
                                    Math.Pow(QI[I] * QI[J] + 1.0 - Q[N], (double)Q[N]) *
                                    Math.Pow(Math.Sqrt(FI[I] * FI[J]) + 1.0 - F[N], (double)F[N]) *
                                    Math.Pow(SI[I] * SI[J] + 1.0 - S[N], (double)S[N]) *
                                    Math.Pow(WI[I] * WI[J] + 1.0 - W[N], (double)W[N]);
                                BI[N] += A[N] * XIJ * Math.Pow(EIJ0, U[N]) * Math.Pow(KI[I] * KI[J], 1.5) * BN;// B.2
                            }
                        }
                    }
                }// B.1
    
                K1 = Math.Pow(K1, 0.2);// B.11
                U1 = Math.Pow(U1, 0.2);// B.6
                for (N = 12; N < 58; N++)
                    CNS[N] = Math.Pow(G1 + 1.0 - G[N], (double)G[N]) *
                    Math.Pow(Q1 * Q1 + 1.0 - Q[N], (double)Q[N]) *
                    Math.Pow(F1 + 1.0 - F[N], (double)F[N]) * A[N] * Math.Pow(U1, U[N]);// B.5
            }
            unsafe static public void PZOFDT(double* D, double* T, double* P, double* Z, double* BMIX)
            {
                long N;
                double DR;
                DR = *D * K1 * K1 * K1; // (2)
                *BMIX = 0.0;
                for (N = 0; N < 18; N++) *BMIX += BI[N] * Math.Pow(*T, -U[N]);// B.1
                *Z = 1.0 + *BMIX * *D;// (1) B.10
                for (N = 12; N < 18; N++) *Z -= DR * CNS[N] * Math.Pow(*T, -U[N]);// (1) B.10
                for (N = 12; N < 58; N++)
                    *Z += CNS[N] / Math.Pow(*T, U[N]) * (B[N] - C[N] * K[N] * Math.Pow(DR, (double)K[N])) *
                    Math.Pow(DR, (double)B[N]) * Math.Exp(-C[N] * Math.Pow(DR, (double)K[N]));
                *P = *D * RGAS * *T * *Z;
            }
            unsafe static public void DZOFPT(double* P, double* T, double* D, double* Z, double* BMIX)
            {
                long I;
                double X1 = 0.000001, X2 = 40.0;
                double X3, F, F1, F2, F3;
                double TOL = 0.5e-9;
                *D = 0.0;
                PZOFDT(&X1, T, &F1, Z, BMIX);
                PZOFDT(&X2, T, &F2, Z, BMIX);
                F1 -= *P;
                F2 -= *P;
                if (F1 * F2 >= 0) return;
                //------------------
                // BEGIN ITERATING
                //------------------
                for (I = 1; I <= 50; I++)
                // Use False Position to get point 3.*/
                {
                    X3 = X1 - F1 * (X2 - X1) / (F2 - F1);
                    PZOFDT(&X3, T, &F3, Z, BMIX);
                    F3 -= *P;
                    // Use points 1, 2, and 3 to estimate the root using Chamber's method (quadratic solution).
                    *D = X1 * F2 * F3 / ((F1 - F2) * (F1 - F3)) + X2 * F1 * F3 / ((F2 - F1) * (F2 - F3)) + X3 * F1 * F2 / ((F3 - F1) * (F3 - F2));
                    if ((*D - X1) * (*D - X2) >= 0) *D = (X1 + X2) / 2;
                    PZOFDT(D, T, &F, Z, BMIX);
                    F -= *P;
                    if (Math.Abs(F) <= TOL) return;
                    // Discard quadratic solution if false position root is closer.
                    if (Math.Abs(F3) < Math.Abs(F) && F * F3 > 0)
                    {
                        if (F3 * F1 > 0) { X1 = X3; F1 = F3; }
                        else { X2 = X3; F2 = F3; }
                    }
                    else
                    // Swap in new value from quadratic solution
                    {
                        if (F * F3 < 0) { X1 = *D; F1 = F; X2 = X3; F2 = F3; }
                        else if (F3 * F1 > 0) { X1 = *D; F1 = F; }
                        else { X2 = *D; F2 = F; }
                    }
                }
                *D = 0.0;
            }
        }
    }
    
    展开全文
  • 计算天然气压缩因子的公式,核实无误,放心使用
  • 天然气压缩因子计算 第3部分:用物性值进行计算
  • 摘要:介绍了求解 BWRS状态方程中压缩因子的数值方法 ,在求解方面重点介绍了...并结合计算实例对结果进行了分析 ,得出运用推荐的计算压缩因子的算法具有使用简单快捷、 精度高等特点的结论 ,给工程实际计算带来了方便。
  • 针对单轴拉伸和压缩条件下的镁合金,计算了不同滑移系(基面滑移、柱面滑移、锥面
  • mat9_rk_压缩因子_源码

    2021-09-29 08:24:38
    用matlab编程计算混合气体的压缩因子,这个算法只列举了三种混合气体的例子,可继续增加
  • 粒子群算法改进——压缩因子

    千次阅读 2020-11-09 15:31:31
    在研究完粒子群算法中有关惯性权重的优化之后,我们把目光转向速度更新公式的后两项,根据之前所学可知:个体学习因子c1和社会学习因子c2决定了粒子本身经验信息和其他粒子的经验信息对粒子运行轨迹的影响,其反映了...

    前言概述

    粒子速度更新公式如下:

    vid = wvid-1 + c1r1(pbestid-xid)+ c2r2(gbestd-xid)

    在研究完粒子群算法中有关惯性权重的优化之后,我们把目光转向速度更新公式的后两项,根据之前所学可知:个体学习因子c1和社会学习因子c2决定了粒子本身经验信息和其他粒子的经验信息对粒子运行轨迹的影响,其反映了粒子群之间的信息交流。
    较大的c1值,会使粒子过多地在自身的局部范围内搜索
    较大的c2值,则又会促使粒子过早收敛到局部最优值。

    为了有效地控制粒子的飞行速度,使算法达到全局搜索与局部搜索两者间的有效平衡,Clerc构造了引入收缩因子的PSO模型,采用了压缩因子,这种调整方法通过合适选取参数,可确保PSO算法的收敛性,并可取消对速度的边界限制

    参数设置

    • 个体学习因子c1 = 2.05 (应用较多)
    • 社会学习因子 c2 = 2.05(应用较多)
    • 惯性权重 w = 0.9
    • C = c1+c2 = 4.1
    • 收缩因子在这里插入图片描述

    综上,速度更新公式如下
    **vid = ==K== ·(wvid-1 + c1r1(pbestid-xid)+ c2r2(gbestd-xid) )**

    示例代码

    求解函数y = 7cos(5x) + 4*sin(x)在[-5,5]内的最大值

    …… ……
    %% 初始化参数
    c1 = 2.05;  % 每个粒子的个体学习因子
    c2 = 2.05;  % 每个粒子的社会学习因子
    C = c1 + c2;
    w = 0.9;  % 惯性权重
    fai = 2/abs((2-C-sqrt(C^2-4*C)));% 收缩因子
    
    %% 初始化粒子的位置和速度
    …… ……
    
    %% 计算适应度
    …… ……
    
    %% 迭代K次来更新速度与位置
    fitnessbest = ones(K,1);  % 初始化每次迭代得到的最佳的适应度
    for d = 1:K  % 开始迭代,一共迭代K次
        for i = 1:n   % 依次更新第i个粒子的速度与位置
           v(i,:) = fai * (w*v(i,:) + c1*rand(1)*(pbest(i,:) - x(i,:)) + c2*rand(1)*(gbest - x(i,:)));  % 更新第i个粒子的速度
            x(i,:) = x(i,:) + v(i,:); % 更新第i个粒子的位置
            % 如果粒子的位置超出了定义域,就对其进行调整
         		…… ……
          …… ……
    end
    
    …… ……
    
    function y = Obj_fun1(x)
        y = 7*cos(5*x) + 4*sin(x);
    end
    

    运行结果如下

    在这里插入图片描述在这里插入图片描述对比未经优化的粒子群算法
    在这里插入图片描述在这里插入图片描述可知,求得的最优解更接近实际最优解

    参考文献:Eberhart R C . Comparing inertia weights and
    constriction factors in optimization[C]//
    Proceedings of the 2000 IEEE Congress on
    Evolutionary Computation, La Jolla, CA. IEEE, 2000.

    展开全文
  • 乙氧基乙醇物性的输入由于AspenPlus软件自带的物性数据库中很难查乙基2-乙氧基乙醇的物性参数,使模拟分离、确定工艺条件的过程中遇到困难,所以采用物性估算的功能对乙基2-乙氧基乙醇计算。已知:最简式:(C6H14O3)...

    1

    纯组分物性常数的估算

    1.1

    、乙基

    2-

    乙氧基乙醇物性的输入

    由于

    Aspen Plus

    软件自带的物性数据库中很难查乙基

    2-

    乙氧基乙醇的物性参数

    ,

    使模拟分离、确定工艺条件的过程中遇到困难

    ,

    所以采用物性估算的功能对乙基

    2-

    乙氧

    基乙醇计算。

    已知

    :

    最简式:

    (C

    6

    H

    14

    O

    3

    )

    分子式:

    (CH

    3

    -CH

    2

    -O-CH

    2

    -CH

    2

    -O-CH

    2

    -CH

    2

    -OH)

    点:

    195

    1.2

    、具体模拟计算过程

    乙基

    2-

    乙氧基乙醇为非库组分,其临界温度、临界压力、临界体积和临界压缩因子

    及理想状态的标准吉布斯自由能、标准吉生成热、蒸汽压、偏心因子等一些参数都很难

    查询到,根据的已知标准沸点

    TB

    ,可以使用

    aspen plus

    软件的

    Estimation Input Pure

    Component(

    估计输入纯组分

    )

    对纯组分物性的这些参数进行估计。

    为估计纯组分物性参数

    ,则需

    1.

    Data (

    数据

    )

    菜单中选择

    Properties(

    性质

    )

    2.

    Data Browser Menu(

    数据浏览菜单

    )

    左屏选择

    Estimation(

    估计

    )

    然后选

    Input(

    输入

    )

    3.

    Setup(

    设置

    )

    表中选择

    Estimation(

    估计

    )

    选项,

    Identifying Parameters to

    be Estimated(

    识别估计参数

    )

    4.

    单击

    Pure Component(

    纯组分

    )

    5.

    Pure Component

    页中选择要用

    Parameter(

    参数

    )

    列表框估计的参数

    6.

    Component(

    组分

    )

    列表框中选择要估计所选物性的组分如果要为多组分估计

    展开全文
  • 目的:采用压缩因子粒子群算法实现双指数拟合。 function x_opt = PSO_ExpFit2(t, Et) %{ 函数功能:压缩因子粒子群算法实现指数拟合:y = a1*exp(-x/b1) + a2*exp(-x/b2) + c 输入: t:自变量; Et:因变量; ...
  • 混合胶体溶液的热力学性质(如渗透压等)对于血液生理机理、...计算结果表明,有一阶平均球近似计算出的渗透压缩因子与Monte Carlo模拟数据符合得很好,一阶平均球近似理论可以准确地预测混合胶体溶液的热力学性质。
  • 关于FFT IP核的配置,网上有很多相关的资料可以参考,但是唯独涉及到scaled压缩因子设置这个参数,资料却非常匮乏,这是个什么参数,应该整么设置,设置后对结果输出会有什么影响,整样才能知道它设置的合理不合理?...
  • 介绍和讨论了斜裂纹应力强度因子的有限元分析方法,分别计算了单轴、双轴压缩下有限大板中存在的中心贯穿斜裂纹的应力强度因子。通过对求得的应力强度因子值与解析解的比较,表明用有限元法计算应力强度因子具有相当高...
  • AGA8代码.rar

    2019-07-17 16:35:21
    AGA8-92DC计算压缩因子python代码,运行CSIM主文件即可实现计算
  • 因子分析(FA)算法简述

    万次阅读 多人点赞 2020-10-16 15:29:53
    1.1 因子分析应用背景1.2 因子分析算法的基本步骤1.3 因子分析算法的数学解释1.3.1 因子模型1.3.2 因子载荷矩阵的求解二、因子分析的应用实例三、主成分分析(PCA)与因子分析(FA)的联系与区别总结 前言 在学习...
  • 有损压缩/压缩算法实验 1、问题及说明 查阅JPEG编码的有关资料,对图像进行JPEG压缩,算法步骤必须包括如下几个部分:图像分块,离散余弦变换,量化,ac和dc系数的Z字形编排。 在输入灰度图像时直接将样例中的...
  • Aspen Plus 的学习经验ASPEN是做平衡态模拟,模拟的本质就是计算,根据化工原理,热力学等等化工公式做计算而已,模拟只是因为它的程序界面,并且能做大的流程的计算Aspenplus 的手册有很多, 其中比较重要的是单元...
  • 五种CNN模型的尺寸,计算量和参数数量对比详解一、SqueezeNet1.1 设计思想1.2 网络架构1.3 实验结果1.4 速度考量二、Deep Compression2.1 算法流程2.2 模型存储2.3 实验结果2.4 速度考量三、XNorNet3.1 BWN3.2 XNOR-...
  • 此功能允许通过 Lee Kesler 状态方程 (LK-EOS) 计算压缩系数 (Z)。 要指定的参数是: 一世。 临界温度ii. 临界压力iii. 偏心因子(Pitzer's) iv。 温度v. 压力。
  • 性能提升方法 本文github链接 1. 小模型 mobilenet , 更精细模型的设计,紧致网络设计 mobilenet squeezenet shufflenet MobileNet逐通道卷积 + 普通点...2. 模型压缩:参数稀疏、剪裁、量化、分解 ...
  • 乙氧基乙醇物性的输入由于AspenPlus软件自带的物性数据库中很难查乙基2-乙氧基乙醇的物性参数,使模拟分离、确定工艺条件的过程中遇到困难,所以采用物性估算的功能对乙基2-乙氧基乙醇计算。已知:最简式:(C6H14O3)...
  • jpeg压缩简单介绍及huffman table

    千次阅读 2020-02-05 17:51:15
    一、jpeg压缩流程的简单介绍 jpeg压缩是基于YUV颜色空间进行压缩编码的,首先将RGB转化成YUV,然后将像素值减去128,将像素值转化到范围-128~127。后要进行采样,一般来说有3中采样方式:4:4:4,4:2:2和4:1:1;4:4:4...
  • 针对不同夹芯形式、不同夹芯网格的疏密程度和不同表板厚度等因素,计算比较了不同几何和物理参数夹层板在压缩载荷作用下的稳定性,得到了不同类型夹层板的临界载荷.分析了夹层板几何和物理参数对其失稳的敏感性,得出了...
  • 因子模型详细.ppt

    2021-04-20 01:36:16
    * * * * * * * * Barra 风险模型 核心目标:估计股票间收益率的协方差矩阵 对因子收益协方差F做修正 降维 升维 指数衰减加权(exponentially weighted) Newey-West修正 特征值因子修正 (Eigenfactor Risk Adjustment)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,684
精华内容 11,073
关键字:

压缩因子计算