!
!##################################################################
!##################################################################
!###### ######
!###### SUBROUTINE WIRFRM ######
!###### ######
!###### Developed by ######
!###### Center for Analysis and Prediction of Storms ######
!###### University of Oklahoma ######
!###### ######
!##################################################################
!##################################################################
!
SUBROUTINE wirfrm(a,nx,ist,iend,ny,jst,jend,nz,kst,kend, & 3,1
valiso, slab)
!
!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Use NCARgraphyic routinue "isosrf" to generate 3-D wirefrm-plot.
!
!-----------------------------------------------------------------------
!
! AUTHOR: Ming Xue
! 3/21/1992
!
! MODIFICATION HISTORY:
!
! 9/1/94 (Y. Lu)
! Cleaned up documentation
!
! 01/13/2003 (Y. Wang)
! Added message passing code.
!
!-----------------------------------------------------------------------
!
! Argument list:
!
! a 3-D array of data that defines the iso-valued surface.
! nx first dimension of a
! ist index of first i grid point to be used. Global index!!
! iend index of last i grid point to be used. Global index!!
!
! ny second dimension of a
! jst index of first j grid point to be used. Global index!!
! jend index of last j grid point to be used. Global index!!
!
! nz third dimension of a
! kst index of first k grid point to be used.
! kend index of last k grid point to be used.
!
! valiso the iso-value used to define the surface.
! slab a working space for internal storage. It is larger that
! (max(nx,ny,nz)+2)*2
!
!-----------------------------------------------------------------------
!
IMPLICIT NONE
INTEGER :: nx,ny,nz ! Number of grid points in 3 directions
INTEGER :: ist,iend,jst,jend,kst,kend
! indexes of grid points in 3 directions
INTEGER :: iflag,muvw
REAL :: a(nx,ny,nz) ! 3-D array of data that defines
! the iso-valued surface
REAL :: valiso ! the iso-value used to define the surface
!
!-----------------------------------------------------------------------
!
! Working arrays used for the wrieframe plotting.
!
!-----------------------------------------------------------------------
!
REAL :: eye(3)
REAL :: slab( nx+1, nx+1)
INCLUDE 'mp.inc'
INTEGER :: nxlg, nylg
REAL, ALLOCATABLE :: tema(:,:,:), temlab(:,:,:)
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
nxlg = (nx-3)*nproc_x + 3
nylg = (ny-3)*nproc_y + 3
muvw=MAX(nxlg,nylg,nz)+2
!-----------------------------------------------------------------------
!
! EYE: The position of the eye in 3-D space. A tentative choice
! can be (5.0*nx, 3.5*ny, 2.0*nz)
!
!-----------------------------------------------------------------------
eye(1)= 1.0*nxlg
eye(2)=-1.0*nylg
eye(3)= 1.5*nz
!
!-----------------------------------------------------------------------
!
! IFLAG: Define the types of lines to be drawn.
! =1, lines of constant z only
! =2, lines of constant y only
! =3, lines of constant z and y.
! =4, lines of constant x only
! =5, lines of constant x and z.
! =6, lines of constant x and y.
! =7, or more, lines of constant x, y and z.
! The sign of IFLAG determines what is inside and what is outside
! the isosurface.
! IFLAG >0, values greater than valiso are assumed inside the
! surface.
! IFLAG <0, values less than valiso are assumed inside the surface.
!
!-----------------------------------------------------------------------
!
iflag=4
IF( valiso < 0.0) iflag = -iflag
ALLOCATE(tema(nxlg,nylg,nz))
ALLOCATE(temlab(nxlg,nylg,nz))
CALL mpimerge3d
(a,nx,ny,nz,tema)
IF(myproc == 0) THEN
CALL xnwfrm
CALL xnwpic
CALL gselnt(0)
CALL isosrf(tema(ist,jst,kst),nxlg,iend-ist+1, &
nylg,jend-jst+1, kend-kst+1, &
eye,muvw,temlab,valiso,iflag)
CALL xnwfrm
END IF ! myproc == 0
DEALLOCATE(tema, temlab)
RETURN
END SUBROUTINE wirfrm