SUBROUTINE pltall(ndim),16 !********************************************************************* ! plot ndim-variables in x-y planes for all grids !********************************************************************* INCLUDE 'nodal.inc' INCLUDE 'agrigrid.inc' INCLUDE 'grddsc.inc' !********************************************************************* ! plot x-y planes of ndim-D variables on grid mptr !********************************************************************* CALL xcltyp(0) CALL xcfull CALL xhilit(0) mptr=1 !********************************************************************* ! goto 44 ! plot vector component ivar=2 u !********************************************************************* ivar = 2 nzz = node(14,mptr)-idmxyz(3,ivar) CALL pltvxy(ndim,2,5,11, 1, 2) CALL xframe CALL pltvxy(ndim,2,5,11, 1, nzz/2) CALL xframe !********************************************************************* ! plot vector component ivar=5 v !********************************************************************* ivar = 5 nzz = node(14,mptr)-idmxyz(3,ivar) CALL pltvxy(ndim,2,5,11, 2, 2) CALL xframe CALL pltvxy(ndim,2,5,11, 2, nzz/2) CALL xframe !********************************************************************* ! plot scalar w !********************************************************************* ivar=8 nzz = node(14,mptr)-idmxyz(3,ivar) CALL pltsxy(ndim,ivar,2) CALL xframe CALL pltsxy(ndim,ivar,nzz/2) CALL xframe !********************************************************************* ! plot scalar ptprt !********************************************************************* ivar=11 nzz = node(14,mptr)-idmxyz(3,ivar) CALL pltsxy(ndim,ivar,2) CALL xframe CALL pltsxy(ndim,ivar,nzz/2) CALL xframe !********************************************************************* ! plot scalar pprt !********************************************************************* ivar=14 nzz = node(14,mptr)-idmxyz(3,ivar) CALL pltsxy(ndim,ivar,2) CALL xframe CALL pltsxy(ndim,ivar,nzz/2) CALL xframe !********************************************************************* ! plot scalar qvprt !********************************************************************* ivar=17 nzz = node(14,mptr)-idmxyz(3,ivar) CALL pltsxy(ndim,ivar,2) CALL xframe CALL pltsxy(ndim,ivar,nzz/2) CALL xframe !********************************************************************* ! plot scalar qcprt !********************************************************************* ivar=20 nzz = node(14,mptr)-idmxyz(3,ivar) CALL pltsxy(ndim,ivar,2) CALL xframe CALL pltsxy(ndim,ivar,nzz/2) CALL xframe !********************************************************************* ! plot scalar qrprt !********************************************************************* ivar=23 nzz = node(14,mptr)-idmxyz(3,ivar) CALL pltsxy(ndim,ivar,2) CALL xframe CALL pltsxy(ndim,ivar,nzz/2) CALL xframe !********************************************************************* RETURN END SUBROUTINE pltall !********************************************************************* !********************************************************************* !********************************************************************* SUBROUTINE gtrcrd(mptr,ndim,ivar,x,y,nx1,ny1) 1,1 !********************************************************************* ! To return the coordinate arrays x and y of variable ivar on grid mptr ! relative to its own grid origin ! nx1, ny1 give the dimension of the portion of array actually used. !********************************************************************* INCLUDE 'nodal.inc' INCLUDE 'agrigrid.inc' INCLUDE 'grddsc.inc' REAL :: x(1), y(1) CALL chkdim(ndim,'GTRCRD') nx=node(5,mptr) ny=node(6,mptr) cosr=rnode(21,mptr) sinr=rnode(22,mptr) dx =rnode(9 ,mptr) dy =rnode(10,mptr) xor=rnode(1,mptr) yor=rnode(2,mptr) IF(ndim == 2) THEN IF(ivar > nxy2d)THEN WRITE(6,5) ivar,nxy2d WRITE(6,'(1x,a)') 'Job stopped in GTRCRD!' STOP END IF xshift=stgxy(1,ivar) yshift=stgxy(2,ivar) nx1=nx-idmxy(1,ivar) ny1=ny-idmxy(2,ivar) ELSE xshift=stgxyz(1,ivar) yshift=stgxyz(2,ivar) nx1=nx-idmxyz(1,ivar) ny1=ny-idmxyz(2,ivar) IF(ivar > nxyz3d)THEN WRITE(6,10) ivar,nxyz3d WRITE(6,'(1x,a)') 'Job stopped in GTRCRD!' STOP END IF END IF DO j=1,ny DO i=1,nx ij=i+(j-1)*nx x(ij)= (i-1+xshift)*dx y(ij)= (j-1+yshift)*dy END DO END DO 5 FORMAT & ('Error in GTACRD: variable number for 2-d x-y array ivar=' & ,i3,' > nxy2d=',i3) 10 FORMAT('Error in GTACRD: variable number for 3-d array ivar=',i3, & ' > nxyz3d=',i3) RETURN END SUBROUTINE gtrcrd !********************************************************************* !********************************************************************* !********************************************************************* SUBROUTINE gtacrd(mptr,ndim,ivar,x,y,nx1,ny1) 2,1 !********************************************************************* ! To return the absolute coordinate arrays x and y of variable ivar ! on grid mptr relative to the absolute origin. ! nx1, ny1 give the dimension of the portion of array actually used. !********************************************************************* INCLUDE 'nodal.inc' INCLUDE 'grddsc.inc' REAL :: x(1),y(1) CALL chkdim(ndim,'GTRCRD') nx=node(5,mptr) ny=node(6,mptr) cosr=rnode(21,mptr) sinr=rnode(22,mptr) dx =rnode(9 ,mptr) dy =rnode(10,mptr) xor=rnode(1,mptr) yor=rnode(2,mptr) IF(ndim == 2) THEN IF(ivar > nxy2d)THEN WRITE(6,5) ivar,nxy2d WRITE(6,'(1x,a)') 'Job stopped in GTACRD!' STOP END IF xshift=stgxy(1,ivar) yshift=stgxy(2,ivar) nx1=nx-idmxy(1,ivar) ny1=ny-idmxy(2,ivar) ELSE IF(ivar > nxyz3d)THEN WRITE(6,10) ivar,nxyz3d WRITE(6,'(1x,a)') 'Job stopped in GTACRD!' STOP END IF xshift=stgxyz(1,ivar) yshift=stgxyz(2,ivar) nx1=nx-idmxyz(1,ivar) ny1=ny-idmxyz(2,ivar) END IF DO j=1,ny DO i=1,nx xx = (i-1+xshift)*dx yy = (j-1+yshift)*dy ij=i+(j-1)*nx x(ij) = xor+xx*cosr-yy*sinr y(ij) = yor+xx*sinr+yy*cosr END DO END DO 5 FORMAT & ('Error in GTACRD: variable number for 2-d x-y array ivar=', & i3,' > nxy2d=',i3) 10 FORMAT('Error in GTACRD: variable number for 3-d array ivar=', & i3,' > nxyz3d=',i3) RETURN END SUBROUTINE gtacrd !********************************************************************* !********************************************************************* !********************************************************************* SUBROUTINE gtxypl( a,tmp,m,n,l,k ) 2 !********************************************************************* ! copy a x-y plane from a 3-d field !********************************************************************* DIMENSION a(m,n,l),tmp(m,n) DO j=1,n DO i=1,m tmp(i,j) = a(i,j,k) END DO END DO RETURN END SUBROUTINE gtxypl !********************************************************************* !********************************************************************* !********************************************************************* INTEGER FUNCTION nxtgrd(mptr0) !********************************************************************* ! return a grid pointer that is next to mptr0 on the same level or the ! first one on the level that is one-level finer than the level of mptr0 !********************************************************************* INCLUDE 'nodal.inc' mptr=mptr0 IF(mptr == 0) RETURN level=node(4,mptr) 5 mptr=node(10,mptr) IF(mptr /= 0) GO TO 20 level = level+1 IF(level > lfine)THEN nxtgrd=0 GO TO 999 END IF nxtgrd=lstart(level) GO TO 999 20 nxtgrd=mptr 999 RETURN END FUNCTION nxtgrd !********************************************************************* !********************************************************************* !********************************************************************* INTEGER FUNCTION lstgrd(mptr0) !********************************************************************* ! return a grid pointer that is next to mptr0 on the same level or the ! first one on the level that is one-level coarser than the level of mptr0 !********************************************************************* INCLUDE 'nodal.inc' mptr=mptr0 IF(mptr == 0) RETURN level=node(4,mptr) 5 mptr=node(10,mptr) IF(mptr /= 0) GO TO 20 level = level-1 IF(level <= 0)THEN lstgrd=0 GO TO 999 END IF lstgrd=lstart(level) GO TO 999 20 lstgrd=mptr 999 RETURN END FUNCTION lstgrd !********************************************************************* !********************************************************************* !********************************************************************* SUBROUTINE pltsxy(ndim,ivar, kk) 12,5 !********************************************************************* ! plot x-y slices of ndim-D scalar ivar at k=kk. !********************************************************************* INCLUDE 'nodal.inc' INCLUDE 'agrialloc.inc' CHARACTER (LEN=132) :: title pi=4.0*ATAN(1.0) CALL xqmap (x1,x2,y1,y2) CALL xqlmsk(nmask) !********************************************************************* ! plot a over all frame and axes. !********************************************************************* mptr=mstart nx=node(5,mptr) ny=node(6,mptr) nz=node(14,mptr) pi=4.0*ATAN(1.0) xor=rnode(1, mptr) yor=rnode(2, mptr) dx=rnode(9 , mptr) dy=rnode(10, mptr) xl=(nx-1)*dx yl=(ny-1)*dy IF(yl > xl) THEN xm = (1.0-0.8*xl/yl)/2 CALL xpspac( xm, 1.0-xm, 0.1, 0.9) ELSE ym = (1.0-0.8*yl/xl)/2 CALL xpspac(0.1,0.9, ym, 1.0-ym) END IF CALL xmap (0.0, xl, 0.0, yl) CALL xqpspc(p1,p2,p3,p4) CALL xqmap(xa,xb,ya,yb) CALL xaxsca(0.0, xl, dx, 0.0, yl, dy) WRITE(title,'(i1,''-D VAR NO.'',I2,'' K='',I3)')ndim,ivar,kk CALL xchsiz(0.025*yl) CALL xcharc(0.5*xl, 1.05*yl, title(1:21)) PRINT* PRINT*,'Plotting ',title(1:21), ' for grid ', mptr !********************************************************************* ! loop over all grids !********************************************************************* mptr = lstart(lfine) 100 CONTINUE nx=node(5,mptr) ny=node(6,mptr) nz=node(14,mptr) CALL xqlmsk(level) CALL xunmsk(1) IF(mptr /= mstart) THEN CALL xpenup(rnode(7,mptr),rnode(8,mptr)) DO i=1,7,2 CALL xpendn(rnode(i,mptr),rnode(i+1,mptr)) END DO END IF CALL xrsmsk(level) IF(ndim == 3) in1 = igtxyz(mptr,ivar,1 ) IF(ndim == 2) in1 = igtnxy(mptr,ivar,1 ) n3rd=nz IF(ndim == 2) n3rd=1 ! needsp = nx*ny ntem1=igetsp(needsp) ntem2=igetsp(needsp) ntem3=igetsp(needsp) CALL gtxypl( CALL gtacrd(mptr,ndim,ivar,a(ntem2),a(ntem3),nxa,nya) IF(mptr == lstart(lfine) ) THEN zinc=1.0 mode=1 ELSE mode=2 ! now use the zinc of first grid lstart(lfine). END IF IF(mptr == mstart)THEN CALL xconts2( zinc,mode) ELSE CALL xconts2( zinc,mode) xor=rnode(1, mptr) yor=rnode(2, mptr) dx =rnode(9 , mptr) dy =rnode(10, mptr) xl=(nx-1)*dx yl=(ny-1)*dy cosr=rnode(21,mptr) sinr=rnode(22,mptr) ang = ASIN (sinr )*180/pi xo = xor+0.5*(dx*cosr-dy*sinr) yo = yor+0.5*(dx*sinr+dy*cosr) CALL xrmask(xo,yo,xl-dx,yl-dx,ang) END IF CALL resett mptr= lstgrd(mptr) IF(mptr /= 0)GO TO 100 CALL xmap(x1,x2,y1,y2) CALL xrsmsk(nmask) RETURN END SUBROUTINE pltsxy !********************************************************************* !********************************************************************* !********************************************************************* SUBROUTINE pltvxy(ndim,ivar1,ivar2,iscalr, kk, iplot) 4,5 !********************************************************************* ! plot contour map of one of two components (ivar1, ivar2) of ! a ndim-D vector projected to absolute coordinate system, i.e. ! that of the base grid. The coordinates for scalar variable iscalr ! are used. ! ! iplot =1, ivar1 isplotted, else ivar2 is plotted. !********************************************************************* INCLUDE 'nodal.inc' INCLUDE 'agrialloc.inc' CHARACTER (LEN=132) :: title pi=4.0*ATAN(1.0) CALL xqmap (x1,x2,y1,y2) CALL xqlmsk(nmask) IF(iplot == 1) THEN ivar=ivar1 ELSE ivar=ivar2 END IF mptr=mstart nx=node(5,mptr) ny=node(6,mptr) nz=node(14,mptr) pi=4.0*ATAN(1.0) xor=rnode(1, mptr) yor=rnode(2, mptr) dx=rnode(9 , mptr) dy=rnode(10, mptr) xl=(nx-1)*dx yl=(ny-1)*dy IF(yl > xl) THEN xm = (1.0-0.8*xl/yl)/2 CALL xpspac( xm, 1.0-xm, 0.1, 0.9) ELSE ym = (1.0-0.8*yl/xl)/2 CALL xpspac(0.1,0.9, ym, 1.0-ym) END IF CALL xmap (0.0, xl, 0.0, yl) CALL xqpspc(p1,p2,p3,p4) CALL xqmap(xa,xb,ya,yb) CALL xaxsca(0.0, xl, dx, 0.0, yl, dy) WRITE(title,'(i1,''-D VAR NO.'',I2,'' K='',I3)')ndim,ivar,kk CALL xchsiz(0.025*yl) CALL xcharc(0.5*xl, 1.05*yl, title(1:21)) PRINT* PRINT*,'Plotting ',title(1:21), ' for grid ', mptr mptr = lstart(lfine) 100 CONTINUE nx=node(5,mptr) ny=node(6,mptr) nz=node(14,mptr) CALL xqlmsk(level) CALL xunmsk(1) IF(mptr /= mstart) THEN CALL xpenup(rnode(7,mptr),rnode(8,mptr)) DO i=1,7,2 CALL xpendn(rnode(i,mptr),rnode(i+1,mptr)) END DO END IF CALL xrsmsk(level) IF(ndim == 3) in1 = igtxyz(mptr,ivar1,1 ) IF(ndim == 2) in1 = igtnxy(mptr,ivar1,1 ) IF(ndim == 3) in2 = igtxyz(mptr,ivar2,1 ) IF(ndim == 2) in2 = igtnxy(mptr,ivar2,1 ) n3rd=nz IF(ndim == 2) n3rd=1 ! needsp = nx*ny ix=igetsp(needsp) iy=igetsp(needsp) iu=igetsp(needsp) iv=igetsp(needsp) CALL tranuv(mptr,a(in1),a(in2),a(iu),a(iv),nx,ny,n3rd,MAX(1,kk)) CALL gtacrd(mptr,ndim,iscalr,a(ix),a(iy),nxa,nya) IF(mptr == lstart(lfine) ) THEN zinc=1.0 mode=1 ELSE mode=2 ! now use the zinc of first grid lstart(lfine). END IF IF(iplot == 1) THEN iptr=iu ELSE iptr=iv END IF IF(mptr == mstart)THEN CALL xconts2( zinc,mode) ELSE CALL xconts2( zinc,mode) xor=rnode(1, mptr) yor=rnode(2, mptr) dx =rnode(9 , mptr) dy =rnode(10, mptr) xl=(nx-1)*dx yl=(ny-1)*dy cosr=rnode(21,mptr) sinr=rnode(22,mptr) ang = ASIN (sinr )*180/pi xo = xor+0.5*(dx*cosr-dy*sinr) yo = yor+0.5*(dx*sinr+dy*cosr) CALL xrmask(xo,yo,xl-dx,yl-dx,ang) END IF CALL resett mptr= lstgrd(mptr) IF(mptr /= 0)GO TO 100 CALL xmap(x1,x2,y1,y2) CALL xrsmsk(nmask) RETURN END SUBROUTINE pltvxy !********************************************************************* !********************************************************************* !********************************************************************* SUBROUTINE pltgrd(mptr, ndim),14 !********************************************************************* ! plot contour maps of ndim-D fields on grid mptr. Only selectedx-y slices ! are plotted. !********************************************************************* INCLUDE 'nodal.inc' INCLUDE 'agrigrid.inc' INCLUDE 'grddsc.inc' !********************************************************************* ! plot x-y planes of ndim-D variables on grid mptr ! ! goto 111 !********************************************************************* ivar=1 nzz = node(14,mptr)-idmxyz(3,ivar) CALL plotxy(mptr,ndim,ivar,1) CALL xframe CALL plotxy(mptr,ndim,ivar,nzz) CALL xframe ! ivar=3 nzz = node(14,mptr)-idmxyz(3,ivar) CALL plotxy(mptr,ndim,ivar,1) CALL xframe CALL plotxy(mptr,ndim,ivar,nzz) CALL xframe ivar=5 nzz = node(14,mptr)-idmxyz(3,ivar) CALL plotxy(mptr,ndim,ivar,1) CALL xframe CALL plotxy(mptr,ndim,ivar,nzz) CALL xframe 111 CONTINUE ivar=7 nzz = node(14,mptr)-idmxyz(3,ivar) CALL plotxy(mptr,ndim,ivar,1) CALL xframe CALL plotxy(mptr,ndim,ivar,nzz) CALL xframe RETURN ivar=9 nzz = node(14,mptr)-idmxyz(3,ivar) CALL plotxy(mptr,ndim,ivar,1) CALL xframe CALL plotxy(mptr,ndim,ivar,nzz) CALL xframe RETURN ivar=11 nzz = node(14,mptr)-idmxyz(3,ivar) CALL plotxy(mptr,ndim,ivar,1) CALL xframe CALL plotxy(mptr,ndim,ivar,nzz) CALL xframe ivar=12 nzz = node(14,mptr)-idmxyz(3,ivar) CALL plotxy(mptr,ndim,ivar,1) CALL xframe CALL plotxy(mptr,ndim,ivar,nzz) CALL xframe RETURN END SUBROUTINE pltgrd !********************************************************************* !********************************************************************* !********************************************************************* SUBROUTINE plotxy(mptr,ndim,ivar, kk) 14,4 !********************************************************************* ! plot x-y slices ofr ndim-d field ivar on grid mptr. ! no coordinate transformation is done. !********************************************************************* INCLUDE 'nodal.inc' INCLUDE 'agrialloc.inc' CHARACTER (LEN=132) :: title ! nx=node(5,mptr) ny=node(6,mptr) nz=node(14,mptr) pi=4.0*ATAN(1.0) xor=rnode(1, mptr) yor=rnode(2, mptr) dx=rnode(9 , mptr) dy=rnode(10, mptr) xl=(nx-1)*dx yl=(ny-1)*dy CALL xqmap (x1,x2,y1,y2) IF(yl > xl) THEN CALL xpspac(0.1+(yl-xl)/(yl*2),0.9-(yl-xl)/(yl*2),0.1,0.8) ELSE CALL xpspac(0.1,0.9,0.1+(xl-yl)/(xl*2),0.9-(xl-yl)/(xl*2)) END IF CALL xmap (0.0, xl, 0.0, yl) CALL xaxsca(0.0, xl, dx, 0.0, yl, dy) IF(ndim == 3) in1 = igtxyz(mptr,ivar,1 ) IF(ndim == 2) in1 = igtnxy(mptr,ivar,1 ) n3rd=nz IF(ndim == 2) n3rd=1 ! needsp = nx*ny ntem1=igetsp(needsp) ntem2=igetsp(needsp) ntem3=igetsp(needsp) CALL gtxypl(! call gtacrd(mptr,ndim,ivar,a(ntem2),a(ntem3),nxa,nya) CALL gtrcrd(mptr,ndim,ivar,a(ntem2),a(ntem3),nxa,nya) CALL xconts1( WRITE(title,'(''VAR NO.'',I2,'' K='',I3,'' FOR GRID '',I2)') & ivar, kk, mptr CALL xchsiz(0.025*yl) CALL xcharc(0.5*xl, 1.05*yl, title(1:27)) CALL xmap (x1,x2,y1,y2) WRITE(title,'(''X-Y PLANE FOR K='',I2,'' OF '', & i1,''-d var. no.'',i3,'' of grid'',i2)') kk,ndim,ivar,mptr PRINT*,title(1:60) ! call WRIGAR(A(ntem1),1,nx,1,ny,1,1,1,nx,1,ny,1,1, ! : title(1:60),0.0 ,1) CALL resett RETURN END SUBROUTINE plotxy !********************************************************************* !********************************************************************* !********************************************************************* SUBROUTINE xconts1(z,x,y,md,m,n, limit) 1,1 !********************************************************************* ! plot a contour map for field Z. ! if limit=.false., max, min, inc are not plotted. !********************************************************************* REAL :: z(md,n),x(md,n),y(md,n),cl(150) INTEGER :: iwrk(10000) LOGICAL :: limit IF(m*n > 10000)THEN PRINT*,'Working array IW in plotting routine xconts1', & ' defined too small' WRITE(6,'(a,i6,a,i6)')'Space needed:',m*n,', allocated:',10000 PRINT*,'No further plotting performed in this routine.' RETURN END IF zmin=z(1,1) zmax=zmin DO j=1,n DO i=1,m zmax=MAX(zmax,z(i,j)) zmin=MIN(zmin,z(i,j)) END DO END DO PRINT*,'zmax, zmin ', zmax, zmin cl(1)=0.0 IF(zmax-zmin > 1.0E-8)THEN cl(2)=cl(1)+ xfinc(zmax-zmin) IF(cl(2)-cl(1) == 0.0) cl(2)=cl(1)+1.0 mode=1 CALL xconta(z,x,y,iwrk,md,m,n,cl,ncl,mode) ELSE cl(2)=1.0 ncl=2 END IF IF(.NOT.limit) RETURN ! zmax =cl(ncl) ! zmin =cl( 1) zinc=cl(MIN(2,ncl))-cl(1) CALL xclimt1(zmax,zmin,zinc,0.0) RETURN END SUBROUTINE xconts1 !********************************************************************* !********************************************************************* !********************************************************************* SUBROUTINE xconts2(z,x,y,md,m,n, limit, zinc0, model) 4,1 !********************************************************************* ! produce contour plot for field Z with coordinate X(i,j),Y(i,j). ! limit = .t. then zmin,zmax & zinc are plotted above the top ! model = 1, zinc is determined inside and on output zinc0 = zinc. ! = 2, zinc = zinc0. !********************************************************************* REAL :: z(md,n),x(md,n),y(md,n),cl(150) INTEGER :: iwrk(10000) LOGICAL :: limit IF(m*n > 10000)THEN PRINT*,'Working array IW in plotting routine xconts1', & ' defined too small' WRITE(6,'(a,i6,a,i6)')'Space needed:',m*n,', allocated:',10000 PRINT*,'No further plotting performed in this routine.' RETURN END IF zmin=z(1,1) zmax=zmin DO j=1,n DO i=1,m zmax=MAX(zmax,z(i,j)) zmin=MIN(zmin,z(i,j)) END DO END DO PRINT*,'zmax, zmin ', zmax, zmin cl(1)=0.0 IF(zmax-zmin > 1.0E-8)THEN IF(model /= 2)THEN cl(2)=cl(1)+ xfinc(zmax-zmin) IF(cl(2)-cl(1) == 0.0) cl(2)=cl(1)+1.0 mode=1 ELSE cl(2)=zinc0 mode=2 END IF CALL xconta(z,x,y,iwrk,md,m,n,cl,ncl,mode) ELSE cl(2)=1.0 ncl=2 END IF ! zmax =cl(ncl) ! zmin =cl( 1) zinc=cl(MIN(2,ncl))-cl(1) zinc0 = zinc IF(.NOT.limit) RETURN CALL xclimt1(zmax,zmin,zinc,0.0) RETURN END SUBROUTINE xconts2 !********************************************************************* !********************************************************************* !********************************************************************* REAL FUNCTION xfinc(x) !********************************************************************* ! to automatically divide domain (0,x) to a number of subdomain ! with intervale xfinc which is >=4 and =<16 for fold=1.0) !********************************************************************* ipower= INT( LOG10(x) ) d= INT(x/(10.0**ipower)) fold=1.0 xfinc=0.1*x IF(d >= 0.0.AND.d < 3.0) THEN xfinc=2.0*10.0**(ipower-1) ELSE IF(d >= 3.0.AND.d < 7.0) THEN xfinc=5.0*10.0**(ipower-1)*fold ELSE IF(d >= 7.0.AND.d < 10.) THEN xfinc=1.0*10.0** ipower*fold END IF IF(xfinc == 0.0) xfinc=x*0.1 RETURN END FUNCTION xfinc !********************************************************************* !********************************************************************* !********************************************************************* SUBROUTINE xclimt1(fmax,fmin,finc ) 2 ! CHARACTER (LEN=150) :: ch CALL xqmap(xl,xr,yb,yt) CALL xqrang( xrg, yrg ) CALL xqchmg( siz0 ) siz=0.02*SQRT( xrg*yrg) CALL xchmag(siz) WRITE(ch,'(''MIN='',G9.3E2,'' MAX='',G9.3E2, & '' inc='',g9.3E2)')fmin,fmax,finc CALL xcharc( 0.5*(xl+xr), yt+0.02*(yt-yb),ch(1:41) ) CALL xchmag( siz0) RETURN END SUBROUTINE xclimt1 !********************************************************************* !********************************************************************* !********************************************************************* SUBROUTINE tranuv(mptr,u,v,uc,vc,nx,ny,nz,kk) 1 !********************************************************************* ! transform vector field (u,v) on grid mptr to absolute coordinate ! and copy x-y slice at k=kk to 2-D field (uc,vc). ! these vectors are located in the center of staggered grid cells. !********************************************************************* REAL :: u(nx,ny,nz),v(nx,ny,nz), uc(nx,ny),vc(nx,ny) INCLUDE 'nodal.inc' cosg=rnode(21,mptr) sing=rnode(22,mptr) k=MAX(kk,1) DO j=1,ny-1 DO i=1,nx-1 uc(i,j)=(cosg*(u(i,j,k)+u(i+1,j,k))- & sing*(v(i,j,k)+v(i,j+1,k)))*0.5 vc(i,j)=(sing*(u(i,j,k)+u(i+1,j,k))+ & cosg*(v(i,j,k)+v(i,j+1,k)))*0.5 END DO END DO RETURN END SUBROUTINE tranuv FUNCTION abssuv(array,i0,i1,j0,j1,k0,k1) REAL :: array(*) lmn=(i1-i0+1)*(j1-j0+1)*(k1-k0+1) abssuv=0.0 DO ijk=1,lmn abssuv=abssuv+ABS(array(ijk)) END DO RETURN END FUNCTION abssuv