Path: | src/dynamics/advectdiffusex.f90 |
Last Update: | Thu Sep 22 03:24:33 JST 2005 |
Copyright (C) GFD Dennou Club, 2004. All rights reserved.
* Developer: SUGIYAMA Ko-ichiro (sugiyama@gfd-dennou.org) * Version: $Id: advectdiffusex.f90,v 1.2 2005/04/22 15:01:52 sugiyama Exp $ * Tag Name: $Name: $ * Change History:
X 方向の運動方程式中に現れる以下の項を 長い時間ステップ DelTimeLong において評価する.
* 移流項 * 乱流拡散項 * 数値粘性項
* 移流項の計算には ***_adv となる変数を利用する. * 乱流拡散項, 数値粘性項の計算には ***_dif となる変数を利用する.
fs_VelX_adv(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in)
| ||
sf_VelZ_adv(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in) | ||
fs_VelX_dif(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in) | ||
sf_VelZ_dif(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in) | ||
ss_Km_dif(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(in) | ||
fs_AdvDiffX_out(DimXMin:DimXMax, DimZMin:DimZMax) : | real(8), intent(out)
|
subroutine AdvectDiffuseX( fs_VelX_adv, sf_VelZ_adv, fs_VelX_dif, sf_VelZ_dif, ss_Km_dif, fs_AdvDiffX_out ) !=begin !== Dependency !=end !== 暗黙の型宣言禁止 implicit none !=begin !== Input real(8), intent(in) :: fs_VelX_adv(DimXMin:DimXMax, DimZMin:DimZMax) real(8), intent(in) :: sf_VelZ_adv(DimXMin:DimXMax, DimZMin:DimZMax) real(8), intent(in) :: fs_VelX_dif(DimXMin:DimXMax, DimZMin:DimZMax) real(8), intent(in) :: sf_VelZ_dif(DimXMin:DimXMax, DimZMin:DimZMax) real(8), intent(in) :: ss_Km_dif(DimXMin:DimXMax, DimZMin:DimZMax) !== Output real(8), intent(out) :: fs_AdvDiffX_out(DimXMin:DimXMax, DimZMin:DimZMax) !=end !=== Work real(8) :: fs_AdvVelX(DimXMin:DimXMax, DimZMin:DimZMax) real(8) :: fs_TurbVelX(DimXMin:DimXMax, DimZMin:DimZMax) real(8) :: fs_NumDiffVelX(DimXMin:DimXMax, DimZMin:DimZMax) call BeginSub("AdvectDiffuseX", fmt="%c", c1="calculation of extra force term in x-direction.") !=== 移流項 fs_AdvVelX = fs_avr_ss( ss_avr_fs( fs_VelX_adv ) * ss_dx_fs( fs_VelX_adv ) ) + fs_avr_ff( ff_avr_sf( sf_VelZ_adv ) * ff_dz_fs( fs_VelX_adv ) ) !=== 乱流拡散項 (時刻は t-Δt で評価) fs_TurbVelX = 2.0d0 * fs_dx_ss( ss_Km_dif * ss_dx_fs( fs_VelX_dif ) ) + fs_dz_ff( ff_avr_ss( ss_Km_dif ) * ff_dx_sf( sf_VelZ_dif ) ) + fs_dz_ff( ff_avr_ss( ss_Km_dif ) * ff_dz_fs( fs_VelX_dif ) ) - 2.0d0 * fs_dx_ss( ( ss_Km_dif ** 2.0d0 ) ) / ( 3.0d0 * ( Cm ** 2.0d0 ) * ( DelXZ ** 2.0d0 ) ) !=== 数値粘性項 (時刻は t-Δt で評価) fs_NumDiffVelX = NuH * ( fs_dx_ss( ss_dx_fs( fs_VelX_dif) ) ) + NuV * ( fs_dz_ff( ff_dz_fs( fs_VelX_dif) ) ) !=== 外力項として出力 fs_AdvDiffX_out = - fs_AdvVelX + fs_TurbVelX + fs_NumDiffVelX call EndSub("AdvectDiffuseX") end subroutine AdvectDiffuseX