!= Module CFLCheck ! ! Authors:: SUGIYAMA Ko-ichiro ! Version:: $Id: cflcheck.f90,v 1.5 2006-11-10 04:48:41 odakker Exp $ ! Tag Name:: $Name: arare4-20080627 $ ! Copyright:: Copyright (C) GFD Dennou Club, 2006. All rights reserved. ! License:: See COPYRIGHT[link:../../COPYRIGHT] ! !== Overview ! !CFL 条件のチェックをするためのパッケージ型モジュール ! * 音波に対して CFL 条件をチェック ! * 入力された速度に対して CFL 条件をチェック ! !== Error Handling ! !== Known Bugs ! !== Note ! !== Future Plans ! !Error Handling を gt4f90io を利用するように変更 ! module CFLCheck ! !CFL 条件のチェックをするためのパッケージ型モジュール ! * 音波に対して CFL 条件をチェック ! * 入力された速度に対して CFL 条件をチェック ! !モジュール読み込み use dc_message, only: MessageNotify use gridset, only: DimXMin, &! x 方向の配列の下限 & DimXMax, &! x 方向の配列の上限 & DimZMin, &! z 方向の配列の下限 & DimZMax, &! z 方向の配列の上限 & DelX, &! X 方向の格子点間隔 & DelZ ! Z 方向の格子点間隔 use timeset, only: DelTimeShort, &!短い時間ステップ & DelTimeLong !長い時間ステップ !暗黙の型宣言禁止 implicit none !private 属性の指定 private !関数を public 属性に設定 public CFLCheckTimeShort public CFLCheckTimeLongVelX public CFLCheckTimeLongVelZ contains !!!-----------------------------------------------------------------!!! subroutine CFLCheckTimeShort( xz_VelSound ) ! !音波に対して CFL 条件をチェック ! !暗黙の型宣言禁止 implicit none !変数定義 real(8), intent(in) :: xz_VelSound(DimXMin:DimXMax, DimZMin:DimZMax) !音速 real(8) :: CFL !クーラン数 !音速と CFL 条件を求める CFL = DelTimeShort * maxval(xz_VelSound) / min(DelX, DelZ) !メッセージ call MessageNotify( "M", & & "CFLCheckTimeShort", & & "Sound Wave Velocity = %f", d=(/maxval(xz_VelSound)/) ) call MessageNotify( "M", & & "CFLCheckTimeShort", & & "min(DelX, DelZ) = %f", d=(/min(DelX, DelZ)/) ) call MessageNotify( "M", & & "CFLCheckTimeShort", & & "DelTimeShort = %f", d=(/DelTimeSHort/) ) !警告メッセージ if ( CFL >= 1.0) then call MessageNotify( "E", & & "CFLCheckTimeShort", & & "CFL Condition is broken, DelTimeShort * VelSound > min(DelX, DelZ)") else call MessageNotify( "M", & & "CFLCheckTimeShort", & & "Courant number for DelTimeSort = %f", d=(/CFL/) ) end if end subroutine CFLCheckTimeShort !!!-----------------------------------------------------------------!!! subroutine CFLCheckTimeLongVelX( pz_VelX ) ! !水平速度に対して CFL 条件をチェック. ! !暗黙の型宣言禁止 implicit none !内部変数 real(8), intent(in) :: pz_VelX(DimXMin:DimXMax, DimZMin:DimZMax) real(8) :: CFL !音速と CFL 条件を求める CFL = DelTimeLong/ max(DelX / maxval(pz_VelX), - DelX / minval(pz_VelX)) !メッセージ出力 call MessageNotify( "M", & & "CFLCheckTimeLongVelX", & & "Courant number of VelX for DelTimeLong = %f", d=(/CFL/) ) end subroutine CFLCheckTimeLongVelX !!!-----------------------------------------------------------------!!! subroutine CFLCheckTimeLongVelZ( xr_VelZ ) ! !水平速度に対して CFL 条件をチェック. ! !暗黙の型宣言禁止 implicit none !内部変数 real(8), intent(in) :: xr_VelZ(DimXMin:DimXMax, DimZMin:DimZMax) real(8) :: CFL !音速と CFL 条件を求める CFL = DelTimeLong / max(DelZ / maxval(xr_VelZ), - DelZ / minval(xr_VelZ)) !メッセージ出力 call MessageNotify( "M", & & "CFLCheckTimeLongVelZ", & & "Courant number of VelZ for DelTimeLong = %f", d=(/CFL/) ) end subroutine CFLCheckTimeLongVelZ end module CFLCheck