Class | NumDiffusion_3d |
In: |
util/numdiffusion_3d.f90
|
数値拡散項の計算モジュール 現在は 2 次精度中心差分を利用
Subroutine : |
NumDiffusion モジュールの初期化ルーチン
subroutine NumDiffusion_init() ! ! NumDiffusion モジュールの初期化ルーチン ! !暗黙の型宣言禁止 implicit none real(DP) :: DelXMin, DelYMin, DelZMin DelXMin = minval(x_dx) DelYMin = minval(y_dy) DelZMin = minval(z_dz) ! CReSS マニュアルでは, 2 次精度中心差分の場合, Alpha < 1/8 くらいが適当と述べている. ! deepconv では NuH として 500 以上の値が入っていたそうだ, NuH = Alpha * ( SQRT(DelXMin*DelYMin) ** 2.0d0 ) / DelTimeLong NuV = Alpha * ( DelZMin ** 2.0d0 ) / DelTimeLong !確認 call MessageNotify( "M", "NumDiffusion_init", "NuH = %f", d=(/NuH/) ) call MessageNotify( "M", "NumDiffusion_init", "NuV = %f", d=(/NuV/) ) end subroutine NumDiffusion_init
Function : | |||
pyz_NumDiffVelX(DimXMin:DimXMax,DimYMin:DImYMax,DimZMin:DimZMax) : | real(DP)
| ||
pyz_VarX(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) : | real(DP), intent(in)
|
z 方向に半格子ずれた点での数値拡散項を評価
function pyz_NumDiffVelX(pyz_VarX) ! ! z 方向に半格子ずれた点での数値拡散項を評価 ! !暗黙の型宣言禁止 implicit none !変数定義 real(DP), intent(in) :: pyz_VarX (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) !物理量 real(DP) :: pyz_NumDiffVelX (DimXMin:DimXMax,DimYMin:DImYMax,DimZMin:DimZMax) !数値拡散 pyz_NumDiffVelX = 0.0d0 !初期化 pyz_NumDiffVelX = NuH * ( pyz_dx_xyz( xyz_dx_pyz( pyz_VarX ) ) ) + NuH * ( pyz_dy_pqz( pqz_dy_pyz( pyz_VarX ) ) ) + NuV * ( pyz_dz_pyr( pyr_dz_pyz( pyz_VarX ) ) ) end function pyz_NumDiffVelX
Function : | |||
xqz_NumDiffVelY(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) : | real(DP)
| ||
xqz_VarY(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) : | real(DP), intent(in)
|
z 方向に半格子ずれた点での数値拡散項を評価
function xqz_NumDiffVelY(xqz_VarY) ! ! z 方向に半格子ずれた点での数値拡散項を評価 ! !暗黙の型宣言禁止 implicit none !変数定義 real(DP), intent(in) :: xqz_VarY (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) !物理量 real(DP) :: xqz_NumDiffVelY (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) !数値拡散 ! xqz_NumDiffVelY = 0.0d0 !初期化 xqz_NumDiffVelY = NuH * ( xqz_dx_pqz( pqz_dx_xqz( xqz_VarY ) ) ) + NuH * ( xqz_dy_xyz( xyz_dy_xqz( xqz_VarY ) ) ) + NuV * ( xqz_dz_xqr( xqr_dz_xqz( xqz_VarY ) ) ) end function xqz_NumDiffVelY
Function : | |||
xyr_NumDiffVelZ(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) : | real(DP)
| ||
xyr_VarZ(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) : | real(DP), intent(in)
|
x 方向に半格子ずれた点での数値拡散項を評価
function xyr_NumDiffVelZ(xyr_VarZ) ! ! x 方向に半格子ずれた点での数値拡散項を評価 ! !暗黙の型宣言禁止 implicit none !変数定義 real(DP), intent(in) :: xyr_VarZ(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) !物理量 real(DP) :: xyr_NumDiffVelZ(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) !数値拡散 ! xyr_NumDiffVelZ = 0.0d0 xyr_NumDiffVelZ = NuH * ( xyr_dx_pyr( pyr_dx_xyr( xyr_VarZ ) ) ) + NuH * ( xyr_dy_xqr( xqr_dy_xyr( xyr_VarZ ) ) ) + NuV * ( xyr_dz_xyz( xyz_dz_xyr( xyr_VarZ ) ) ) end function xyr_NumDiffVelZ
Function : | |||
xyz_NumDiffKm(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) : | real(8)
| ||
xyz_Scalar(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) : | real(8), intent(in)
|
x, z 方向に半格子ずれた点での数値拡散項を評価
function xyz_NumDiffKm(xyz_Scalar) ! ! x, z 方向に半格子ずれた点での数値拡散項を評価 ! !暗黙の型宣言禁止 implicit none !変数定義 real(8), intent(in) :: xyz_Scalar(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) !スカラー量 real(8) :: xyz_NumDiffKm(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax) !水平方向の数値拡散 xyz_NumDiffKm = NuH * (xyz_dx_pyz(pyz_dx_xyz( xyz_Scalar ))) + NuH * (xyz_dy_xqz(xqz_dy_xyz( xyz_Scalar ))) + NuV * (xyz_dz_xyr(xyr_dz_xyz( xyz_Scalar ))) end function xyz_NumDiffKm
Function : | |||
xyz_NumDiffScalar(DimXMin:DimXMax,DimYMin:DImYMax,DimZMin:DimZMax) : | real(DP)
| ||
xyz_Scalar(DimXMin:DimXMax,DimYMin:DImYMax,DimZMin:DimZMax) : | real(DP), intent(in)
|
x, y, z 方向に半格子ずれた点での数値拡散項を評価
function xyz_NumDiffScalar(xyz_Scalar) ! ! x, y, z 方向に半格子ずれた点での数値拡散項を評価 ! !暗黙の型宣言禁止 implicit none !変数定義 real(DP), intent(in) :: xyz_Scalar (DimXMin:DimXMax,DimYMin:DImYMax,DimZMin:DimZMax) !スカラー量 real(DP) :: xyz_NumDiffScalar (DimXMin:DimXMax,DimYMin:DImYMax,DimZMin:DimZMax) !水平方向の数値拡散 ! xz_NumDiffScalar = 0.0d0 !初期化 xyz_NumDiffScalar = NuH * (xyz_dx_pyz(pyz_dx_xyz( xyz_Scalar ))) + NuH * (xyz_dy_xqz(xqz_dy_xyz( xyz_Scalar ))) + NuV * (xyz_dz_xyr(xyr_dz_xyz( xyz_Scalar ))) call StorePotTempDiff( xyz_NumDiffScalar ) end function xyz_NumDiffScalar
Function : | |||
xyza_NumDiffScalar(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax,SpcNum) : | real(DP)
| ||
xyza_Scalar(DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax,SpcNum) : | real(DP), intent(in)
|
x, z 方向に半格子ずれた点での数値拡散項を評価
function xyza_NumDiffScalar(xyza_Scalar) ! ! x, z 方向に半格子ずれた点での数値拡散項を評価 ! !暗黙の型宣言禁止 implicit none! !変数定義 real(DP), intent(in) :: xyza_Scalar (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax,SpcNum) !スカラー量 real(DP) :: xyza_NumDiffScalar (DimXMin:DimXMax,DimYMin:DimYMax,DimZMin:DimZMax,SpcNum) !水平方向の数値拡散 integer :: s do s = 1, SpcNum xyza_NumDiffScalar(:,:,:,s) = NuH * (xyz_dx_pyz(pyz_dx_xyz( xyza_Scalar(:,:,:,s) ))) + NuH * (xyz_dy_xqz(xqz_dy_xyz( xyza_Scalar(:,:,:,s) ))) + NuV * (xyz_dz_xyr(xyr_dz_xyz( xyza_Scalar(:,:,:,s) ))) end do call StoreMixRtDiff( xyza_NumDiffScalar ) end function xyza_NumDiffScalar