subroutine hopers(zs,ds,hs,qs,ps,bhalf,bhalfp,nsig,jcap, * agvz,wgvz,bvz,nmdszh,vz,vd,vh,vq,in,baln) c$$$ subprogram documentation block c . . . . c subprogram: hoper analysis variables to grid variables c prgmmr: parrish org: w/nmc22 date: 90-10-06 c c abstract: convert analysis variables to grid variables c c program history log: c 90-10-06 parrish c 94-02-02 parrish c c input argument list: c zs,ds,hs,qs,ps - coefs of vort, div, unbal t, unbal log(ps), q c bhalf - background error stats c bhalfp - background error stats surface pressure c nsig - number of sigma levels c jcap - triangular truncation c nlon - number of longitudes c nlath - number of gaussian lats in one hemisphere c del2 - n*(n+1)/a**2 c trigs,ifax - used by fft c agvz - mass-variable modes to temperature conversion c wgvz - mass-variable modes to log(psfc) conversion c bvz - mass-variable modes to divergence conversion c nmdszh - number of modes used in balance eqn. c vz - vertical mode matrix - z c vd - vertical mode matrix - d c vh - vertical mode matrix - temps c vq - vertical mode matrix - q c in - total wavenumber index array c baln - spectral balance operator constants c c output argument list: c u,v,vort,div,t,p,plon,plat,q - u,v,etc on gaussian grid c c attributes: c language: cft77 c machine: cray ymp c c$$$ c C-CRA dimension agvz(0:jcap,nsig,nmdszh) C-CRA dimension wgvz(0:jcap,nmdszh) C-CRA dimension bvz(0:jcap,nsig,nmdszh) C-CRA dimension vz(nsig,nsig),vd(nsig,nsig) C-CRA dimension vq(nsig,nsig),vh(nsig,nsig) C-CRA dimension bhalf((jcap+1)*(jcap+2),nsig,4) C-CRA dimension bhalfp((jcap+1)*(jcap+2)) C-CRA dimension zs((jcap+1)*(jcap+2),nsig) C-CRA dimension ds((jcap+1)*(jcap+2),nsig) C-CRA dimension hs((jcap+1)*(jcap+2),nsig) C-CRA dimension qs((jcap+1)*(jcap+2),nsig) C-CRA dimension ps((jcap+1)*(jcap+2)) C-CRA dimension in((jcap+1)*(jcap+2)) C-CRA dimension baln((jcap+1)*(jcap+2)) C-CRA dimension psd((jcap+1)*(jcap+2)) C-CRA dimension zsf((jcap+1)*(jcap+2),nmdszh) C-CRA dimension work((jcap+1)*(jcap+2),nsig) dimension agvz(0:62,28,28) dimension wgvz(0:62,28) dimension bvz(0:62,28,28) dimension vz(28,28),vd(28,28) dimension vq(28,28),vh(28,28) dimension bhalf((62+1)*(62+2),28,4) dimension bhalfp((62+1)*(62+2)) dimension zs((62+1)*(62+2),28) dimension ds((62+1)*(62+2),28) dimension hs((62+1)*(62+2),28) dimension qs((62+1)*(62+2),28) dimension ps((62+1)*(62+2)) dimension in((62+1)*(62+2)) dimension baln((62+1)*(62+2)) dimension psd((62+1)*(62+2)) dimension zsf((62+1)*(62+2),28) dimension work((62+1)*(62+2),28) c-------- c-------- internal scratch dynamic space follows: c-------- c-------- nc=(jcap+1)*(jcap+2) c-------- c-------- first sum in vertical, and zero various arrays) do k=1,nsig if(k .eq. 1)then p=0. plon=0. plat=0. do i=1,nc ps(i)=ps(i)*bhalfp(i) end do end if do i=1,nc zs(i,k)=zs(i,k)*bhalf(i,k,1) ds(i,k)=ds(i,k)*bhalf(i,k,2) hs(i,k)=hs(i,k)*bhalf(i,k,3) qs(i,k)=qs(i,k)*bhalf(i,k,4) end do end do c------------------------apply spectral balance operator c------------------------to zs C-CRA zsf=0. c dimension zsf((jcap+1)*(jcap+2),nmdszh) DO ITMP=1,((jcap+1)*(jcap+2))*nmdszh zsf(ITMP,1)=0. ENDDO do k=1,nmdszh ii0=2*(jcap+1) im0=0 do m=1,jcap do ll=1,2*(jcap+1-m) zsf(ii0+ll,k)=zsf(ii0+ll,k)+baln(ii0+ll)*zs(im0+ll,k) end do ii0=ii0+2*(jcap+1-m) im0=im0+2*(jcap+2-m) end do ii0=0 ip0=2*(jcap+1) do m=0,jcap-1 do ll=1,2*(jcap-m) zsf(ii0+ll,k)=zsf(ii0+ll,k)+baln(ip0+ll)*zs(ip0+ll,k) end do ii0=ii0+2*(jcap+1-m) ip0=ip0+2*(jcap-m) end do end do c---------------do temp and psfc C-CRA work=0. c dimension work((jcap+1)*(jcap+2),nsig) DO ITMP=1,((jcap+1)*(jcap+2))*nsig work(ITMP,1)=0. ENDDO do k=1,nsig if(k .eq. 1)then do j=1,nmdszh do i=1,nc ps(i)=ps(i) * +wgvz(in(i),j)*zsf(i,j) end do end do end if do j=1,nmdszh do i=1,nc work(i,k)=work(i,k) * +agvz(in(i),k,j)*zsf(i,j) end do end do do j=1,nsig do i=1,nc work(i,k)=work(i,k)+vh(k,j)*hs(i,j) end do end do end do do i=1,nsig*nc hs(i,1)=work(i,1) work(i,1)=0. end do c--------------- sum in vertical ds do k=1,nsig do j=1,nsig do i=1,nc work(i,k)=work(i,k)+vd(k,j)*ds(i,j) end do end do do j=1,nmdszh do i=1,nc work(i,k)=work(i,k)+bvz(in(i),k,j)*zsf(i,j) end do end do end do do i=1,nc*nsig ds(i,1)=work(i,1) work(i,1)=0. end do c-------- c-------- sum in vertical qs do k=1,nsig do j=1,nsig do i=1,nc work(i,k)=work(i,k)+vq(k,j)*qs(i,j) end do end do end do do i=1,nsig*nc qs(i,1)=work(i,1) work(i,1)=0. end do c------- c-------- sum in vertical zs do k=1,nsig do j=1,nsig do i=1,nc work(i,k)=work(i,k)+vz(k,j)*zs(i,j) end do end do end do do i=1,nsig*nc zs(i,1)=work(i,1) end do return end