Class ChemData
In: chemdat/chemdata.f90

諸々の化学種の物性データを保管するモジュール

  * 命名則
    "化学種名-相"

全ての物質において与える必要がある物性値

  * 相 ('Gas' => 気相, 'Liq' => 液相, 'Sol' => 固相)
  * 分子量
  * 分子を構成する元素とその個数

気相に対して必ず与える必要のある物性値

  * 基準状態のエントロピー
  * 基準状態のエンタルピー
  * 比熱の温度依存性

液相・固相に対して必ず与える必要のある物性値

  * 飽和蒸気圧の温度依存性
  * Antoine の式の係数

Methods

Public Instance methods

ChemData_AtmNum
Constant :
ChemData_AtmNum = 6 :integer, parameter
: 元素の数
ChemData_AtmSymbol
Variable :
ChemData_AtmSymbol(ChemData_AtmNum) :character(2)
: 原子記号
ChemData_AtmWt
Variable :
ChemData_AtmWt(ChemData_AtmNum) :real(8)
: 原子量 [kg/mol]
ChemData_Cp
Variable :
ChemData_Cp(ChemData_SpcNum, ChemData_DataNum) :real(8)
: 比熱(単位質量) [J/K kg]
ChemData_CpPerMol
Variable :
ChemData_CpPerMol(ChemData_SpcNum, ChemData_DataNum) :real(8)
: 比熱(モル当量) [J/K mol]
ChemData_CpPerMolRef
Variable :
ChemData_CpPerMolRef(ChemData_SpcNum) :real(8)
: 標準状態の比熱(モル当量) [J/K mol]
ChemData_CpRef
Variable :
ChemData_CpRef(ChemData_SpcNum) :real(8)
: 標準状態の比熱(単位質量) [J/K kg]
ChemData_Cp_Temp
Variable :
ChemData_Cp_Temp(ChemData_SpcNum, ChemData_DataNum) :real(8)
: 比熱データに対応する温度[K]
ChemData_CvPerMolRef
Variable :
ChemData_CvPerMolRef(ChemData_SpcNum) :real(8)
: 標準状態の比熱(モル当量) [J/K mol]
ChemData_CvRef
Variable :
ChemData_CvRef(ChemData_SpcNum) :real(8)
: 標準状態の比熱(単位質量) [J/K kg]
ChemData_DataNum
Constant :
ChemData_DataNum = 16 :integer, parameter
: データ数
ChemData_Enthalpy
Variable :
ChemData_Enthalpy(ChemData_SpcNum) :real(8)
: 基準エンタルピー[J/K mol]
ChemData_Entropy
Variable :
ChemData_Entropy(ChemData_SpcNum) :real(8)
: 基準エントロピー[J/K mol]
ChemData_GasR
Variable :
ChemData_GasR(ChemData_SpcNum) :real(8)
: 気体定数[J/K kg]
Subroutine :

物質の名前に対して番号付けを行い, その番号に対して 諸々の物性値を割り当てる

[Source]

  subroutine ChemData_Init
    !
    ! 物質の名前に対して番号付けを行い, その番号に対して
    ! 諸々の物性値を割り当てる
    !

    !暗黙の型宣言禁止
    implicit none
    
    !内部変数
    integer        :: SNum, ANum1, ANum2, ANum3, RNum
    character(2)   :: AtmSymbol
    character(20)  :: SpcSymbol

    !-------------------------------------------------------------
    ! 元素, 分子名を配列に格納. 
    !-------------------------------------------------------------
    !原子記号 
    ChemData_AtmSymbol = (/ "H ", "He", "C ", "N ", "O ", "S " /)

    !原子量 (kg/mol). 
    ChemData_AtmWt = (/ 1.00794d-3, 4.002602d-3, 12.0107d-3, 14.00674d-3, 15.9994d-3, 32.066d-3 /) 

    !分子
    ChemData_SpcSymbol = (/ "N2-g   ", "H2-g   ", "He-g   ", "He-g   ", "H2O-g  ", "H2O-l  ", "H2O-s  ", "NH3-g  ", "NH3-s  ", "H2S-g  ", "NH4SH-s", "CO2-g  " /)

    !-------------------------------------------------------------
    ! それぞれの元素, 分子に対応する物性値を格納
    !-------------------------------------------------------------
    !初期化
    ChemData_MolWt       = 0.0d0
    ChemData_GasR        = 0.0d0 
    ChemData_Entropy     = 0.0d0
    ChemData_Enthalpy    = 0.0d0
    ChemData_SpcFormula  = 0.0d0
    ChemData_CpPerMol    = 0.0d0
    ChemData_Cp          = 0.0d0
    ChemData_Cp_Temp     = 0.0d0
    ChemData_CpPerMolRef = 0.0d0
    ChemData_CpRef       = 0.0d0
    ChemData_CvPerMolRef = 0.0d0
    ChemData_CvRef       = 0.0d0
    ChemData_SVapPress   = 0.0d0
    ChemData_SVapPress_Temp     = 0.0d0
    ChemData_SVapPress_AntoineA = 0.0d0
    ChemData_SVapPress_AntoineB = 0.0d0
    ChemData_SVapPress_AntoineC = 0.0d0
    ChemData_SVapPress_AntoineUnit = 0.0d0
    ChemData_SVapPress_AMPA = 0.0d0
    ChemData_SVapPress_AMPB = 0.0d0
    ChemData_SVapPress_AMPC = 0.0d0
    ChemData_SVapPress_AMPD = 0.0d0
    ChemData_SVapPress_AMPE = 0.0d0
    SNum = 0
    RNum = 0
    ANum1 = 0
    ANum2 = 0
    ANum3 = 0

    !!=============================================================
    !! N2-g に関する物性
    !!=============================================================
    SpcSymbol = 'N2-g'
    SNum  = ChemData_SearchSpc( SpcSymbol )
    AtmSymbol = 'N'
    ANum1 = ChemData_SearchAtm( AtmSymbol )

    !相
    ChemData_Phase(SNum) = 'Gas'

    !基準状態でのエントロピー 
    ChemData_Entropy(SNum) = 191.609d0

    !基準状態でのエンタルピー
    ChemData_Enthalpy(SNum) = 0.0d0

    !分子を構成する元素
    ChemData_SpcFormula(SNum,ANum1) = 2.0d0

    !分子量 [kg/mol]
    ChemData_MolWt(SNum) = dot_product(ChemData_AtmWt, ChemData_SpcFormula(SNum,:))
     
    !気体定数
    ChemData_GasR(SNum) = GasRUniv / ChemData_MolWt(SNum)

    !単位モル当たりの定圧比熱 [J/K mol]. 温度依存性を考慮
    ChemData_CpPerMol(SNum,1:9) = (/ 29.104d0, 29.107d0, 29.111d0, 29.124d0, 29.125d0, 29.165d0, 29.249d0, 29.387d0, 29.58d0 /)

    !単位質量当たりの定圧比熱 [J/K kg]. 温度依存性を考慮
    ChemData_Cp(SNum,:) = ChemData_CpPerMol(SNum,:) / ChemData_MolWt(SNum)

    !定圧比熱の温度依存性
    ChemData_Cp_temp(SNum,1:9) = (/ 100.0d0,  200.0d0,  250.0d0,  298.15d0, 300.0d0, 350.0d0,  400.0d0,  450.0d0,  500.0d0 /)

    !基準状態の配列要素の番号を求める
    RNum = ChemData_SearchRef(ChemData_Cp_temp(SNum,:))

    !基準状態での単位モル当たりの定圧比熱 [J/K mol]. 
    ChemData_CpPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum)
       
    !基準状態での単位質量当たりの定圧比熱 [J/K kg]. 
    ChemData_CpRef(SNum) = ChemData_Cp(SNum, RNum)

    !基準状態での単位モル当たりの定積比熱 [J/K mol]. 
    ChemData_CvPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum) - GasRUniv
    
    !基準状態での単位質量当たりの定積比熱 [J/K kg]. 
    ChemData_CvRef(SNum) = ChemData_CvPerMolRef(SNum) / ChemData_MolWt(SNum)


    !!=============================================================
    !! H2-g に関する物性
    !!=============================================================
    SpcSymbol = 'H2-g'
    SNum  = ChemData_SearchSpc( SpcSymbol)
    AtmSymbol = 'H'
    ANum1 = ChemData_SearchAtm( AtmSymbol)

    !相
    ChemData_Phase(SNum) = 'Gas'

    !基準状態でのエントロピー 
    ChemData_Entropy(SNum) = 130.68d0

    !基準状態でのエンタルピー
    ChemData_Enthalpy(SNum) = 0.0d0

    !分子を構成する元素
    ChemData_SpcFormula(SNum,ANum1) = 2.0d0

    !分子量 [kg/mol]
    ChemData_MolWt(SNum) = dot_product(ChemData_AtmWt, ChemData_SpcFormula(SNum,:))
     
    !気体定数
    ChemData_GasR(SNum) = GasRUniv / ChemData_MolWt(SNum)
    
    !単位モル当たりの定圧比熱 [J/K mol]. 温度依存性を考慮
    ChemData_CpPerMol(SNum,1:12) = (/ 20.65d0, 21.15d0, 22.46d0, 23.85d0, 25.18d0, 26.32d0, 27.17d0, 27.61d0, 28.03d0, 28.34d0, 28.57d0, 28.59d0 /)

    !単位質量当たりの定圧比熱 [J/K kg]. 温度依存性を考慮
    ChemData_Cp(SNum,:) = ChemData_CpPerMol(SNum,:) / ChemData_MolWt(SNum)

    !定圧比熱の温度依存性
    ChemData_Cp_temp(SNum,1:12) = (/ 50.0d0,    75.0d0, 100.0d0, 125.0d0, 150.0d0, 175.0d0,  200.0d0, 225.0d0, 250.0d0, 275.0d0, 298.15d0, 300.0d0 /)

    !基準状態の配列要素の番号を求める
    RNum = ChemData_SearchRef(ChemData_Cp_temp(SNum,:))

    !基準状態での単位モル当たりの定圧比熱 [J/K mol]. 
    ChemData_CpPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum)
        
    !基準状態での単位質量当たりの定圧比熱 [J/K kg]. 
    ChemData_CpRef(SNum) = ChemData_Cp(SNum, RNum)

    !基準状態での単位モル当たりの定積比熱 [J/K mol]. 
    ChemData_CvPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum) - GasRUniv
    
    !基準状態での単位質量当たりの定積比熱 [J/K kg]. 
    ChemData_CvRef(SNum) = ChemData_CvPerMolRef(SNum) / ChemData_MolWt(SNum)


    !!=============================================================
    !! CO2-g に関する物性
    !!=============================================================
    SpcSymbol = 'CO2-g'
    SNum  = ChemData_SearchSpc( SpcSymbol)
    AtmSymbol = 'C'
    ANum1 = ChemData_SearchAtm( AtmSymbol)
    AtmSymbol = 'O'
    ANum2 = ChemData_SearchAtm( AtmSymbol)

    !相
    ChemData_Phase(SNum) = 'Gas'

    !基準状態でのエントロピー 
    ChemData_Entropy(SNum) =  0.0d0   !要チェック

    !基準状態でのエンタルピー
    ChemData_Enthalpy(SNum) = 0.0d0

    !分子を構成する元素
    ChemData_SpcFormula(SNum,ANum1) = 1.0d0
    ChemData_SpcFormula(SNum,ANum2) = 2.0d0

    !分子量 [kg/mol]
    ChemData_MolWt(SNum) = dot_product(ChemData_AtmWt, ChemData_SpcFormula(SNum,:))
     
    !気体定数
    ChemData_GasR(SNum) = GasRUniv / ChemData_MolWt(SNum)
    
    !単位モル当たりの定圧比熱 [J/K mol]. 温度依存性を考慮
    ChemData_CpPerMol(SNum,1:5) = (/ 34.46d0, 32.3d0, 37.53d0, 41.44d0, 44.68d0 /)
    
    !単位質量当たりの定圧比熱 [J/K kg]. 温度依存性を考慮
    ChemData_Cp(SNum,:) = ChemData_CpPerMol(SNum,:) / ChemData_MolWt(SNum)

    !定圧比熱の温度依存性
    ChemData_Cp_temp(SNum,1:5) = (/ 200.0d0, 298.15d0, 300.0d0, 400.0d0, 500.0d0 /)

    !基準状態の配列要素の番号を求める
    RNum = ChemData_SearchRef(ChemData_Cp_temp(SNum,:))

    !基準状態での単位モル当たりの定圧比熱 [J/K mol]. 
    ChemData_CpPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum)
        
    !基準状態での単位質量当たりの定圧比熱 [J/K kg]. 
    ChemData_CpRef(SNum) = ChemData_Cp(SNum, RNum)

    !基準状態での単位モル当たりの定積比熱 [J/K mol]. 
    ChemData_CvPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum) - GasRUniv
    
    !基準状態での単位質量当たりの定積比熱 [J/K kg]. 
    ChemData_CvRef(SNum) = ChemData_CvPerMolRef(SNum) / ChemData_MolWt(SNum)


    !!=============================================================
    !! He-g に関する物性
    !!=============================================================
    SpcSymbol = 'He-g'
    SNum  = ChemData_SearchSpc( SpcSymbol)
    AtmSymbol = 'He'
    ANum1 = ChemData_SearchAtm( AtmSymbol)

    !相
    ChemData_Phase(SNum) = 'Gas'

    !基準状態でのエントロピー 
    ChemData_Entropy(SNum) = 0.0d0

    !基準状態でのエンタルピー
    ChemData_Enthalpy(SNum) = 0.0d0

    !分子を構成する元素
    ChemData_SpcFormula(SNum,ANum1) = 1.0d0

    !分子量 [kg/mol]
    ChemData_MolWt(SNum) = dot_product(ChemData_AtmWt, ChemData_SpcFormula(SNum,:))
     
    !気体定数
    ChemData_GasR(SNum) = GasRUniv / ChemData_MolWt(SNum)
    
    !単位モル当たりの定圧比熱 [J/K mol]. 温度依存性を考慮
    ChemData_CpPerMol(SNum,:) = 20.786d0

    !単位質量当たりの定圧比熱 [J/K kg]. 温度依存性を考慮
    ChemData_Cp(SNum,:) = ChemData_CpPerMol(SNum,:) / ChemData_MolWt(SNum)

    !定圧比熱の温度依存性
    ChemData_Cp_temp(SNum,1:12) = (/ 50.0d0,    75.0d0, 100.0d0, 125.0d0, 150.0d0, 175.0d0,  200.0d0, 225.0d0, 250.0d0, 275.0d0, 298.15d0, 300.0d0 /)

    !基準状態の配列要素の番号を求める
    RNum = ChemData_SearchRef(ChemData_Cp_temp(SNum,:))

    !基準状態での単位モル当たりの定圧比熱 [J/K mol]. 
    ChemData_CpPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum)
        
    !基準状態での単位質量当たりの定圧比熱 [J/K kg]. 
    ChemData_CpRef(SNum) = ChemData_Cp(SNum, RNum)

    !基準状態での単位モル当たりの定積比熱 [J/K mol]. 
    ChemData_CvPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum) - GasRUniv
    
    !基準状態での単位質量当たりの定積比熱 [J/K kg]. 
    ChemData_CvRef(SNum) = ChemData_CvPerMolRef(SNum) / ChemData_MolWt(SNum)


    !!=============================================================
    !! H2O-g に関する物性
    !!=============================================================
    SpcSymbol = 'H2O-g'
    SNum  = ChemData_SearchSpc( SpcSymbol)
    AtmSymbol = 'H'
    ANum1 = ChemData_SearchAtm( AtmSymbol)
    AtmSymbol = 'O'
    ANum2 = ChemData_SearchAtm( AtmSymbol)

    !相
    ChemData_Phase(SNum) = 'Gas'

    !基準状態でのエントロピー 
    ChemData_Entropy(SNum) = 188.834d0

    !基準状態でのエンタルピー
    ChemData_Enthalpy(SNum) = -2241826.0d0

    !分子を構成する元素
    ChemData_SpcFormula(SNum,ANum1) = 2.0d0
    ChemData_SpcFormula(SNum,ANum2) = 1.0d0

    !分子量 [kg/mol]
    ChemData_MolWt(SNum) = dot_product(ChemData_AtmWt, ChemData_SpcFormula(SNum,:))
    
    !気体定数
    ChemData_GasR(SNum) = GasRUniv / ChemData_MolWt(SNum)

    !単位モル当たりの定圧比熱 [J/K mol]. 温度依存性を考慮
    ChemData_CpPerMol(SNum,1:11) = (/ 33.299d0, 33.349d0, 33.590d0, 33.596d0, 34.262d0, 35.266d0, 36.325d0, 37.495d0, 38.721d0, 39.987d0, 41.268d0 /) 
    
    !単位質量当たりの定圧比熱 [J/K kg]. 温度依存性を考慮
    ChemData_Cp(SNum,:) = ChemData_CpPerMol(SNum,:) / ChemData_MolWt(SNum)
    
    !定圧比熱データに対応する温度
    ChemData_Cp_temp(SNum,1:11) = (/ 100.0d0,  200.0d0,  298.15d0, 300.0d0,  400.0d0, 500.0d0,  600.0d0,  700.0d0,  800.0d0,  900.0d0,  1000.0d0 /)
    
    !基準状態での定圧比熱
    RNum  = ChemData_SearchRef(ChemData_Cp_temp(SNum,:))

    !単位モル当たりの定圧比熱 [J/K mol].
    ChemData_CpPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum)
        
    !単位質量当たりの定圧比熱 [J/K kg]. 
    ChemData_CpRef(SNum) = ChemData_Cp(SNum, RNum)

    !単位モル当たりの定積比熱 [J/K mol]. 
    ChemData_CvPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum) - GasRUniv
    
    !単位質量当たりの定積比熱 [J/K kg]. 
    ChemData_CvRef(SNum) = ChemData_CvPerMolRef(SNum) / ChemData_MolWt(SNum)

    !!=============================================================
    !! H2O-l に関する物性
    !!=============================================================
    SpcSymbol = 'H2O-l'
    SNum  = ChemData_SearchSpc( SpcSymbol)
    AtmSymbol = 'H'
    ANum1 = ChemData_SearchAtm( AtmSymbol)
    AtmSymbol = 'O'
    ANum2 = ChemData_SearchAtm( AtmSymbol)

    !相
    ChemData_Phase(SNum) = 'Liq'

    !基準状態でのエントロピー 
    ChemData_Entropy(SNum) = 188.834d0

    !基準状態でのエンタルピー
    ChemData_Enthalpy(SNum) = -2241826.0d0

    !分子を構成する元素
    ChemData_SpcFormula(SNum,ANum1) = 2.0d0
    ChemData_SpcFormula(SNum,ANum2) = 1.0d0

    !分子量 [kg/mol]
    ChemData_MolWt(SNum) = dot_product(ChemData_AtmWt, ChemData_SpcFormula(SNum,:))
    
    !気体定数
    ChemData_GasR(SNum) = GasRUniv / ChemData_MolWt(SNum)

    !単位モル当たりの定圧比熱 [J/K mol]. 温度依存性を考慮
    ChemData_CpPerMol(SNum,1:11) = (/ 33.299d0, 33.349d0, 33.590d0, 33.596d0, 34.262d0, 35.266d0, 36.325d0, 37.495d0, 38.721d0, 39.987d0, 41.268d0 /) 
    
    !単位質量当たりの定圧比熱 [J/K kg]. 温度依存性を考慮
    ChemData_Cp(SNum,:) = ChemData_CpPerMol(SNum,:) / ChemData_MolWt(SNum)
    
    !定圧比熱データに対応する温度
    ChemData_Cp_temp(SNum,1:11) = (/ 100.0d0,  200.0d0,  298.15d0, 300.0d0,  400.0d0, 500.0d0,  600.0d0,  700.0d0,  800.0d0,  900.0d0,  1000.0d0 /)
    
    !基準状態での定圧比熱
    RNum  = ChemData_SearchRef(ChemData_Cp_temp(SNum,:))

    !単位モル当たりの定圧比熱 [J/K mol].
    ChemData_CpPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum)
        
    !単位質量当たりの定圧比熱 [J/K kg]. 
    ChemData_CpRef(SNum) = ChemData_Cp(SNum, RNum)

    !単位モル当たりの定積比熱 [J/K mol]. 
    ChemData_CvPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum) - GasRUniv
    
    !単位質量当たりの定積比熱 [J/K kg]. 
    ChemData_CvRef(SNum) = ChemData_CvPerMolRef(SNum) / ChemData_MolWt(SNum)

    !飽和蒸気圧 [Pa]
    ChemData_SvapPress(SNum,1:16) = (/ 610.749769736842d0, 1227.63236842105d0, 2337.94105263158d0, 4243.25101973684d0, 7376.72664473684d0, 12338.9851973684d0, 19923.6947368421d0, 31166.7700657895d0, 47364.1046052632d0, 70110.2338815789d0, 101325d0,           143268.217105263d0, 198530.338815789d0, 270111.118421053d0, 361356.947368421d0, 475974.1875d0 /)

    !飽和蒸気圧のデータに対応する温度
    ChemData_SvapPress_Temp(SNum,1:16) = (/ 273.15d0, 283.15d0, 293.15d0, 303.15d0, 313.15d0, 323.15d0, 333.15d0, 343.15d0, 353.15d0, 363.15d0, 373.15d0, 383.15d0, 393.15d0, 403.15d0, 413.15d0, 423.15d0 /)

    !Antoine の式の係数
    ChemData_SvapPress_AntoineA(SNum) =  7.9186968d0
    ChemData_SvapPress_AntoineB(SNum) =  1636.909d0
    ChemData_SvapPress_AntoineC(SNum) =  224.92d0
    ChemData_SvapPress_AntoineUnit(SNum) = dlog(133.322d0)

    !AMP 式の係数
    ChemData_SvapPress_AMPA(SNum) = -2313.0338d0
    ChemData_SvapPress_AMPB(SNum) = -164.03307d0
    ChemData_SvapPress_AMPC(SNum) =  38.053682d0
    ChemData_SvapPress_AMPD(SNum) = -0.13844344d0    
    ChemData_SvapPress_AMPE(SNum) =  7.4465367d-5


    !!=============================================================
    !! H2O-s に関する物性
    !!=============================================================
    SpcSymbol = 'H2O-s'
    SNum  = ChemData_SearchSpc( SpcSymbol)
    AtmSymbol = 'H'
    ANum1 = ChemData_SearchAtm( AtmSymbol)
    AtmSymbol = 'O'
    ANum2 = ChemData_SearchAtm( AtmSymbol)

    !相
    ChemData_Phase(SNum) = 'Sol'

    !基準状態でのエントロピー 
    ChemData_Entropy(SNum) = 188.834d0

    !基準状態でのエンタルピー
    ChemData_Enthalpy(SNum) = -2241826.0d0

    !分子を構成する元素
    ChemData_SpcFormula(SNum,ANum1) = 2.0d0
    ChemData_SpcFormula(SNum,ANum2) = 1.0d0

    !分子量 [kg/mol]
    ChemData_MolWt(SNum) = dot_product(ChemData_AtmWt, ChemData_SpcFormula(SNum,:))
    
    !気体定数
    ChemData_GasR(SNum) = GasRUniv / ChemData_MolWt(SNum)

    !単位モル当たりの定圧比熱 [J/K mol]. 温度依存性を考慮
    ChemData_CpPerMol(SNum,1:11) = (/ 33.299d0, 33.349d0, 33.590d0, 33.596d0, 34.262d0, 35.266d0, 36.325d0, 37.495d0, 38.721d0, 39.987d0, 41.268d0 /) 
    
    !単位質量当たりの定圧比熱 [J/K kg]. 温度依存性を考慮
    ChemData_Cp(SNum,:) = ChemData_CpPerMol(SNum,:) / ChemData_MolWt(SNum)
    
    !定圧比熱データに対応する温度
    ChemData_Cp_temp(SNum,1:11) = (/ 100.0d0,  200.0d0,  298.15d0, 300.0d0,  400.0d0, 500.0d0,  600.0d0,  700.0d0,  800.0d0,  900.0d0,  1000.0d0 /)
    
    !基準状態での定圧比熱
    RNum  = ChemData_SearchRef(ChemData_Cp_temp(SNum,:))

    !単位モル当たりの定圧比熱 [J/K mol].
    ChemData_CpPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum)
        
    !単位質量当たりの定圧比熱 [J/K kg]. 
    ChemData_CpRef(SNum) = ChemData_Cp(SNum, RNum)

    !単位モル当たりの定積比熱 [J/K mol]. 
    ChemData_CvPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum) - GasRUniv
    
    !単位質量当たりの定積比熱 [J/K kg]. 
    ChemData_CvRef(SNum) = ChemData_CvPerMolRef(SNum) / ChemData_MolWt(SNum)

    !飽和蒸気圧 [Pa]
    ChemData_SvapPress(SNum,1:15) = (/ 181.451743421053d0, 198.650328947368d0, 217.582105263158d0, 237.980427631579d0, 259.978618421053d0, 284.109967105263d0, 310.107828947368d0, 338.23884868421d0,  368.636348684211d0, 401.700296052632d0, 437.297368421053d0, 475.694210526316d0, 517.290789473684d0, 562.220427631579d0, 610.483125d0 /)

    !飽和蒸気圧のデータに対応する温度
    ChemData_SvapPress_Temp(SNum,1:15) = (/ 259.15d0, 260.15d0, 261.15d0, 262.15d0, 263.15d0, 264.15d0, 265.15d0, 266.15d0, 267.15d0, 268.15d0, 269.15d0, 270.15d0, 271.15d0, 272.15d0, 273.15d0  /)

    !Antoine の式の係数
    ChemData_SvapPress_AntoineA(SNum) =  8.184254d0
    ChemData_SvapPress_AntoineB(SNum) =  1791.3d0
    ChemData_SvapPress_AntoineC(SNum) =  238.1d0
    ChemData_SvapPress_AntoineUnit(SNum) = dlog(133.322d0)

    !AMP 式の係数
    ChemData_SvapPress_AMPA(SNum) = -5631.1206d0
    ChemData_SvapPress_AMPB(SNum) = -8.363602d0
    ChemData_SvapPress_AMPC(SNum) =  8.2312d0
    ChemData_SvapPress_AMPD(SNum) = -0.03861449d0
    ChemData_SvapPress_AMPE(SNum) =  2.77494d-5


    !!=============================================================
    !! NH3-g に関する物性
    !!=============================================================
    SpcSymbol = 'NH3-g'
    SNum  = ChemData_SearchSpc( SpcSymbol)
    AtmSymbol = 'H'
    ANum1 = ChemData_SearchAtm( AtmSymbol)
    AtmSymbol = 'N'
    ANum2 = ChemData_SearchAtm( AtmSymbol)
    
    !相
    ChemData_Phase(SNum) = 'Gas'

    !基準状態でのエントロピー 
    ChemData_Entropy(SNum) = 192.774d0

    !基準状態でのエンタルピー
    ChemData_Enthalpy(SNum) = -45898.0d0

    !分子を構成する元素
    ChemData_SpcFormula(SNum,ANum1) = 3.0d0
    ChemData_SpcFormula(SNum,ANum2) = 1.0d0

    !分子量 [kg/mol]
    ChemData_MolWt(SNum) = dot_product(ChemData_AtmWt, ChemData_SpcFormula(SNum,:))
    
    !気体定数
    ChemData_GasR(SNum) = GasRUniv / ChemData_MolWt(SNum)

    !単位モル当たりの定圧比熱 [J/K mol]. 温度依存性を考慮
    ChemData_CpPerMol(SNum,1:11) = (/ 33.284d0, 33.757d0, 35.652d0, 35.701d0, 38.716d0, 42.048d0, 45.293d0, 48.354d0, 51.235d0, 53.948d0, 56.491d0 /) 
    
    !単位質量当たりの定圧比熱 [J/K kg]. 温度依存性を考慮
    ChemData_Cp(SNum,:) = ChemData_CpPerMol(SNum,:) / ChemData_MolWt(SNum)
    
    !定圧比熱データに対応する温度
    ChemData_Cp_temp(SNum,1:11) = (/ 100.0d0,  200.0d0,  298.15d0, 300.0d0,  400.0d0, 500.0d0,  600.0d0,  700.0d0,  800.0d0,  900.0d0,  1000.0d0 /)
    
    !基準状態での定圧比熱
    RNum  = ChemData_SearchRef(ChemData_Cp_temp(SNum,:))

    !単位モル当たりの定圧比熱 [J/K mol].
    ChemData_CpPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum)
        
    !単位質量当たりの定圧比熱 [J/K kg]. 
    ChemData_CpRef(SNum) = ChemData_Cp(SNum, RNum)

    !単位モル当たりの定積比熱 [J/K mol]. 
    ChemData_CvPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum) - GasRUniv
    
    !単位質量当たりの定積比熱 [J/K kg]. 
    ChemData_CvRef(SNum) = ChemData_CvPerMolRef(SNum) / ChemData_MolWt(SNum)


    !!=============================================================
    !! NH3-s に関する物性
    !!=============================================================
    SpcSymbol = 'NH3-s'
    SNum  = ChemData_SearchSpc( SpcSymbol)
    AtmSymbol = 'H'
    ANum1 = ChemData_SearchAtm( AtmSymbol)
    AtmSymbol = 'N'
    ANum2 = ChemData_SearchAtm( AtmSymbol)
    
    !相
    ChemData_Phase(SNum) = 'Sol'

    !基準状態でのエントロピー 
    ChemData_Entropy(SNum) = 192.774d0

    !基準状態でのエンタルピー
    ChemData_Enthalpy(SNum) = -45898.0d0

    !分子を構成する元素
    ChemData_SpcFormula(SNum,ANum1) = 3.0d0
    ChemData_SpcFormula(SNum,ANum2) = 1.0d0

    !分子量 [kg/mol]
    ChemData_MolWt(SNum) = dot_product(ChemData_AtmWt, ChemData_SpcFormula(SNum,:))
    
    !気体定数
    ChemData_GasR(SNum) = GasRUniv / ChemData_MolWt(SNum)

    !単位モル当たりの定圧比熱 [J/K mol]. 温度依存性を考慮
    ChemData_CpPerMol(SNum,1:11) = (/ 33.284d0, 33.757d0, 35.652d0, 35.701d0, 38.716d0, 42.048d0, 45.293d0, 48.354d0, 51.235d0, 53.948d0, 56.491d0 /) 
    
    !単位質量当たりの定圧比熱 [J/K kg]. 温度依存性を考慮
    ChemData_Cp(SNum,:) = ChemData_CpPerMol(SNum,:) / ChemData_MolWt(SNum)
    
    !定圧比熱データに対応する温度
    ChemData_Cp_temp(SNum,1:11) = (/ 100.0d0,  200.0d0,  298.15d0, 300.0d0,  400.0d0, 500.0d0,  600.0d0,  700.0d0,  800.0d0,  900.0d0,  1000.0d0 /)
    
    !基準状態での定圧比熱
    RNum  = ChemData_SearchRef(ChemData_Cp_temp(SNum,:))

    !単位モル当たりの定圧比熱 [J/K mol].
    ChemData_CpPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum)
        
    !単位質量当たりの定圧比熱 [J/K kg]. 
    ChemData_CpRef(SNum) = ChemData_Cp(SNum, RNum)

    !単位モル当たりの定積比熱 [J/K mol]. 
    ChemData_CvPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum) - GasRUniv
    
    !単位質量当たりの定積比熱 [J/K kg]. 
    ChemData_CvRef(SNum) = ChemData_CvPerMolRef(SNum) / ChemData_MolWt(SNum)

    !飽和蒸気圧 [Pa]
    ChemData_SvapPress(SNum,1:4) = (/ 1333.22368421053d0, 2666.44736842105d0, 7999.34210526316d0, 13332.2368421053d0 /)

    !飽和蒸気圧のデータに対応する温度
    ChemData_SvapPress_Temp(SNum,1:4) = (/ 181.09d0, 187.37d0, 198.25d0, 203.76d0 /)

    !Antoine の式の係数
    ChemData_SvapPress_AntoineA(SNum) =  9.96382d0
    ChemData_SvapPress_AntoineB(SNum) =  1617.907d0 
    ChemData_SvapPress_AntoineC(SNum) =  272.55d0
    ChemData_SvapPress_AntoineUnit(SNum) = dlog(133.322d0)
    
    !AMP 式の係数
    ChemData_SvapPress_AMPA(SNum) = -4122.0d0
    ChemData_SvapPress_AMPB(SNum) = 41.67871d0
    ChemData_SvapPress_AMPC(SNum) = -1.8163d0
    ChemData_SvapPress_AMPD(SNum) = 0.0d0
    ChemData_SvapPress_AMPE(SNum) = 0.0d0
 

    !!=============================================================
    !! H2S-g に関する物性
    !!=============================================================
    SpcSymbol = 'H2S-g'
    SNum  = ChemData_SearchSpc( SpcSymbol)
    AtmSymbol = 'H'
    ANum1 = ChemData_SearchAtm( AtmSymbol)
    AtmSymbol = 'S'
    ANum2 = ChemData_SearchAtm( AtmSymbol)

    !相
    ChemData_Phase(SNum) = 'Gas'

    !基準状態でのエントロピー 
    ChemData_Entropy(SNum) = 205.757d0

    !基準状態でのエンタルピー
    ChemData_Enthalpy(SNum) = -20502.0d0

    !分子を構成する元素
    ChemData_SpcFormula(SNum,ANum1) = 2.0d0
    ChemData_SpcFormula(SNum,ANum2) = 1.0d0

    !分子量 [kg/mol]
    ChemData_MolWt(SNum) = dot_product(ChemData_AtmWt, ChemData_SpcFormula(SNum,:))
    
    !気体定数
    ChemData_GasR(SNum) = GasRUniv / ChemData_MolWt(SNum)

    !単位モル当たりの定圧比熱 [J/K mol]. 温度依存性を考慮
    ChemData_CpPerMol(SNum,1:11) = (/ 33.259d0, 33.38d0, 34.192d0, 34.208d0, 35.581d0, 37.192d0, 38.936d0, 40.74d0, 42.518d0, 44.212d0, 45.786d0 /)
    
    !単位質量当たりの定圧比熱 [J/K kg]. 温度依存性を考慮
    ChemData_Cp(SNum,:) = ChemData_CpPerMol(SNum,:) / ChemData_MolWt(SNum)
    
    !定圧比熱データに対応する温度
    ChemData_Cp_temp(SNum,1:11) = (/ 100.0d0,  200.0d0,  298.15d0, 300.0d0,  400.0d0, 500.0d0,  600.0d0,  700.0d0,  800.0d0,  900.0d0,  1000.0d0 /)
    
    !基準状態での定圧比熱
    RNum  = ChemData_SearchRef(ChemData_Cp_temp(SNum,:))

    !単位モル当たりの定圧比熱 [J/K mol].
    ChemData_CpPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum)
        
    !単位質量当たりの定圧比熱 [J/K kg]. 
    ChemData_CpRef(SNum) = ChemData_Cp(SNum, RNum)

    !単位モル当たりの定積比熱 [J/K mol]. 
    ChemData_CvPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum) - GasRUniv
    
    !単位質量当たりの定積比熱 [J/K kg]. 
    ChemData_CvRef(SNum) = ChemData_CvPerMolRef(SNum) / ChemData_MolWt(SNum)
    
    !!=============================================================
    !! NH4SH-s に関する物性
    !!=============================================================
    SpcSymbol = 'NH4SH-s'
    SNum  = ChemData_SearchSpc( SpcSymbol)
    AtmSymbol = 'H'
    ANum1 = ChemData_SearchAtm( AtmSymbol)
    AtmSymbol = 'N'
    ANum2 = ChemData_SearchAtm( AtmSymbol)
    AtmSymbol = 'S'
    ANum3 = ChemData_SearchAtm( AtmSymbol)

    !相
    ChemData_Phase(SNum) = 'Sol'

!    !基準状態でのエントロピー 
!    ChemData_Entropy(SNum) =
!
!    !基準状態でのエンタルピー
!    ChemData_Enthalpy(SNum) =

    !分子を構成する元素
    ChemData_SpcFormula(SNum,ANum1) = 5.0d0
    ChemData_SpcFormula(SNum,ANum2) = 1.0d0
    ChemData_SpcFormula(SNum,ANum3) = 1.0d0

    !分子量 [kg/mol]
    ChemData_MolWt(SNum) = dot_product(ChemData_AtmWt, ChemData_SpcFormula(SNum,:))
    
    !気体定数
    ChemData_GasR(SNum) = GasRUniv / ChemData_MolWt(SNum)

    !単位モル当たりの定圧比熱 [J/K mol]. 温度依存性を考慮
    ChemData_CpPerMol(SNum,1) = 34.922d0
    
    !単位質量当たりの定圧比熱 [J/K kg]. 温度依存性を考慮
    ChemData_Cp(SNum,:) = ChemData_CpPerMol(SNum,:) / ChemData_MolWt(SNum)
    
    !定圧比熱データに対応する温度
    ChemData_Cp_temp(SNum,1) = 298.15d0
    
    !基準状態での定圧比熱
    RNum  = ChemData_SearchRef(ChemData_Cp_temp(SNum,:))

    !単位モル当たりの定圧比熱 [J/K mol].
    ChemData_CpPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum)
        
    !単位質量当たりの定圧比熱 [J/K kg]. 
    ChemData_CpRef(SNum) = ChemData_Cp(SNum, RNum)

    !単位モル当たりの定積比熱 [J/K mol]. 
    ChemData_CvPerMolRef(SNum) = ChemData_CpPerMol(SNum, RNum) - GasRUniv
    
    !単位質量当たりの定積比熱 [J/K kg]. 
    ChemData_CvRef(SNum) = ChemData_CvPerMolRef(SNum) / ChemData_MolWt(SNum)
    
    !飽和蒸気圧 [Pa]
    ChemData_SvapPress(SNum,1:9) = (/ 133.322368421053d0, 666.611842105263d0, 1333.22368421053d0, 2666.44736842105d0, 7999.34210526316d0, 13332.2368421053d0, 26664.4736842105d0, 53328.9473684211d0, 101325d0           /)   
    
    !飽和蒸気圧のデータに対応する温度
    ChemData_SvapPress_Temp(SNum,1:9) = (/ 222.05d0, 237.15d0, 244.45d0, 252.35d0, 266.15d0, 273.15d0, 283.65d0, 294.95d0, 306.45d0 /)
    
    !Antoine の式の係数 (JANAF Chemical WebBook より)
    !但し, 計算コードとの整合性より C 係数は 273.15 [K] 加えてある.
    ChemData_SvapPress_AntoineA(SNum) =  6.09146d0
    ChemData_SvapPress_AntoineB(SNum) =  1598.378 
    ChemData_SvapPress_AntoineC(SNum) =  -43.805d0 + Temp0C
    ChemData_SvapPress_AntoineUnit(SNum) = dlog(1.0d5)
    
  end subroutine ChemData_Init
ChemData_MolWt
Variable :
ChemData_MolWt(ChemData_SpcNum) :real(8)
: 分子量 [kg/mol]
Function :
ChemData_OneSpcID :integer
SpcSymbol :character(20), intent(in)

文字として与えられた化学種名から, その化学種の配列添え字を得る 配列の大きさを引数として与える必要があることに注意.

[Source]

  function ChemData_OneSpcID( SpcSymbol )
    !
    ! 文字として与えられた化学種名から, その化学種の配列添え字を得る
    ! 配列の大きさを引数として与える必要があることに注意.
    !

    !暗黙の型宣言禁止
    implicit none

    !入出力変数
    integer                   :: ChemData_OneSpcID
    character(20), intent(in) :: SpcSymbol
    
    !内部変数
    integer                  :: j

    !初期化
    ChemData_OneSpcID = 0.0d0

    !探査
    Search: do j = 1, size(ChemData_SpcSymbol,1)
      if (ChemData_SpcSymbol(j) == SpcSymbol) then 
        ChemData_OneSpcID = j
        exit Search
      end if
    end do Search

  end function ChemData_OneSpcID
ChemData_Phase
Variable :
ChemData_Phase(ChemData_SpcNum) :character(3)
:
ChemData_SVapPress
Variable :
ChemData_SVapPress(ChemData_SpcNum, ChemData_DataNum) :real(8)
: 飽和蒸気圧 [Pa]
ChemData_SVapPress_AMPA
Variable :
ChemData_SVapPress_AMPA(ChemData_SpcNum) :real(8)
: Antoine 式の A 係数
ChemData_SVapPress_AMPB
Variable :
ChemData_SVapPress_AMPB(ChemData_SpcNum) :real(8)
: Antoine 式の B 係数
ChemData_SVapPress_AMPC
Variable :
ChemData_SVapPress_AMPC(ChemData_SpcNum) :real(8)
: Antoine 式の C 係数
ChemData_SVapPress_AMPD
Variable :
ChemData_SVapPress_AMPD(ChemData_SpcNum) :real(8)
: Antoine 式の C 係数
ChemData_SVapPress_AMPE
Variable :
ChemData_SVapPress_AMPE(ChemData_SpcNum) :real(8)
: Antoine 式の単位変換用の係数
ChemData_SVapPress_AntoineA
Variable :
ChemData_SVapPress_AntoineA(ChemData_SpcNum) :real(8)
: Antoine 式の A 係数
ChemData_SVapPress_AntoineB
Variable :
ChemData_SVapPress_AntoineB(ChemData_SpcNum) :real(8)
: Antoine 式の B 係数
ChemData_SVapPress_AntoineC
Variable :
ChemData_SVapPress_AntoineC(ChemData_SpcNum) :real(8)
: Antoine 式の C 係数
ChemData_SVapPress_AntoineUnit
Variable :
ChemData_SVapPress_AntoineUnit(ChemData_SpcNum) :real(8)
: Antoine 式の単位変換用の係数
ChemData_SVapPress_Temp
Variable :
ChemData_SVapPress_Temp(ChemData_SpcNum, ChemData_DataNum) :real(8)
: 飽和蒸気圧データに対応する温度 [K]
Function :
ChemData_SearchAtm :integer
var :character(2), intent(in)

名前の検索エンジン

[Source]

  function ChemData_SearchAtm(var)
    !
    ! 名前の検索エンジン
    !

    !暗黙の型宣言禁止
    implicit none

    !入出力変数
    integer                  :: ChemData_SearchAtm
    character(2), intent(in) :: var

    !内部変数
    integer                  :: i

    !探査
    Search: do i = 1, ChemData_AtmNum
      if (trim(ChemData_AtmSymbol(i)) == trim(var)) then 

        ChemData_SearchAtm = i
        exit Search
      end if
    end do Search
    
  end function ChemData_SearchAtm
Function :
ChemData_SearchRef :integer
array(:) :real(8), intent(in)

名前の検索エンジン

[Source]

  function ChemData_SearchRef( array )
    !
    ! 名前の検索エンジン
    !

    !暗黙の型宣言禁止
    implicit none

    !入出力変数
    integer                  :: ChemData_SearchRef
    real(8), intent(in)      :: array(:)
    
    !内部変数
    integer                  :: i
    
    !探査
    Search: do i = 1, size(array,1)
      if (array(i) == TempRef) then 
        ChemData_SearchRef = i
        exit Search
      end if
    end do Search
    
  end function ChemData_SearchRef
Function :
ChemData_SearchSpc :integer
var :character(20), intent(in)

名前の検索エンジン

[Source]

  function ChemData_SearchSpc(var)
    !
    ! 名前の検索エンジン
    !

    !暗黙の型宣言禁止
    implicit none

    !入出力変数
    integer                   :: ChemData_SearchSpc
    character(20), intent(in) :: var
    
    !内部変数
    integer                  :: i

    !探査
    Search: do i = 1, ChemData_SpcNum
      
      if (trim(ChemData_SpcSymbol(i)) == trim(var)) then 
        ChemData_SearchSpc = i
        exit Search
      end if
    end do Search
    
  end function ChemData_SearchSpc
ChemData_SpcFormula
Variable :
ChemData_SpcFormula(ChemData_SpcNum,ChemData_AtmNum) :integer
: 分子を構成する元素の個数
Function :
ChemData_SpcID(SpcNum) :integer
SpcNum :integer, intent(in)
SpcSymbol(SpcNum) :character(20), intent(in)

文字として与えられた化学種名から, その化学種の配列添え字を得る 配列の大きさを引数として与える必要があることに注意.

[Source]

  function ChemData_SpcID( SpcNum, SpcSymbol )
    !
    ! 文字として与えられた化学種名から, その化学種の配列添え字を得る
    ! 配列の大きさを引数として与える必要があることに注意.
    !

    !暗黙の型宣言禁止
    implicit none

    !入出力変数
    integer, intent(in)       :: SpcNum
    character(20), intent(in) :: SpcSymbol(SpcNum)
    integer                   :: ChemData_SpcID(SpcNum)
    
    !内部変数
    integer                  :: i, j

    !初期化
    ChemData_SpcID = 0.0d0

!    write(*,*) SpcNum, SpcSymbol(SpcNum)

    !探査
    do i = 1, size(SpcSymbol,1)
      Search: do j = 1, size(ChemData_SpcSymbol,1)
        if (ChemData_SpcSymbol(j) == SpcSymbol(i)) then 
          ChemData_SpcID(i) = j
          exit Search
        end if
      end do Search
    end do

  end function ChemData_SpcID
ChemData_SpcNum
Constant :
ChemData_SpcNum = 12 :integer, parameter
: 化学種の数
ChemData_SpcSymbol
Variable :
ChemData_SpcSymbol(ChemData_SpcNum) :character(20)
: 分子記号
GasRUniv
Constant :
GasRUniv = 8.314d0 :real(8), parameter
: 普遍気体定数
PressRef
Constant :
PressRef = 1.0d5 :real(8), parameter
: 標準圧力 [Pa]
Temp0C
Constant :
Temp0C = 273.15d0 :real(8), parameter
: 0 度での温度 [K]
TempRef
Constant :
TempRef = 298.15d0 :real(8), parameter
: 標準温度 [K]