copyright (C) 2001 MSC-RPN COMM %%%MC2%%% *subroutine out_dyn (trname,rstrt) 1,10 implicit none * character*8 trname(*) logical rstrt * #include "dynmem.cdk"
#include "partopo.cdk"
#include "rec.cdk"
#include "grd.cdk"
#include "sor.cdk"
#include "yomdyn.cdk"
#include "yomdyn1.cdk"
#include "topo.cdk"
* logical out_step,doneonce,oldstyle external out_step integer i,j,k,kk,step_id,level_id,grid_id,nk_o, $ is,nis,js,jn,njs,iw,ie,niw,jw,njw integer, dimension (:), allocatable :: ind_o data doneonce,oldstyle /.false.,.false./ save doneonce * *------------------------------------------------------------------ * call rpn_comm_xch_halo (ppp,minx,maxx,miny,maxy,ldni,ldnj, $ ndynvar*gnk+1,hx,hy,period_x,period_y,ldni,0) * if (rstrt.and..not.doneonce) goto 998 * *########## REGULAR OUTPUT ####################################### * do 100 i=1,nkout * if (varout_nvar(i).gt.0) then level_id= varout_p(1,i) grid_id= varout_p(2,i) step_id= varout_p(3,i) nvardyn = 0 if ( (stepout_typ( step_id).ne.'@') .and. $ (levout_typ (level_id).ne.'@') .and. $ (gridout_typ( grid_id).ne.'@') ) then * if (out_step
(gnstepno,stepout(1,step_id), $ stepout_typ(step_id),stepout_ns(step_id))) then if (myproc.eq.0) then write (6,900) i,level_id,grid_id,step_id print*, (varout_S(j,i) ,j=1,varout_nvar(i)) endif * *** Variables udolist = "#$%^&" do k=1,varout_nvar(i) udolist(k) = varout_S(k,i) end do nvardyn = varout_nvar(i) * *** Levels nk_o = levout_nlvl(level_id) allocate (ind_o(nk_o+1)) call out_slev
(level_id,nk_o,ind_o,'d') * *** Grid g_id = gridout(1,grid_id) g_if = gridout(2,grid_id) g_jd = gridout(3,grid_id) g_jf = gridout(4,grid_id) g_reduc = gridout(5,grid_id) if (g_reduc .gt. 1) then g_id = min(gni,max(1,g_id)) g_if = min(gni,max(1,g_if)) g_jd = min(gnj,max(1,g_jd)) g_jf = min(gnj,max(1,g_jf)) endif call out_sgrid
* * producing the output call out_dynr
(trname,ind_o,nk_o,nstepsor_d) deallocate (ind_o) endif * endif endif * 100 continue * * *################################################################# * *########## SPECIAL OUTPUT FOR CASCADE ########################### * if (oldstyle) then if ( (Grdc_proj_S.ne.'@').and.(Grdc_ndt.ge.0) ) then * out_ontimec = .false. if ( gnstepno.ge.Grdc_start ) then if ( Grdc_ndt.eq.0 ) then if (gnstepno.eq.0) out_ontimec = .true. else out_ontimec = (mod(gnstepno,Grdc_ndt).eq.0) endif endif * if ( out_ontimec ) then * *** Variables udolist(1) = 'BUOY' udolist(2) = 'HU ' udolist(3) = 'UU ' udolist(4) = 'VV ' udolist(5) = 'WZ ' udolist(6) = 'PREG' nvardyn = 6 if (Grdc_trnm_S(1).eq.'@#$%') then do k=1,ntr nvardyn = nvardyn + 1 udolist(nvardyn) = trname(k) end do else do kk=1,max_trnm if (Grdc_trnm_S(kk).eq.'@#$%') goto 87 do k=1,ntr if (Grdc_trnm_S(kk).eq.trname(k)) then nvardyn = nvardyn + 1 udolist(nvardyn) = trname(k) endif end do end do endif * *** Levels 87 nk_o = gnk allocate (ind_o(nk_o+1)) levtyp = 'G' do k=1,nk_o+1 ind_o(k) = k end do out_kind = 4 out_lt = 'cm' * *** Grid g_id = Grdc_gid g_if = Grdc_gif g_jd = Grdc_gjd g_jf = Grdc_gjf g_reduc = 1 call out_sgrid
* * producing the output call out_dynr
(trname,ind_o,nk_o,Grdc_nsor) * deallocate (ind_o) * endif * out_ontimec = .false. * endif endif * *########## SPECIAL OUTPUT FOR CASCADE ########################### * if ( (Grdc_proj_S.ne.'@').and.(Grdc_ndt.ge.0) ) then * out_ontimec = .false. if ( gnstepno.ge.Grdc_start ) then if ( Grdc_ndt.eq.0 ) then if (gnstepno.eq.0) out_ontimec = .true. else out_ontimec = (mod(gnstepno,Grdc_ndt).eq.0) endif endif * if ( out_ontimec ) then * nvardyn = 0 if (Grdc_trnm_S(1).eq.'@#$%') then do k=1,ntr nvardyn = nvardyn + 1 udolist(nvardyn) = trname(k) end do else do kk=1,max_trnm if (Grdc_trnm_S(kk).eq.'@#$%') goto 89 do k=1,ntr if (Grdc_trnm_S(kk).eq.trname(k)) then nvardyn = nvardyn + 1 udolist(nvardyn) = trname(k) endif end do end do endif 89 continue * if ((.not.Grdc_init3d_L).or.(.not.Grdc_bcs_L)) then * g_id = Grdc_gid g_if = Grdc_gif g_jd = Grdc_gjd g_jf = Grdc_gjf g_reduc = 1 call out_sgrid
c if (myproc.eq.0) print*, 'BCS_DYN: ',gnstepno, c $ g_id,g_if,g_jd,g_jf,g_if-g_id+1,g_jf-g_jd+1, c $ (g_if-g_id+1)*(g_jf-g_jd+1), c $ xpx(g_id+hx),xpx(g_id+hx+out_nisg-1), c $ ypx(g_jd+hy),ypx(g_jd+hy+out_njsg-1) * call out_dync
(trname) Grdc_init3d_L = .true. * else * is = Grdc_gid nis = Grdc_gif-Grdc_gid+1 js = Grdc_gjd jn = Grdc_gjf-Grdc_hbsn-1 njs = Grdc_hbsn+2 * iw = Grdc_gid ie = Grdc_gif-Grdc_hbwe-1 niw = Grdc_hbwe+2 * jw = js+njs-5 njw = jn-jw +6 * c if (myproc.eq.0) print*, 'BCSH_DYN: ',gnstepno, c $ is,is+nis-1,js,js+njs-1,jn,jn+njs-1,nis,njs,nis*njs, c $ xpx(is+hx),xpx(is+hx+nis-1), c $ ypx(js+hy),ypx(js+hy+njs-1), c $ ypx(jn+hy),ypx(jn+hy+njs-1), c $ iw,iw+niw-1,ie,ie+niw-1,jw,jw+njw-1,niw,njw,niw*njw call out_sfileb
(gnstepno,is,nis,js,jn,njs,iw,ie,niw,jw,njw) call out_dynb
(trname ,is,nis,js,jn,njs,iw,ie,niw,jw,njw) * endif * endif out_ontimec = .false. endif * 998 doneonce = .true. * *################################################################# 900 format (/' ### ===> DYN OUTPUT SET #',i4,', Levels=',i4, $ ', Grid=',i4,', Step=',i4) *------------------------------------------------------------------ return end