54 integer :: error, ncid, rc, clb(2), cub(2)
55 integer :: i, j, localpet, npets, id_var
56 integer :: jda(8), jdow, jdoy, jday, id_dim
57 integer :: mm, mmm, mmp, mon1, mon2, idum(3)
59 real(esmf_kind_r8),
allocatable :: dummy3d(:,:,:)
60 real(esmf_kind_r8),
allocatable :: dummy3d_mon1(:,:,:)
61 real(esmf_kind_r8),
allocatable :: dummy3d_mon2(:,:,:)
62 real(esmf_kind_r8),
pointer :: lat_ptr(:,:), lon_ptr(:,:)
63 real(esmf_kind_r8),
allocatable :: lons(:), lats(:)
64 real :: rjday, dayhf(13), wei1m, wei2m
68 type(esmf_polekind_flag) :: polekindflag(2)
70 data dayhf/ 15.5, 45.0, 74.5,105.0,135.5,166.0, &
71 196.5,227.5,258.0,288.5,319.0,349.5,380.5/
77 print*,
"- CALL VMGetGlobal"
78 call esmf_vmgetglobal(vm, rc=rc)
79 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
80 call error_handler(
"IN VMGetGlobal", rc)
83 call esmf_vmget(vm, localpet=localpet, petcount=npets, rc=rc)
84 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
85 call error_handler(
"IN VMGet", rc)
87 if (localpet == 0)
then
92 error=nf90_inq_dimid(ncid,
'lat', id_dim)
93 call netcdf_err(error,
'reading lat id')
94 error=nf90_inquire_dimension(ncid,id_dim,len=idum(1))
95 call netcdf_err(error,
'reading lat')
97 error=nf90_inq_dimid(ncid,
'lon', id_dim)
98 call netcdf_err(error,
'reading lon id')
99 error=nf90_inquire_dimension(ncid,id_dim,len=idum(2))
100 call netcdf_err(error,
'reading lon')
102 error=nf90_inq_dimid(ncid,
'plev', id_dim)
103 call netcdf_err(error,
'reading plev id')
104 error=nf90_inquire_dimension(ncid,id_dim,len=idum(3))
105 call netcdf_err(error,
'reading plev')
108 call esmf_vmbroadcast(vm, idum, 3, 0, rc=rc)
109 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
110 call error_handler(
"IN VMBroadcast", rc)
119 if (localpet == 0)
then
120 error=nf90_inq_varid(ncid,
'lon', id_var)
121 call netcdf_err(error,
'reading lon field id' )
122 error=nf90_get_var(ncid, id_var, lons)
123 call netcdf_err(error,
'reading grid longitude' )
124 error=nf90_inq_varid(ncid,
'lat', id_var)
125 call netcdf_err(error,
'reading lat field id' )
126 error=nf90_get_var(ncid, id_var, lats)
127 call netcdf_err(error,
'reading grid latitude' )
131 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
132 call error_handler(
"IN VMGet", rc)
135 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
136 call error_handler(
"IN VMGet", rc)
142 polekindflag(1:2) = esmf_polekind_monopole
144 print*,
"- CALL GridCreate1PeriDim FOR THOMP MP CLIMO GRID."
147 polekindflag=polekindflag, &
150 coordsys=esmf_coordsys_sph_deg, &
151 regdecomp=(/1,npets/), &
152 indexflag=esmf_index_global, rc=rc)
153 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
154 call error_handler(
"IN GridCreate1PeriDim", rc)
156 print*,
"- CALL GridAddCoord FOR THOMP MP CLIMO GRID."
158 staggerloc=esmf_staggerloc_center, rc=rc)
159 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
160 call error_handler(
"IN GridAddCoord", rc)
166 print*,
"- CALL GridGetCoord FOR INPUT GRID X-COORD."
169 staggerloc=esmf_staggerloc_center, &
171 farrayptr=lon_ptr, rc=rc)
172 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
173 call error_handler(
"IN GridGetCoord", rc)
175 print*,
"- CALL GridGetCoord FOR INPUT GRID Y-COORD."
178 staggerloc=esmf_staggerloc_center, &
180 computationallbound=clb, &
181 computationalubound=cub, &
182 farrayptr=lat_ptr, rc=rc)
183 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
184 call error_handler(
"IN GridGetCoord", rc)
186 do i = clb(1), cub(1)
187 lon_ptr(i,:) = lons(i)
190 do j = clb(2), cub(2)
191 lat_ptr(:,j) = lats(j)
198 print*,
"- CALL FieldCreate FOR QNIFA INPUT CLIMO."
200 typekind=esmf_typekind_r8, &
201 staggerloc=esmf_staggerloc_center, &
202 ungriddedlbound=(/1/), &
204 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
205 call error_handler(
"IN FieldCreate", rc)
207 print*,
"- CALL FieldCreate FOR QNWFA INPUT CLIMO."
209 typekind=esmf_typekind_r8, &
210 staggerloc=esmf_staggerloc_center, &
211 ungriddedlbound=(/1/), &
213 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
214 call error_handler(
"IN FieldCreate", rc)
216 print*,
"- CALL FieldCreate FOR THOMP PRESS CLIMO."
218 typekind=esmf_typekind_r8, &
219 staggerloc=esmf_staggerloc_center, &
220 ungriddedlbound=(/1/), &
222 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
223 call error_handler(
"IN FieldCreate", rc)
244 call w3doxdat(jda,jdow,jdoy,jday)
245 rjday = float(jdoy) + float(jda(5)) / 24.
246 if(rjday < dayhf(1)) rjday = rjday + 365.
251 if(rjday >= dayhf(mmm) .and. rjday < dayhf(mmp))
then
258 wei1m = (dayhf(mon2)-rjday)/(dayhf(mon2)-dayhf(mon1))
263 print*,
"- BOUNDING MONTHS AND INTERPOLATION WEIGHTS: ", mon1, wei1m, mon2, wei2m
270 if (localpet == 0)
then
278 allocate(dummy3d(0,0,0))
279 allocate(dummy3d_mon1(0,0,0))
280 allocate(dummy3d_mon2(0,0,0))
283 if (localpet == 0)
then
284 print*,
"- READ QNIFA FOR BOUNDING MONTH 1"
285 error=nf90_inq_varid(ncid,
'nifa', id_var)
286 call netcdf_err(error,
'reading nifa field id' )
287 error=nf90_get_var(ncid, id_var, dummy3d_mon1, start=(/1,1,1,mon1/), &
289 call netcdf_err(error,
'reading nifa month1 field' )
290 print*,
"- READ QNIFA FOR BOUNDING MONTH 2"
291 error=nf90_get_var(ncid, id_var, dummy3d_mon2, start=(/1,1,1,mon2/), &
293 call netcdf_err(error,
'reading nifa month2 field' )
294 dummy3d(:,:,:) = wei1m * dummy3d_mon1 + wei2m * dummy3d_mon2
297 print*,
"- CALL FieldScatter FOR qnifa input climo."
299 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
300 call error_handler(
"IN FieldScatter", rc)
302 if (localpet == 0)
then
303 print*,
"- READ QNWFA FOR BOUNDING MONTH 1"
304 error=nf90_inq_varid(ncid,
'nwfa', id_var)
305 call netcdf_err(error,
'reading nwfa field id' )
306 error=nf90_get_var(ncid, id_var, dummy3d_mon1, start=(/1,1,1,mon1/), &
308 call netcdf_err(error,
'reading nwfa month1 field' )
309 print*,
"- READ QNWFA FOR BOUNDING MONTH 2"
310 error=nf90_get_var(ncid, id_var, dummy3d_mon2, start=(/1,1,1,mon2/), &
312 call netcdf_err(error,
'reading nwfa month2 field' )
313 dummy3d(:,:,:) = wei1m * dummy3d_mon1 + wei2m * dummy3d_mon2
316 print*,
"- CALL FieldScatter FOR qnwfa input climo."
318 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
319 call error_handler(
"IN FieldScatter", rc)
321 if (localpet == 0)
then
322 print*,
"- READ PRESSURE FOR BOUNDING MONTH 1"
323 error=nf90_inq_varid(ncid,
'prs', id_var)
324 call netcdf_err(error,
'reading prs field id' )
325 error=nf90_get_var(ncid, id_var, dummy3d_mon1, start=(/1,1,1,mon1/), &
327 call netcdf_err(error,
'reading prs month1 field' )
328 print*,
"- READ PRESSURE FOR BOUNDING MONTH 2"
329 error=nf90_get_var(ncid, id_var, dummy3d_mon2, start=(/1,1,1,mon2/), &
331 call netcdf_err(error,
'reading prs month2 field' )
332 dummy3d(:,:,:) = wei1m * dummy3d_mon1 + wei2m * dummy3d_mon2
333 error=nf90_close(ncid)
336 print*,
"- CALL FieldScatter FOR thomp press."
338 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
339 call error_handler(
"IN FieldScatter", rc)
341 deallocate(lons, lats, dummy3d, dummy3d_mon1, dummy3d_mon2)