SUBROUTINE SET_OUTFLDS(kth,kpv,pv) ! !$$$ SUBPROGRAM DOCUMENTATION BLOCK ! . . . ! SUBPROGRAM: READCNTRLgrb2_xml READS POST xml CONTROL FILE ! PRGRMMR: J. WANG ORG: NCEP/EMC DATE: 12-01-27 ! ! ABSTRACT: ! THIS ROUTINE READS THE CONTROL FILE IN XML FORMAT SPECIFYING ! FIELD(S) TO POST, AND SAVE ALL THE FIELD INFORMATION IN ! A DATATYPE array PSET ! ! PROGRAM HISTORY LOG: ! 01_27_2012 Jun Wang - INITIAL CODE ! ! USAGE: CALL READCNTRL_XML(kth,kpv,pv) ! INPUT ARGUMENT LIST: ! KTH ! KPV ! PV ! ! OUTPUT ARGUMENT LIST: ! NONE - ! ! OUTPUT FILES: ! NONE ! ! SUBPROGRAMS CALLED: ! UTILITIES: ! ! LIBRARY: ! COMMON - RQSTFLDGRB2 ! CTLBLK ! ! ATTRIBUTES: ! LANGUAGE: FORTRAN ! MACHINE : IBM !$$$ ! ! ! INCLUDE ETA GRID DIMENSIONS. SET/DERIVE PARAMETERS. ! use xml_data_post_t,only: paramset,post_avblflds use grib2_module, only: num_pset,pset,nrecout,first_grbtbl,grib_info_init use lookup_mod,only: ITB,JTB,ITBQ,JTBQ use ctlblk_mod, only: npset, me, fld_info ! use rqstfld_mod,only: num_post_afld,MXFLD,MXLVL,lvls,lvlsxml,iget use rqstfld_mod, only: mxfld, iget, ritehd, lvlsxml, datset, ident,& iavblfld, nfld, lvls !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none ! ! DECLARE VARIABLES. ! integer, intent(in) :: KTH,KPV real,intent(in) :: pv(kpv) ! integer L,IFLD,MFLD,IAVBL,IREC,I,J CHARACTER*50 AVBLGRB_NAME logical :: FOUND_FLD ! !****************************************************************************** ! START READCNTRL_XML HERE. ! ! IF(ME.EQ.0)THEN ! WRITE(6,*)'READCNTRL_XML: POSTING FCST HR ',IFHR,' FROM ', & ! IHRST,'UTC ',SDAT(1),'-',SDAT(2),'-',SDAT(3),' RUN' ! ENDIF ! ! INITIALIZE VARIABLES. ! ARRAY IGET IS THE "GET FIELD" FLAG ARRAY. ! DO 100 IFLD=1,MXFLD IGET(IFLD)=-1 100 CONTINUE ! ! SET FLAG TO OPEN NEW OUTPUT FILE ! LVLS=0 RITEHD = .TRUE. DO J=1,size(LVLSXML,2) DO I=1,size(LVLSXML,1) LVLSXML(I,J)=0 ENDDO ENDDO ! pset=paramset(npset) datset=pset%datset print *,'in readxml, num_pset=',num_pset,'datset=',trim(pset%datset),'npset=',npset ! ! NOW READ WHICH FIELDS ON ! WHICH LEVELS TO INTERPOLATE TO THE OUTPUT GRID. THE ! CHARACTER STRING "DONE" MARKS THE END OF THE OUTPUT ! FIELD SPECIFICATIONS. ! call grib_info_init() MFLD = size(pset%param) print *,'start reading control file,MFLD=',MFLD,'datset=',datset,MXFLD if(size(post_avblflds%param)<=0) then print *,'WRONG: post available fields not ready!!!' return endif ! IFLD=0 irec=0 DO I=1, MFLD ! SEE IF REQUESTED FIELD IS AVAILABLE. IF NOT, ! WRITE MESSAGE TO 6 AND DECREMENT FIELD ! COUNTER BY ONE. THEN READ NEXT REQUESTED FIELD. ! ! GET POST AVAILBLE FIELD INDEX NUMBER FOR EACH OUTPUT FIELDS IN PSET ! FOUND_FLD=.false. print *,'cntfile,i=',i,'fld shortname=',trim(pset%param(i)%shortname) doavbl: DO 20 J = 1,size(post_avblflds%param) if(trim(pset%param(i)%shortname)==trim(post_avblflds%param(j)%shortname)) then ! IFLD=IFLD+1 IAVBL=post_avblflds%param(j)%post_avblfldidx IGET(IAVBL)=IFLD IDENT(IFLD)=IAVBL IAVBLFLD(IFLD)=I FOUND_FLD=.true. call fill_psetfld(pset%param(i),post_avblflds%param(j)) call set_lvlsxml(pset%param(i),ifld,irec,kpv,pv) exit doavbl ! endif 20 ENDDO doavbl ! IF(ME.EQ.0.and..not.FOUND_FLD)THEN WRITE(0,*)'FIELD ',trim(pset%param(i)%pname)//trim( & & pset%param(i)%fixed_sfc1_type),' NOT AVAILABLE' ENDIF ! if(me==0) & ! print *,'in readxml,i=',i,'ifld=',ifld,'irec=',irec, & ! trim(pset%param(i)%pname),trim(pset%param(i)%fixed_sfc1_type), & ! 'lvl=',size(pset%param(i)%level),'lvlsxml(1,ifld)=',LVLSXML(1,IFLD), & ! 'ident(ifld)=',ident(ifld),'iget(ident(ifld))=',iget(ident(ifld)) ! ENDDO ! ! ALL DONE FOUNDING REQUESTED FIELDS FOR current OUTPUT GRID. ! SET NFLD TO TOTAL NUMBER OF REQUESTED OUTPUT FIELDS THAT ! ARE AVAILABLE., SET NRECOUT to total number of OUTPUT records ! NOTE: here NFLD i s total number of fields found in post_avblfld_table, ! while nrecoutis the total number of grib messages that go ! into the output file. One fieldmay contain many different levels, ! which each different level will be counted as one record ! NFLD = IFLD NRECOUT = IREC allocate(fld_info(NRECOUT+100)) do i=1,nrecout fld_info(i)%ifld=0 fld_info(i)%lvl=0 fld_info(i)%lvl1=0 fld_info(i)%lvl2=0 fld_info(i)%ntrange=0 fld_info(i)%tinvstat=0 enddo write(0,*)'in readxml. nfld=',nfld,'nrecout=',nrecout ! ! skip creating ipv files if kth=0 and no isobaric fields are requested in ctl file if(kth==0 .and. iget(013)<=0)go to 999 ! ! ECHO OUTPUT FIELDS/LEVELS TO 6. ! ! IF(ME.EQ.0)THEN ! WRITE(6,*)'BELOW ARE FIELD/LEVEL/SMOOTHING ', & ! 'SPECIFICATIONS.,NFLD=',NFLD,'MXLVL=',MXLVL,'nrecout=',nrecout ! ENDIF ! DO 50 IFLD = 1,NFLD ! IF(ME.EQ.0)THEN ! i=IAVBLFLD(IFLD) ! write(0,*)'readxml,ifld=',ifld,'iget(',IDENT(ifld),')=',iget(ident(ifld)),'iavbl=',IAVBLFLD(iget(ident(ifld))),'postvar=',trim(pset%param(i)%pname), & ! trim(pset%param(i)%fixed_sfc1_type),'lvls=',LVLS(:,ifld) ! if(size(pset%param(i)%level)>0) then ! WRITE(0,*) pset%param(i)%level ! endif ! ENDIF ! 50 CONTINUE ! ! END OF ROUTINE. ! 999 CONTINUE print *,'end of read_postcntrl_xml' RETURN END