copyright (C) 2001 MSC-RPN COMM %%%MC2%%% ***s/r out_uvsubroutine out_uv ( up,vp,prm,qp,ht,hm,sbx,sby,sbxy,rf,ng,lnk, 1,18 $ nksor,ind_o,nk_o,ip2,unf ) implicit none * integer ng,lnk,nksor,ind_o(*),nk_o,ip2,unf real up(ng,*),vp(ng,*),prm(ng,lnk),qp(ng,lnk), $ ht(ng,*),hm(ng,*),sbx(ng),sby(ng),sbxy(ng),rf(nksor) * *OBJECT * interpolation des vents de coord. hauteur a pression * calcul du tourbillon * *METHOD * ** #include "consdyn_8.cdk"
#include "levels.cdk"
#include "lcldim.cdk"
#include "rec.cdk"
#include "sor.cdk"
#include "vinterpo.cdk"
#include "partopo.cdk"
* integer i,j,k,err,nkref,gnpself integer gluu,glvv,glqr,gldd,glpreg,glpprm,glpstr,nkop1 real, dimension (:,:,:), allocatable :: uvpres real, dimension (:,: ), allocatable :: u,v real, dimension (: ), allocatable :: qr,dd real gotsr(ng,lnk-1), ortsr(ng,lnk),umod(ng,lnk),vmod(ng,lnk), $ qtsr (ng,lnk ), ntsr2(ng,lnk-1) real posv,zm_tmp(lnk+1) pointer (paposv, posv(ng,nksor,2,3)) *---------------------------------------------------------------------- * if (myproc.eq.0) print*, '=====> OUT_UV' * paposv = papositd * gluu = -1 glvv = -1 glqr = -1 gldd = -1 glpreg = -1 glpprm = -1 glpstr = -1 do i=1,nvardyn if (udolist(i).eq.'UU' ) gluu =i if (udolist(i).eq.'VV' ) glvv =i if (udolist(i).eq.'QR' ) glqr =i if (udolist(i).eq.'DD' ) gldd =i if (udolist(i).eq.'PREG' ) glpreg =i if (udolist(i).eq.'PPRM' ) glpprm =i if (udolist(i).eq.'PSTR' ) glpstr =i end do if (levtyp.ne.'G') then glpprm = -1 glpstr = -1 endif * nkref= nksor nkop1= nk_o if (levtyp.eq.'G') then nkref= lnk if (nk_o.eq.gnk) nkop1= nk_o+1 endif if (nkref.lt.1) return * do k=2,lnk do i=1,ng umod(i,k) = up(i,k-1) vmod(i,k) = vp(i,k-1) end do end do do i=1,ng umod(i,1) = umod(i,2) vmod(i,1) = vmod(i,2) end do do k=1,lnk-1 zm_tmp(k+1) = zm(k) end do zm_tmp(1) = zt(1) * allocate (uvpres(ng,nkref,2), $ u(ng,nkref),v(ng,nkref),qr(ng*nkref),dd(ng*nkref)) * if (levtyp.ne.'G') then call inv_vertint
( uvpres(1,1,1),umod,posv(1,1,1,2),huv_od, $ ng,nkref,lnk ) call inv_vertint
( uvpres(1,1,2),vmod,posv(1,1,1,2),huv_od, $ ng,nkref,lnk ) else do k=1,nkref do i=1,ng uvpres(i,k,1) = umod(i,k) uvpres(i,k,2) = vmod(i,k) end do end do endif * if ( (glqr.gt.0).or.(gldd.gt.0) ) $ call out_qrdd
( qr,dd,uvpres,sbxy,minx,maxx,miny,maxy,nkref ) * do k=1,nkref do i=1,ng u(i,k) = uvpres(i,k,1) / knams_8 * sqrt(sby(i)) v(i,k) = uvpres(i,k,2) / knams_8 * sqrt(sbx(i)) end do end do * * Staggering of U and V. * if ((levtyp.ne.'G').or.(out_staguv)) $ call out_stguv
(u,v,minx,maxx,miny,maxy,nkref) * if (levtyp.ne.'G') then if (gluu.gt.0) $ call ecris_fst2
(u,minx,maxx,miny,maxy,rf,'UU ',1.0,ip2, $ gnstepno,out_kind,nkref,ind_o,nk_o,unf) if (glvv.gt.0) $ call ecris_fst2
(v,minx,maxx,miny,maxy,rf,'VV ',1.0,ip2, $ gnstepno,out_kind,nkref,ind_o,nk_o,unf) else if (gluu.gt.0) then call ecris_fst2
(u,minx,maxx,miny,maxy,zm_tmp,'UU ',1.0, $ ip2,gnstepno,out_kind,nkref,ind_o,nkop1,unf) endif if (glvv.gt.0) then call ecris_fst2
(v,minx,maxx,miny,maxy,zm_tmp,'VV ',1.0, $ ip2,gnstepno,out_kind,nkref,ind_o,nkop1,unf) endif endif * * * Vorticity and Divergence * if ((glqr.gt.0).or.(gldd.gt.0)) then if (levtyp.ne.'G') then if (glqr.gt.0) $ call ecris_fst2
(qr,minx,maxx,miny,maxy,rf,'QR ',1.0,ip2, $ gnstepno,out_kind,nkref,ind_o,nk_o,unf) if (gldd.gt.0) $ call ecris_fst2
(dd,minx,maxx,miny,maxy,rf,'DD ',1.0,ip2, $ gnstepno,out_kind,nkref,ind_o,nk_o,unf) else if (glqr.gt.0) then call ecris_fst2
(qr,minx,maxx,miny,maxy,zm_tmp,'QR ', $ 1.0,ip2,gnstepno,out_kind,nkref,ind_o,nkop1,unf) endif if (gldd.gt.0) then call ecris_fst2
(dd,minx,maxx,miny,maxy,zm_tmp,'DD ', $ 1.0,ip2,gnstepno,out_kind,nkref,ind_o,nkop1,unf) endif endif endif * if (glpreg.gt.0) then if (levtyp.ne.'G') then call inv_vertint
(dd,qp,posv(1,1,1,2),huv_od,ng,nkref,lnk) call ecris_fst2
(dd,minx,maxx,miny,maxy,rf,'PREG',1.0,ip2, $ gnstepno,out_kind,nkref,ind_o,nk_o,unf) else call ecris_fst2
(qp,minx,maxx,miny,maxy,zm_tmp,'PREG',1.0, $ ip2,gnstepno,out_kind,nkref,ind_o,nkop1,unf) endif endif * call qntstar
(qtsr,ntsr2,gotsr,ortsr,ht,hm,ng,0,lnk-1) * if (glpprm.gt.0) then do k=1,nkref do i=1,ng u(i,k) = exp(qp(i,k) * ortsr(i,k)) end do end do call ecris_fst2
(u,minx,maxx,miny,maxy,zm_tmp,'PPRM',0.01,ip2, $ gnstepno,out_kind,nkref,ind_o,nkop1,unf) endif if (glpstr.gt.0) then do k=1,nkref do i=1,ng u(i,k) = exp(qtsr(i,k)) end do end do call ecris_fst2
(u,minx,maxx,miny,maxy,zm_tmp,'PSTR',0.01,ip2, $ gnstepno,out_kind,nkref,ind_o,nkop1,unf) endif * deallocate (uvpres,u,v,qr,dd) *---------------------------------------------------------------------- return end