Linux  R2.6.5-7.282-sn2 FORTRAN90/SX         Rev.360        Tue Oct 11 12:33:35 2011
FILE NAME: constants.f90
PROGRAM NAME: constants
DIAGNOSTIC LIST

  LINE  LEVEL( NO.): DIAGNOSTIC MESSAGE

    78  opt  (  11): Fused array assignments. :line 78 - 79
    78  vec  (   6): Unvectorized array expression.
   107  vec  (   6): Unvectorized array expression.
   107  vec  (   4): Vectorized array expression.
   111  vec  (   3): Unvectorized loop.
   119  vec  (   1): Vectorized loop.
   122  vec  (   4): Vectorized array expression.
   125  vec  (   1): Vectorized loop.
   128  vec  (   4): Vectorized array expression.
   153  vec  (   3): Unvectorized loop.
Linux  R2.6.5-7.282-sn2 FORTRAN90/SX         Rev.360        Tue Oct 11 12:33:35 2011
FILE NAME: constants.f90
PROGRAM NAME: constants
TRANSFORMATION LIST

  LINE                   FORTRAN STATEMENT

     1  != Module Constants
     2  !
     3  ! Authors::   SUGIYAMA Ko-ichiro, ODAKA Masatsugu
     4  ! Version::   $Id: constants.f90,v 1.8 2011-06-17 19:04:00 sugiyama Exp $
     5  ! Tag Name::  $Name: arare5-20111010 $
     6  ! Copyright:: Copyright (C) GFD Dennou Club, 2007. All rights reserved.
     7  ! License::   See COPYRIGHT[link:../../COPYRIGHT]
     8  !
     9  !== Overview
    10  !
    11  !
    12  !== Error Handling
    13  !
    14  !== Known Bugs
    15  !
    16  !== Note
    17  !
    18  !== Future Plans
    19  !
    20  
    21  module constants
    22    !
    23    !
    24  
    25    !モジュール読み込み
    26    use dc_types,   only: DP, STRING
    27    use dc_iounit,  only: FileOpen
    28    use dc_message, only: MessageNotify   !メッセージ出力
    29    use ChemData,   only: GasRUniv,             &!普遍気体定数
    30      &                   ChemData_OneSpcID,    &!化学種の ID
    31      &                   ChemData_CpPerMolRef, &!標準状態での比熱
    32      &                   ChemData_MolWt         !分子量
    33    use mpi_wrapper, only: myrank
    34    use namelist_util, only: namelist_filename
    35  
    36    !暗黙の型宣言禁止
    37    implicit none
    38  
    39    private
    40  
    41    !Public Interface
    42    real(DP), save, public :: Grav = 9.8d0          !重力 [m/s^2]
    43    real(DP), save, public :: PressBasis = 965.0d0  !温位の基準圧力 [Pa]
    44    real(DP), save, public :: TempSfc = 300.0d0     !地表面温度 [K]
    45    real(DP), save, public :: PressSfc = 965.0d0    !地表面圧力 [Pa]
    46    real(DP), save, public :: CpDry  = 0.0d0        !乾燥成分の定圧比熱 [J/K kg]
    47    real(DP), save, public :: CpDryMol = 0.0d0      !乾燥成分の定圧比熱 [J/K kg]
    48    real(DP), save, public :: CvDry = 0.0d0         !乾燥成分の定積比熱 [J/K kg]
    49    real(DP), save, public :: MolWtDry = 0.0d0      !乾燥成分の分子量   [kg/mol]
    50    real(DP), save, public :: GasRDry  = 0.0d0      !乾燥成分の気体定数 [J/K kg]
    51    real(DP), save, public :: DayTime = 86400.0d0   ! 1 日の長さ [s]
    52  
    53    public constants_init
    54  
    55  contains
    56  
    57  !!!-----------------------------------------------------------------!!!
    58    subroutine constants_Init()
    59  
    60      !暗黙の型宣言禁止
    61      implicit none
    62  
    63      !変数定義
    64      integer                  :: SpcDryNum       !乾燥成分の化学種の数
    65      character(20)            :: SpcDrySymbol(5) !乾燥成分の化学種名
    66      real(DP)                 :: SpcDryMolFr(5)  !乾燥成分の化学種の存在度
    67      integer, allocatable     :: SpcDryID(:)     !乾燥成分の化学種のID
    68      real(DP), allocatable    :: PropertyDry(:)  !作業配列
    69      integer                  :: s               !作業変数
    70      integer                  :: unit            !装置番号
    71      logical                  :: flag = .false.
    72  
    73      !NAMELIST の定義
    74      NAMELIST /constants_nml/ &
    75        & Grav, PressBasis, TempSfc, PressSfc, &
    76        & SpcDrySymbol, SpcDryMolFr, DayTime, CpDry, MolWtDry
    77  
    78      SpcDrySymbol = ''
    79      SpcDryMolFr  = 0.0d0
    80  
    81      !ファイルオープン. 情報取得.
    82      call FileOpen(unit, file=namelist_filename, mode='r')
    83      read(unit, NML=constants_nml)
    84      close(unit)
    85  
    86      if (CpDry /= 0.0d0 .AND. MolWtDry /= 0.0d0) then
    87      ! namelist から CpDry の値が入力された場合
    88  
    89        !定圧モル比熱
    90        CpDryMol = CpDry *  MolWtDry
    91  
    92        !気体定数
    93        GasRDry = GasRUniv / MolWtDry
    94  
    95        !定積比熱
    96        CvDry    = CpDry - GasRDry
    97  
    98      elseif (SpcDryMolFr(1) /= 0.0d0) then
    99      ! namelist から モル比が入力された場合
   100  
   101        flag = .true.
   102  
   103        !----------------------------------------------------------
   104        ! 乾燥成分の物性値の初期化
   105        !
   106        !乾燥成分の個数を数える
   107        SpcDryNum = count(SpcDrySymbol /= "")
   108  
   109        !化学種の ID を取得
   110        allocate(SpcDryID(SpcDryNum))
   111        do s = 1, SpcDryNum
   112          SpcDryID(s) = ChemData_OneSpcID( SpcDrySymbol(s) )
   113        end do
   114  
   115        !作業配列の準備
   116        allocate(PropertyDry(SpcDryNum))
   117  
   118        !分子量
   119        do s = 1, SpcDryNum
   120          PropertyDry(s) = ChemData_MolWt(SpcDryID(s))
   121        end do
   122        MolWtDry = dot_product(PropertyDry, SpcDryMolFr(1:SpcDryNum))
   123  
   124        !定圧比熱(モル当量)
   125        do s = 1, SpcDryNum
   126          PropertyDry(s) = ChemData_CpPerMolRef(SpcDryID(s))
   127        end do
   128        CpDryMol = dot_product(PropertyDry, SpcDryMolFr(1:SpcDryNum))
   129  
   130        !定圧比熱
   131        CpDry    = CpDryMol / MolWtDry
   132  
   133        !気体定数
   134        GasRDry = GasRUniv / MolWtDry
   135  
   136        !定積比熱
   137        CvDry    = CpDry - GasRDry
   138      end if
   139  
   140      !----------------------------------------------------------
   141      ! 確認
   142      !----------------------------------------------------------
   143      if (myrank == 0) then
   144        call MessageNotify( "M", &
   145          & "constants_init", "Grav = %f",     d=(/Grav/) )
   146        call MessageNotify( "M", &
   147          & "constants_init", "PressBasis = %f", d=(/PressBasis/))
   148        call MessageNotify( "M", &
   149          & "constants_init", "TempSfc = %f",  d=(/TempSfc/) )
   150        call MessageNotify( "M", &
   151          & "constants_init", "PressSfc = %f", d=(/PressSfc/) )
   152        if (flag) then
   153          do s = 1, SpcDryNum
   154            call MessageNotify( "M", &
   155              &  "constants_init", "SpcDryID = %d",      i=(/SpcDryID(s)/))
   156            call MessageNotify( "M", &
   157              &  "constants_init", "SpcDrySymbol = %c", c1=trim(SpcDrySymbol(s)))
   158            call MessageNotify( "M", &
   159              &  "constants_init", "SpcDryMolFr = %f",   d=(/SpcDryMolFr(s)/))
   160          end do
   161        end if
   162  
   163        call MessageNotify( "M", "constants_init", "CpDry    = %f",    d=(/CpDry/) )
   164        call MessageNotify( "M", "constants_init", "CpDryMol = %f", d=(/CpDryMol/) )
   165        call MessageNotify( "M", "constants_init", "CvDry    = %f",    d=(/CvDry/) )
   166        call MessageNotify( "M", "constants_init", "GasRDry  = %f",  d=(/GasRDry/) )
   167        call MessageNotify( "M", "constants_init", "MolWtDry = %f", d=(/MolWtDry/) )
   168        call MessageNotify( "M", "constants_init", "DayTime  = %f",  d=(/DayTime/)  )
   169      end if
   170  
   171    end subroutine Constants_Init
   172  
   173  end module Constants
Linux  R2.6.5-7.282-sn2 FORTRAN90/SX         Rev.360        Tue Oct 11 12:33:35 2011
FILE NAME: constants.f90
PROGRAM NAME: constants
FORMAT LIST

  LINE    LOOP     FORTRAN STATEMENT

     1:            != Module Constants
     2:            !
     3:            ! Authors::   SUGIYAMA Ko-ichiro, ODAKA Masatsugu
     4:            ! Version::   $Id: constants.f90,v 1.8 2011-06-17 19:04:00 sugiyama Exp $
     5:            ! Tag Name::  $Name: arare5-20111010 $
     6:            ! Copyright:: Copyright (C) GFD Dennou Club, 2007. All rights reserved.
     7:            ! License::   See COPYRIGHT[link:../../COPYRIGHT]
     8:            !
     9:            !== Overview 
    10:            !
    11:            !
    12:            !== Error Handling
    13:            !
    14:            !== Known Bugs
    15:            !
    16:            !== Note
    17:            !
    18:            !== Future Plans
    19:            !
    20:            
    21:            module constants
    22:              !
    23:              !
    24:            
    25:              !モジュール読み込み
    26:              use dc_types,   only: DP, STRING
    27:              use dc_iounit,  only: FileOpen
    28:              use dc_message, only: MessageNotify   !メッセージ出力
    29:              use ChemData,   only: GasRUniv,             &!普遍気体定数
    30:                &                   ChemData_OneSpcID,    &!化学種の ID
    31:                &                   ChemData_CpPerMolRef, &!標準状態での比熱
    32:                &                   ChemData_MolWt         !分子量
    33:              use mpi_wrapper, only: myrank
    34:              use namelist_util, only: namelist_filename
    35:            
    36:              !暗黙の型宣言禁止
    37:              implicit none
    38:            
    39:              private
    40:            
    41:              !Public Interface
    42:              real(DP), save, public :: Grav = 9.8d0          !重力 [m/s^2]
    43:              real(DP), save, public :: PressBasis = 965.0d0  !温位の基準圧力 [Pa]
    44:              real(DP), save, public :: TempSfc = 300.0d0     !地表面温度 [K]
    45:              real(DP), save, public :: PressSfc = 965.0d0    !地表面圧力 [Pa]
    46:              real(DP), save, public :: CpDry  = 0.0d0        !乾燥成分の定圧比熱 [J/K kg]
    47:              real(DP), save, public :: CpDryMol = 0.0d0      !乾燥成分の定圧比熱 [J/K kg]
    48:              real(DP), save, public :: CvDry = 0.0d0         !乾燥成分の定積比熱 [J/K kg]
    49:              real(DP), save, public :: MolWtDry = 0.0d0      !乾燥成分の分子量   [kg/mol]
    50:              real(DP), save, public :: GasRDry  = 0.0d0      !乾燥成分の気体定数 [J/K kg]
    51:              real(DP), save, public :: DayTime = 86400.0d0   ! 1 日の長さ [s]
    52:            
    53:              public constants_init
    54:            
    55:            contains
    56:            
    57:            !!!-----------------------------------------------------------------!!!
    58:              subroutine constants_Init()
    59:            
    60:                !暗黙の型宣言禁止
    61:                implicit none
    62:                
    63:                !変数定義
    64:                integer                  :: SpcDryNum       !乾燥成分の化学種の数
    65:                character(20)            :: SpcDrySymbol(5) !乾燥成分の化学種名
    66:                real(DP)                 :: SpcDryMolFr(5)  !乾燥成分の化学種の存在度
    67:                integer, allocatable     :: SpcDryID(:)     !乾燥成分の化学種のID
    68:                real(DP), allocatable    :: PropertyDry(:)  !作業配列
    69:                integer                  :: s               !作業変数
    70:                integer                  :: unit            !装置番号
    71:                logical                  :: flag = .false.
    72:                 
    73:                !NAMELIST の定義
    74:                NAMELIST /constants_nml/ &
    75:                  & Grav, PressBasis, TempSfc, PressSfc, & 
    76:                  & SpcDrySymbol, SpcDryMolFr, DayTime, CpDry, MolWtDry
    77:             
    78: +------>       SpcDrySymbol = '' 
    79: +------        SpcDryMolFr  = 0.0d0
    80:                
    81:                !ファイルオープン. 情報取得. 
    82:                call FileOpen(unit, file=namelist_filename, mode='r')
    83:                read(unit, NML=constants_nml)
    84:                close(unit)
    85:            
    86:                if (CpDry /= 0.0d0 .AND. MolWtDry /= 0.0d0) then 
    87:                ! namelist から CpDry の値が入力された場合
    88:            
    89:                  !定圧モル比熱
    90:                  CpDryMol = CpDry *  MolWtDry 
    91:                  
    92:                  !気体定数
    93:                  GasRDry = GasRUniv / MolWtDry
    94:                  
    95:                  !定積比熱
    96:                  CvDry    = CpDry - GasRDry
    97:            
    98:                elseif (SpcDryMolFr(1) /= 0.0d0) then 
    99:                ! namelist から モル比が入力された場合
   100:            
   101:                  flag = .true.
   102:            
   103:                  !----------------------------------------------------------
   104:                  ! 乾燥成分の物性値の初期化
   105:                  !
   106:                  !乾燥成分の個数を数える
   107: V======          SpcDryNum = count(SpcDrySymbol /= "")
   108:                  
   109:                  !化学種の ID を取得    
   110:                  allocate(SpcDryID(SpcDryNum))    
   111: +------>         do s = 1, SpcDryNum
   112: |                  SpcDryID(s) = ChemData_OneSpcID( SpcDrySymbol(s) )
   113: +------          end do
   114:                  
   115:                  !作業配列の準備
   116:                  allocate(PropertyDry(SpcDryNum))
   117:                  
   118:                  !分子量
   119: V------>         do s = 1, SpcDryNum
   120: |                  PropertyDry(s) = ChemData_MolWt(SpcDryID(s))
   121: V------          end do
   122: V======          MolWtDry = dot_product(PropertyDry, SpcDryMolFr(1:SpcDryNum)) 
   123:                  
   124:                  !定圧比熱(モル当量)
   125: V------>         do s = 1, SpcDryNum    
   126: |                  PropertyDry(s) = ChemData_CpPerMolRef(SpcDryID(s))
   127: V------          end do
   128: V======          CpDryMol = dot_product(PropertyDry, SpcDryMolFr(1:SpcDryNum)) 
   129:                  
   130:                  !定圧比熱
   131:                  CpDry    = CpDryMol / MolWtDry
   132:                  
   133:                  !気体定数
   134:                  GasRDry = GasRUniv / MolWtDry
   135:                  
   136:                  !定積比熱
   137:                  CvDry    = CpDry - GasRDry
   138:                end if
   139:                
   140:                !----------------------------------------------------------
   141:                ! 確認
   142:                !----------------------------------------------------------
   143:                if (myrank == 0) then 
   144:                  call MessageNotify( "M", &
   145:                    & "constants_init", "Grav = %f",     d=(/Grav/) )
   146:                  call MessageNotify( "M", &
   147:                    & "constants_init", "PressBasis = %f", d=(/PressBasis/))
   148:                  call MessageNotify( "M", &
   149:                    & "constants_init", "TempSfc = %f",  d=(/TempSfc/) )
   150:                  call MessageNotify( "M", &
   151:                    & "constants_init", "PressSfc = %f", d=(/PressSfc/) )
   152:                  if (flag) then 
   153: +------>           do s = 1, SpcDryNum
   154: |                    call MessageNotify( "M", &
   155: |                      &  "constants_init", "SpcDryID = %d",      i=(/SpcDryID(s)/))
   156: |                    call MessageNotify( "M", &
   157: |                      &  "constants_init", "SpcDrySymbol = %c", c1=trim(SpcDrySymbol(s)))
   158: |                    call MessageNotify( "M", &
   159: |                      &  "constants_init", "SpcDryMolFr = %f",   d=(/SpcDryMolFr(s)/))
   160: +------            end do
   161:                  end if
   162:                  
   163:                  call MessageNotify( "M", "constants_init", "CpDry    = %f",    d=(/CpDry/) )
   164:                  call MessageNotify( "M", "constants_init", "CpDryMol = %f", d=(/CpDryMol/) )
   165:                  call MessageNotify( "M", "constants_init", "CvDry    = %f",    d=(/CvDry/) )
   166:                  call MessageNotify( "M", "constants_init", "GasRDry  = %f",  d=(/GasRDry/) )
   167:                  call MessageNotify( "M", "constants_init", "MolWtDry = %f", d=(/MolWtDry/) )
   168:                  call MessageNotify( "M", "constants_init", "DayTime  = %f",  d=(/DayTime/)  )
   169:                end if
   170:            
   171:              end subroutine Constants_Init
   172:            
   173:            end module Constants
