c
c
c     ##################################################################
c     ##################################################################
c     ######                                                      ######
c     ######                SUBROUTINE DIVGS                      ######
c     ######                                                      ######
c     ######                Copyright (c) 1992                    ######
c     ######  Center for the Analysis and Prediction of Storms    ######
c     ######    University of Oklahoma.  All rights reserved.     ######
c     ######                                                      ######
c     ##################################################################
c     ##################################################################
c
      SUBROUTINE DIVGS(nx,ny,nz, f1,f2,f3, div, tem1, tem2)
c
c#######################################################################
c 
c     PURPOSE:
c
c     Calculate the divergence of a vector (f1,f2,f3)
c        div = d(f1)/dx + d(f2)/dy + d(f3)/dz
c     defined at scalar points.
c     This is a general operator.
c
c#######################################################################
c
c     AUTHOR: Ming Xue
c     10/10/91. 
c
c     MODIFICATION HISTORY:
c
c     5/05/92 (M. Xue)
c     Added full documentation.
c
c#######################################################################
c
c     INPUT :
c
c       nx       Number of grid points in the x-direction (east/west)
c       ny       Number of grid points in the y-direction (north/south)
c       nz       Number of grid points in the vertical
c
c       f1       The first component of a vector.
c       f2       The second component of a vector.
c       f3       The third component of a vector.
c
c     OUTPUT:
c
c       div      The divergence of vector field (f1,f2,f3)
c
c     WORK ARRAYS:
c
c       tem1     Temporary work array.
c       tem2     Temporary work array.
c
c      (These arrays are defined and used locally (i.e. inside this
c       subroutine), they may also be passed into routines called by
c       this one. Exiting the call to this subroutine, these temporary
c       work arrays may be used for other purposes, and therefore their
c       contents may be overwritten. Please examine the usage of work
c       arrays before you alter the code.)
c
c#######################################################################
c

c
c#######################################################################
c
c     Variable Declarations
c
c#######################################################################
c
      implicit none
c
      integer nx,ny,nz          ! Number of grid points in 3 directions

      real f1    (nx,ny,nz)     ! First  component of the vector. 
      real f2    (nx,ny,nz)     ! Second component of the vector. 
      real f3    (nx,ny,nz)     ! Third  component of the vector.
c
      real div   (nx,ny,nz)     ! Divergence of vector (f1,f2,f3)
c
      real tem1  (nx,ny,nz)     ! Temporary work array.
      real tem2  (nx,ny,nz)     ! Temporary work array.

c
c#######################################################################
c
c     Misc. local variables:
c
c#######################################################################
c
      integer i,j,k
      integer onvf
c
c#######################################################################
c
c     Include files:
c
c#######################################################################
c
      include 'globcst.inc'     ! Global constants that control model
c
c#######################################################################
c
c     Routines called:
c
c#######################################################################
c
      external difx  
      external dify  
      external difz  
c
c
C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
C
C     Beginning of executable code...
C
C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
c

c
c
c#######################################################################
c
c     d(f1)/dz which is stored in div.
c
c#######################################################################
c
      onvf = 0
      CALL difx(f1, onvf,
     :      nx,ny,nz, 2,nx-2, 2,ny-2, 2,nz-2, dx, div)
c
c#######################################################################
c
c     d(f2)/dz which is stored in tem1.
c
c#######################################################################
c
      onvf = 0
      CALL dify(f2, onvf,
     :      nx,ny,nz, 2,nx-2, 2,ny-2, 2,nz-2, dy, tem1)
c
c#######################################################################
c
c     d(f3)/dz which is stored in tem2.
c
c#######################################################################
c
      onvf = 0
      CALL difz(f3, onvf,
     :      nx,ny,nz, 2,nx-2, 2,ny-2, 2,nz-2, dz, tem2)

c
c#######################################################################
c
c     div = d(f1)/dx + d(f2)/dy + d(f3)/dz = div + tem1 + tem2.
c
c#######################################################################
c
      DO 300 k=2,nz-2
      DO 300 j=2,ny-2
      DO 300 i=2,nx-2
        div(i,j,k)=div(i,j,k)+tem1(i,j,k)+tem2(i,j,k)
300   CONTINUE

      RETURN
      END

c
c
c     ##################################################################
c     ##################################################################
c     ######                                                      ######
c     ######                SUBROUTINE DIVGU                      ######
c     ######                                                      ######
c     ######                Copyright (c) 1992                    ######
c     ######  Center for the Analysis and Prediction of Storms    ######
c     ######    University of Oklahoma.  All rights reserved.     ######
c     ######                                                      ######
c     ##################################################################
c     ##################################################################
c
 
      SUBROUTINE DIVGU(nx,ny,nz, f1,f2,f3,div, tem1, tem2)
c
c###############################################################
c 
c     PURPOSE:
c
c     Calculate the divergence of a vector (f1,f2,f3)
c        div = d(f1)/dx + d(f2)/dy + d(f3)/dz
c     defined at u-velocity points.
c     This is a general operator.
c
c#######################################################################
c
c     AUTHOR: Ming Xue
c     10/10/91. 
c
c     MODIFICATION HISTORY:
c
c     5/05/92 (M. Xue)
c     Added full documentation.
c
c#######################################################################
c
c     INPUT :
c
c       nx       Number of grid points in the x-direction (east/west)
c       ny       Number of grid points in the y-direction (north/south)
c       nz       Number of grid points in the vertical
c
c       f1       The first component of a vector.
c       f2       The second component of a vector.
c       f3       The third component of a vector.
c
c     OUTPUT:
c
c       div      The divergence of vector field (f1,f2,f3)
c
c     WORK ARRAYS:
c
c       tem1     Temporary work array.
c       tem2     Temporary work array.
c
c      (These arrays are defined and used locally (i.e. inside this
c       subroutine), they may also be passed into routines called by
c       this one. Exiting the call to this subroutine, these temporary
c       work arrays may be used for other purposes, and therefore their
c       contents may be overwritten. Please examine the usage of work
c       arrays before you alter the code.)
c
c#######################################################################
c

c
c#######################################################################
c
c     Variable Declarations
c
c#######################################################################
c
      implicit none
c
      integer nx,ny,nz          ! Number of grid points in 3 directions

      real f1    (nx,ny,nz)     ! First  component of the vector. 
      real f2    (nx,ny,nz)     ! Second component of the vector. 
      real f3    (nx,ny,nz)     ! Third  component of the vector.
c
      real div(nx,ny,nz)        ! Divergence of vector (f1,f2,f3)
c
      real tem1  (nx,ny,nz)     ! Temporary work array.
      real tem2  (nx,ny,nz)     ! Temporary work array.

c
c#######################################################################
c
c     Misc. local variables:
c
c#######################################################################
c
      integer i,j,k
      integer onvf
c
c#######################################################################
c
c     Include files:
c
c#######################################################################
c
      include 'globcst.inc'     ! Global constants that control model
c
c#######################################################################
c
c     Routines called:
c
c#######################################################################
c
      external difx  
      external dify  
      external difz  
c
c
C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
C
C     Beginning of executable code...
C
C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
c
c

c
c#######################################################################
c
c     d(f1)/dx which is stored in div.
c
c#######################################################################
c
      onvf = 1
      CALL difx(f1, onvf,
     :      nx,ny,nz, 2,nx-1, 2,ny-2, 2,nz-2, dx, div)
c
c#######################################################################
c
c     d(f2)/dy which is stored in tem1.
c
c#######################################################################
c
      onvf = 0
      CALL dify(f2, onvf,
     :      nx,ny,nz, 2,nx-1,2,ny-2, 2,nz-2, dy, tem1) 
c
c#######################################################################
c
c     d(f3)/dz which is stored in tem2.
c
c#######################################################################
c
      onvf = 0
      CALL difz(f3, onvf,
     :      nx,ny,nz, 2,nx-1,2,ny-2, 2,nz-2, dz, tem2) 
c
c#######################################################################
c
c     div = d(f1)/dx + d(f2)/dy + d(f3)/dz = div + tem1 + tem2.
c
c#######################################################################
c
      DO 300 k=2,nz-2
      DO 300 j=2,ny-2
      DO 300 i=2,nx-1
        div(i,j,k)=div(i,j,k)+tem1(i,j,k)+tem2(i,j,k)
300   CONTINUE

      RETURN
      END
c
c
c     ##################################################################
c     ##################################################################
c     ######                                                      ######
c     ######                SUBROUTINE DIVGV                      ######
c     ######                                                      ######
c     ######                Copyright (c) 1992                    ######
c     ######  Center for the Analysis and Prediction of Storms    ######
c     ######    University of Oklahoma.  All rights reserved.     ######
c     ######                                                      ######
c     ##################################################################
c     ##################################################################
c
 
      SUBROUTINE DIVGV(nx,ny,nz, f1,f2,f3,div, tem1, tem2)
c
c#######################################################################
c 
c     PURPOSE:
c
c     Calculate the divergence of a vector (f1,f2,f3)
c        div = d(f1)/dx + d(f2)/dy + d(f3)/dz
c     defined at v-velocity points.
c     This is a general operator.
c
c#######################################################################
c
c     AUTHOR: Ming Xue
c     10/10/91. 
c
c     MODIFICATION HISTORY:
c
c     5/05/92 (M. Xue)
c     Added full documentation.
c
c###############################################################
c 
c     INPUT :
c
c       nx       Number of grid points in the x-direction (east/west)
c       ny       Number of grid points in the y-direction (north/south)
c       nz       Number of grid points in the vertical
c
c       f1       The first component of a vector.
c       f2       The second component of a vector.
c       f3       The third component of a vector.
c
c     OUTPUT:
c
c       div      The divergence of vector field (f1,f2,f3)
c
c     WORK ARRAYS:
c
c       tem1     Temporary work array.
c       tem2     Temporary work array.
c
c      (These arrays are defined and used locally (i.e. inside this
c       subroutine), they may also be passed into routines called by
c       this one. Exiting the call to this subroutine, these temporary
c       work arrays may be used for other purposes, and therefore their
c       contents may be overwritten. Please examine the usage of work
c       arrays before you alter the code.)
c
c#######################################################################
c

c
c#######################################################################
c
c     Variable Declarations
c
c#######################################################################
c
      implicit none
c
      integer nx,ny,nz          ! Number of grid points in 3 directions

      real f1    (nx,ny,nz)     ! First  component of the vector. 
      real f2    (nx,ny,nz)     ! Second component of the vector. 
      real f3    (nx,ny,nz)     ! Third  component of the vector.
c
      real div   (nx,ny,nz)     ! Divergence of vector (f1,f2,f3)
c
      real tem1  (nx,ny,nz)     ! Temporary work array.
      real tem2  (nx,ny,nz)     ! Temporary work array.

c
c#######################################################################
c
c     Misc. local variables:
c
c#######################################################################
c
      integer i,j,k
      integer onvf
c
c#######################################################################
c
c     Include files:
c
c#######################################################################
c
      include 'globcst.inc'     ! Global constants that control model
c
c#######################################################################
c
c     Routines called:
c
c#######################################################################
c
      external difx  
      external dify  
      external difz  
c
c
C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
C
C     Beginning of executable code...
C
C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
c

c
c#######################################################################
c
c     d(f1)/dz which is stored in div.
c
c#######################################################################
c
      onvf = 0
      CALL difx(f1, onvf,
     :      nx,ny,nz, 2,nx-2, 2,ny-1, 2,nz-2, dx, div) 
c
c#######################################################################
c
c     d(f2)/dy which is stored in tem1.
c
c#######################################################################
c
      onvf = 1
      CALL dify(f2, onvf,
     :      nx,ny,nz, 2,nx-2, 2,ny-1, 2,nz-2, dy, tem1)
c
c#######################################################################
c
c     d(f3)/dz which is stored in tem2.
c
c#######################################################################
c
      onvf = 0
      CALL difz(f3, onvf,
     :      nx,ny,nz, 2,nx-2,2,ny-1, 2,nz-2, dz, tem2) 

c
c#######################################################################
c
c     div = d(f1)/dx + d(f2)/dy + d(f3)/dz = div + tem1 + tem2.
c
c#######################################################################
c
      DO 300 k=2,nz-2
      DO 300 j=2,ny-1
      DO 300 i=2,nx-2
        div(i,j,k)=div(i,j,k)+tem1(i,j,k)+tem2(i,j,k)
300   CONTINUE

      RETURN
      END
c
c
c     ##################################################################
c     ##################################################################
c     ######                                                      ######
c     ######                SUBROUTINE DIVGW                      ######
c     ######                                                      ######
c     ######                Copyright (c) 1992                    ######
c     ######  Center for the Analysis and Prediction of Storms    ######
c     ######    University of Oklahoma.  All rights reserved.     ######
c     ######                                                      ######
c     ##################################################################
c     ##################################################################
c
 
      SUBROUTINE DIVGW(nx,ny,nz, f1,f2,f3,div, tem1, tem2)
c
c#######################################################################
c 
c     PURPOSE:
c
c     Calculate the divergence of a vector (f1,f2,f3)
c        div = d(f1)/dx + d(f2)/dy + d(f3)/dz
c     defined at w-velocity points.
c     This is a general operator.
c
c#######################################################################
c
c     AUTHOR: Ming Xue
c     10/10/91. 
c
c     MODIFICATION HISTORY:
c
c     5/05/92 (M. Xue)
c     Added full documentation.
c
c#######################################################################
c
c     INPUT :
c
c       nx       Number of grid points in the x-direction (east/west)
c       ny       Number of grid points in the y-direction (north/south)
c       nz       Number of grid points in the vertical
c
c       f1       The first component of a vector.
c       f2       The second component of a vector.
c       f3       The third component of a vector.
c
c     OUTPUT:
c
c       div      The divergence of vector field (f1,f2,f3)
c
c     WORK ARRAYS:
c
c       tem1     Temporary work array.
c       tem2     Temporary work array.
c
c      (These arrays are defined and used locally (i.e. inside this
c       subroutine), they may also be passed into routines called by
c       this one. Exiting the call to this subroutine, these temporary
c       work arrays may be used for other purposes, and therefore their
c       contents may be overwritten. Please examine the usage of work
c       arrays before you alter the code.)
c
c#######################################################################
c

c
c#######################################################################
c
c     Variable Declarations
c
c#######################################################################
c
      implicit none
c
      integer nx,ny,nz          ! Number of grid points in 3 directions

      real f1    (nx,ny,nz)     ! First  component of the vector. 
      real f2    (nx,ny,nz)     ! Second component of the vector. 
      real f3    (nx,ny,nz)     ! Third  component of the vector.
c
      real div   (nx,ny,nz)     ! Divergence of vector (f1,f2,f3)
c
      real tem1  (nx,ny,nz)     ! Temporary work array.
      real tem2  (nx,ny,nz)     ! Temporary work array.

c
c#######################################################################
c
c     Misc. local variables:
c
c#######################################################################
c
      integer i,j,k
      integer onvf
c
c#######################################################################
c
c     Include files:
c
c#######################################################################
c
      include 'globcst.inc'     ! Global constants that control model
c
c#######################################################################
c
c     Routines called:
c
c#######################################################################
c
      external difx  
      external dify  
      external difz  
c
c
C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
C
C     Beginning of executable code...
C
C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
c

c
c#######################################################################
c
c     d(f1)/dz which is stored in div.
c
c#######################################################################
c
      onvf = 0
      CALL difx(f1, onvf,
     :      nx,ny,nz, 2,nx-2,2,ny-2, 2,nz-1, dx, div) 
c
c#######################################################################
c
c     d(f2)/dy which is stored in tem1.
c
c#######################################################################
c
      onvf = 0
      CALL dify(f2, onvf,
     :      nx,ny,nz, 2,nx-2,2,ny-2, 2,nz-1, dy, tem1) 

c
c#######################################################################
c
c     d(f3)/dz which is stored in tem2.
c
c#######################################################################
c
      onvf = 1
      CALL difz(f3, onvf,
     :      nx,ny,nz, 2,nx-2, 2,ny-2, 2,nz-1, dz, tem2)

c
c#######################################################################
c
c     div = d(f1)/dx + d(f2)/dy + d(f3)/dz = div + tem1 + tem2.
c
c#######################################################################
c
      DO 300 k=2,nz-1
      DO 300 j=2,ny-2
      DO 300 i=2,nx-2
        div(i,j,k)=div(i,j,k)+tem1(i,j,k)+tem2(i,j,k)
300   CONTINUE

      RETURN
      END
