UPP v11.0.0
Loading...
Searching...
No Matches
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
subroutine set_outflds(kth, th, kpv, pv)
This routine reads the control file in xml format specifying field(s) to post, and save all the field...
Definition SET_OUTFLDS.f:24