SUBROUTINE INITPOST_NEMS_MPIIO() !$$$ SUBPROGRAM DOCUMENTATION BLOCK ! . . . ! SUBPROGRAM: INITPOST INITIALIZE POST FOR RUN ! PRGRMMR: Hui-Ya Chuang DATE: 2008-03-26 ! ! ABSTRACT: THIS ROUTINE INITIALIZES CONSTANTS AND ! VARIABLES AT THE START OF AN NEMS MODEL OR POST ! PROCESSOR RUN. ! ! USAGE: CALL INITPOST_NEMS ! INPUT ARGUMENT LIST: ! NREC ! NFILE ! ! OUTPUT ARGUMENT LIST: ! NONE ! ! OUTPUT FILES: ! NONE ! ! SUBPROGRAMS CALLED: ! UTILITIES: ! NONE ! LIBRARY: ! COMMON - CTLBLK ! LOOKUP ! SOILDEPTH ! ! ! ATTRIBUTES: ! LANGUAGE: FORTRAN ! MACHINE : CRAY C-90 !$$$ use vrbls3d, only: t, q, uh, vh, q2, cwm, f_ice, f_rain, f_rimef, cfr, pint,& pint, alpint, pmid, pmidv, zint, zmid, wh, rlwtt, rswtt,& ttnd, tcucn, train, el_pbl, exch_h, omga use vrbls2d, only: f, pd, fis, pblh, mixht, ustar, z0, ths, qs, twbs, qwbs, prec,& acprec, cuprec, lspa, sno, snoavg, psfcavg, t10avg, t10m, akhsavg, akmsavg,& refd_max, w_up_max, w_dn_max, up_heli_max, si, cldefi, th10, q10, pshltr,& tshltr, qshltr, maxtshltr, mintshltr, maxrhshltr, minrhshltr, akhs, akms, albase,& albedo, czen, cfracl, cfracm, islope, cmc, grnflx, pctsno, soiltb, vegfrc,& acfrcv, acfrst, ssroff, bgroff, czmean, mxsnal, radot, sigt4, tg, sr, cfrach,& rlwin, rlwtoa, alwin, alwout, alwtoa, rswin, rswinc, rswout, aswin,aswout,& aswtoa, sfcshx, sfclhx, subshx, snopcx, sfcuvx, potevp, ncfrcv, ncfrst, u10h,& u10, v10h, v10, u10max, v10max, smstav, smstot, sfcevp, ivgtyp, acsnow, acsnom,& sst, thz0, qz0, uz0, vz0, htop, isltyp, sfcexc, hbot, htopd, htops, cuppt, cprate,& hbotd, hbots use soil, only: sldpth, sh2o, smc, stc use masks, only: lmv, lmh, htm, vtm, dx, dy, hbm2, gdlat, gdlon, sm, sice use kinds, only: i_llong use wrf_io_flags_mod, only: use params_mod, only: pi, dtr, g, d608, rd use lookup_mod, only: thl, plq, ptbl, ttbl, rdq, rdth, rdp, rdthe, pl, qs0, sqs, sthe, the0,& ttblq, rdpq, rdtheq, stheq, the0q use ctlblk_mod, only: me, mpi_comm_comp, global, icnt, idsp, jsta, ihrst, imin, idat, sdat,& ifhr, ifmin, filename, restrt, imp_physics, isf_surface_physics, icu_physics, jend,& dt, spval, gdsdegr, grib, pdtop, pt, tmaxmin, nsoil, lp1, jend_m, nprec, nphs, avrain,& avcnvc, ardlw, ardsw, asrfc, novegtype, spl, lsm, dtq2, tsrfc, trdlw, trdsw, theat, tclod,& tprec, alsl, lm , im, jm, jsta_2l, jend_2u, ivegsrc use gridspec_mod, only: dyval, dxval, cenlat, cenlon, maptype, gridtype, latstart, latlast, latnw,& latse, lonstart, lonlast, lonnw, lonse, latstartv, latlastv, cenlatv, lonstartv,& lonlastv, cenlonv use rqstfld_mod, only: ! use nemsio_module, only: nemsio_gfile, nemsio_getfilehead, nemsio_close, nemsio_getheadvar use nemsio_module_mpi ! ! INCLUDE/SET PARAMETERS. implicit none ! type(nemsio_gfile) :: nfile ! INCLUDE "mpif.h" ! This version of INITPOST shows how to initialize, open, read from, and ! close a NetCDF dataset. In order to change it to read an internal (binary) ! dataset, do a global replacement of _ncd_ with _int_. character(len=8) :: VarName character(len=8) :: VcoordName integer :: Status integer fldsize,fldst,recn character startdate*19,SysDepInfo*80,cgar*1 character startdate2(19)*4 ! ! NOTE: SOME INTEGER VARIABLES ARE READ INTO DUMMY ( A REAL ). THIS IS OK ! AS LONG AS REALS AND INTEGERS ARE THE SAME SIZE. ! ! ALSO, EXTRACT IS CALLED WITH DUMMY ( A REAL ) EVEN WHEN THE NUMBERS ARE ! INTEGERS - THIS IS OK AS LONG AS INTEGERS AND REALS ARE THE SAME SIZE. LOGICAL RUNB,SINGLRST,SUBPOST,NEST,HYDRO LOGICAL IOOMG,IOALL logical, parameter :: debugprint = .false. logical fliplayer ! whether or not to flip layer logical :: convert_rad_to_deg=.false. ! logical global CHARACTER*32 LABEL CHARACTER*40 CONTRL,FILALL,FILMST,FILTMP,FILTKE,FILUNV & , FILCLD,FILRAD,FILSFC CHARACTER*4 RESTHR CHARACTER FNAME*80,ENVAR*50,BLANK*4 integer nfhour ! forecast hour from nems io file INTEGER IDATE(8),JDATE(8) ! ! DECLARE VARIABLES. ! REAL FACT,tsph,tstart REAL RINC(5) REAL ETA1(LM+1), ETA2(LM+1) REAL GARB REAL DUM1D (LM+1) REAL DUMMY ( IM, JM ) REAL DUMMY2 ( IM, JM ) REAL FI(IM,JM,2) INTEGER IDUMMY ( IM, JM ) integer ibuf(im,jsta_2l:jend_2u) real buf(im,jsta_2l:jend_2u) character*8,allocatable:: recname(:) character*8,allocatable :: reclevtyp(:) integer,allocatable:: reclev(:) real, allocatable:: bufy(:) real, allocatable:: glat1d(:),glon1d(:) real, allocatable:: tmp(:) !jw integer ii,jj,js,je,jev,iyear,imn,iday,itmp,ioutcount,istatus, & nsrfc,nrdlw,nrdsw,nheat,nclod, & iunit,nrec,I,J,L, iret,nframe,impf,jmpf,nframed2, & igdout,ll,n,im1,jm1,iim1 ! DATA BLANK/' '/ ! !*********************************************************************** ! START INIT HERE. ! WRITE(6,*)'INITPOST: ENTER INITPOST' ! ! ! STEP 1. READ MODEL OUTPUT FILE ! !*** ! LMH always = LM for sigma-type vert coord ! LMV always = LM for sigma-type vert coord do j = jsta_2l, jend_2u do i = 1, im LMV ( i, j ) = lm LMH ( i, j ) = lm end do end do ! HTM VTM all 1 for sigma-type vert coord do l = 1, lm do j = jsta_2l, jend_2u do i = 1, im HTM ( i, j, l ) = 1.0 VTM ( i, j, l ) = 1.0 end do end do end do ! The end j row is going to be jend_2u for all variables except for V. JS=JSTA_2L JE=JEND_2U IF (JEND_2U.EQ.JM) THEN JEV=JEND_2U+1 ELSE JEV=JEND_2U ENDIF ! sample print point ii=(1+im)/2 jj=(1+jm)/2 ! initialize nemsio using mpi io module call nemsio_init() call nemsio_open(nfile,trim(filename),'read',mpi_comm_comp,iret=status) if ( Status /= 0 ) then print*,'error opening ',fileName, ' Status = ', Status ; stop endif call nemsio_getfilehead(nfile,iret=status,nrec=nrec) print*,'nrec=',nrec allocate(recname(nrec),reclevtyp(nrec),reclev(nrec)) call nemsio_getfilehead(nfile,iret=iret & ,recname=recname ,reclevtyp=reclevtyp,reclev=reclev) if (me == 0)then do i=1,nrec print *,'recname,reclevtyp,reclev=',trim(recname(i)),' ', & trim(reclevtyp(i)),reclev(i) end do end if ! get start date idate=0 ! if (me == 0)then call nemsio_getfilehead(nfile,iret=iret & ,idate=idate(1:7),nfhour=nfhour,nframe=nframe) impf=im+nframe*2 jmpf=jm+nframe*2 print*,'nframe,impf,jmpf= ',nframe,impf,jmpf allocate(glat1d(impf*jmpf),glon1d(impf*jmpf) ) call nemsio_getfilehead(nfile,dx=glat1d & ,dy=glon1d,iret=iret) if(iret/=0)print*,'did not find dx dy' do j=jsta,jend do i=1,im ! dummy(i,j) = glat1d((j-1)*impf+i+nframe) ! dummy2(i,j) = glon1d((j-1)*impf+i+nframe) dx(i,j)= glat1d((j-1)*impf+i+nframe) dy(i,j)= glon1d((j-1)*impf+i+nframe) end do end do deallocate(glat1d,glon1d) print*,'idate before broadcast = ',(idate(i),i=1,7) ! end if !for me=0 ! call mpi_bcast(idate(1),7,MPI_INTEGER,0,mpi_comm_comp,iret) ! call mpi_bcast(nfhour,1,MPI_INTEGER,0,mpi_comm_comp,iret) ! call mpi_bcast(nframe,1,MPI_INTEGER,0,mpi_comm_comp,iret) IF(.not. global)THEN impf=im+nframe*2 jmpf=jm+nframe*2 ELSE impf=im+1 ! post cut im off because it's the same as i=1 but data from model is till im jmpf=jm END IF print*,'impf,jmpf,nframe for reading fields = ',impf,jmpf,nframe print*,'idate after broadcast = ',(idate(i),i=1,7) print*,'nfhour = ',nfhour !call mpi_scatterv(dummy(1,1),icnt,idsp,mpi_real & ! ,dx(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) !call mpi_scatterv(dummy2(1,1),icnt,idsp,mpi_real & ! ,dy(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) iyear = idate(1) imn = idate(2) ! ask Jun iday = idate(3) ! ask Jun ihrst = idate(4) imin = idate(5) jdate = 0 idate = 0 ! ! read(startdate,15)iyear,imn,iday,ihrst,imin 15 format(i4,1x,i2,1x,i2,1x,i2,1x,i2) print*,'start yr mo day hr min =',iyear,imn,iday,ihrst,imin print*,'processing yr mo day hr min=' & ,idat(3),idat(1),idat(2),idat(4),idat(5) ! idate(1) = iyear idate(2) = imn idate(3) = iday idate(5) = ihrst idate(6) = imin SDAT(1) = imn SDAT(2) = iday SDAT(3) = iyear jdate(1) = idat(3) jdate(2) = idat(1) jdate(3) = idat(2) jdate(5) = idat(4) jdate(6) = idat(5) ! print *,' idate=',idate print *,' jdate=',jdate ! CALL W3DIFDAT(JDATE,IDATE,2,RINC) ! ifhr=nint(rinc(2)) ! CALL W3DIFDAT(JDATE,IDATE,0,RINC) ! print *,' rinc=',rinc ifhr=nint(rinc(2)+rinc(1)*24.) print *,' ifhr=',ifhr ifmin=nint(rinc(3)) ! if(ifhr /= nfhour)print*,'find wrong Model input file';stop print*,' in INITPOST ifhr ifmin fileName=',ifhr,ifmin,fileName ! Getting tstart tstart=0. print*,'tstart= ',tstart ! Getiing restart RESTRT=.TRUE. ! set RESTRT as default ! call ext_int_get_dom_ti_integer(DataHandle,'RESTARTBIN',itmp ! + ,1,ioutcount,istatus) ! IF(itmp .LT. 1)THEN ! RESTRT=.FALSE. ! ELSE ! RESTRT=.TRUE. ! END IF ! print*,'status for getting RESTARTBIN= ',istatus ! print*,'Is this a restrt run? ',RESTRT IF(tstart .GT. 1.0E-2)THEN ifhr=ifhr+NINT(tstart) rinc=0 idate=0 rinc(2)=-1.0*ifhr call w3movdat(rinc,jdate,idate) SDAT(1)=idate(2) SDAT(2)=idate(3) SDAT(3)=idate(1) IHRST=idate(5) print*,'new forecast hours for restrt run= ',ifhr print*,'new start yr mo day hr min =',sdat(3),sdat(1) & ,sdat(2),ihrst,imin END IF VarName='mp_physi' !if(me == 0)then call nemsio_getheadvar(nfile,trim(VarName),imp_physics,iret) if (iret /= 0) then print*,VarName," not found in file- go to 16 character " VarName='mp_physics' call nemsio_getheadvar(nfile,trim(VarName),imp_physics,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned 1000" imp_physics=1000 end if end if !end if !call mpi_bcast(imp_physics,1,MPI_INTEGER,0,mpi_comm_comp,iret) print*,'MP_PHYSICS= ',imp_physics ! Initializes constants for Ferrier microphysics if(imp_physics==5 .or. imp_physics==85 .or. imp_physics==95)then CALL MICROINIT(imp_physics) end if VarName='sf_surface_physi' call nemsio_getheadvar(nfile,trim(VarName),iSF_SURFACE_PHYSICS,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned 2 for NOAH LSM as default" iSF_SURFACE_PHYSICS=2 end if print*,'SF_SURFACE_PHYSICS= ',iSF_SURFACE_PHYSICS ! IVEGSRC=1 for IGBP and 0 for USGS VarName='IVEGSRC' call nemsio_getheadvar(nfile,trim(VarName),IVEGSRC,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned 1 for IGBP as default" IVEGSRC=1 end if print*,'IVEGSRC= ',IVEGSRC ! set novegtype based on vegetation classification if(ivegsrc==1)then novegtype=20 else if(ivegsrc==0)then novegtype=24 end if print*,'novegtype= ',novegtype VarName='CU_PHYSICS' call nemsio_getheadvar(nfile,trim(VarName),iCU_PHYSICS,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned 2 for BMJ as default" iCU_PHYSICS=2 end if print*,'CU_PHYSICS= ',iCU_PHYSICS allocate(bufy(jm)) VarName='DX' ! if(me == 0)then ! call nemsio_getheadvar(nfile,trim(VarName),bufy,iret) ! if (iret /= 0) then ! print*,VarName," not found in file-Assigned missing values" ! dx=spval ! end if ! end if ! call mpi_bcast(bufy,jm,MPI_REAL,0,mpi_comm_comp,iret) ! do j=jsta,jend ! do i=1,im ! dx(i,j)=bufy(j) ! end do ! end do if(debugprint)print*,'sample ',VarName,' = ',dx(im/2,(jsta+jend)/2) VarName='DY' ! if(me == 0)then ! call nemsio_getheadvar(nfile,trim(VarName),bufy,iret) ! if (iret /= 0) then ! print*,VarName," not found in file-Assigned missing values" ! dx=spval ! end if ! end if ! call mpi_bcast(bufy,jm,MPI_REAL,0,mpi_comm_comp,iret) ! do j=jsta,jend ! do i=1,im ! dy(i,j)=bufy(j) ! end do ! end do if(debugprint)print*,'sample ',VarName,' = ',dy(im/2,(jsta+jend)/2) deallocate(bufy) VarName='dt' call nemsio_getheadvar(nfile,trim(VarName),garb,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned missing values" dt=spval else dt=garb end if VarName='dphd' call nemsio_getheadvar(nfile,trim(VarName),garb,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned missing values" dyval=spval else dyval=garb*gdsdegr end if ! dyval=106 ! hard wire for AQ domain testing VarName='dlmd' call nemsio_getheadvar(nfile,trim(VarName),garb,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned missing values" dxval=spval else dxval=garb*gdsdegr end if ! dxval=124 ! hard wire for AQ domain testing print*,'DX, DY, DT=',dxval,dyval,dt VarName='TPH0D' call nemsio_getheadvar(nfile,trim(VarName),garb,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned missing values" cenlat=spval else cenlat=nint(garb*gdsdegr) end if VarName='TLM0D' call nemsio_getheadvar(nfile,trim(VarName),garb,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned missing values" cenlon=spval else if(grib=="grib1") then cenlon=nint(garb*gdsdegr) elseif(grib=="grib2") then cenlon=nint((garb+360.)*gdsdegr) endif end if varname='sg1' call nemsio_getheadvar(nfile,trim(varname),eta1,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned missing values" ETA1=SPVAL end if varname='sg2' call nemsio_getheadvar(nfile,trim(varname),eta2,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned missing values" ETA2=SPVAL end if if(me==0)then open(75,file='ETAPROFILE.txt',form='formatted', & status='unknown') DO L=1,lm+1 write(75,1020)L, ETA1(lm+2-l), ETA2(lm+2-l) END DO 1020 format(I3,2E17.10) close (75) end if varname='pdtop' call nemsio_getheadvar(nfile,trim(varname),pdtop,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned missing values" pdtop=SPVAL end if varname='pt' call nemsio_getheadvar(nfile,trim(varname),pt,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned missing values" pt=SPVAL end if print*,'PT, PDTOP= ',PT,PDTOP VarName='sldpth' call nemsio_getheadvar(nfile,trim(varname),sldpth,iret) print*,'SLDPTH= ',(SLDPTH(N),N=1,NSOIL) ! set default to not empty buket nprec=0 nphs=0 nclod=0 nheat=0 nrdlw=0 nrdsw=0 nsrfc=0 VarName='nprec' call nemsio_getheadvar(nfile,trim(varname),nprec,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned zero" end if if(debugprint)print*,'sample ',VarName,' = ',nprec VarName='nphs' call nemsio_getheadvar(nfile,trim(varname),nphs,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned zero" end if if(debugprint)print*,'sample ',VarName,' = ',nphs VarName='nclod' call nemsio_getheadvar(nfile,trim(varname),nclod,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned zero" end if if(debugprint)print*,'sample ',VarName,' = ',nclod VarName='nheat' call nemsio_getheadvar(nfile,trim(varname),nheat,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned zero" end if if(debugprint)print*,'sample ',VarName,' = ',nheat VarName='nrdlw' call nemsio_getheadvar(nfile,trim(varname),nrdlw,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned zero" end if if(debugprint)print*,'sample ',VarName,' = ',nrdlw VarName='nrdsw' call nemsio_getheadvar(nfile,trim(varname),nrdsw,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned zero" end if if(debugprint)print*,'sample ',VarName,' = ',nrdsw VarName='nsrfc' call nemsio_getheadvar(nfile,trim(varname),nsrfc,iret) if (iret /= 0) then print*,VarName," not found in file-Assigned zero" end if if(debugprint)print*,'sample ',VarName,' = ',nsrfc IF(.not. global)THEN maptype=205 ! for Arakawa-B grid gridtype='B' ELSE maptype=0 ! for global NMMB on latlon grid gridtype='A' ! will put wind on mass point for now to make regular latlon END IF print*,'maptype and gridtype= ',maptype,gridtype HBM2=1.0 ! start reading nemsio files using parallel read fldsize=(jend-jsta+1)*im allocate(tmp(fldsize*nrec)) print*,'allocate tmp successfully' tmp=0. call nemsio_denseread(nfile,1,im,jsta,jend,tmp,iret=iret) if(iret/=0)then print*,"fail to read nemsio file using mpi io read, stopping" stop end if varname='glat' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,gdlat) call collect_loc(gdlat,dummy) ! decides whether or not to convert to degree if(me.eq.0)then if(maxval(abs(dummy))<pi)then ! convert from radian to degree if(debugprint)print*,'convert from radian to degree' dummy=dummy*180./pi convert_rad_to_deg=.true. end if end if call mpi_bcast(convert_rad_to_deg,1,MPI_LOGICAL,0,mpi_comm_comp,iret) if(convert_rad_to_deg)call mpi_scatterv(dummy(1,1),icnt,idsp,mpi_real & ,gdlat(1,jsta),icnt(me),mpi_real,0,MPI_COMM_COMP,iret) if(debugprint)print*,'sample ',VarName,' = ',gdlat(im/2,(jsta+jend)/2) if(debugprint)print*,'max min lat=',maxval(gdlat),minval(gdlat),'im=',im, & 'jsta_2l=',jsta_2l,'jend_2u=',jend_2u !call collect_loc(gdlat,dummy) if(me==0.and.debugprint)print*,'after collect lat=',dummy(1,1),dummy(im,jm) if(me.eq.0)then ii=(1+im)/2 jj=(1+jm)/2 latstart=nint(dummy(1,1)*gdsdegr) latlast=nint(dummy(im,jm)*gdsdegr) latnw=nint(dummy(1,jm)*gdsdegr) latse=nint(dummy(im,1)*gdsdegr) ! dyval=nint((dummy(1,2)-dummy(1,1))*1000.) ! dyval=106 ! hard wire for AQ domain testing if(mod(im,2)==0)then ! cenlat=nint((dummy(ii,jj)+dummy(ii+1,jj)+dummy(ii+1,jj+1)+dummy(ii,jj+1))/4.0*1000.) else ! cenlat=nint(dummy(ii,jj)*1000.) end if print*,'latstart,latlast B bcast= ',latstart,latlast end if call mpi_bcast(latstart,1,MPI_INTEGER,0,mpi_comm_comp,iret) call mpi_bcast(latlast,1,MPI_INTEGER,0,mpi_comm_comp,iret) ! call mpi_bcast(dyval,1,MPI_INTEGER,0,mpi_comm_comp,iret) ! call mpi_bcast(cenlat,1,MPI_INTEGER,0,mpi_comm_comp,iret) write(6,*) 'latstart,latlast,me A calling bcast=',latstart,latlast,me print*,'dyval, cenlat= ',dyval, cenlat do j=jsta,jend do i=1,im F(I,J)=1.454441e-4*sin(gdlat(i,j)*DTR) ! 2*omeg*sin(phi) end do end do varname='glon' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,gdlon) if(convert_rad_to_deg)gdlon=gdlon*180./pi if(global)then ! do j=jsta,jend ! do i=1,im ! if(gdlon(i,j)<0.)gdlon(i,j)=360.+gdlon(i,j) ! end do ! end do if(gdlon(1,jsta)>0. .and. gdlon(2,jsta)<0.)then do j=jsta,jend gdlon(1,j)=gdlon(1,j)-360.0 end do end if end if if(debugprint)print*,'sample ',VarName,' = ',(gdlon(i,(jsta+jend)/2),i=1,im,8) if(debugprint)print*,'max min lon=',maxval(gdlon),minval(gdlon) call collect_loc(gdlon,dummy) if(me.eq.0)then if(grib=='grib2') then if(dummy(1,1)<0) dummy(1,1)=dummy(1,1)+360. if(dummy(im,jm)<0) dummy(im,jm)=dummy(im,jm)+360. endif lonstart=nint(dummy(1,1)*gdsdegr) lonlast=nint(dummy(im,jm)*gdsdegr) lonnw=nint(dummy(1,jm)*gdsdegr) lonse=nint(dummy(im,1)*gdsdegr) ! dxval=nint((dummy(2,1)-dummy(1,1))*1000.) ! dxval=124 ! hard wire for AQ domain testing if(mod(im,2)==0)then ! cenlon=nint((dummy(ii,jj)+dummy(ii+1,jj)+dummy(ii+1,jj+1)+dummy(ii,jj+1))/4.0*1000.) else ! cenlon=nint(dummy(ii,jj)*1000.) end if end if call mpi_bcast(lonstart,1,MPI_INTEGER,0,mpi_comm_comp,iret) call mpi_bcast(lonlast,1,MPI_INTEGER,0,mpi_comm_comp,iret) ! call mpi_bcast(dxval,1,MPI_INTEGER,0,mpi_comm_comp,iret) ! call mpi_bcast(cenlon,1,MPI_INTEGER,0,mpi_comm_comp,iret) write(6,*)'lonstart,lonlast A calling bcast=',lonstart,lonlast print*,'dxval, cenlon= ',dxval, cenlon convert_rad_to_deg=.false. varname='vlat' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,buf) if(debugprint)print*,'sample ',VarName,' = ',buf(im/2,(jsta+jend)/2) if(debugprint)print*,'max min vlat=',maxval(buf),minval(buf) call collect_loc(buf,dummy) if(me.eq.0)then if(maxval(abs(dummy))<pi)then ! convert from radian to degree dummy(1,1)=dummy(1,1)*180./pi dummy(im,jm)=dummy(im,jm)*180./pi convert_rad_to_deg=.true. end if latstartv=nint(dummy(1,1)*gdsdegr) latlastv=nint(dummy(im,jm)*gdsdegr) ! cenlatv=nint(dummy(ii,jj)*1000.) ! print*,'latstartv,cenlatv B bcast= ',latstartv,cenlatv end if call mpi_bcast(latstartv,1,MPI_INTEGER,0,mpi_comm_comp,iret) call mpi_bcast(latlastv,1,MPI_INTEGER,0,mpi_comm_comp,iret) ! call mpi_bcast(cenlatv,1,MPI_INTEGER,0,mpi_comm_comp,iret) cenlatv=cenlat write(6,*) 'latstartv,cenlatv,latlastv,me A calling bcast=', & latstartv,cenlatv,latlastv,me varname='vlon' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,buf) if(debugprint)print*,'sample ',VarName,' = ',buf(im/2,(jsta+jend)/2) if(debugprint)print*,'max min vlon=',maxval(buf),minval(buf) call collect_loc(buf,dummy) if(me.eq.0)then if(convert_rad_to_deg)then dummy(1,1)=dummy(1,1)*180./pi dummy(im,jm)=dummy(im,jm)*180./pi end if if(grib=='grib2') then if(dummy(1,1)<0) dummy(1,1)=dummy(1,1)+360. endif lonstartv=nint(dummy(1,1)*gdsdegr) lonlastv=nint(dummy(im,jm)*gdsdegr) ! cenlonv=nint(dummy(ii,jj)*1000.) ! print*,'lonstartv,cenlonv B bcast= ',lonstartv,cenlonv end if call mpi_bcast(lonstartv,1,MPI_INTEGER,0,mpi_comm_comp,iret) call mpi_bcast(lonlastv,1,MPI_INTEGER,0,mpi_comm_comp,iret) ! call mpi_bcast(cenlonv,1,MPI_INTEGER,0,mpi_comm_comp,iret) cenlonv=cenlon write(6,*) 'lonstartv,cenlonv,lonlastv,me A calling bcast=', & lonstartv,cenlonv,lonlastv,me VarName='sm' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sm) if(debugprint)print*,'sample ',VarName,' = ',sm(im/2,(jsta+jend)/2) VarName='sice' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sice) if(debugprint)print*,'sample ',VarName,' = ',sice(im/2,(jsta+jend)/2) VarName='dpres' VcoordName='hybrid sig lev' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,pd) if(debugprint)print*,'sample ',VarName,' = ',pd(im/2,(jsta+jend)/2) VarName='hgt' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,fis) if(debugprint)print*,'sample ',VarName,' = ',fis(im/2,(jsta+jend)/2) where(fis /= spval)fis=fis*g ! convert to geopotential VarName='tmp' VcoordName='mid layer' do l=1,lm ! ll=lm-l+1 ll=l call getrecn(recname,reclevtyp,reclev,nrec,varname,VcoordName,ll,recn) if(recn/=0) then fldst=(recn-1)*fldsize do j=jsta,jend js=(j-jsta)*im do i=1,im t(i,j,ll)=tmp(i+js+fldst) enddo enddo else print*,'fail to read ', varname,' at lev ',ll, 'stopping' stop endif if(debugprint)then print*,'sample l ',VarName,' = ',ll,t(im/2,(jsta+jend)/2,ll) do i=1,im do j=jsta,jend if(t(i,j,ll)<150.)print*,'abnormal incoming T ',i,j,ll,T(i,j,ll) end do end do end if end do ! do loop for l ! model level q VarName='spfh' VcoordName='mid layer' do l=1,lm ! ll=lm-l+1 ll=l call getrecn(recname,reclevtyp,reclev,nrec,varname,VcoordName,ll,recn) if(recn/=0) then fldst=(recn-1)*fldsize do j=jsta,jend js=(j-jsta)*im do i=1,im q(i,j,ll)=tmp(i+js+fldst) enddo enddo else print*,'fail to read ', varname,' at lev ',ll, 'stopping' stop endif if(debugprint)print*,'sample l ',VarName,' = ',ll,q(im/2,(jsta+jend)/2,ll) end do ! do loop for l ! model level u VarName='ugrd' VcoordName='mid layer' do l=1,lm ! ll=lm-l+1 ll=l call getrecn(recname,reclevtyp,reclev,nrec,varname,VcoordName,ll,recn) if(recn/=0) then fldst=(recn-1)*fldsize do j=jsta,jend js=(j-jsta)*im do i=1,im uh(i,j,ll)=tmp(i+js+fldst) enddo enddo else print*,'fail to read ', varname,' at lev ',ll, 'stopping' stop endif if(debugprint)print*,'sample l ',VarName,' = ',ll,uh(im/2,(jsta+jend)/2,ll) ! put u on h point for global nmm if(global)then buf(:,:)=uh(:,:,ll) call exch(buf(1,jsta_2l)) if(debugprint)print*,'sample l u = ',ll,buf(im/2,(jsta+jend)/2) do j=jsta,jend do i=1,im im1=i-1 if(im1<1)im1=im1+im jm1=j-1 if(j==1)then ii=i+im/2 iim1=ii-1 if(iim1<1)iim1=iim1+im if (ii > im) ii = ii - im uh(i,j,ll)=(buf(i,j)+buf(im1,j)+buf(ii,j)+buf(iim1,j))/4.0 else uh(i,j,ll)=(buf(i,j)+buf(im1,j)+buf(im1,jm1)+buf(i,jm1))/4.0 end if end do end do end if ! end of wind interpolation for global NMM end do ! do loop for l ! model level v VarName='vgrd' VcoordName='mid layer' do l=1,lm ! ll=lm-l+1 ll=l call getrecn(recname,reclevtyp,reclev,nrec,varname,VcoordName,ll,recn) if(recn/=0) then fldst=(recn-1)*fldsize do j=jsta,jend js=(j-jsta)*im do i=1,im vh(i,j,ll)=tmp(i+js+fldst) enddo enddo else print*,'fail to read ', varname,' at lev ',ll, 'stopping' stop endif if(debugprint)print*,'sample l ',VarName,' = ',ll,vh(im/2,(jsta+jend)/2,ll) ! put v on h point for global nmm if(global)then buf(:,:)=vh(:,:,ll) call exch(buf(1,jsta_2l)) if(debugprint)print*,'sample l v = ',ll,buf(im/2,(jsta+jend)/2) do j=jsta,jend do i=1,im im1=i-1 if(im1<1)im1=im1+im jm1=j-1 if(j==1)then ii=i+im/2 iim1=ii-1 if(iim1<1)iim1=iim1+im if (ii > im) ii = ii - im vh(i,j,ll)=(buf(i,j)+buf(im1,j)+buf(ii,j)+buf(iim1,j))/4.0 else vh(i,j,ll)=(buf(i,j)+buf(im1,j)+buf(im1,jm1)+buf(i,jm1))/4.0 end if end do end do end if ! end of wind interpolation for global NMM end do ! do loop for l varname='pblh' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,pblh) if(debugprint)print*,'sample ',VarName,' = ',pblh(im/2,(jsta+jend)/2) varname='mixht' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,mixht) if(debugprint)print*,'sample ',VarName,' = ',mixht(im/2,(jsta+jend)/2) varname='uustar' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,ustar) if(debugprint)print*,'sample ',VarName,' = ',ustar(im/2,(jsta+jend)/2) varname='zorl' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,z0) if(debugprint)print*,'sample ',VarName,' = ',z0(im/2,(jsta+jend)/2) varname='ths' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,ths) if(debugprint)print*,'sample ',VarName,' = ',ths(im/2,(jsta+jend)/2) VarName='qsh' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,qs) if(debugprint)print*,'sample ',VarName,' = ',qs(im/2,(jsta+jend)/2) varname='twbs' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,twbs) if(debugprint)print*,'sample ',VarName,' = ',twbs(im/2,(jsta+jend)/2) varname='qwbs' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,qwbs) if(debugprint)print*,'sample ',VarName,' = ',qwbs(im/2,(jsta+jend)/2) varname='prec' ! instantaneous precip rate? VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,prec) if(debugprint)print*,'sample ',VarName,' = ',prec(im/2,(jsta+jend)/2) varname='acprec' ! accum total precip VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,acprec) if(debugprint)print*,'sample ',VarName,' = ',acprec(im/2,(jsta+jend)/2) varname='cuprec' ! accum cumulus precip VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,cuprec) if(debugprint)print*,'sample ',VarName,' = ',cuprec(im/2,(jsta+jend)/2) varname='lspa' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,lspa) if(debugprint)print*,'sample ',VarName,' = ',lspa(im/2,(jsta+jend)/2) varname='sno' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sno) if(debugprint)print*,'sample ',VarName,' = ',sno(im/2,(jsta+jend)/2) varname='snoavg' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,snoavg) if(debugprint)print*,'sample ',VarName,' = ',snoavg(im/2,(jsta+jend)/2) varname='psfcavg' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,psfcavg) if(debugprint)print*,'sample ',VarName,' = ',psfcavg(im/2,(jsta+jend)/2) varname='t10avg' VcoordName='10 m above gnd' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,t10avg) if(debugprint)print*,'sample ',VarName,' = ',t10avg(im/2,(jsta+jend)/2) varname='t10' VcoordName='10 m above gnd' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,t10m) if(debugprint)print*,'sample ',VarName,' = ',t10m(im/2,(jsta+jend)/2) varname='akhsavg' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,akhsavg) if(debugprint)print*,'sample ',VarName,' = ',akhsavg(im/2,(jsta+jend)/2) varname='akmsavg' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,akmsavg) if(debugprint)print*,'sample ',VarName,' = ',akmsavg(im/2,(jsta+jend)/2) varname='refdmax' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,refd_max) if(debugprint)print*,'sample ',VarName,' = ',refd_max(im/2,(jsta+jend)/2) varname='upvvelmax' VcoordName='sfc' ! wrong l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,w_up_max) if(debugprint)print*,'sample ',VarName,' = ',w_up_max(im/2,(jsta+jend)/2) varname='dnvvelmax' VcoordName='sfc' ! wrong l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,w_dn_max) if(debugprint)print*,'sample ',VarName,' = ',w_dn_max(im/2,(jsta+jend)/2) varname='uphlmax' VcoordName='sfc' ! wrong l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,up_heli_max) if(debugprint)print*,'sample ',VarName,' = ',up_heli_max(im/2,(jsta+jend)/2) varname='si' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,si) if(debugprint)print*,'sample ',VarName,' = ',si(im/2,(jsta+jend)/2) varname='cldefi' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,cldefi) if(debugprint)print*,'sample ',VarName,' = ',cldefi(im/2,(jsta+jend)/2) varname='th10' VcoordName='10 m above gnd' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,th10) if(debugprint)print*,'sample ',VarName,' = ',th10(im/2,(jsta+jend)/2) varname='q10' VcoordName='10 m above gnd' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,q10) if(debugprint)print*,'sample ',VarName,' = ',q10(im/2,(jsta+jend)/2) varname='pshltr' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,pshltr) if(debugprint)print*,'sample ',VarName,' = ',pshltr(im/2,(jsta+jend)/2), & 'max=',maxval(pshltr(1:im,jsta:jend)),minval(pshltr(1:im,jsta:jend)) varname='tshltr' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,tshltr) if(debugprint)print*,'sample ',VarName,' = ',tshltr(im/2,(jsta+jend)/2) varname='qshltr' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,qshltr) if(debugprint)print*,'sample ',VarName,' = ',qshltr(im/2,(jsta+jend)/2) tmaxmin=1. ! call mpi_bcast(TMAXMIN,1,MPI_REAL,0,mpi_comm_comp,iret) varname='t02max' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,maxtshltr) if(debugprint)print*,'sample ',VarName,' = ',maxtshltr(im/2,(jsta+jend)/2) varname='t02min' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,mintshltr) if(debugprint)print*,'sample ',VarName,' = ',mintshltr(im/2,(jsta+jend)/2) varname='rh02max' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,maxrhshltr) if(debugprint)print*,'sample ',VarName,' = ',maxrhshltr(im/2,(jsta+jend)/2) varname='rh02min' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,minrhshltr) if(debugprint)print*,'sample ',VarName,' = ',minrhshltr(im/2,(jsta+jend)/2) ! model level q2 VarName='q2' VcoordName='mid layer' do l=1,lm ! ll=lm-l+1 ll=l call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,ll,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,q2(1,jsta_2l,ll)) if(debugprint)print*,'sample l ',VarName,' = ',ll,q2(im/2,(jsta+jend)/2,ll) end do ! do loop for l varname='akhs_out' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,akhs) if(debugprint)print*,'sample ',VarName,' = ',akhs(im/2,(jsta+jend)/2) varname='akms_out' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,akms) if(debugprint)print*,'sample ',VarName,' = ',akms(im/2,(jsta+jend)/2) varname='albase' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,albase) if(debugprint)print*,'sample ',VarName,' = ',albase(im/2,(jsta+jend)/2) varname='albedo' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,albedo) if(debugprint)print*,'sample ',VarName,' = ',albedo(im/2,(jsta+jend)/2) varname='czen' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,czen) if(debugprint)print*,'sample ',VarName,' = ',czen(im/2,(jsta+jend)/2) varname='czmean' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,czmean) if(debugprint)print*,'sample ',VarName,' = ',czmean(im/2,(jsta+jend)/2) varname='mxsnal' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,mxsnal) if(debugprint)print*,'sample ',VarName,' = ',mxsnal(im/2,(jsta+jend)/2) varname='radot' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,radot) if(debugprint)print*,'sample ',VarName,' = ',radot(im/2,(jsta+jend)/2) varname='sigt4' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sigt4) if(debugprint)print*,'sample ',VarName,' = ',sigt4(im/2,(jsta+jend)/2) varname='tg' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,tg) if(debugprint)print*,'sample ',VarName,' = ',tg(im/2,(jsta+jend)/2) ! model level cwm ! VarName='cw' VarName='clwmr' VcoordName='mid layer' do l=1,lm ! ll=lm-l+1 ll=l call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,ll,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,cwm(1,jsta_2l,ll)) if(debugprint)print*,'sample l ',VarName,' = ',ll,cwm(im/2,(jsta+jend)/2,ll) end do ! do loop for l varname='f_ice' VcoordName='mid layer' do l=1,lm ! ll=lm-l+1 ll=l call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,ll,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,f_ice(1,jsta_2l,ll)) if(debugprint)print*,'sample l ',VarName,' = ',ll,f_ice(im/2,(jsta+jend)/2,ll) if(debugprint)print*,'max min ',VarName,' = ',ll,maxval(f_ice(:,:,ll)),minval(f_ice(:,:,ll)) end do ! do loop for l varname='f_rain' VcoordName='mid layer' do l=1,lm ! ll=lm-l+1 ll=l call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,ll,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,f_rain(1,jsta_2l,ll)) if(debugprint)print*,'sample l ',VarName,' = ',ll,f_rain(im/2,(jsta+jend)/2,ll) if(debugprint)print*,'max min ',VarName,' = ',ll,maxval(f_rain(:,:,ll)),minval(f_rain(:,:,ll)) end do ! do loop for l varname='f_rimef' VcoordName='mid layer' do l=1,lm ! ll=lm-l+1 ll=l call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,ll,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,f_rimef(1,jsta_2l,ll)) if(debugprint)print*,'sample l ',VarName,' = ',ll,f_rimef(im/2,(jsta+jend)/2,ll) if(debugprint)print*,'max min ',VarName,' = ',ll,maxval(f_rimef(:,:,ll)),minval(f_rimef(:,:,ll)) end do ! do loop for l varname='cldfra' VcoordName='mid layer' do l=1,lm ! ll=lm-l+1 ll=l call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,ll,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,cfr(1,jsta_2l,ll)) if(debugprint)print*,'sample l ',VarName,' = ',ll,cfr(im/2,(jsta+jend)/2,ll) end do ! do loop for l varname='sr' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sr) if(debugprint)print*,'sample ',VarName,' = ',sr(im/2,(jsta+jend)/2) varname='cfrach' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,cfrach) if(debugprint)print*,'sample ',VarName,' = ',cfrach(im/2,(jsta+jend)/2) varname='cfracl' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,cfracl) if(debugprint)print*,'sample ',VarName,' = ',cfracl(im/2,(jsta+jend)/2) varname='cfracm' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,cfracm) if(debugprint)print*,'sample ',VarName,' = ',cfracm(im/2,(jsta+jend)/2) varname='islope' !??? VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,islope) if(debugprint)print*,'sample ',VarName,' = ',islope(im/2,(jsta+jend)/2) VarName='cmc' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,cmc) if(debugprint)print*,'sample ',VarName,' = ',cmc(im/2,(jsta+jend)/2) varname='grnflx' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,grnflx) if(debugprint)print*,'sample ',VarName,' = ',grnflx(im/2,(jsta+jend)/2) varname='pctsno' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,pctsno) if(debugprint)print*,'sample ',VarName,' = ',pctsno(im/2,(jsta+jend)/2) varname='soiltb' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,soiltb) if(debugprint)print*,'sample ',VarName,' = ',soiltb(im/2,(jsta+jend)/2) if(debugprint)then do j=jsta,jend do i=1,im if(soiltb(i,j)>350.)print*,'large soiltb=' end do end do end if varname='vegfrc' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,vegfrc) if(debugprint)print*,'sample ',VarName,' = ',vegfrc(im/2,(jsta+jend)/2) do l=1,nsoil VarName='sh2o' VcoordName='soil layer' call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sh2o(1,jsta_2l,l)) if(debugprint)print*,'sample l ',VarName,' = ',l,sh2o(im/2,(jsta+jend)/2,l) end do do l=1,nsoil VarName='smc' VcoordName='soil layer' call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,smc(1,jsta_2l,l)) if(debugprint)print*,'sample l ',VarName,' = ',l,smc(im/2,(jsta+jend)/2,l) end do do l=1,nsoil VarName='stc' VcoordName='soil layer' call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,stc(1,jsta_2l,l)) if(debugprint)print*,'sample l ',VarName,' = ',l,stc(im/2,(jsta+jend)/2,l) end do VarName='pres' VcoordName='layer' do l=1,lp1 ! ll=lp1-l+1 ll=l call getrecn(recname,reclevtyp,reclev,nrec,varname,VcoordName,ll,recn) if(recn/=0) then fldst=(recn-1)*fldsize do j=jsta,jend js=(j-jsta)*im do i=1,im pint(i,j,ll)=tmp(i+js+fldst) enddo enddo else print*,'fail to read ', varname,' at lev ',ll, 'stopping' stop endif if(debugprint)print*,'sample l ',VarName,' = ',ll,pint(im/2,(jsta+jend)/2,ll) if(l /= 1)then ! assuming post counts from top down do j=jsta,jend do i=1,im ALPINT(I,J,LL)=ALOG(PINT(I,J,LL)) end do end do end if end do ! do loop for l ! do l = 1, lp1 l=1 do j = jsta, jend do i = 1, im if(pint(i,j,l) /= 0.0)then ALPINT(I,J,L)=ALOG(PINT(I,J,L)) else ALPINT(I,J,L)=spval end if end do end do ! end do do l = 2, lp1 do j = jsta_2l, jend_2u do i = 1, im PMID(i,j,l-1 ) = (PINT(I,J,L-1)+ & PINT(I,J,L))*0.5 ! representative of what model does end do end do if(debugprint)print*,'sample l, PMID = ',l-1,pmid(im/2,(jsta+jend)/2,l-1) end do if(gridtype=='E')then do l = 1, lm call exch(PMID(1:IM,JSTA_2L:JEND_2U,L)) do j = jsta, jend do i = 1, im-MOD(J,2) IF(J .EQ. 1 .AND. I .LT. IM)THEN !SOUTHERN BC PMIDV(I,J,L)=0.5*(PMID(I,J,L)+PMID(I+1,J,L)) ELSE IF(J.EQ.JM .AND. I.LT.IM)THEN !NORTHERN BC PMIDV(I,J,L)=0.5*(PMID(I,J,L)+PMID(I+1,J,L)) ELSE IF(I .EQ. 1 .AND. MOD(J,2) .EQ. 0) THEN !WESTERN EVEN BC PMIDV(I,J,L)=0.5*(PMID(I,J-1,L)+PMID(I,J+1,L)) ELSE IF(I .EQ. IM .AND. MOD(J,2) .EQ. 0 & .AND. J .LT. JM) THEN !EASTERN EVEN BC PMIDV(I,J,L)=0.5*(PMID(I,J-1,L)+PMID(I,J+1,L)) ELSE IF (MOD(J,2) .LT. 1) THEN PMIDV(I,J,L)=0.25*(PMID(I,J,L)+PMID(I-1,J,L) & +PMID(I,J+1,L)+PMID(I,J-1,L)) ELSE PMIDV(I,J,L)=0.25*(PMID(I,J,L)+PMID(I+1,J,L) & +PMID(I,J+1,L)+PMID(I,J-1,L)) END IF end do end do end do else if(gridtype=='B')then do l = 1, lm call exch(PMID(1:IM,JSTA_2L:JEND_2U,L)) do j = jsta, jend_m do i = 1, im-1 PMIDV(I,J,L)=0.25*(PMID(I,J,L)+PMID(I+1,J,L) & +PMID(I,J+1,L)+PMID(I+1,J+1,L)) end do end do end do end if write(0,*)' after PMIDV' !!!!! COMPUTE Z do j = jsta, jend do i = 1, im ZINT(I,J,LM+1)=FIS(I,J)/G if (I .eq. im/2 .and. J .eq.(jsta+jend)/2 ) then write(6,*) 'G,ZINT: ', G,ZINT(I,J,LM+1) endif FI(I,J,1)=FIS(I,J) end do end do ! SECOND, INTEGRATE HEIGHT HYDROSTATICLY DO L=LM,1,-1 do j = jsta, jend do i = 1, im FI(I,J,2)=HTM(I,J,L)*T(I,J,L)*(Q(I,J,L)*D608+1.0)*RD* & (ALPINT(I,J,L+1)-ALPINT(I,J,L))+FI(I,J,1) ZINT(I,J,L)=FI(I,J,2)/G if(i==im/2.and.j==(jsta+jend)/2) & print*,'L,sample HTM,T,Q,ALPINT(L+1),ALPINT(l),ZINT= ' & ,l,HTM(I,J,L),T(I,J,L),Q(I,J,L),ALPINT(I,J,L+1), & ALPINT(I,J,L),ZINT(I,J,L) FI(I,J,1)=FI(I,J,2) ENDDO ENDDO END DO print*,'finish deriving geopotential in nmm' write(0,*)' after ZINT lm=',lm,' js=',js,' je=',je,' im=',im write(0,*)' zmid lbounds=',lbound(zmid),' ubounds=',ubound(zmid) write(0,*)' zint lbounds=',lbound(zint),' ubounds=',ubound(zint) write(0,*)' pmid lbounds=',lbound(pmid),' ubounds=',ubound(pmid) write(0,*)' pint lbounds=',lbound(pint),' ubounds=',ubound(pint) ! DO L=1,LM ! write(0,*)' zmid l=',l DO J=Jsta,Jend ! write(0,*)' zmid j=',j DO I=1,IM ! write(0,*)' zmid i=',i ! ZMID(I,J,L)=(ZINT(I,J,L+1)+ZINT(I,J,L))*0.5 ! ave of z ! write(0,*)' pmid=',pmid(i,j,l) ! write(0,*)' pint=',pint(i,j,l),pint(i,j,l+1) ! write(0,*)' zint=',zint(i,j,l),zint(i,j,l+1) FACT=(ALOG(PMID(I,J,L))-ALOG(PINT(I,J,L)))/ & (ALOG(PINT(I,J,L+1))-ALOG(PINT(I,J,L))) ZMID(I,J,L)=ZINT(I,J,L)+(ZINT(I,J,L+1)-ZINT(I,J,L))*FACT ENDDO ENDDO ENDDO VarName='vvel' VcoordName='mid layer' do l=1,lm ! ll=lm-l+1 ll=l call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,ll,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,wh(1,jsta_2l,ll)) if(debugprint)print*,'sample l ',VarName,' = ',ll,wh(im/2,(jsta+jend)/2,ll) end do ! do loop for l VarName='acfrcv' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,acfrcv) if(debugprint)print*,'sample ',VarName,' = ',acfrcv(im/2,(jsta+jend)/2) VarName='acfrst' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,acfrst) if(debugprint)print*,'sample ',VarName,' = ',acfrst(im/2,(jsta+jend)/2) !insert-mp VarName='ssroff' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,ssroff) if(debugprint)print*,'sample ',VarName,' = ',ssroff(im/2,(jsta+jend)/2) ! reading UNDERGROUND RUNOFF VarName='bgroff' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,bgroff) if(debugprint)print*,'sample ',VarName,' = ',bgroff(im/2,(jsta+jend)/2) VarName='rlwin' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,rlwin) if(debugprint)print*,'sample ',VarName,' = ',rlwin(im/2,(jsta+jend)/2) VarName='rlwtoa' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,rlwtoa) if(debugprint)print*,'sample ',VarName,' = ',rlwtoa(im/2,(jsta+jend)/2) VarName='alwin' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,alwin) if(debugprint)print*,'sample ',VarName,' = ',alwin(im/2,(jsta+jend)/2) VarName='alwout' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,alwout) if(debugprint)print*,'sample ',VarName,' = ',alwout(im/2,(jsta+jend)/2) VarName='alwtoa' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,alwtoa) if(debugprint)print*,'sample ',VarName,' = ',alwtoa(im/2,(jsta+jend)/2) VarName='rswin' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,rswin) if(debugprint)print*,'sample ',VarName,' = ',rswin(im/2,(jsta+jend)/2) VarName='rswinc' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,rswinc) if(debugprint)print*,'sample ',VarName,' = ',rswinc(im/2,(jsta+jend)/2) VarName='rswout' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,rswout) if(debugprint)print*,'sample ',VarName,' = ',rswout(im/2,(jsta+jend)/2) VarName='aswin' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,aswin) if(debugprint)print*,'sample ',VarName,' = ',aswin(im/2,(jsta+jend)/2) VarName='aswout' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,aswout) if(debugprint)print*,'sample ',VarName,' = ',aswout(im/2,(jsta+jend)/2) VarName='aswtoa' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,aswtoa) if(debugprint)print*,'sample ',VarName,' = ',aswtoa(im/2,(jsta+jend)/2) VarName='sfcshx' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sfcshx) if(debugprint)print*,'sample ',VarName,' = ',sfcshx(im/2,(jsta+jend)/2) VarName='sfclhx' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sfclhx) if(debugprint)print*,'sample ',VarName,' = ',sfclhx(im/2,(jsta+jend)/2) VarName='subshx' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,subshx) if(debugprint)print*,'sample ',VarName,' = ',subshx(im/2,(jsta+jend)/2) VarName='snopcx' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,snopcx) if(debugprint)print*,'sample ',VarName,' = ',snopcx(im/2,(jsta+jend)/2) VarName='sfcuvx' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sfcuvx) if(debugprint)print*,'sample ',VarName,' = ',sfcuvx(im/2,(jsta+jend)/2) VarName='potevp' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,potevp) if(debugprint)print*,'sample ',VarName,' = ',potevp(im/2,(jsta+jend)/2) varname='rlwtt' VcoordName='mid layer' do l=1,lm ! ll=lm-l+1 ll=l call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,ll,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,rlwtt(1,jsta_2l,ll)) if(debugprint)print*,'sample l ',VarName,' = ',ll,rlwtt(im/2,(jsta+jend)/2,ll) end do ! do loop for l varname='rswtt' VcoordName='mid layer' do l=1,lm ! ll=lm-l+1 ll=l call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,ll,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,rswtt(1,jsta_2l,ll)) if(debugprint)print*,'sample l ',VarName,' = ',ll,rswtt(im/2,(jsta+jend)/2,ll) end do ! do loop for l where(rlwtt/=spval .and. rswtt/=spval)ttnd=rswtt+rlwtt varname='tcucn' VcoordName='mid layer' do l=1,lm ! ll=lm-l+1 ll=l call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,ll,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,tcucn(1,jsta_2l,ll)) if(debugprint)print*,'sample l ',VarName,' = ',ll,tcucn(im/2,(jsta+jend)/2,ll) end do ! do loop for l varname='train' VcoordName='mid layer' do l=1,lm ! ll=lm-l+1 ll=l call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,ll,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,train(1,jsta_2l,ll)) if(debugprint)print*,'sample l ',VarName,' = ',ll,train(im/2,(jsta+jend)/2,ll) end do ! do loop for l VarName='cfrcv' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,ncfrcv) if(debugprint)print*,'sample ',VarName,' = ',ncfrcv(im/2,(jsta+jend)/2) VarName='cfrst' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,ncfrst) if(debugprint)print*,'sample ',VarName,' = ',ncfrst(im/2,(jsta+jend)/2) !-- Changes to NMMB to allow for counters to vary during the forecast by making them ! 2D arrays in order to get around an ESMF limitation (Ferrier 13 Aug 2009) VarName='avrain' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,buf) AVRAIN=buf(im/2,(jsta+jend)/2) if(debugprint)print*,'sample ',VarName,' = ',AVRAIN VarName='avcnvc' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,buf) AVCNVC=buf(im/2,(jsta+jend)/2) if(debugprint)print*,'sample ',VarName,' = ',AVCNVC VarName='ardlw' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,buf) ARDLW=buf(im/2,(jsta+jend)/2) if(debugprint)print*,'sample ',VarName,' = ',ARDLW VarName='ardsw' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,buf) ARDSW=buf(im/2,(jsta+jend)/2) if(debugprint)print*,'sample ',VarName,' = ',ARDSW VarName='asrfc' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,buf) ASRFC=buf(im/2,(jsta+jend)/2) if(debugprint)print*,'sample ',VarName,' = ',ASRFC ! reading 10 m wind VarName='u10' VcoordName='10 m above gnd' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,u10h) ! Chuang Aug 2012: 10 m winds are computed on mass points in the model ! post interpolates them onto V points because copygb interpolates ! wind points differently and 10 m winds are identified as 33/34 call h2u(u10h,u10) if(debugprint)print*,'sample ',VarName,' = ',u10(im/2,(jsta+jend)/2) VarName='v10' VcoordName='10 m above gnd' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,v10h) call h2u(v10h,v10) if(debugprint)print*,'sample ',VarName,' = ',v10(im/2,(jsta+jend)/2) VarName='u10max' VcoordName='10 m above gnd' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,u10max) if(debugprint)print*,'sample ',VarName,' = ',u10max(im/2,(jsta+jend)/2) VarName='v10max' VcoordName='10 m above gnd' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,v10max) if(debugprint)print*,'sample ',VarName,' = ',v10max(im/2,(jsta+jend)/2) ! reading SMSTAV VarName='smstav' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,smstav) if(debugprint)print*,'sample ',VarName,' = ',smstav(im/2,(jsta+jend)/2) if(debugprint)print*,'MAX/MIN ',VarName,' = ' & ,maxval(smstav),minval(smstav) VarName='smstot' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,smstot) if(debugprint)print*,'sample ',VarName,' = ',smstot(im/2,(jsta+jend)/2) ! reading VEGETATION TYPE VarName='vgtyp' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sfcevp) ! temporary use sfcevp because it's real in nemsio ! do j=jsta,jend ! do i=1,im ! if(sfcevp(i,j)> 27.0 .or. sfcevp(i,j)<1.0)print*, & ! 'bad vegtype=',i,j,sfcevp(i,j) ! end do ! end do where(sfcevp /= spval)IVGTYP=nint(sfcevp) if(debugprint)print*,'sample ',VarName,' = ',IVGTYP(im/2,(jsta+jend)/2) sfcevp=spval VarName='sltyp' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sfcevp) ! temporary use sfcevp because it's real in nemsio where(sfcevp /= spval)ISLTYP=nint(sfcevp) if(debugprint)print*,'sample ',VarName,' = ',ISLTYP(im/2,(jsta+jend)/2) sfcevp=spval VarName='sfcevp' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sfcevp) if(debugprint)print*,'sample ',VarName,' = ',sfcevp(im/2,(jsta+jend)/2) VarName='sfcexc' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sfcexc) if(debugprint)print*,'sample ',VarName,' = ',sfcexc(im/2,(jsta+jend)/2) if(debugprint)print*,'MAX/MIN ',VarName,' = ' & ,maxval(sfcexc),minval(sfcexc) VarName='acsnow' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,acsnow) if(debugprint)print*,'sample ',VarName,' = ',acsnow(im/2,(jsta+jend)/2) VarName='acsnom' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,acsnom) if(debugprint)print*,'sample ',VarName,' = ',acsnom(im/2,(jsta+jend)/2) VarName='tsea' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,sst) if(debugprint)print*,'sample ',VarName,' = ',sst(im/2,(jsta+jend)/2) ! VarName='EL_PBL' ! not in nems io yet VarName='xlen_mix' VcoordName='mid layer' do l=1,lm ! ll=lm-l+1 ll=l call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,ll,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,EL_PBL(1,jsta_2l,ll)) if(debugprint)print*,'sample l ',VarName,' = ',ll,EL_PBL(im/2,(jsta+jend)/2,ll) end do ! do loop for l VarName='exch_h' VcoordName='mid layer' do l=1,lm ! ll=lm-l+1 ll=l call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,ll,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,exch_h(1,jsta_2l,ll)) if(debugprint)print*,'sample l ',VarName,' = ',ll,exch_h(im/2,(jsta+jend)/2,ll) end do ! do loop for l VarName='thz0' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,thz0) if(debugprint)print*,'sample ',VarName,' = ',thz0(im/2,(jsta+jend)/2) VarName='qz0' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,qz0) if(debugprint)print*,'sample ',VarName,' = ',qz0(im/2,(jsta+jend)/2) VarName='uz0' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,uz0) if(debugprint)print*,'sample ',VarName,' = ',uz0(im/2,(jsta+jend)/2) VarName='vz0' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,vz0) if(debugprint)print*,'sample ',VarName,' = ',vz0(im/2,(jsta+jend)/2) ! ! Very confusing story ... ! ! Retrieve htop and hbot => They are named CNVTOP, CNVBOT in the model and ! with HBOTS,HTOPS (shallow conv) and HBOTD,HTOPD (deep conv) represent ! the 3 sets of convective cloud base/top arrays tied to the frequency ! that history files are written. ! ! IN THE *MODEL*, arrays HBOT,HTOP are similar to CNVTOP,CNVBOT but are ! used in radiation and are tied to the frequency of radiation updates. ! ! For historical reasons model arrays CNVTOP,CNVBOT are renamed HBOT,HTOP ! and manipulated throughout the post. ! retrieve htop and hbot ! VarName='HTOP' VarName='cnvtop' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,htop) where(htop /= spval)htop=float(lm)-htop+1.0 ! where(htop /= spval .and. htop > lm)htop=lm*1.0 if(debugprint)print*,'sample ',VarName,' = ',htop(im/2,(jsta+jend)/2) ! VarName='HBOT' VarName='cnvbot' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,hbot) where(hbot /= spval)hbot=float(lm)-hbot+1.0 ! where(hbot /= spval .and. hbot > lm)hbot=lm*1.0 if(debugprint)print*,'sample ',VarName,' = ',hbot(im/2,(jsta+jend)/2) VarName='htopd' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,htopd) where(htopd /= spval)htopd=float(lm)-htopd+1.0 ! where(htopd /= spval .and. htopd > lm)htopd=lm*1.0 if(debugprint)print*,'sample ',VarName,' = ',htopd(im/2,(jsta+jend)/2) VarName='hbotd' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,hbotd) where(hbotd /= spval)hbotd=float(lm)-hbotd+1.0 ! where(hbotd /= spval .and. hbotd > lm)hbotd=lm*1.0 if(debugprint)print*,'sample ',VarName,' = ',hbotd(im/2,(jsta+jend)/2) VarName='htops' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,htops) where(htops /= spval)htops=float(lm)-htops+1.0 ! where(htops /= spval .and. htops > lm)htops=lm*1.0 if(debugprint)print*,'sample ',VarName,' = ',htops(im/2,(jsta+jend)/2) VarName='hbots' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,hbots) where(hbots /= spval)hbots=float(lm)-hbots+1.0 ! where(hbots /= spval .and. hbots > lm)hbots=lm*1.0 if(debugprint)print*,'sample ',VarName,' = ',hbots(im/2,(jsta+jend)/2) VarName='cuppt' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,cuppt) if(debugprint)print*,'sample ',VarName,' = ',cuppt(im/2,(jsta+jend)/2) VarName='cprate' VcoordName='sfc' l=1 call assignnemsiovar(im,jsta,jend,jsta_2l,jend_2u & ,l,nrec,fldsize,spval,tmp & ,recname,reclevtyp,reclev,VarName,VcoordName & ,cprate) if(debugprint)print*,'sample ',VarName,' = ',cprate(im/2,(jsta+jend)/2) deallocate(tmp,recname,reclevtyp,reclev) !!!! DONE GETTING do l = 1, lm do j = jsta, jend do i = 1, im IF(ABS(T(I,J,L)).GT.1.0E-3) & OMGA(I,J,L) = -WH(I,J,L)*PMID(I,J,L)*G/ & (RD*T(I,J,L)*(1.+D608*Q(I,J,L))) end do end do end do write(0,*)' after OMGA' THL=210. PLQ=70000. CALL TABLE(PTBL,TTBL,PT, & RDQ,RDTH,RDP,RDTHE,PL,THL,QS0,SQS,STHE,THE0) CALL TABLEQ(TTBLQ,RDPQ,RDTHEQ,PLQ,THL,STHEQ,THE0Q) write(0,*)' after TABLEQ' ! ! IF(ME.EQ.0)THEN WRITE(6,*)' SPL (POSTED PRESSURE LEVELS) BELOW: ' WRITE(6,51) (SPL(L),L=1,LSM) 50 FORMAT(14(F4.1,1X)) 51 FORMAT(8(F8.1,1X)) ENDIF ! ! COMPUTE DERIVED TIME STEPPING CONSTANTS. ! !MEB need to get DT ! DT = 120. !MEB need to get DT ! NPHS = 4 !MEB need to get physics DT DTQ2 = DT * NPHS !MEB need to get physics DT TSPH = 3600./DT !MEB need to get DT TSRFC=float(NSRFC)/TSPH IF(NSRFC.EQ.0)TSRFC=float(ifhr) !in case buket does not get emptied TRDLW=float(NRDLW)/TSPH IF(NRDLW.EQ.0)TRDLW=float(ifhr) !in case buket does not get emptied TRDSW=float(NRDSW)/TSPH IF(NRDSW.EQ.0)TRDSW=float(ifhr) !in case buket does not get emptied THEAT=float(NHEAT)/TSPH IF(NHEAT.EQ.0)THEAT=float(ifhr) !in case buket does not get emptied TCLOD=float(NCLOD)/TSPH IF(NCLOD.EQ.0)TCLOD=float(ifhr) !in case buket does not get emptied TPREC=float(NPREC)/TSPH IF(NPREC.EQ.0)TPREC=float(ifhr) !in case buket does not get emptied ! TPREC=float(ifhr) print*,'TSRFC TRDLW TRDSW THEAT TCLOD TPREC= ' & ,TSRFC, TRDLW, TRDSW, THEAT, TCLOD, TPREC !MEB need to get DT !how am i going to get this information? ! NPREC = INT(TPREC *TSPH+D50) ! NHEAT = INT(THEAT *TSPH+D50) ! NCLOD = INT(TCLOD *TSPH+D50) ! NRDSW = INT(TRDSW *TSPH+D50) ! NRDLW = INT(TRDLW *TSPH+D50) ! NSRFC = INT(TSRFC *TSPH+D50) !how am i going to get this information? ! ! IF(ME.EQ.0)THEN ! WRITE(6,*)' ' ! WRITE(6,*)'DERIVED TIME STEPPING CONSTANTS' ! WRITE(6,*)' NPREC,NHEAT,NSRFC : ',NPREC,NHEAT,NSRFC ! WRITE(6,*)' NCLOD,NRDSW,NRDLW : ',NCLOD,NRDSW,NRDLW ! ENDIF ! ! COMPUTE DERIVED MAP OUTPUT CONSTANTS. DO L = 1,LSM ALSL(L) = ALOG(SPL(L)) END DO write(0,*)' after ALSL' ! !HC WRITE IGDS OUT FOR WEIGHTMAKER TO READ IN AS KGDSIN if(me.eq.0)then print*,'writing out igds' igdout=110 ! open(igdout,file='griddef.out',form='unformatted' ! + ,status='unknown') IF(MAPTYPE.EQ.203)THEN !A STAGGERED E-GRID WRITE(igdout)203 WRITE(igdout)im WRITE(igdout)jm WRITE(igdout)LATSTART WRITE(igdout)LONSTART WRITE(igdout)136 WRITE(igdout)CENLAT WRITE(igdout)CENLON WRITE(igdout)DXVAL WRITE(igdout)DYVAL WRITE(igdout)64 WRITE(igdout)0 WRITE(igdout)0 WRITE(igdout)0 WRITE(igdout)LATLAST WRITE(igdout)LONLAST ELSE IF(MAPTYPE.EQ.205)THEN !A STAGGERED B-GRID WRITE(igdout)205 WRITE(igdout)im WRITE(igdout)jm WRITE(igdout)LATSTART WRITE(igdout)LONSTART WRITE(igdout)136 WRITE(igdout)CENLAT WRITE(igdout)CENLON WRITE(igdout)DXVAL WRITE(igdout)DYVAL WRITE(igdout)64 WRITE(igdout)LATLAST WRITE(igdout)LONLAST WRITE(igdout)0 WRITE(igdout)0 WRITE(igdout)0 END IF open(111,file='copygb_gridnav.txt',form='formatted' & ,status='unknown') IF(MAPTYPE.EQ.203)THEN !A STAGGERED E-GRID write(111,1000) 2*IM-1,JM,LATSTART,LONSTART,CENLON, & NINT(dxval*107.),NINT(dyval*110.),CENLAT,CENLAT ELSE IF(MAPTYPE.EQ.205)THEN !A STAGGERED B-GRID write(111,1000) IM,JM,LATSTART,LONSTART,CENLON, & NINT(dxval*107.),NINT(dyval*110.),CENLAT,CENLAT, & LATLAST,LONLAST END IF 1000 format('255 3 ',2(I4,x),I6,x,I7,x,'8 ',I7,x,2(I6,x),'0 64', & 3(x,I6),x,I7) close(111) ! IF (MAPTYPE.EQ.205)THEN !A STAGGERED B-GRID open(112,file='latlons_corners.txt',form='formatted' & ,status='unknown') write(112,1001)LATSTART,LONSTART,LATSE,LONSE,LATNW,LONNW, & LATLAST,LONLAST 1001 format(4(I6,x,I7,x)) close(112) ENDIF end if ! close all files call nemsio_close(nfile,iret=status) call nemsio_finalize() ! write(0,*)'end of INIT_NEMS' RETURN END