Class ChemCalc
In: chemdat/chemcalc.f90

    Copyright (C) GFD Dennou Club, 2005, 2006. All rights reserved.

Module ChemCalc

  * Developer: SUGIYAMA Ko-ichiro
  * Version: $Id: chemcalc.f90,v 1.1.1.1 2006/04/25 03:43:58 deepconv Exp $
  * Tag Name: $Name:  $
  * Change History:

Overview

化学関連の諸量を計算するためのモジュール. Antoine の飽和蒸気圧式を用いて以下を求める.

 * 飽和蒸気圧
 * 飽和蒸気圧の温度微分
 * 潜熱

Error Handling

Bugs

Note

Future Plans

Methods

Included Modules

ChemData ChemData ChemData ChemData ChemData ChemData ChemData ChemData ChemData ChemData ChemData ChemData ChemData ChemData ChemData ChemData ChemData ChemData ChemData

Public Instance methods

[Source]

subroutine CheckSvapPress ()

    !
    !飽和蒸気圧のチェックサブルーチン. 
    !蒸気圧の測定値と計算値の差を出力する.
    !

    !モジュール読み込み
    use ChemData, only : ChemData_DataNum,         & !データ点数 
      &                  ChemData_SVapPress,       & !飽和蒸気圧
      &                  ChemData_SVapPress_Temp     !温度
    
    !暗黙の型宣言禁止
    implicit none
    
    !内部変数
    integer             :: SNum
    integer             :: DNum
    real(8)             :: SVapPressData(SpcNum, ChemData_DataNum)
    real(8)             :: Temp(SpcNum, ChemData_DataNum)
    real(8)             :: SVapPressCalc

    !データベースから情報を取得する
    do SNum = 1, SpcNum
      SvapPressData(SNum,:) = ChemData_SvapPress(SpcID(SNum),:) 
      Temp(SNum,:)          = ChemData_SvapPress_Temp(SpcID(SNum),:) 
    end do

    do SNum = 1, SpcNum
      if (Phase(SNum) == 'Gas') cycle   !気相の場合
      
      write(*,*) "SpcName:      ", SpcID(SNum)
      
      do DNum = 1, ChemData_DataNum
        if ( Temp(SNum,DNum) == 0.0d0) cycle
        SvapPressCalc = SvapPress( SpcID(SNum), Temp(SNum,DNum) )
        
        write(*,*) "Temp:         ", Temp(SNum,DNum)
        write(*,*) "SVapPress:    ", SVapPressData(SNum,DNum), SVapPressCalc
        write(*,*) "DelSVapPress: ", abs(SVapPressData(SNum,DNum) - SVapPressCalc)
      end do
      SVapPressCalc = 0.0d0 !初期化
    end do

end subroutine

[Source]

subroutine ChemCalcDim_Init (IMin, IMax, KMin, KMax)

    !
    !初期化ルーチン(その 2)
    !  配列サイズの確定を行う. 配列関数を利用する場合には, 
    !  このサブルーチンで初期化する必要がある. 
    !  先に ChemCalcSpc_init を実行しておく必要がある. 
    !

    !暗黙の型宣言禁止
    implicit none

    !入出力変数
    integer,intent(in) :: IMin  !X 方向の配列の下限
    integer,intent(in) :: IMax  !X 方向の配列の上限
    integer,intent(in) :: KMin  !Z 方向の配列の下限
    integer,intent(in) :: KMax  !Z 方向の配列の上限
    
    !-----------------------------------------------------------
    ! 初期化
    !-----------------------------------------------------------
    XMin = IMin;    XMax = IMax
    ZMin = KMin;    ZMax = KMax

end subroutine

[Source]

subroutine ChemCalcSpc_Init (SNum, SID)

    !
    !初期化ルーチン(その 1). 
    !  利用する化学種の確定と, それぞれの物性値を決定する.
    !  配列計算をしない場合には, この初期化をすれば十分である. 
    !

    !モジュール呼び出し
    use ChemData, only: ChemData_Phase    !相

    !暗黙の型宣言禁止
    implicit none

    !入出力変数
    integer,intent(in) :: SNum            !化学種の個数
    integer,intent(in) :: SID(SNum)       !系に存在する化学種の数
    
    !内部変数
    integer            :: s

    !-----------------------------------------------------------
    ! 初期化
    !-----------------------------------------------------------
    SpcNum  = SNum
!    write(*,*) "ChemCalc: SpcNum ", SpcNum
    
    !配列割り当て
    if (allocated(SpcID)) deallocate( SpcID, Phase )
    allocate( SpcID(SpcNum), Phase(SpcNum) )

    !-----------------------------------------------------------    
    ! データベースから必要なデータだけ取り出す
    !-----------------------------------------------------------
    !系に存在する化学種. 入力された値を取り込む
    SpcID = SID
    
    !相
    do s = 1, SpcNum
      Phase(s) = ChemData_Phase(SpcID(s)) 
    end do

end subroutine

[Source]

subroutine ChemCalc_Init (IMin, IMax, KMin, KMax, SNum, SID)

    !
    !初期化ルーチンのラッパー. 
    !  ChemCalcSpc_init と ChemCalcDim_init を実行
    !

    !モジュール呼び出し
    use ChemData, only: GasRUniv,      &!気体定数
      &                 ChemData_SpcID  !化学種の ID 検索
      
    !暗黙の型宣言禁止
    implicit none

    !入出力変数
    integer,intent(in) :: IMin      !X 方向の配列の下限
    integer,intent(in) :: IMax      !X 方向の配列の上限
    integer,intent(in) :: KMin      !Z 方向の配列の下限
    integer,intent(in) :: KMax      !Z 方向の配列の上限
    integer,intent(in) :: SNum      !化学種の個数
    integer,intent(in) :: SID(SNum) !系に存在する化学種の数
    character(20)      :: Name(1)
    integer            :: dim
    integer            :: id(1)

    !初期化ルーチンを 2 つ呼び出すだけ
    call ChemCalcSpc_Init(SNum, SID)
    call ChemCalcDim_Init(IMin, IMax, KMin, KMax)


    !NH4SH の反応熱の初期化
    !  NH4SH 1kg に対する反応熱にする.
    dim     = 1
    Name(1) = 'NH4SH-s'
    id      = ChemData_SpcID(dim, Name) 
    
    ReactHeatNH4SHPerMol  = GasRUniv * 10834.0d0
    ReactHeatNH4SHPerMass = GasRUniv * 10834.0d0 / MolWt( id(1) )

end subroutine

[Validate]