!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE AAMULT ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE aamult(a,b,nx,ny,nz, & 6
ibgn,iend,jbgn,jend,kbgn,kend, ab)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Calculate the element-wise product of arrays a and b.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 10/10/91
!
! MODIFICATION HISTORY:
!
! 5/05/92 (M. Xue)
! Added full documentation.
!
! 6/01/2 (K. Brewster)
! Further facelift.
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a First multiplier array
! b Second multiplier array
!
! nx First dimension of arrays a, b and ab
! ny Second dimension of arrays a, b and ab
! nz Third dimension of arrays a, b and ab
!
! ibgn i-index where multiplication begins.
! iend i-index where multiplication ends.
! jbgn j-index where multiplication begins.
! jend j-index where multiplication ends.
! kbgn k-index where multiplication begins.
! kend k-index where multiplication ends.
!
! OUTPUT:
!
! ab Element-wise product (a*b) over range specified by
! the starting and ending indices given above.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
REAL :: a (nx,ny,nz) ! Input array 1
REAL :: b (nx,ny,nz) ! Input array 2
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend
REAL :: ab(nx,ny,nz) ! Product array
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
DO k=kbgn,kend
DO j=jbgn,jend
DO i=ibgn,iend
ab(i,j,k)=a(i,j,k)*b(i,j,k)
END DO
END DO
END DO
RETURN
END SUBROUTINE aamult
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE AVGX ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE avgx(a, onvf, nx,ny,nz, & 4
ibgn,iend,jbgn,jend,kbgn,kend, &
aavg)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Perform a spatial average operation on array (a) in the x direction.
! The average for the two input values is defined at the midpoint
! between the two values.
! If the averaged variable aavg is on the grid volume face, onvf =1
! otherwise, onvf = 0
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 10/10/91
!
! MODIFICATION HISTORY:
!
! 5/05/92 (M. Xue)
! Added full documentation.
!
! 6/01/2 (K. Brewster)
! Further facelift.
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a Input array
!
! onvf Integer grid point indicator
! If the averaged variable aavg is on the grid volume face,
! onvf =1; otherwise, onvf = 0
!
! nx First dimension of arrays a and aavg
! ny Second dimension of arrays a and aavg
! nz Third dimension of arrays a and aavg
!
! ibgn i-index where multiplication begins.
! iend i-index where multiplication ends.
! jbgn j-index where multiplication begins.
! jend j-index where multiplication ends.
! kbgn k-index where multiplication begins.
! kend k-index where multiplication ends.
!
! OUTPUT:
!
! aavg Result of average operation on array
! (a) in the x direction
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
REAL :: a (nx,ny,nz) ! Input array
INTEGER :: onvf ! Integer grid point indicator
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend
! Integer indicator of multiplication
REAL :: aavg(nx,ny,nz) ! Averaged array
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k,iright,ileft
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
IF ( onvf == 1) THEN
iright = 0
ileft = -1
ELSE
iright = 1
ileft = 0
END IF
DO k=kbgn,kend
DO j=jbgn,jend
DO i=ibgn,iend
aavg(i,j,k)=(a(i+iright,j,k) &
+a(i+ileft ,j,k))*0.5
END DO
END DO
END DO
RETURN
END SUBROUTINE avgx
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE AVG2X ######
!###### ######
!###### Developed by ######
!###### Center for the Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE avg2x(a, nx,ny,nz, &
ibgn,iend,jbgn,jend,kbgn,kend, aavg)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Perform a spatial average operation on array a in the x direction.
! Averaging is over the interval 2*deltax.
! The averaged variable is defined at the midpoint between the two
! points for the two input values.
!
!-----------------------------------------------------------------------
!
! AUTHOR: David E. Jahn
! 9/30/93
!
! MODIFICATION HISTORY:
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a Input array
!
! nx First dimension of arrays a and aavg
! ny Second dimension of arrays a and aavg
! nz Third dimension of arrays a and aavg
!
! ibgn Index in first dimension to begin multiplication
! iend Index in first dimension to end multiplication
! jbgn Index in second dimension to begin multiplication
! jend Index in second dimension to end multiplication
! kbgn Index in third dimension to begin multiplication
! kend Index in third dimension to end multiplication
!
! OUTPUT:
!
! aavg Result of average operation on array a in x direction
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
REAL :: a (nx,ny,nz) ! Input array
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend
! Integer indicator of multiplication
REAL :: aavg(nx,ny,nz) ! Averaged array
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
DO k=kbgn,kend
DO j=jbgn,jend
DO i=ibgn,iend
aavg(i,j,k)=(a(i-1,j,k) &
+a(i+1,j,k))*0.5
END DO
END DO
END DO
RETURN
END SUBROUTINE avg2x
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE AVGY ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE avgy(a, onvf, nx,ny,nz, & 4
ibgn,iend,jbgn,jend,kbgn,kend, aavg)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Perform a spatial average operation on array a in the y direction.
! The average for the two input values is defined at the midpoint
! between the two values.
! If the averaged variable aavg is on the grid volume face, onvf =1
! otherwise, onvf = 0
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 10/10/91
!
! MODIFICATION HISTORY:
!
! 5/05/92 (M. Xue)
! Added full documentation.
!
! 6/01/2 (K. Brewster)
! Further facelift.
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a Input array
!
! nx First dimension of arrays a and aavg
! ny Second dimension of arrays a and aavg
! nz Third dimension of arrays a and aavg
!
! onvf Integer grid point indicator
! If the averaged variable aavg is on the grid volume face,
! onvf =1; otherwise, onvf = 0
!
! ibgn i-index where multiplication begins.
! iend i-index where multiplication ends.
! jbgn j-index where multiplication begins.
! jend j-index where multiplication ends.
! kbgn k-index where multiplication begins.
! kend k-index where multiplication ends.
!
! OUTPUT:
!
! aavg Result of average operation on array (a) in the
! y direction
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
REAL :: a (nx,ny,nz) ! Input array
INTEGER :: onvf ! Integer grid point indicator
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend
! Integer indicator of multiplication
REAL :: aavg(nx,ny,nz) ! Average array
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k,jright,jleft
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
IF ( onvf == 1) THEN
jright = 0
jleft = -1
ELSE
jright = 1
jleft = 0
END IF
DO k=kbgn,kend
DO i=ibgn,iend
DO j=jbgn,jend
aavg(i,j,k)=(a(i,j+jright,k)+a(i,j+jleft,k))*0.5
END DO
END DO
END DO
RETURN
END SUBROUTINE avgy
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE AVG2Y ######
!###### ######
!###### Developed by ######
!###### Center for the Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE avg2y(a, nx,ny,nz, &
ibgn,iend,jbgn,jend,kbgn,kend, aavg)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Perform a spatial average operation on array a in the y direction.
! Averaging is over a distance 2y*delta-y.
! The averaged variable is defined at the midpoint between the two
! points for the two input values.
!
!-----------------------------------------------------------------------
!
! AUTHOR: David E. Jahn
! 9/30/93
!
! MODIFICATION HISTORY:
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a Input array
!
! nx First dimension of arrays a and aavg
! ny Second dimension of arrays a and aavg
! nz Third dimension of arrays a and aavg
!
! ibgn Index in first dimension to begin operation
! iend Index in first dimension to end operation
! jbgn Index in second dimension to begin operation
! jend Index in second dimension to end operation
! kbgn Index in third dimension to begin operation
! kend Index in third dimension to end operation
!
! OUTPUT:
!
! aavg Result of average operation on array a in y direction
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
REAL :: a (nx,ny,nz) ! Input array
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend
! Integer indicator of multiplication
REAL :: aavg(nx,ny,nz) ! Average array
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
DO k=kbgn,kend
DO i=ibgn,iend
DO j=jbgn,jend
aavg(i,j,k)=(a(i,j+1,k)+a(i,j-1,k))*0.5
END DO
END DO
END DO
RETURN
END SUBROUTINE avg2y
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE AVGZ ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE avgz(a, onvf, nx,ny,nz, & 16
ibgn,iend,jbgn,jend,kbgn,kend, aavg)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Perform a spatial average operation on array (a) in the z direction.
! The average of the two input values is defined at the midpoint
! between the two values.
! If the averaged variable aavg is on the grid volume face, onvf =1
! otherwise, onvf = 0
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 10/10/91
!
! MODIFICATION HISTORY:
!
! 5/05/92 (M. Xue)
! Added full documentation.
!
! 6/01/2 (K. Brewster)
! Further facelift.
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a Input array
!
! nx First dimension of arrays a and aavg
! ny Second dimension of arrays a and aavg
! nz Third dimension of arrays a and aavg
!
! onvf Integer grid point indicator
! If the averaged variable aavg is on the grid volume
! face,onvf =1; otherwise, onvf = 0
!
! ibgn i-index where multiplication begins.
! iend i-index where multiplication ends.
! jbgn j-index where multiplication begins.
! jend j-index where multiplication ends.
! kbgn k-index where multiplication begins.
! kend k-index where multiplication ends.
!
! OUTPUT:
!
! aavg Result of average operation on array (a) in the z direction
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
REAL :: a (nx,ny,nz) ! Input array
INTEGER :: onvf ! Integer grid point indicator
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend
! Integer indicator of multiplication
REAL :: aavg(nx,ny,nz) ! Average array
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k,kup,kdown
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
IF ( onvf == 1) THEN
kup = 0
kdown = -1
ELSE
kup = 1
kdown = 0
END IF
DO k=kbgn,kend
DO j=jbgn,jend
DO i=ibgn,iend
aavg(i,j,k)=(a(i,j,k+kup)+a(i,j,k+kdown ))*0.5
END DO
END DO
END DO
RETURN
END SUBROUTINE avgz
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE AVG2Z ######
!###### ######
!###### Developed by ######
!###### Center for the Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE avg2z(a, nx,ny,nz, &
ibgn,iend,jbgn,jend,kbgn,kend, aavg)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Perform a spatial average operation on array a in the z direction.
! Averaging is over interval 2*deltaz.
! The averaged variable is defined at the midpoint between the two
! points for the two input values.
!
!-----------------------------------------------------------------------
!
! AUTHOR: David E. Jahn
! 9/30/93
!
! MODIFICATION HISTORY:
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a Input array
!
! nx First dimension of arrays a and aavg
! ny Second dimension of arrays a and aavg
! nz Third dimension of arrays a and aavg
!
! ibgn Index in first dimension to begin operation
! iend Index in first dimension to end operation
! jbgn Index in second dimension to begin operation
! jend Index in second dimension to end operation
! kbgn Index in third dimension to begin operation
! kend Index in third dimension to end operation
!
! OUTPUT:
!
! aavg Result of average operation on array a in z direction
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
REAL :: a (nx,ny,nz) ! Input array
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend
! Integer indicator of multiplication
REAL :: aavg(nx,ny,nz) ! Average array
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
DO k=kbgn,kend
DO j=jbgn,jend
DO i=ibgn,iend
aavg(i,j,k)=(a(i,j,k+1)+a(i,j,k-1))*0.5
END DO
END DO
END DO
RETURN
END SUBROUTINE avg2z
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE DIFX ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE difx(a, onvf, nx,ny,nz, &
ibgn,iend,jbgn,jend,kbgn,kend, dx, adifx)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Perform a finite difference operation on an array (a) in the x
! direction: adifx = d( a ) / dx. The output variable is defined at
! the midpoint between the two points whose values are differenced
! (i.e., the output and input arrays are staggered). The output
! variable adifx is defined on the grid volume face when onvf =1;
! otherwise, onvf = 0.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 10/10/91
!
! MODIFICATION HISTORY:
!
! 5/05/92 (M. Xue)
! Added full documentation.
!
! 6/01/2 (K. Brewster)
! Further facelift.
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a Input array
!
! onvf Integer grid point indicator
! If the averaged variable aavg is on the grid volume
! face, onvf =1; otherwise, onvf = 0
!
! nx First dimension of arrays a and adifx
! ny Second dimension of arrays a and adifx
! nz Third dimension of arrays a and adfix
!
! ibgn i-index where multiplication begins.
! iend i-index where multiplication ends.
! jbgn j-index where multiplication begins.
! jend j-index where multiplication ends.
! kbgn k-index where multiplication begins.
! kend k-index where multiplication ends.
!
! dx Grid spacing in x direction (m)
!
! OUTPUT:
!
! adifx Differenced array del(a)/delx
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
REAL :: a (nx,ny,nz) ! Input array
INTEGER :: onvf ! Integer grid point indicator
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend
! Integer indicator of multiplication
REAL :: dx ! Grid spacing in x direction (m)
REAL :: adifx(nx,ny,nz) ! Differenced array del(a)/delx
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k,iright,ileft
REAL :: dxinv
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
IF ( onvf == 1) THEN
iright = 0
ileft = -1
ELSE
iright = 1
ileft = 0
END IF
dxinv = 1.0/dx
DO k=kbgn,kend
DO j=jbgn,jend
DO i=ibgn,iend
adifx(i,j,k)=(a(i+iright,j,k)-a(i+ileft ,j,k))*dxinv
END DO
END DO
END DO
RETURN
END SUBROUTINE difx
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE DIF2X ######
!###### ######
!###### Developed by ######
!###### Center for the Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE dif2x(a, nx,ny,nz, &
ibgn,iend,jbgn,jend,kbgn,kend, dx, adifx)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Perform a centered finite difference operation on an array a over
! 2 grid distance in the x direction: adifx = d( a ) / dx.
!
!-----------------------------------------------------------------------
!
! AUTHOR: David E. Jahn
! 4/19/93
!
! MODIFICATION HISTORY:
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a Input array
!
! nx First dimension of arrays a and adifx
! ny Second dimension of arrays a and adifx
! nz Third dimension of arrays a and adfix
!
! ibgn Index in first dimension to begin operation
! iend Index in first dimension to end operation
! jbgn Index in second dimension to begin operation
! jend Index in second dimension to end operation
! kbgn Index in third dimension to begin operation
! kend Index in third dimension to end operation
!
! dx Grid spacing in x direction (m)
!
! OUTPUT:
!
! adifx Differenced array del(a)/delx
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
REAL :: a (nx,ny,nz) ! Input array
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend
! Integer indicator of multiplication
REAL :: dx ! Grid spacing in x direction (m)
REAL :: adifx(nx,ny,nz) ! Differenced array del(a)/delx
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k
REAL :: dxinv
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
dxinv = 0.5/dx
DO k=kbgn,kend
DO j=jbgn,jend
DO i=ibgn,iend
adifx(i,j,k)=(a(i+1,j,k)-a(i-1,j,k))*dxinv
END DO
END DO
END DO
RETURN
END SUBROUTINE dif2x
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE DIFY ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE dify(a, onvf, nx,ny,nz, &
ibgn,iend,jbgn,jend,kbgn,kend, dy, adify)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Perform a finite difference operation on an array (a) in the y
! direction: adify = d( a ) / dy. The output variable is defined at
! the midpoint between the two points whose values are differenced
! (i.e., the output and input arrays are staggered). The output
! variable adifx is defined on the grid volume face when onvf =1;
! otherwise, onvf = 0.
! direction. adify = d( a ) / dy. The output variable is defined at
! the midpoint between the two points whose values are differenced.
! The output variable adify is defined on the grid volume face when
! onvf =1; otherwise, onvf = 0.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 10/10/91
!
! MODIFICATION HISTORY:
!
! 5/05/92 (M. Xue)
! Added full documentation.
!
! 6/01/2 (K. Brewster)
! Further facelift.
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a Input array
!
! onvf Integer grid point indicator
! If the averaged variable aavg is on the grid volume
! face, onvf =1; otherwise, onvf = 0
!
! nx First dimension of arrays a and adify
! ny Second dimension of arrays a and adify
! nz Third dimension of arrays a and adify
!
! ibgn i-index where multiplication begins.
! iend i-index where multiplication ends.
! jbgn j-index where multiplication begins.
! jend j-index where multiplication ends.
! kbgn k-index where multiplication begins.
! kend k-index where multiplication ends.
!
! dy Grid spacing in y direction (m)
!
! OUTPUT:
!
! adify Differenced array del(a)/dely
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
REAL :: a (nx,ny,nz) ! Input array
INTEGER :: onvf ! Integer grid point indicator
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend
! Integer indicator of multiplication
REAL :: dy ! Grid spacing in y direction (m)
REAL :: adify(nx,ny,nz) ! Differenced array del(a)/dely
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k,jright,jleft
REAL :: dyinv
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
IF ( onvf == 1) THEN
jright = 0
jleft = -1
ELSE
jright = 1
jleft = 0
END IF
dyinv = 1.0/dy
DO k=kbgn,kend
DO i=ibgn,iend
DO j=jbgn,jend
adify(i,j,k)=(a(i,j+jright,k)-a(i,j+jleft,k))*dyinv
END DO
END DO
END DO
RETURN
END SUBROUTINE dify
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE DIF2Y ######
!###### ######
!###### Developed by ######
!###### Center for the Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE dif2y(a, nx,ny,nz, &
ibgn,iend,jbgn,jend,kbgn,kend, dy, adify)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Perform a centered finite difference operation on an array a over
! 2 grid distance in the y direction: adify = d( a ) / dy.
!
!-----------------------------------------------------------------------
!
! AUTHOR: David E. Jahn
! 4\19\93
!
! MODIFICATION HISTORY:
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a Input array
!
! nx First dimension of arrays a and adify
! ny Second dimension of arrays a and adify
! nz Third dimension of arrays a and adify
!
! ibgn Index in first dimension to begin operation
! iend Index in first dimension to end operation
! jbgn Index in second dimension to begin operation
! jend Index in second dimension to end operation
! kbgn Index in third dimension to begin operation
! kend Index in third dimension to end operation
!
! dy Grid spacing in y direction (m)
!
! OUTPUT:
!
! adify Differenced array del(a)/dely
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
REAL :: a (nx,ny,nz) ! Input array
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend
! Integer indicator of multiplication
REAL :: dy ! Grid spacing in y direction (m)
REAL :: adify(nx,ny,nz) ! Differenced array del(a)/dely
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k
REAL :: dyinv
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
dyinv = 0.5/dy
DO k=kbgn,kend
DO i=ibgn,iend
DO j=jbgn,jend
adify(i,j,k)=(a(i,j+1,k)-a(i,j-1,k))*dyinv
END DO
END DO
END DO
RETURN
END SUBROUTINE dif2y
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE DIFZ ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE difz(a, onvf, nx,ny,nz, & 1
ibgn,iend,jbgn,jend,kbgn,kend, dz, adifz)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Perform a finite difference operation on an array (a) in the z
! direction: adifz = d( a ) / dz. The output variable is defined at
! the midpoint between the two points whose values are differenced
! (i.e., the output and input arrays are staggered). The output
! variable adifx is defined on the grid volume face when onvf =1;
! otherwise, onvf = 0.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 10/10/91
!
! MODIFICATION HISTORY:
!
! 5/05/92 (M. Xue)
! Added full documentation.
!
! 6/01/2 (K. Brewster)
! Further facelift.
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a Input array
!
! nx First dimension of arrays a and adifz
! ny Second dimension of arrays a and adifz
! nz Third dimension of arrays a and adifz
!
! onvf Integer grid point indicator
! If the averaged variable aavg is on the grid volume
! face, onvf =1; otherwise, onvf = 0
!
! ibgn i-index where multiplication begins.
! iend i-index where multiplication ends.
! jbgn j-index where multiplication begins.
! jend j-index where multiplication ends.
! kbgn k-index where multiplication begins.
! kend k-index where multiplication ends.
!
! dz Grid spacing in z direction (m)
!
! OUTPUT:
!
! adifz Differenced array del(a)/delz
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
REAL :: a (nx,ny,nz) ! Input array
INTEGER :: onvf ! Integer grid point indicator
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend
! Integer indicator of multiplication
REAL :: dz ! Grid spacing in z direction (m)
REAL :: adifz(nx,ny,nz) ! Differenced array del(a)/delz
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k,kup,kdown
REAL :: dzinv
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
IF ( onvf == 1) THEN
kup = 0
kdown = -1
ELSE
kup = 1
kdown = 0
END IF
dzinv = 1.0/dz
DO k=kbgn,kend
DO j=jbgn,jend
DO i=ibgn,iend
adifz(i,j,k)=(a(i ,j,k+kup)-a(i ,j,k+kdown ))*dzinv
END DO
END DO
END DO
RETURN
END SUBROUTINE difz
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE DIF2Z ######
!###### ######
!###### Developed by ######
!###### Center for the Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE dif2z(a, nx,ny,nz, &
ibgn,iend,jbgn,jend,kbgn,kend, dz, adifz)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Perform a centered finite difference operation on an array a over
! 2 grid distance in the z direction: adifz = d( a ) / dz.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 11/6/95
!
! MODIFICATION HISTORY:
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a Input array
!
! nx First dimension of arrays a and adifz
! ny Second dimension of arrays a and adifz
! nz Third dimension of arrays a and adfiz
!
! ibgn Index in first dimension to begin operation
! iend Index in first dimension to end operation
! jbgn Index in second dimension to begin operation
! jend Index in second dimension to end operation
! kbgn Index in third dimension to begin operation
! kend Index in third dimension to end operation
!
! dz Grid spacing in z direction (m)
!
! OUTPUT:
!
! adifz Differenced array del(a)/delz
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
REAL :: a (nx,ny,nz) ! Input array
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend
! Integer indicator of multiplication
REAL :: dz ! Grid spacing in z direction (m)
REAL :: adifz(nx,ny,nz) ! Differenced array del(a)/delz
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k
REAL :: dzinv
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
dzinv = 0.5/dz
DO k=kbgn,kend
DO j=jbgn,jend
DO i=ibgn,iend
adifz(i,j,k)=(a(i,j,k+1)-a(i,j,k-1))*dzinv
END DO
END DO
END DO
RETURN
END SUBROUTINE dif2z
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE DIFXX ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE difxx(a, nx,ny,nz, & 3
ibgn,iend,jbgn,jend,kbgn,kend, dx, adifxx)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Calculate the second order difference of an array (a) in the
! x direction. The operator is defined as del**2(a)/delx**2.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 10/10/91
!
! MODIFICATION HISTORY:
!
! 5/05/92 (M. Xue)
! Added full documentation.
!
! 6/01/2 (K. Brewster)
! Further facelift.
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a Input array
!
! nx First dimension of arrays a and adifxx
! ny Second dimension of arrays a and adifxx
! nz Third dimension of arrays a and adifxx
!
! ibgn i-index where multiplication begins.
! iend i-index where multiplication ends.
! jbgn j-index where multiplication begins.
! jend j-index where multiplication ends.
! kbgn k-index where multiplication begins.
! kend k-index where multiplication ends.
!
! dx Grid spacing in x direction (m)
!
! OUTPUT:
!
! adifxx Differenced array del**2(a)/delx**2
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
REAL :: a (nx,ny,nz) ! Input array
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend
! Integer indicator of multiplication
REAL :: dx ! Grid spacing in x direction (m)
REAL :: adifxx(nx,ny,nz) ! Differenced array
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k
REAL :: dxinv2
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
!
!-----------------------------------------------------------------------
!
! NOTE:
!
! The order of calculation in the following formula should not
! be changed. The order affects the machine trunction error
! in the result.
!
!-----------------------------------------------------------------------
!
dxinv2 = 1.0/(dx*dx)
DO k=kbgn,kend
DO j=jbgn,jend
DO i=ibgn,iend
adifxx(i,j,k)=((a(i+1,j,k)-a(i,j,k))-(a(i,j,k)-a(i-1,j,k))) &
*dxinv2
END DO
END DO
END DO
RETURN
END SUBROUTINE difxx
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE DIFYY ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE difyy(a, nx,ny,nz, & 3
ibgn,iend,jbgn,jend,kbgn,kend, dy, adifyy)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Calculate the second order finite difference of an array (a) in the
! y direction. The operator is defined as del**2(a)/dely**2.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 10/10/91
!
! MODIFICATION HISTORY:
!
! 5/05/92 (M. Xue)
! Added full documentation.
!
! 6/01/2 (K. Brewster)
! Further facelift.
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a input array
!
! nx First dimension of arrays a and adifyy
! ny Second dimension of arrays a and adifyy
! nz Third dimension of arrays a and adifyy
!
! ibgn i-index where multiplication begins.
! iend i-index where multiplication ends.
! jbgn j-index where multiplication begins.
! jend j-index where multiplication ends.
! kbgn k-index where multiplication begins.
! kend k-index where multiplication ends.
!
! dy grid spacing in y direction (m)
!
! OUTPUT:
!
! adifyy difference array del**2(a)/dely**2
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
REAL :: a (nx,ny,nz) ! Input array
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend
! Integer indicator of multiplication
REAL :: dy ! Grid spacing in y direction (m)
REAL :: adifyy(nx,ny,nz) ! Differenced array
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k
REAL :: dyinv2
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
dyinv2 = 1.0/(dy*dy)
DO k=kbgn,kend
DO i=ibgn,iend
DO j=jbgn,jend
!
!-----------------------------------------------------------------------
!
! NOTE:
!
! The order of calculation in the following formula should not
! be changed. The order affects the machine trunction error
! in the result.
!
!-----------------------------------------------------------------------
!
adifyy(i,j,k)=((a(i,j+1,k)-a(i,j,k))-(a(i,j,k)-a(i,j-1,k))) &
*dyinv2
END DO
END DO
END DO
RETURN
END SUBROUTINE difyy
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE DIFZZ ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE difzz(a, nx,ny,nz, &
ibgn,iend,jbgn,jend,kbgn,kend, dz, adifzz)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Calculate the second order finite difference of an array (a) in the
! z direction. The operator is defined as del**2(a)/delz**2.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 10/10/91
!
! MODIFICATION HISTORY:
!
! 5/05/92 (M. Xue)
! Added full documentation.
!
! 6/01/2 (K. Brewster)
! Further facelift.
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! a Input array
!
! nx First dimension of arrays a and adifzz
! ny Second dimension of arrays a and adifzz
! nz Third dimension of arrays a and adifzz
!
! ibgn i-index where multiplication begins.
! iend i-index where multiplication ends.
! jbgn j-index where multiplication begins.
! jend j-index where multiplication ends.
! kbgn k-index where multiplication begins.
! kend k-index where multiplication ends.
!
! dz Grid spacing in the vertical direction (m)
!
! OUTPUT:
!
! adifzz Differenced array del**2(a)/delz**2
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
REAL :: a (nx,ny,nz) ! Input array
INTEGER :: ibgn,iend,jbgn,jend,kbgn,kend
! Integer indicator of multiplication
REAL :: dz ! Grid spacing in the vertical
! direction (m)
REAL :: adifzz(nx,ny,nz) ! Output difference array
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: i,j,k
REAL :: dzinv2
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
!-----------------------------------------------------------------------
!
! NOTE:
!
! The order of calculation in the following formula should not
! be changed. The order affects the machine trunction error
! in the result.
!
!-----------------------------------------------------------------------
!
dzinv2 = 1.0/(dz*dz)
DO k=kbgn,kend
DO j=jbgn,jend
DO i=ibgn,iend
adifzz(i,j,k)=((a(i,j,k+1)-a(i,j,k))-(a(i,j,k)-a(i,j,k-1))) &
*dzinv2
END DO
END DO
END DO
RETURN
END SUBROUTINE difzz
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE AVGSU ######
!###### ######
!###### Developed by ######
!###### Center for the Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE avgsu(s,nx,ny,nz,jbgn,jend,kbgn,kend,su,tem) 12,7
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Average scalar array s to u points, up to the x boundary.
!
!-----------------------------------------------------------------------
!
!
! AUTHOR:
! 2/15/93 (M. Xue and H. Jin)
!
! MODIFICATION HISTORY:
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
! 2000/09/15 (Gene Bassett)
! Added extra temporary array to argument list for MP option.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! s An array defined at the scalar point.
!
! nx First dimension of arrays a and aavg
! ny Second dimension of arrays a and aavg
! nz Third dimension of arrays a and aavg
!
! jbgn Starting point for j computation
! jend Ending point for j computation
! kbgn Starting point for k computation
! kend Ending point for k computation
!
! OUTPUT:
!
! su An array averaged from array 's' defined at the
! scalar point to the u-point.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
INTEGER :: jbgn,jend ! Domain of j computations
INTEGER :: kbgn,kend ! Domain of k computations
REAL :: s (nx,ny,nz) ! Input array
REAL :: su(nx,ny,nz) ! Averaged array
REAL :: tem((nx+ny)*nz) ! Temporary work array for MP option
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: onvf
INTEGER :: mptag, astat
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'bndry.inc'
INCLUDE 'globcst.inc'
INCLUDE 'mp.inc' ! Message passing parameters.
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
onvf = 1
CALL avgx
(s, onvf, &
nx,ny,nz, 2,nx-1, jbgn,jend, kbgn,kend, su)
!call test_dump (su,"XXXoperat_su",nx,ny,nz,1,0)
IF (mp_opt > 0) THEN
CALL acct_interrupt
(mp_acct)
CALL mpsend2dew
(su,nx,ny,nz,ebc,wbc,1,mptag,tem)
CALL mprecv2dew
(su,nx,ny,nz,ebc,wbc,1,mptag,tem)
! CALL mpsend2dns(su,nx,ny,nz,1,mptag,tem)
! CALL mprecv2dns(su,nx,ny,nz,1,mptag,tem)
END IF
CALL acct_interrupt
(bc_acct)
CALL bcsu
(nx,ny,nz,jbgn,jend,kbgn,kend,ebc,wbc,su)
CALL acct_stop_inter
!call test_dump (su,"XXXAoperat_su",nx,ny,nz,1,1)
RETURN
END SUBROUTINE avgsu
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE AVGSV ######
!###### ######
!###### Developed by ######
!###### Center for the Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE avgsv(s,nx,ny,nz,ibgn,iend,kbgn,kend,sv,tem) 12,7
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Average scalar array s to v points, up to the y boundary.
!
!-----------------------------------------------------------------------
!
!
! AUTHOR:
! 2/15/93 (M. Xue and H. Jin)
!
! MODIFICATION HISTORY:
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
! 2000/09/15 (Gene Bassett)
! Added extra temporary array to argument list for MP option.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! s An array defined at the scalar point.
!
! nx First dimension of arrays a and aavg
! ny Second dimension of arrays a and aavg
! nz Third dimension of arrays a and aavg
!
! ibgn Starting point for i computation
! iend Ending point for i computation
! kbgn Starting point for k computation
! kend Ending point for k computation
!
! OUTPUT:
!
! su An array averaged from array 's' defined at the
! scalar point to the v-point.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
INTEGER :: ibgn,iend ! Domain of i computations
INTEGER :: kbgn,kend ! Domain of k computations
REAL :: s (nx,ny,nz) ! Input array
REAL :: sv(nx,ny,nz) ! Averaged array
REAL :: tem((nx+ny)*nz) ! Temporary work array for MP option
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: onvf
INTEGER :: mptag, astat
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'bndry.inc'
INCLUDE 'globcst.inc'
INCLUDE 'mp.inc' ! Message passing parameters.
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
onvf = 1
CALL avgy
(s, onvf, &
nx,ny,nz, ibgn,iend, 2,ny-1, kbgn,kend, sv)
!call test_dump (sv,"XXXoperat_sv",nx,ny,nz,2,0)
IF (mp_opt > 0) THEN
CALL acct_interrupt
(mp_acct)
! CALL mpsend2dew(sv,nx,ny,nz,2,mptag,tem)
! CALL mprecv2dew(sv,nx,ny,nz,2,mptag,tem)
CALL mpsend2dns
(sv,nx,ny,nz,nbc,sbc,2,mptag,tem)
CALL mprecv2dns
(sv,nx,ny,nz,nbc,sbc,2,mptag,tem)
END IF
CALL acct_interrupt
(bc_acct)
CALL bcsv
(nx,ny,nz,ibgn,iend,kbgn,kend,nbc,sbc,sv)
CALL acct_stop_inter
!call test_dump (sv,"XXXAoperat_sv",nx,ny,nz,2,1)
RETURN
END SUBROUTINE avgsv
!
!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE AVGSW ######
!###### ######
!###### Developed by ######
!###### Center for the Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE avgsw(s,nx,ny,nz,ibgn,iend,jbgn,jend,sw) 11,4
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Average scalar array s to w points, up to k=1, and nz.
!
!-----------------------------------------------------------------------
!
!
! AUTHOR:
! 2/15/93 (M. Xue and H. Jin)
!
! MODIFICATION HISTORY:
!
! 9/10/94 (Weygandt & Y. Lu)
! Cleaned up documentation.
!
!-----------------------------------------------------------------------
!
! INPUT:
!
! s An array defined at the scalar point.
!
! nx First dimension of arrays a and aavg
! ny Second dimension of arrays a and aavg
! nz Third dimension of arrays a and aavg
!
! ibgn Starting point for i computation
! iend Ending point for i computation
! jbgn Starting point for j computation
! jend Ending point for j computation
!
! OUTPUT:
!
! sw An array averaged from array 's' defined at the
! scalar point to the w-point.
!
!-----------------------------------------------------------------------
!
! Variable Declarations.
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx, ny, nz ! Number of grid points in 3 directions
INTEGER :: ibgn,iend ! Domain of i computation
INTEGER :: jbgn,jend ! Domain of j computation
REAL :: s (nx,ny,nz) ! Input array
REAL :: sw(nx,ny,nz) ! Averaged array
!
!-----------------------------------------------------------------------
!
! Misc. local variables:
!
!-----------------------------------------------------------------------
!
INTEGER :: onvf
!
!-----------------------------------------------------------------------
!
! Include files:
!
!-----------------------------------------------------------------------
!
INCLUDE 'bndry.inc'
INCLUDE 'globcst.inc'
INCLUDE 'mp.inc' ! Message passing parameters.
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
onvf = 1
CALL avgz
(s, onvf, &
nx,ny,nz, ibgn,iend, jbgn,jend, 2,nz-1, sw)
CALL acct_interrupt
(bc_acct)
CALL bcsw
(nx,ny,nz,ibgn,iend,jbgn,jend,tbc,bbc,sw)
CALL acct_stop_inter
RETURN
END SUBROUTINE avgsw