program main
use ChemData
use ChemCalc
implicit none
integer, parameter :: SpcNum = 3
integer, parameter :: XMin = 0
integer, parameter :: XMax = 40
integer, parameter :: ZMin = 0
integer, parameter :: ZMax = 1
integer :: SpcID(SpcNum)
character(20) :: SpcSymbol(SpcNum)
real(8) :: Temp(XMin:Xmax,ZMin:ZMax)
real(8) :: Svap(XMin:Xmax,ZMin:ZMax,SpcNum)
real(8) :: SvapAMP(XMin:Xmax,SpcNum)
real(8) :: tetens(2)
! real(8) :: LatentHeat, LatentHeat2
integer :: i, s
call ChemData_Init
SpcSymbol = (/ 'H2O-l ', 'H2O-s ', 'NH3-s ' /)
SpcID(:) = ChemData_SpcID(SpcNum, SpcSymbol)
write(*,*) SpcSymbol
write(*,*) SpcID
call ChemCalc_Init(XMin, XMax, ZMin, ZMax, SpcNum, SpcID)
!計算に利用する飽和蒸気圧と, 飽和蒸気圧との測定値をチェック.
call CheckSvapPress()
do i = XMin, XMax
Temp(i,:) = i * 10.0d0 + 50.0d0
end do
do s = 1, SpcNum
Svap(:,:,s) = xz_SvapPress( SpcID(s), Temp )
! write(*,*) temp, Svap(1:2), SvapAMP(1:2), tetens(1:2)
end do
do s = 1, SpcNum
do i = XMin, XMax
!! SvapAMP(i,s) = SvapPressAMP( SpcID(s), Temp(i,1) )
end do
end do
! Temp2 = 273.15d0
! write(*,*) xz_LatentHeat( SpcID(1), Temp )
do i = XMin, XMax
tetens(1) = 6.11d0 * ( 10 ** ( 7.5d0 * (Temp(i,1) - 273.15d0) / ( 237.3d0 + Temp(i,1) - 273.15d0 ) ) ) * 1.0d2
tetens(2) = 6.11d0 * ( 10 ** ( 9.5d0 * (Temp(i,1) - 273.15d0) / ( 265.3d0 + Temp(i,1) - 273.15d0 ) ) ) * 1.0d2
! tetens(1) = 6.11d0 * dexp( 17.269 * (Temp(i,1) - 273.15d0) / (237.3d0 + Temp(i,1) - 273.15d0) ) * 1.0d2
write(*,*) Temp(i,1), Svap(i,1,:), SvapAMP(i,:), tetens
end do
! do s = 1, SpcNum
! LatentHeat = LatentHeatPerMol(SpcID(s), Temp2)
! LatentHeat2 = LatentHeat(SpcID(s), Temp2)
! SvapPress2 = SvapPress(SpcID(s), Temp2)
! write(*,*) SvapPress2
! write(*,*) LatentHeat, LatentHeat2
! end do
contains
!!!
!!! 飽和蒸気圧チェックルーチン
!!!
!!!==========================================================================
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
real(8) :: SVapPressCalc2
!データベースから情報を取得する
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) )
!! SvapPressCalc2 = SvapPressAMP( SpcID(SNum), Temp(SNum,DNum) )
write(*,*) "Temp: ", Temp(SNum,DNum)
write(*,*) "SVapPress: ", SVapPressData(SNum,DNum), SVapPressCalc, SVapPressCalc2
write(*,*) "DelSVapPress: ", abs(SVapPressData(SNum,DNum) - SVapPressCalc ) / SVapPressData(SNum,DNum), abs(SVapPressData(SNum,DNum) - SVapPressCalc2) / SVapPressData(SNum,DNum)
end do
SVapPressCalc = 0.0d0 !初期化
end do
end subroutine CheckSvapPress
end program main