!= Module Average ! ! Authors:: SUGIYAMA Ko-ichiro ! Version:: $Id: average.f90,v 1.5 2007-04-11 11:59:58 sugiyama Exp $ ! Tag Name:: $Name: arare4-20080627 $ ! Copyright:: Copyright (C) GFD Dennou Club, 2006. All rights reserved. ! License:: See COPYRIGHT[link:../../COPYRIGHT] ! !== Overview ! !物理量の平均操作を行うための一連の関数をまとめたパッケージ型モジュール. !水平 Arakawa-C, 鉛直 Lorentz グリッドとする. ! !== Error Handling ! !== Known Bugs ! !== Note ! !== Future Plans ! module average ! !2 次精度の平均操作を行うための関数を束ねたパッケージ型モジュール. !水平 Arakawa-C, 鉛直 Lorentz グリッドとする. ! !モジュール読み込み use gridset, only: DimXMin, &! 配列の X 方向の下限 & DimXMax, &! 配列の X 方向の上限 & DimZMin, &! 配列の Z 方向の下限 & DimZMax ! 配列の Z 方向の上限 !暗黙の型宣言禁止 implicit none !属性の指定 private !関数を public にする public xz_avr_pz public xz_avr_xr public xz_avr_pr public pz_avr_xz public pz_avr_xr public pz_avr_pr public xr_avr_xz public xr_avr_pz public xr_avr_pr public pr_avr_xz public pr_avr_xr public pr_avr_pz contains !!!--------------------------------------------------------------------- function xz_avr_pz( pz_var ) ! ! z 方向に半格子ずれた点の, x, z 方向に半格子ずれた点での平均値 ! !暗黙の型宣言禁止 implicit none !変数定義 real(8), intent(in) :: pz_var(DimXMin:DimXMax, DimZMin:DimZMax) !平均演算の対象となる変数 real(8) :: xz_avr_pz(DimXMin:DimXMax, DimZMin:DimZMax) !平均値 xz_avr_pz = pz_var xz_avr_pz(DimXMin+1 : DimXMax, DimZMin : DimZMax) = & & ( & & pz_var(DimXMin+1 : DimXMax, DimZMin : DimZMax) & & + pz_var(DimXMin : DimXMax-1, DimZMin : DimZMax) & & ) * 5.0d-1 end function xz_avr_pz !!!--------------------------------------------------------------------- function xz_avr_xr( xr_var ) ! ! x 方向に半格子ずれた点の, x, z 方向に半格子ずれた点での平均値 ! !暗黙の型宣言禁止 implicit none !変数定義 real(8), intent(in) :: xr_var(DimXMin:DimXMax, DimZMin:DimZMax) !平均演算の対象となる変数 real(8) :: xz_avr_xr(DimXMin:DimXMax, DimZMin:DimZMax) !平均値 xz_avr_xr = xr_var xz_avr_xr(DimXMin : DimXMax, DimZMin+1 : DimZMax) = & & ( & & xr_var(DimXMin : DimXMax, DimZMin+1 : DimZMax ) & & + xr_var(DimXMin : DimXMax, DimZMin : DimZMax-1 ) & & ) * 5.0d-1 end function xz_avr_xr !!!--------------------------------------------------------------------- function xz_avr_pr( pr_var ) ! ! 格子上の点の, x, z 方向に半格子ずれた点での平均値 ! !暗黙の型宣言禁止 implicit none !変数定義 real(8), intent(in) :: pr_var(DimXMin:DimXMax, DimZMin:DimZMax) !平均演算の対象となる変数 real(8) :: xz_avr_pr(DimXMin:DimXMax, DimZMin:DimZMax) !平均値 xz_avr_pr = pr_var xz_avr_pr(DimXMin+1 : DimXMax, DimZMin+1 : DimZMax) = & & ( & & pr_var(DimXMin+1 : DimXMax, DimZMin+1 : DimZMax ) & & + pr_var(DimXMin+1 : DimXMax, DimZMin : DimZMax-1 ) & & + pr_var(DimXMin : DimXMax-1, DimZMin+1 : DimZMax ) & & + pr_var(DimXMin : DimXMax-1, DimZMin : DimZMax-1 ) & & ) * 2.5d-1 end function xz_avr_pr !!!--------------------------------------------------------------------- function pz_avr_xz( xz_var ) ! ! x, z 方向に半格子ずれた点の, z 方向に半格子ずれた点での平均値 ! !暗黙の型宣言禁止 implicit none !変数定義 real(8), intent(in) :: xz_var(DimXMin:DimXMax, DimZMin:DimZMax) !平均演算の対象となる変数 real(8) :: pz_avr_xz(DimXMin:DimXMax, DimZMin:DimZMax) !平均値 pz_avr_xz = xz_var pz_avr_xz(DimXMin : DimXMax-1, DimZMin : DimZMax) = & & ( & & xz_var(DimXMin+1 : DimXMax , DimZMin : DimZMax) & & + xz_var(DimXMin : DimXMax-1 , DimZMin : DimZMax) & & ) * 5.0d-1 end function pz_avr_xz !!!--------------------------------------------------------------------- function pz_avr_xr( xr_var ) ! ! x 方向に半格子ずれた点の, z 方向に半格子ずれた点での平均値 ! !暗黙の型宣言禁止 implicit none !変数定義 real(8), intent(in) :: xr_var(DimXMin:DimXMax, DimZMin:DimZMax) !平均演算の対象となる変数 real(8) :: pz_avr_xr(DimXMin:DimXMax, DimZMin:DimZMax) !平均値 pz_avr_xr = xr_var pz_avr_xr(DimXMin : DimXMax-1, DimZMin+1 : DimZMax) = & & ( & & xr_var(DimXMin+1 : DimXMax, DimZMin+1 : DimZMax ) & & + xr_var(DimXMin+1 : DimXMax, DimZMin : DimZMax-1) & & + xr_var(DimXMin : DimXMax-1, DimZMin+1 : DimZMax ) & & + xr_var(DimXMin : DimXMax-1, DimZMin : DimZMax-1) & & ) * 2.5d-1 end function pz_avr_xr !!!--------------------------------------------------------------------- function pz_avr_pr( pr_var ) ! ! 格子上の点の, z 方向に半格子ずれた点での平均値 ! !暗黙の型宣言禁止 implicit none !変数定義 real(8), intent(in) :: pr_var(DimXMin:DimXMax, DimZMin:DimZMax) !平均演算の対象となる変数 real(8) :: pz_avr_pr(DimXMin:DimXMax, DimZMin:DimZMax) !平均値 pz_avr_pr = pr_var pz_avr_pr(DimXMin : DimXMax, DimZMin+1 : DimZMax) = & & ( & & pr_var(DimXMin : DimXMax, DimZMin+1 : DimZMax ) & & + pr_var(DimXMin : DimXMax, DimZMin : DimZMax-1) & & ) * 5.0d-1 end function pz_avr_pr !!!--------------------------------------------------------------------- function xr_avr_xz( xz_var ) ! ! x, z 方向に半格子ずれた点の, x 方向に半格子ずれた点での平均値 ! !暗黙の型宣言禁止 implicit none !変数定義 real(8), intent(in) :: xz_var(DimXMin:DimXMax, DimZMin:DimZMax) !平均演算の対象となる変数 real(8) :: xr_avr_xz(DimXMin:DimXMax, DimZMin:DimZMax) !平均値 xr_avr_xz = xz_var xr_avr_xz(DimXMin : DimXMax, DimZMin : DimZMax-1) = & & ( & & xz_var( DimXMin : DimXMax, DimZMin+1 :DimZMax ) & & + xz_var( DimXMin : DimXMax, DimZMin :DimZMax-1 ) & & ) * 5.0d-1 end function xr_avr_xz !!!--------------------------------------------------------------------- function xr_avr_pz( pz_var ) ! ! z 方向に半格子ずれた点の, x 方向に半格子ずれた点での平均値 ! !暗黙の型宣言禁止 implicit none !変数定義 real(8), intent(in) :: pz_var(DimXMin:DimXMax, DimZMin:DimZMax) !平均演算の対象となる変数 real(8) :: xr_avr_pz(DimXMin:DimXMax, DimZMin:DimZMax) !平均値 xr_avr_pz = pz_var xr_avr_pz(DimXMin+1 : DimXMax, DimZMin : DimZMax-1 ) = & & ( & & pz_var(DimXMin+1 :DimXMax, DimZMin+1 : DimZMax ) & & + pz_var(DimXMin+1 :DimXMax, DimZMin : DimZMax-1) & & + pz_var(DimXMin :DimXMax-1, DimZMin+1 : DimZMax ) & & + pz_var(DimXMin :DimXMax-1, DimZMin : DimZMax-1) & & ) * 2.5d-1 end function xr_avr_pz !!!--------------------------------------------------------------------- function xr_avr_pr( pr_var ) ! ! 格子上の点の, x 方向に半格子ずれた点での平均値 ! !暗黙の型宣言禁止 implicit none !変数定義 real(8), intent(in) :: pr_var(DimXMin:DimXMax, DimZMin:DimZMax) !平均演算の対象となる変数 real(8) :: xr_avr_pr(DimXMin:DimXMax, DimZMin:DimZMax) !平均値 xr_avr_pr = pr_var xr_avr_pr(DimXMin+1 : DimXMax, DimZMin : DimZMax) = & & ( & & pr_var(DimXMin+1 : DimXMax, DimZMin : DimZMax) & & + pr_var(DimXMin : DimXMax-1, DimZMin : DimZMax) & & ) * 5.0d-1 end function xr_avr_pr !!!--------------------------------------------------------------------- function pr_avr_xz( xz_var ) ! ! x, z 方向に半格子ずれた点の, 格子上の点での平均値 ! !暗黙の型宣言禁止 implicit none !変数定義 real(8), intent(in) :: xz_var(DimXMin:DimXMax, DimZMin:DimZMax) !平均演算の対象となる変数 real(8) :: pr_avr_xz(DimXMin:DimXMax, DimZMin:DimZMax) !平均値 pr_avr_xz = xz_var pr_avr_xz(DimXMin : DimXMax-1, DimZMin : DimZMax-1) = & & ( & & xz_var(DimXMin+1 : DimXMax, DimZMin+1 : DimZMax ) & & + xz_var(DimXMin+1 : DimXMax, DimZMin : DimZMax-1 ) & & + xz_var(DimXMin : DimXMax-1, DimZMin+1 : DimZMax ) & & + xz_var(DimXMin : DimXMax-1, DimZMin : DimZMax-1 ) & & ) * 2.5d-1 end function pr_avr_xz !!!--------------------------------------------------------------------- function pr_avr_pz( pz_var ) ! ! z 方向に半格子ずれた点の, 格子上の点での平均値 ! !暗黙の型宣言禁止 implicit none !変数定義 real(8), intent(in) :: pz_var(DimXMin:DimXMax, DimZMin:DimZMax) !平均演算の対象となる変数 real(8) :: pr_avr_pz(DimXMin:DimXMax, DimZMin:DimZMax) !平均値 pr_avr_pz = pz_var pr_avr_pz(DimXMin : DimXMax, DimZMin : DimZMax-1) = & & ( & & pz_var(DimXMin : DimXMax, DimZMin+1 : DimZMax) & & + pz_var(DimXMin : DimXMax, DimZMin : DimZMax-1) & & ) * 5.0d-1 end function pr_avr_pz !!!--------------------------------------------------------------------- function pr_avr_xr( xr_var ) ! ! x 方向に半格子ずれた点の, 格子上の点での平均値 ! !暗黙の型宣言禁止 implicit none !変数定義 real(8), intent(in) :: xr_var(DimXMin:DimXMax, DimZMin:DimZMax) !平均演算の対象となる変数 real(8) :: pr_avr_xr(DimXMin:DimXMax, DimZMin:DimZMax) !平均値 pr_avr_xr = xr_var pr_avr_xr(DimXMin : DimXMax-1 , DimZMin : DimZMax) = & & ( & & xr_var(DimXMin+1 : DimXMax, DimZMin : DimZMax) & & + xr_var(DimXMin : DimXMax-1, DimZMin : DimZMax) & & ) * 5.0d-1 end function pr_avr_xr end module average