UPP  V11.0.0
 All Data Structures Files Functions Pages
SET_OUTFLDS.f
Go to the documentation of this file.
1 
5 
23  SUBROUTINE set_outflds(kth,th,kpv,pv)
24 !
25 
26 !
27 !
28 ! INCLUDE ETA GRID DIMENSIONS. SET/DERIVE PARAMETERS.
29 !
30  use xml_perl_data, only: paramset,post_avblflds
31  use grib2_module, only: num_pset,pset,nrecout,first_grbtbl,grib_info_init
32  use lookup_mod, only: itb,jtb,itbq,jtbq
33  use ctlblk_mod, only: npset, me, fld_info
34  use rqstfld_mod, only: mxfld, iget, ritehd, lvlsxml, datset, ident, &
35  iavblfld, nfld, lvls
36 !- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
37  implicit none
38 !
39 ! DECLARE VARIABLES.
40 !
41  integer, intent(in) :: kth,kpv
42  real, intent(in) :: th(kth),pv(kpv)
43 !
44  integer l,ifld,mfld,iavbl,irec,i,j
45  CHARACTER*50 avblgrb_name
46  logical :: found_fld
47 !
48 !******************************************************************************
49 ! START READCNTRL_XML HERE.
50 !
51 ! IF(ME==0)THEN
52 ! WRITE(6,*)'READCNTRL_XML: POSTING FCST HR ',IFHR,' FROM ', &
53 ! IHRST,'UTC ',SDAT(1),'-',SDAT(2),'-',SDAT(3),' RUN'
54 ! ENDIF
55 !
56 ! INITIALIZE VARIABLES.
57 ! ARRAY IGET IS THE "GET FIELD" FLAG ARRAY.
58 !
59  DO ifld=1,mxfld
60  iget(ifld) = -1
61  enddo
62 !
63 ! SET FLAG TO OPEN NEW OUTPUT FILE
64 !
65  lvls = 0
66  ritehd = .true.
67 
68 ! allocate(lvlsxml(MXLVL,num_post_afld))
69 
70 !$omp parallel do private(i,j)
71  DO j=1,size(lvlsxml,2)
72  DO i=1,size(lvlsxml,1)
73  lvlsxml(i,j) = 0
74  ENDDO
75  ENDDO
76 !
77  pset = paramset(npset)
78  datset = pset%datset
79  if (me==0)print *,'in SET_OUTFLDS, num_pset=',num_pset,'datset=',trim(pset%datset),'npset=',npset
80 !
81 ! NOW READ WHICH FIELDS ON
82 ! WHICH LEVELS TO INTERPOLATE TO THE OUTPUT GRID. THE
83 ! CHARACTER STRING "DONE" MARKS THE END OF THE OUTPUT
84 ! FIELD SPECIFICATIONS.
85 !
86  call grib_info_init()
87  mfld = size(pset%param)
88 
89 ! LinGan set post_avblflds to current working paramset
90 ! This is required for flat file solution to work for nmm
91 
92  post_avblflds%param =>paramset(npset)%param
93  if (me==0) then
94  write(0,*)'Size of pset is: ',mfld
95  write(0,*)'datset is: ',datset
96  write(0,*)'MXFLD is: ',mxfld
97  write(0,*)'size of lvlsxml: ',size(lvlsxml)
98  write(0,*)'size of post_avblflds param',size(post_avblflds%param)
99  endif
100  if(size(post_avblflds%param) <= 0) then
101  write(0,*)'WRONG: post available fields not ready!!!'
102  return
103  endif
104 !
105  ifld = 0
106  irec = 0
107  DO i=1, mfld
108 
109 ! SEE IF REQUESTED FIELD IS AVAILABLE. IF NOT,
110 ! WRITE MESSAGE TO 6 AND DECREMENT FIELD
111 ! COUNTER BY ONE. THEN READ NEXT REQUESTED FIELD.
112 !
113 ! GET POST AVAILBLE FIELD INDEX NUMBER FOR EACH OUTPUT FIELDS IN PSET
114 !
115 
116  found_fld = .false.
117 
118 ! write(0,*)'cntfile,i=',i,'fld shortname=',trim(pset%param(i)%shortname)
119 ! write(0,*)'size(post_avblflds%param)=',size(post_avblflds%param)
120 
121  ifld = ifld + 1
122 
123 ! segmentation fault occurred on nmm i=112
124 
125  iavbl = post_avblflds%param(i)%post_avblfldidx
126  iget(iavbl) = ifld
127  ident(ifld) = iavbl
128  iavblfld(ifld) = i
129  found_fld = .true.
130  call set_lvlsxml(pset%param(i),ifld,irec,kpv,pv,kth,th)
131 
132  ENDDO
133 
134 !
135 ! ALL DONE FOUNDING REQUESTED FIELDS FOR current OUTPUT GRID.
136 ! SET NFLD TO TOTAL NUMBER OF REQUESTED OUTPUT FIELDS THAT
137 ! ARE AVAILABLE., SET NRECOUT to total number of OUTPUT records
138 ! NOTE: here NFLD i s total number of fields found in post_avblfld_table,
139 ! while nrecoutis the total number of grib messages that go
140 ! into the output file. One fieldmay contain many different levels,
141 ! which each different level will be counted as one record
142 !
143  nfld = ifld
144  nrecout = irec
145 ! Meng 04/19/18, add three fields for continous bucket
146 ! NRECOUT = IREC + 3
147  allocate(fld_info(nrecout+100))
148  do i=1,nrecout
149  fld_info(i)%ifld = 0
150  fld_info(i)%lvl = 0
151  fld_info(i)%lvl1 = 0
152  fld_info(i)%lvl2 = 0
153  fld_info(i)%ntrange = 0
154  fld_info(i)%tinvstat = 0
155  enddo
156  if(me==0)write(0,*)'in readxml. nfld=',nfld,'nrecout=',nrecout
157 !
158 ! skip creating ipv files if kth=0 and no isobaric fields are requested in ctl file
159 ! if(kth == 0 .and. iget(013) <= 0) go to 999
160 !
161 ! ECHO OUTPUT FIELDS/LEVELS TO 6.
162 !
163 ! IF(ME==0)THEN
164 ! WRITE(6,*)'BELOW ARE FIELD/LEVEL/SMOOTHING ', &
165 ! 'SPECIFICATIONS.,NFLD=',NFLD,'MXLVL=',MXLVL,'nrecout=',nrecout
166 ! ENDIF
167 ! DO 50 IFLD = 1,NFLD
168 ! IF(ME==0)THEN
169 ! i=IAVBLFLD(IFLD)
170 ! write(0,*)'readxml,ifld=',ifld,'iget(',IDENT(ifld),')=',iget(ident(ifld)),'iavbl=',IAVBLFLD(iget(ident(ifld))),'postvar=',trim(pset%param(i)%pname), &
171 ! trim(pset%param(i)%fixed_sfc1_type),'lvls=',LVLS(:,ifld)
172 ! if(size(pset%param(i)%level)>0) then
173 ! WRITE(0,*) pset%param(i)%level
174 ! endif
175 ! ENDIF
176 ! 50 CONTINUE
177 !
178 ! END OF ROUTINE.
179 !
180  999 CONTINUE
181 
182  if(me==0)print *,'end of read_postcntrl_xml'
183  RETURN
184  END