14 use utilities,
only : error_handler, netcdf_err
122 integer,
intent(in) :: localpet, npets
124 if (trim(
input_type) ==
"gaussian_nemsio" .or. &
125 trim(
input_type) ==
"gfs_gaussian_nemsio" .or. &
163 integer,
intent(in) :: npets
165 character(len=250) :: the_file
167 integer :: i, j, rc, clb(2), cub(2), ncid, id_grid
168 integer(sfcio_intkind) :: rc2
169 integer(sigio_intkind) :: rc3
171 real(esmf_kind_r8),
allocatable :: latitude(:,:)
172 real(esmf_kind_r8),
allocatable :: longitude(:,:)
173 real(esmf_kind_r8),
pointer :: lat_src_ptr(:,:)
174 real(esmf_kind_r8),
pointer :: lon_src_ptr(:,:)
175 real(esmf_kind_r8),
pointer :: lat_corner_src_ptr(:,:)
176 real(esmf_kind_r8),
pointer :: lon_corner_src_ptr(:,:)
177 real(esmf_kind_r8) :: deltalon
178 real(esmf_kind_r8),
allocatable :: slat(:), wlat(:)
180 type(nemsio_gfile) :: gfile
181 type(esmf_polekind_flag) :: polekindflag(2)
182 type(sfcio_head) :: sfchead
183 type(sigio_head) :: sighead
185 print*,
"- DEFINE INPUT GRID OBJECT FOR GAUSSIAN DATA." 199 print*,
"- OPEN AND READ ", trim(the_file)
200 call sfcio_sropen(21, trim(the_file), rc2)
201 if (rc2 /= 0)
call error_handler(
"OPENING FILE", rc2)
202 call sfcio_srhead(21, sfchead, rc2)
203 if (rc2 /= 0)
call error_handler(
"READING FILE", rc2)
204 call sfcio_sclose(21, rc2)
208 print*,
"- OPEN AND READ ", trim(the_file)
209 call sigio_sropen(21, trim(the_file), rc3)
210 if (rc3 /= 0)
call error_handler(
"OPENING FILE", rc3)
211 call sigio_srhead(21, sighead, rc3)
212 if (rc3 /= 0)
call error_handler(
"READING FILE", rc3)
213 call sigio_sclose(21, rc3)
218 elseif (trim(
input_type) ==
"gaussian_netcdf")
then 220 print*,
'- OPEN AND READ: ',trim(the_file)
221 rc=nf90_open(trim(the_file),nf90_nowrite,ncid)
222 call netcdf_err(rc,
'opening file')
224 print*,
"- READ grid_xt" 225 rc=nf90_inq_dimid(ncid,
'grid_xt', id_grid)
226 call netcdf_err(rc,
'reading grid_xt id')
227 rc=nf90_inquire_dimension(ncid,id_grid,len=
i_input)
228 call netcdf_err(rc,
'reading grid_xt')
230 print*,
"- READ grid_yt" 231 rc=nf90_inq_dimid(ncid,
'grid_yt', id_grid)
232 call netcdf_err(rc,
'reading grid_yt id')
233 rc=nf90_inquire_dimension(ncid,id_grid,len=
j_input)
234 call netcdf_err(rc,
'reading grid_yt')
236 rc = nf90_close(ncid)
240 call nemsio_init(iret=rc)
242 print*,
"- OPEN AND READ ", trim(the_file)
243 call nemsio_open(gfile, the_file,
"read", iret=rc)
244 if (rc /= 0)
call error_handler(
"OPENING FILE", rc)
246 call nemsio_getfilehead(gfile, iret=rc, dimx=
i_input, dimy=
j_input)
247 if (rc /= 0)
call error_handler(
"READING FILE", rc)
249 call nemsio_close(gfile)
256 polekindflag(1:2) = esmf_polekind_monopole
258 print*,
"- CALL GridCreate1PeriDim FOR INPUT GRID." 259 input_grid = esmf_gridcreate1peridim(minindex=(/1,1/), &
261 polekindflag=polekindflag, &
264 coordsys=esmf_coordsys_sph_deg, &
265 regdecomp=(/1,npets/), &
266 indexflag=esmf_index_global, rc=rc)
267 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
268 call error_handler(
"IN GridCreate1PeriDim", rc)
270 print*,
"- CALL FieldCreate FOR INPUT GRID LATITUDE." 272 typekind=esmf_typekind_r8, &
273 staggerloc=esmf_staggerloc_center, &
274 name=
"input_grid_latitude", rc=rc)
275 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
276 call error_handler(
"IN FieldCreate", rc)
278 print*,
"- CALL FieldCreate FOR INPUT GRID LONGITUDE." 280 typekind=esmf_typekind_r8, &
281 staggerloc=esmf_staggerloc_center, &
282 name=
"input_grid_longitude", rc=rc)
283 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
284 call error_handler(
"IN FieldCreate", rc)
289 deltalon = 360.0_esmf_kind_r8 /
real(i_input,kind=esmf_kind_r8)
291 longitude(i,:) =
real((i-1),kind=esmf_kind_r8) * deltalon
296 call splat(4,
j_input, slat, wlat)
299 latitude(:,i) = 90.0_esmf_kind_r8 - (acos(slat(i))* 180.0_esmf_kind_r8 / &
300 (4.0_esmf_kind_r8*atan(1.0_esmf_kind_r8)))
303 deallocate(slat, wlat)
305 print*,
"- CALL FieldScatter FOR INPUT GRID LONGITUDE." 307 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
308 call error_handler(
"IN FieldScatter", rc)
310 print*,
"- CALL FieldScatter FOR INPUT GRID LATITUDE." 312 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
313 call error_handler(
"IN FieldScatter", rc)
315 print*,
"- CALL GridAddCoord FOR INPUT GRID." 317 staggerloc=esmf_staggerloc_center, rc=rc)
318 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
319 call error_handler(
"IN GridAddCoord", rc)
321 print*,
"- CALL GridGetCoord FOR INPUT GRID X-COORD." 324 staggerloc=esmf_staggerloc_center, &
326 farrayptr=lon_src_ptr, rc=rc)
327 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
328 call error_handler(
"IN GridGetCoord", rc)
330 print*,
"- CALL GridGetCoord FOR INPUT GRID Y-COORD." 333 staggerloc=esmf_staggerloc_center, &
335 computationallbound=clb, &
336 computationalubound=cub, &
337 farrayptr=lat_src_ptr, rc=rc)
338 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
339 call error_handler(
"IN GridGetCoord", rc)
341 do j = clb(2), cub(2)
342 do i = clb(1), cub(1)
343 lon_src_ptr(i,j) = longitude(i,j)
344 if (lon_src_ptr(i,j) > 360.0_esmf_kind_r8) lon_src_ptr(i,j) = lon_src_ptr(i,j) - 360.0_esmf_kind_r8
345 lat_src_ptr(i,j) = latitude(i,j)
349 print*,
"- CALL GridAddCoord FOR INPUT GRID." 351 staggerloc=esmf_staggerloc_corner, rc=rc)
352 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
353 call error_handler(
"IN GridAddCoord", rc)
355 print*,
"- CALL GridGetCoord FOR INPUT GRID X-COORD." 356 nullify(lon_corner_src_ptr)
358 staggerloc=esmf_staggerloc_corner, &
360 farrayptr=lon_corner_src_ptr, rc=rc)
361 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
362 call error_handler(
"IN GridGetCoord", rc)
364 print*,
"- CALL GridGetCoord FOR INPUT GRID Y-COORD." 365 nullify(lat_corner_src_ptr)
367 staggerloc=esmf_staggerloc_corner, &
369 computationallbound=clb, &
370 computationalubound=cub, &
371 farrayptr=lat_corner_src_ptr, rc=rc)
372 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
373 call error_handler(
"IN GridGetCoord", rc)
375 do j = clb(2), cub(2)
376 do i = clb(1), cub(1)
377 lon_corner_src_ptr(i,j) = longitude(i,1) - (0.5_esmf_kind_r8*deltalon)
378 if (lon_corner_src_ptr(i,j) > 360.0_esmf_kind_r8) lon_corner_src_ptr(i,j) = lon_corner_src_ptr(i,j) - 360.0_esmf_kind_r8
380 lat_corner_src_ptr(i,j) = 90.0_esmf_kind_r8
384 lat_corner_src_ptr(i,j) = -90.0_esmf_kind_r8
387 lat_corner_src_ptr(i,j) = 0.5_esmf_kind_r8 * (latitude(i,j-1)+ latitude(i,j))
391 deallocate(latitude,longitude)
410 character(len=500) :: the_file
412 integer,
intent(in) :: localpet, npets
414 integer :: id_tiles, id_dim, tile
415 integer :: extra, error, ncid
416 integer,
allocatable :: decomptile(:,:)
418 integer(esmf_kind_i8),
allocatable :: landmask_one_tile(:,:)
420 real(esmf_kind_r8),
allocatable :: latitude_one_tile(:,:)
421 real(esmf_kind_r8),
allocatable :: latitude_s_one_tile(:,:)
422 real(esmf_kind_r8),
allocatable :: latitude_w_one_tile(:,:)
423 real(esmf_kind_r8),
allocatable :: longitude_one_tile(:,:)
424 real(esmf_kind_r8),
allocatable :: longitude_s_one_tile(:,:)
425 real(esmf_kind_r8),
allocatable :: longitude_w_one_tile(:,:)
429 call netcdf_err(error,
'opening grid mosaic file')
431 print*,
"- READ NUMBER OF TILES" 432 error=nf90_inq_dimid(ncid,
'ntiles', id_tiles)
433 call netcdf_err(error,
'reading ntiles id')
435 call netcdf_err(error,
'reading ntiles')
437 error = nf90_close(ncid)
442 call error_handler(
"MUST RUN WITH A TASK COUNT THAT IS A MULTIPLE OF 6.", 1)
454 decomptile(:,tile)=(/1,extra/)
457 print*,
"- CALL GridCreateMosaic FOR INPUT MODEL GRID" 459 regdecompptile=decomptile, &
460 staggerloclist=(/esmf_staggerloc_center, esmf_staggerloc_corner, &
461 esmf_staggerloc_edge1, esmf_staggerloc_edge2/), &
462 indexflag=esmf_index_global, &
465 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
466 call error_handler(
"IN GridCreateMosaic", error)
472 print*,
"- CALL FieldCreate FOR INPUT GRID LATITUDE." 474 typekind=esmf_typekind_r8, &
475 staggerloc=esmf_staggerloc_center, &
476 name=
"input_grid_latitude", &
478 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
479 call error_handler(
"IN FieldCreate", error)
481 print*,
"- CALL FieldCreate FOR INPUT GRID LONGITUDE." 483 typekind=esmf_typekind_r8, &
484 staggerloc=esmf_staggerloc_center, &
485 name=
"input_grid_longitude", &
487 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
488 call error_handler(
"IN FieldCreate", error)
490 print*,
"- CALL FieldCreate FOR INPUT GRID LATITUDE_S." 492 typekind=esmf_typekind_r8, &
493 staggerloc=esmf_staggerloc_edge2, &
494 name=
"input_grid_latitude_s", &
496 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
497 call error_handler(
"IN FieldCreate", error)
499 print*,
"- CALL FieldCreate FOR INPUT GRID LONGITUDE_S." 501 typekind=esmf_typekind_r8, &
502 staggerloc=esmf_staggerloc_edge2, &
503 name=
"input_grid_longitude_s", &
505 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
506 call error_handler(
"IN FieldCreate", error)
508 print*,
"- CALL FieldCreate FOR INPUT GRID LATITUDE_W." 510 typekind=esmf_typekind_r8, &
511 staggerloc=esmf_staggerloc_edge1, &
512 name=
"input_grid_latitude_w", &
514 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
515 call error_handler(
"IN FieldCreate", error)
517 print*,
"- CALL FieldCreate FOR INPUT GRID LONGITUDE_W." 519 typekind=esmf_typekind_r8, &
520 staggerloc=esmf_staggerloc_edge1, &
521 name=
"input_grid_longitude_w", &
523 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
524 call error_handler(
"IN FieldCreate", error)
528 print*,
'- OPEN FIRST INPUT GRID OROGRAPHY FILE: ',trim(the_file)
529 error=nf90_open(trim(the_file),nf90_nowrite,ncid)
530 call netcdf_err(error,
'opening ororgraphy file')
531 print*,
"- READ GRID DIMENSIONS" 532 error=nf90_inq_dimid(ncid,
'lon', id_dim)
533 call netcdf_err(error,
'reading lon id')
534 error=nf90_inquire_dimension(ncid,id_dim,len=
i_input)
535 call netcdf_err(error,
'reading lon')
536 error=nf90_inq_dimid(ncid,
'lat', id_dim)
537 call netcdf_err(error,
'reading lat id')
538 error=nf90_inquire_dimension(ncid,id_dim,len=
j_input)
539 call netcdf_err(error,
'reading lat')
540 error = nf90_close(ncid)
542 print*,
"- I/J DIMENSIONS OF THE INPUT GRID TILES ",
i_input,
j_input 547 if (localpet == 0)
then 556 allocate(longitude_one_tile(0,0))
557 allocate(longitude_s_one_tile(0,0))
558 allocate(longitude_w_one_tile(0,0))
559 allocate(latitude_one_tile(0,0))
560 allocate(latitude_s_one_tile(0,0))
561 allocate(latitude_w_one_tile(0,0))
562 allocate(landmask_one_tile(0,0))
566 if (localpet == 0)
then 569 latitude_s_one_tile, latitude_w_one_tile, longitude_one_tile, &
570 longitude_s_one_tile, longitude_w_one_tile)
572 print*,
"- CALL FieldScatter FOR INPUT GRID LATITUDE. TILE IS: ", tile
573 call esmf_fieldscatter(
latitude_input_grid, latitude_one_tile, rootpet=0, tile=tile, rc=error)
574 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
575 call error_handler(
"IN FieldScatter", error)
576 print*,
"- CALL FieldScatter FOR INPUT GRID LONGITUDE. TILE IS: ", tile
577 call esmf_fieldscatter(
longitude_input_grid, longitude_one_tile, rootpet=0, tile=tile, rc=error)
578 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
579 call error_handler(
"IN FieldScatter", error)
580 print*,
"- CALL FieldScatter FOR INPUT GRID LATITUDE_S. TILE IS: ", tile
582 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
583 call error_handler(
"IN FieldScatter", error)
584 print*,
"- CALL FieldScatter FOR INPUT GRID LONGITUDE_S. TILE IS: ", tile
586 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
587 call error_handler(
"IN FieldScatter", error)
588 print*,
"- CALL FieldScatter FOR INPUT GRID LATITUDE_W. TILE IS: ", tile
590 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
591 call error_handler(
"IN FieldScatter", error)
592 print*,
"- CALL FieldScatter FOR INPUT GRID LONGITUDE_W. TILE IS: ", tile
594 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
595 call error_handler(
"IN FieldScatter", error)
598 deallocate(longitude_one_tile)
599 deallocate(longitude_s_one_tile)
600 deallocate(longitude_w_one_tile)
601 deallocate(latitude_one_tile)
602 deallocate(latitude_s_one_tile)
603 deallocate(latitude_w_one_tile)
604 deallocate(landmask_one_tile)
622 integer,
intent(in) :: npets
624 character(len=500) :: the_file
626 integer :: i, j, k, jdisc, jgdtn, jpdtn, lugb, lugi
627 integer :: jids(200), jgdt(200), jpdt(200), rc
628 integer :: kgds(200), nret, clb(2), cub(2)
633 real,
allocatable :: rlon(:,:),rlat(:,:),xpts(:,:),ypts(:,:)
634 real,
allocatable :: rlon_corner(:,:),rlat_corner(:,:)
635 real,
allocatable :: rlon_diff(:,:),rlat_diff(:,:)
636 real,
allocatable :: xpts_corner(:,:),ypts_corner(:,:)
637 real(esmf_kind_r8),
allocatable :: latitude(:,:)
638 real(esmf_kind_r8),
allocatable :: longitude(:,:)
639 real(esmf_kind_r8),
allocatable :: latitude_corner(:,:)
640 real(esmf_kind_r8),
allocatable :: longitude_corner(:,:)
641 real(esmf_kind_r8),
pointer :: lat_src_ptr(:,:)
642 real(esmf_kind_r8),
pointer :: lat_corner_src_ptr(:,:)
643 real(esmf_kind_r8),
pointer :: lon_src_ptr(:,:)
644 real(esmf_kind_r8),
pointer :: lon_corner_src_ptr(:,:)
646 type(esmf_polekind_flag) :: polekindflag(2)
648 type(gribfield) :: gfld
654 print*,
"- OPEN AND READ INPUT DATA GRIB2 FILE: ", trim(the_file)
655 call baopenr(lugb,the_file,rc)
656 if (rc /= 0)
call error_handler(
"OPENING FILE", rc)
670 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
672 if (rc /= 0)
call error_handler(
"DEGRIBBING INPUT FILE.", rc)
674 call baclose(lugb,rc)
676 if (gfld%igdtnum == 0)
then 677 print*,
"- INPUT DATA ON LAT/LON GRID." 679 elseif (gfld%igdtnum == 30)
then 680 print*,
"- INPUT DATA ON LAMBERT CONFORMAL GRID." 682 elseif (gfld%igdtnum == 32769)
then 683 print*,
"- INPUT DATA ON ROTATED LAT/LON GRID." 686 call error_handler(
"INPUT GRID TEMPLATE NOT SUPPORTED.", 2)
713 print*,
"- COMPUTE GRID CELL CENTER COORDINATES." 714 call gdswzd(kgds,1,(
i_input*
j_input),-9999.,xpts,ypts,rlon,rlat,nret)
717 call error_handler(
"GDSWZD RETURNED WRONG NUMBER OF POINTS.", 2)
720 deallocate(xpts, ypts)
724 xpts_corner(i,j) = float(i) - 0.5
725 ypts_corner(i,j) = float(j) - 0.5
729 print*,
"- COMPUTE GRID CELL CORNER COORDINATES." 730 call gdswzd(kgds,1,(
ip1_input*
jp1_input),-9999.,xpts_corner,ypts_corner,rlon_corner,rlat_corner,nret)
733 call error_handler(
"GDSWZD RETURNED WRONG NUMBER OF POINTS.", 2)
736 deallocate(xpts_corner, ypts_corner)
738 if (gfld%igdtnum == 0)
then 740 print*,
"- CALL GridCreate1PeriDim FOR INPUT GRID." 742 polekindflag(1:2) = esmf_polekind_monopole
744 input_grid = esmf_gridcreate1peridim(minindex=(/1,1/), &
746 polekindflag=polekindflag, &
749 coordsys=esmf_coordsys_sph_deg, &
750 regdecomp=(/1,npets/), &
751 indexflag=esmf_index_global, rc=rc)
755 print*,
"- CALL GridCreateNoPeriDim FOR INPUT GRID." 758 indexflag=esmf_index_global, &
763 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
764 call error_handler(
"IN GridCreate1PeriDim", rc)
766 print*,
"- CALL FieldCreate FOR INPUT GRID LATITUDE." 768 typekind=esmf_typekind_r8, &
769 staggerloc=esmf_staggerloc_center, &
770 name=
"input_grid_latitude", rc=rc)
771 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
772 call error_handler(
"IN FieldCreate", rc)
774 print*,
"- CALL FieldCreate FOR INPUT GRID LONGITUDE." 776 typekind=esmf_typekind_r8, &
777 staggerloc=esmf_staggerloc_center, &
778 name=
"input_grid_longitude", rc=rc)
779 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
780 call error_handler(
"IN FieldCreate", rc)
788 deallocate (rlat, rlon)
790 print*,
"- CALL FieldScatter FOR INPUT GRID LONGITUDE." 792 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
793 call error_handler(
"IN FieldScatter", rc)
795 print*,
"- CALL FieldScatter FOR INPUT GRID LATITUDE." 797 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
798 call error_handler(
"IN FieldScatter", rc)
800 print*,
"- CALL GridAddCoord FOR INPUT GRID." 802 staggerloc=esmf_staggerloc_center, rc=rc)
803 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
804 call error_handler(
"IN GridAddCoord", rc)
806 print*,
"- CALL GridGetCoord FOR INPUT GRID X-COORD." 809 staggerloc=esmf_staggerloc_center, &
811 farrayptr=lon_src_ptr, rc=rc)
812 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
813 call error_handler(
"IN GridGetCoord", rc)
815 print*,
"- CALL GridGetCoord FOR INPUT GRID Y-COORD." 818 staggerloc=esmf_staggerloc_center, &
820 computationallbound=clb, &
821 computationalubound=cub, &
822 farrayptr=lat_src_ptr, rc=rc)
823 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
824 call error_handler(
"IN GridGetCoord", rc)
826 do j = clb(2), cub(2)
827 do i = clb(1), cub(1)
828 lon_src_ptr(i,j) = longitude(i,j)
829 if (lon_src_ptr(i,j) > 360.0_esmf_kind_r8) lon_src_ptr(i,j) = lon_src_ptr(i,j) - 360.0_esmf_kind_r8
830 lat_src_ptr(i,j) = latitude(i,j)
834 deallocate(latitude, longitude)
839 latitude_corner = rlat_corner
840 longitude_corner = rlon_corner
842 deallocate (rlat_corner, rlon_corner)
844 print*,
"- CALL GridAddCoord FOR INPUT GRID." 846 staggerloc=esmf_staggerloc_corner, rc=rc)
847 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
848 call error_handler(
"IN GridAddCoord", rc)
850 print*,
"- CALL GridGetCoord FOR INPUT GRID X-COORD." 851 nullify(lon_corner_src_ptr)
853 staggerloc=esmf_staggerloc_corner, &
855 farrayptr=lon_corner_src_ptr, rc=rc)
856 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
857 call error_handler(
"IN GridGetCoord", rc)
859 print*,
"- CALL GridGetCoord FOR INPUT GRID Y-COORD." 860 nullify(lat_corner_src_ptr)
862 staggerloc=esmf_staggerloc_corner, &
864 computationallbound=clb, &
865 computationalubound=cub, &
866 farrayptr=lat_corner_src_ptr, rc=rc)
867 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
868 call error_handler(
"IN GridGetCoord", rc)
870 do j = clb(2), cub(2)
871 do i = clb(1), cub(1)
872 lon_corner_src_ptr(i,j) = longitude_corner(i,j)
873 if (lon_corner_src_ptr(i,j) > 360.0_esmf_kind_r8) lon_corner_src_ptr(i,j) = lon_corner_src_ptr(i,j) - 360.0_esmf_kind_r8
874 lat_corner_src_ptr(i,j) = latitude_corner(i,j)
878 deallocate(latitude_corner, longitude_corner)
897 integer,
intent(in) :: localpet, npets
899 character(len=500) :: the_file
901 integer :: error, ncid, extra
903 integer :: id_dim, id_grid_tiles
905 integer,
allocatable :: decomptile(:,:)
906 integer(esmf_kind_i8),
allocatable :: landmask_one_tile(:,:)
907 integer(esmf_kind_i8),
allocatable :: seamask_one_tile(:,:)
909 real(esmf_kind_r8),
allocatable :: latitude_one_tile(:,:)
910 real(esmf_kind_r8),
allocatable :: latitude_s_one_tile(:,:)
911 real(esmf_kind_r8),
allocatable :: latitude_w_one_tile(:,:)
912 real(esmf_kind_r8),
allocatable :: longitude_one_tile(:,:)
913 real(esmf_kind_r8),
allocatable :: longitude_s_one_tile(:,:)
914 real(esmf_kind_r8),
allocatable :: longitude_w_one_tile(:,:)
915 real(esmf_kind_r8),
allocatable :: terrain_one_tile(:,:)
921 call netcdf_err(error,
'opening grid mosaic file')
923 print*,
"- READ NUMBER OF TILES" 924 error=nf90_inq_dimid(ncid,
'ntiles', id_tiles)
925 call netcdf_err(error,
'reading ntile id')
927 call netcdf_err(error,
'reading ntiles')
928 error=nf90_inq_varid(ncid,
'gridtiles', id_grid_tiles)
929 call netcdf_err(error,
'reading gridtiles id')
932 print*,
"- READ TILE NAMES" 934 call netcdf_err(error,
'reading gridtiles')
936 error = nf90_close(ncid)
941 call error_handler(
"MUST RUN WITH TASK COUNT THAT IS A MULTIPLE OF # OF TILES.", 1)
950 print*,
'- OPEN FIRST TARGET GRID OROGRAPHY FILE: ',trim(the_file)
951 error=nf90_open(trim(the_file),nf90_nowrite,ncid)
952 call netcdf_err(error,
'opening orography file')
953 print*,
"- READ GRID DIMENSIONS" 954 error=nf90_inq_dimid(ncid,
'lon', id_dim)
955 call netcdf_err(error,
'reading lon id')
956 error=nf90_inquire_dimension(ncid,id_dim,len=
i_target)
957 call netcdf_err(error,
'reading lon')
958 error=nf90_inq_dimid(ncid,
'lat', id_dim)
959 call netcdf_err(error,
'reading lat id')
960 error=nf90_inquire_dimension(ncid,id_dim,len=
j_target)
961 call netcdf_err(error,
'reading lat')
962 error = nf90_close(ncid)
978 decomptile(:,tile)=(/1,extra/)
981 print*,
"- CALL GridCreateMosaic FOR TARGET GRID" 983 regdecompptile=decomptile, &
984 staggerloclist=(/esmf_staggerloc_center, esmf_staggerloc_corner, &
985 esmf_staggerloc_edge1, esmf_staggerloc_edge2/), &
986 indexflag=esmf_index_global, &
988 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
989 call error_handler(
"IN GridCreateMosaic", error)
996 print*,
"- CALL FieldCreate FOR TARGET GRID LANDMASK." 998 typekind=esmf_typekind_i8, &
999 staggerloc=esmf_staggerloc_center, &
1000 name=
"target_grid_landmask", rc=error)
1001 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1002 call error_handler(
"IN FieldCreate", error)
1004 print*,
"- CALL FieldCreate FOR TARGET GRID SEAMASK." 1006 typekind=esmf_typekind_i8, &
1007 staggerloc=esmf_staggerloc_center, &
1008 name=
"target_grid_seamask", rc=error)
1009 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1010 call error_handler(
"IN FieldCreate", error)
1012 print*,
"- CALL FieldCreate FOR TARGET GRID LATITUDE." 1014 typekind=esmf_typekind_r8, &
1015 staggerloc=esmf_staggerloc_center, &
1016 name=
"target_grid_latitude", rc=error)
1017 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1018 call error_handler(
"IN FieldCreate", error)
1020 print*,
"- CALL FieldCreate FOR TARGET GRID LATITUDE_S." 1022 typekind=esmf_typekind_r8, &
1023 staggerloc=esmf_staggerloc_edge2, &
1024 name=
"target_grid_latitude_s", rc=error)
1025 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1026 call error_handler(
"IN FieldCreate", error)
1028 print*,
"- CALL FieldCreate FOR TARGET GRID LATITUDE_W." 1030 typekind=esmf_typekind_r8, &
1031 staggerloc=esmf_staggerloc_edge1, &
1032 name=
"target_grid_latitude_w", &
1034 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1035 call error_handler(
"IN FieldCreate", error)
1037 print*,
"- CALL FieldCreate FOR TARGET GRID LONGITUDE." 1039 typekind=esmf_typekind_r8, &
1040 staggerloc=esmf_staggerloc_center, &
1041 name=
"target_grid_longitude", &
1043 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1044 call error_handler(
"IN FieldCreate", error)
1046 print*,
"- CALL FieldCreate FOR TARGET GRID LONGITUDE_S." 1048 typekind=esmf_typekind_r8, &
1049 staggerloc=esmf_staggerloc_edge2, &
1050 name=
"target_grid_longitude_s", &
1052 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1053 call error_handler(
"IN FieldCreate", error)
1055 print*,
"- CALL FieldCreate FOR TARGET GRID LONGITUDE_W." 1057 typekind=esmf_typekind_r8, &
1058 staggerloc=esmf_staggerloc_edge1, &
1059 name=
"target_grid_longitude_w", &
1061 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1062 call error_handler(
"IN FieldCreate", error)
1064 print*,
"- CALL FieldCreate FOR TARGET GRID TERRAIN." 1066 typekind=esmf_typekind_r8, &
1067 staggerloc=esmf_staggerloc_center, &
1068 name=
"target_grid_terrain", &
1070 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1071 call error_handler(
"IN FieldCreate", error)
1073 if (localpet == 0)
then 1084 allocate(landmask_one_tile(0,0))
1085 allocate(seamask_one_tile(0,0))
1086 allocate(longitude_one_tile(0,0))
1087 allocate(longitude_s_one_tile(0,0))
1088 allocate(longitude_w_one_tile(0,0))
1089 allocate(latitude_one_tile(0,0))
1090 allocate(latitude_s_one_tile(0,0))
1091 allocate(latitude_w_one_tile(0,0))
1092 allocate(terrain_one_tile(0,0))
1096 if (localpet == 0)
then 1100 seamask_one_tile = 0
1101 where(landmask_one_tile == 0) seamask_one_tile = 1
1104 latitude_s_one_tile, latitude_w_one_tile, longitude_one_tile, &
1105 longitude_s_one_tile, longitude_w_one_tile)
1107 print*,
"- CALL FieldScatter FOR TARGET GRID LANDMASK. TILE IS: ", tile
1108 call esmf_fieldscatter(
landmask_target_grid, landmask_one_tile, rootpet=0, tile=tile, rc=error)
1109 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1110 call error_handler(
"IN FieldScatter", error)
1111 print*,
"- CALL FieldScatter FOR TARGET GRID SEAMASK. TILE IS: ", tile
1112 call esmf_fieldscatter(
seamask_target_grid, seamask_one_tile, rootpet=0, tile=tile, rc=error)
1113 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1114 call error_handler(
"IN FieldScatter", error)
1115 print*,
"- CALL FieldScatter FOR TARGET GRID LONGITUDE. TILE IS: ", tile
1117 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1118 call error_handler(
"IN FieldScatter", error)
1119 print*,
"- CALL FieldScatter FOR TARGET GRID LONGITUDE_S. TILE IS: ", tile
1121 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1122 call error_handler(
"IN FieldScatter", error)
1123 print*,
"- CALL FieldScatter FOR TARGET GRID LONGITUDE_W. TILE IS: ", tile
1125 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1126 call error_handler(
"IN FieldScatter", error)
1127 print*,
"- CALL FieldScatter FOR TARGET GRID LATITUDE. TILE IS: ", tile
1128 call esmf_fieldscatter(
latitude_target_grid, latitude_one_tile, rootpet=0, tile=tile, rc=error)
1129 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1130 call error_handler(
"IN FieldScatter", error)
1131 print*,
"- CALL FieldScatter FOR TARGET GRID LATITUDE_S. TILE IS: ", tile
1133 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1134 call error_handler(
"IN FieldScatter", error)
1135 print*,
"- CALL FieldScatter FOR TARGET GRID LATITUDE_W. TILE IS: ", tile
1137 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1138 call error_handler(
"IN FieldScatter", error)
1139 print*,
"- CALL FieldScatter FOR TARGET GRID TERRAIN. TILE IS: ", tile
1140 call esmf_fieldscatter(
terrain_target_grid, terrain_one_tile, rootpet=0, tile=tile, rc=error)
1141 if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1142 call error_handler(
"IN FieldScatter", error)
1145 deallocate(landmask_one_tile)
1146 deallocate(seamask_one_tile)
1147 deallocate(longitude_one_tile)
1148 deallocate(longitude_s_one_tile)
1149 deallocate(longitude_w_one_tile)
1150 deallocate(latitude_one_tile)
1151 deallocate(latitude_s_one_tile)
1152 deallocate(latitude_w_one_tile)
1153 deallocate(terrain_one_tile)
1176 i_tile, j_tile, ip1_tile, jp1_tile, &
1177 latitude, latitude_s, latitude_w, &
1178 longitude, longitude_s, longitude_w)
1184 character(len=*),
intent(in) :: mosaic_file, orog_dir
1186 integer,
intent(in) :: num_tiles, tile
1187 integer,
intent(in) :: i_tile, j_tile
1188 integer,
intent(in) :: ip1_tile, jp1_tile
1190 real(esmf_kind_r8),
intent(out) :: latitude(i_tile, j_tile)
1191 real(esmf_kind_r8),
intent(out) :: latitude_s(i_tile, jp1_tile)
1192 real(esmf_kind_r8),
intent(out) :: latitude_w(ip1_tile, j_tile)
1193 real(esmf_kind_r8),
intent(out) :: longitude(i_tile, j_tile)
1194 real(esmf_kind_r8),
intent(out) :: longitude_s(i_tile, jp1_tile)
1195 real(esmf_kind_r8),
intent(out) :: longitude_w(ip1_tile, j_tile)
1197 character(len=50) :: grid_files(num_tiles)
1198 character(len=255) :: grid_file
1200 integer :: error, id_var, ncid
1201 integer :: id_dim, nxp, nyp, i, j, ii, jj
1203 real(esmf_kind_r8),
allocatable :: tmpvar(:,:)
1205 print*,
"- READ MODEL GRID FILE" 1207 print*,
'- OPEN MOSAIC FILE: ', trim(mosaic_file)
1208 error=nf90_open(trim(mosaic_file), nf90_nowrite, ncid)
1209 call netcdf_err(error,
'opening mosaic file')
1211 print*,
"- READ GRID FILE NAMES" 1212 error=nf90_inq_varid(ncid,
'gridfiles', id_var)
1213 call netcdf_err(error,
'reading gridfiles id')
1214 error=nf90_get_var(ncid, id_var, grid_files)
1215 call netcdf_err(error,
'reading gridfiles')
1217 error = nf90_close(ncid)
1219 grid_file = trim(orog_dir) // trim(grid_files(tile))
1221 print*,
'- OPEN GRID FILE: ', trim(grid_file)
1222 error=nf90_open(trim(grid_file), nf90_nowrite, ncid)
1223 call netcdf_err(error,
'opening grid file')
1225 print*,
'- READ NXP ID' 1226 error=nf90_inq_dimid(ncid,
'nxp', id_dim)
1227 call netcdf_err(error,
'reading nxp id')
1230 error=nf90_inquire_dimension(ncid,id_dim,len=nxp)
1231 call netcdf_err(error,
'reading nxp')
1233 print*,
'- READ NYP ID' 1234 error=nf90_inq_dimid(ncid,
'nyp', id_dim)
1235 call netcdf_err(error,
'reading nyp id')
1238 error=nf90_inquire_dimension(ncid,id_dim,len=nyp)
1239 call netcdf_err(error,
'reading nyp')
1241 if ((nxp/2 /= i_tile) .or. (nyp/2 /= j_tile))
then 1242 call error_handler(
"DIMENSION MISMATCH IN GRID FILE.", 1)
1245 allocate(tmpvar(nxp,nyp))
1247 print*,
'- READ LONGITUDE ID' 1248 error=nf90_inq_varid(ncid,
'x', id_var)
1249 call netcdf_err(error,
'reading longitude id')
1251 print*,
'- READ LONGITUDE' 1252 error=nf90_get_var(ncid, id_var, tmpvar)
1253 call netcdf_err(error,
'reading longitude')
1259 longitude(i,j) = tmpvar(ii,jj)
1267 longitude_s(i,j) = tmpvar(ii,jj)
1275 longitude_w(i,j) = tmpvar(ii,jj)
1279 print*,
'- READ LATITUDE ID' 1280 error=nf90_inq_varid(ncid,
'y', id_var)
1281 call netcdf_err(error,
'reading latitude id')
1283 print*,
'- READ LATIITUDE' 1284 error=nf90_get_var(ncid, id_var, tmpvar)
1285 call netcdf_err(error,
'reading latitude')
1291 latitude(i,j) = tmpvar(ii,jj)
1299 latitude_s(i,j) = tmpvar(ii,jj)
1307 latitude_w(i,j) = tmpvar(ii,jj)
1313 error = nf90_close(ncid)
1332 character(len=*),
intent(in) :: orog_file
1334 integer,
intent(in) :: idim, jdim
1335 integer(esmf_kind_i8),
intent(out) :: mask(idim,jdim)
1337 real(esmf_kind_i8),
intent(out) :: terrain(idim,jdim)
1339 integer :: error, lat, lon
1340 integer :: ncid, id_dim, id_var
1342 real(kind=4),
allocatable :: dummy(:,:)
1344 print*,
"- READ MODEL LAND MASK FILE" 1346 print*,
'- OPEN LAND MASK FILE: ', orog_file
1347 error=nf90_open(orog_file,nf90_nowrite,ncid)
1348 call netcdf_err(error,
'opening land mask file')
1350 print*,
"- READ I-DIMENSION" 1351 error=nf90_inq_dimid(ncid,
'lon', id_dim)
1352 call netcdf_err(error,
'reading idim id')
1353 error=nf90_inquire_dimension(ncid,id_dim,len=lon)
1354 call netcdf_err(error,
'reading idim')
1356 print*,
"- READ J-DIMENSION" 1357 error=nf90_inq_dimid(ncid,
'lat', id_dim)
1358 call netcdf_err(error,
'reading jdim id')
1359 error=nf90_inquire_dimension(ncid,id_dim,len=lat)
1360 call netcdf_err(error,
'reading jdim')
1362 print*,
"- I/J DIMENSIONS: ", lon, lat
1364 if ((lon /= idim) .or. (lat /= jdim))
then 1365 call error_handler(
"MISMATCH IN DIMENSIONS.", 1)
1368 allocate(dummy(idim,jdim))
1370 print*,
"- READ LAND MASK" 1371 error=nf90_inq_varid(ncid,
'slmsk', id_var)
1372 call netcdf_err(error,
'reading slmsk id')
1373 error=nf90_get_var(ncid, id_var, dummy)
1374 call netcdf_err(error,
'reading slmsk')
1377 print*,
"- READ RAW OROGRAPHY." 1378 error=nf90_inq_varid(ncid,
'orog_raw', id_var)
1379 call netcdf_err(error,
'reading orog_raw id')
1380 error=nf90_get_var(ncid, id_var, dummy)
1381 call netcdf_err(error,
'reading orog_raw')
1384 error = nf90_close(ncid)
1399 print*,
"- DESTROY MODEL DATA." 1448 subroutine gdt_to_gds(igdtnum, igdstmpl, igdtlen, kgds, ni, nj, res)
1452 integer,
intent(in ) :: igdtnum, igdtlen, igdstmpl(igdtlen)
1453 integer,
intent( out) :: kgds(200), ni, nj
1456 real,
intent( out) :: res
1460 if (igdtnum.eq.32769)
then 1462 iscale=igdstmpl(10)*igdstmpl(11)
1463 if (iscale == 0) iscale = 1e6
1470 kgds(4)=nint(float(igdstmpl(12))/float(iscale)*1000.)
1472 kgds(5)=nint(float(igdstmpl(13))/float(iscale)*1000.)
1476 if (igdstmpl(1)==2 ) kgds(6)=64
1477 if ( btest(igdstmpl(14),4).OR.btest(igdstmpl(14),5) ) kgds(6)=kgds(6)+128
1478 if ( btest(igdstmpl(14),3) ) kgds(6)=kgds(6)+8
1480 kgds(7)=nint(float(igdstmpl(15))/float(iscale)*1000.)
1482 kgds(8)=nint(float(igdstmpl(16))/float(iscale)*1000.)
1484 kgds(9)=nint(float(igdstmpl(17))/float(iscale)*1000.)
1486 kgds(10)=nint(float(igdstmpl(18))/float(iscale)*1000.)
1490 if (btest(igdstmpl(19),7)) kgds(11) = 128
1491 if (btest(igdstmpl(19),6)) kgds(11) = kgds(11) + 64
1492 if (btest(igdstmpl(19),5)) kgds(11) = kgds(11) + 32
1494 kgds(12)=nint(float(igdstmpl(20))/float(iscale)*1000.)
1496 kgds(13)=nint(float(igdstmpl(21))/float(iscale)*1000.)
1502 res = ((float(kgds(9)) / 1000.0) + (float(kgds(10)) / 1000.0)) &
1505 elseif(igdtnum==30)
then 1514 kgds(4) = nint(float(igdstmpl(10))/1000.0)
1515 kgds(5) = nint(float(igdstmpl(11))/1000.0)
1518 if (igdstmpl(1)==2 ) kgds(6)=64
1519 if ( btest(igdstmpl(12),4).OR.btest(igdstmpl(12),5) ) kgds(6)=kgds(6)+128
1520 if ( btest(igdstmpl(12),3) ) kgds(6)=kgds(6)+8
1522 kgds(7) = nint(float(igdstmpl(14))/1000.0)
1523 kgds(8) = nint(float(igdstmpl(15))/1000.0)
1524 kgds(9) = nint(float(igdstmpl(16))/1000.0)
1528 if (btest(igdstmpl(18),7)) kgds(11) = 128
1529 if (btest(igdstmpl(18),6)) kgds(11) = kgds(11) + 64
1530 if (btest(igdstmpl(18),5)) kgds(11) = kgds(11) + 32
1532 kgds(12) = nint(float(igdstmpl(19))/1000.0)
1533 kgds(13) = nint(float(igdstmpl(20))/1000.0)
1537 elseif(igdtnum==0)
then 1539 iscale=igdstmpl(10)*igdstmpl(11)
1540 if (iscale == 0) iscale = 1e6
1546 kgds(4)=nint(float(igdstmpl(12))/float(iscale)*1000.)
1547 kgds(5)=nint(float(igdstmpl(13))/float(iscale)*1000.)
1550 if (igdstmpl(1)==2 ) kgds(6)=64
1551 if ( btest(igdstmpl(14),4).OR.btest(igdstmpl(14),5) ) kgds(6)=kgds(6)+128
1552 if ( btest(igdstmpl(14),3) ) kgds(6)=kgds(6)+8
1554 kgds(7)=nint(float(igdstmpl(15))/float(iscale)*1000.)
1555 kgds(8)=nint(float(igdstmpl(16))/float(iscale)*1000.)
1556 kgds(9)=nint(float(igdstmpl(17))/float(iscale)*1000.)
1557 kgds(10)=nint(float(igdstmpl(18))/float(iscale)*1000.)
1560 if (btest(igdstmpl(19),7)) kgds(11) = 128
1561 if (btest(igdstmpl(19),6)) kgds(11) = kgds(11) + 64
1562 if (btest(igdstmpl(19),5)) kgds(11) = kgds(11) + 32
1570 call error_handler(
"UNRECOGNIZED INPUT GRID TYPE ", 1)
integer, public j_target
j dimension of each global tile, or of a nest, target grid.
This module contains code to read the setup namelist file, handle the varmap file for GRIB2 data...
integer, public num_tiles_target_grid
Number of tiles, target grid.
subroutine, public cleanup_input_target_grid_data
Deallocate all esmf grid objects.
integer, public lsoil_target
Number of soil layers, target grid.
integer, public ip1_input
i_input plus 1
type(esmf_field), public longitude_w_target_grid
longitude of 'west' edge of grid box, target grid
integer, public j_input
j-dimension of input grid (or of each global tile)
subroutine define_input_grid_mosaic(localpet, npets)
Define input grid for tiled data using the 'mosaic', 'grid' and orography files.
integer, public jp1_input
j_input plus 1
integer, public nsoill_out
Number of soil levels desired in the output data.
type(esmf_field), public longitude_s_target_grid
longitude of 'south' edge of grid box, target grid
Sets up the ESMF grid objects for the input data grid and target FV3 grid.
type(esmf_field), public latitude_input_grid
latitude of grid center, input grid
type(esmf_field), public latitude_target_grid
latitude of grid center, target grid
integer, public i_target
i dimension of each global tile, or of a nest, target grid.
subroutine get_model_latlons(mosaic_file, orog_dir, num_tiles, tile, i_tile, j_tile, ip1_tile, jp1_tile, latitude, latitude_s, latitude_w, longitude, longitude_s, longitude_w)
Read model lat/lons for a single tile from the "grid" specificaton file.
integer, public num_tiles_input_grid
Number of tiles, input grid.
type(esmf_field), public latitude_s_target_grid
latitude of 'south' edge of grid box, target grid
type(esmf_field), public latitude_w_input_grid
latitude of 'west' edge of grid box, input grid
type(esmf_grid), public target_grid
target grid esmf grid object.
logical, public convert_sfc
Convert sfc data when true.
character(len=500), public orog_dir_target_grid
Directory containing the target grid orography files.
character(len=500), dimension(6), public orog_files_input_grid
Input grid orography files.
subroutine get_model_mask_terrain(orog_file, idim, jdim, mask, terrain)
Read the model land mask and terrain for a single tile from the orography file.
type(esmf_field), public latitude_w_target_grid
latitude of 'west' edge of grid box, target grid
character(len=500), public orog_dir_input_grid
Directory containing the input grid orography files.
type(esmf_field), public landmask_target_grid
land mask target grid - '1' land; '0' non-land
character(len=500), public mosaic_file_target_grid
Target grid mosaic file.
character(len=500), public mosaic_file_input_grid
Input grid mosaic file.
type(esmf_field), public longitude_w_input_grid
longitude of 'west' edge of grid box, input grid
character(len=500), dimension(6), public atm_files_input_grid
File names of input atmospheric data.
type(esmf_field), public latitude_s_input_grid
latitude of 'south' edge of grid box, input grid
subroutine, public define_target_grid(localpet, npets)
Setup the esmf grid object for the target grid.
character(len=500), dimension(6), public orog_files_target_grid
Target grid orography files.
type(esmf_field), public longitude_s_input_grid
longitude of 'south' edge of grid box, input grid
logical, public convert_atm
Convert atmospheric data when true.
type(esmf_field), public longitude_target_grid
longitude of grid center, target grid
subroutine, public define_input_grid(localpet, npets)
Driver routine to setup the esmf grid object for the input grid.
type(esmf_grid), public input_grid
input grid esmf grid object
character(len=500), public data_dir_input_grid
Directory containing input atm or sfc files.
subroutine gdt_to_gds(igdtnum, igdstmpl, igdtlen, kgds, ni, nj, res)
Convert the GRIB2 grid description template to to the GRIB1 grid description section.
character(len=50), public input_grid_type
map projection of input grid
integer, public ip1_target
ip1_target plus 1
character(len=25), public input_type
Input data type:
type(esmf_field), public terrain_target_grid
terrain height target grid
character(len=5), dimension(:), allocatable, public tiles_target_grid
Tile names of target grid.
type(esmf_field), public longitude_input_grid
longitude of grid center, input grid
character(len=500), public grib2_file_input_grid
REQUIRED.
type(esmf_field), public seamask_target_grid
sea mask target grid - '1' non-land; '0' land
subroutine define_input_grid_gaussian(npets)
Define grid object for input data on global gaussian grids.
character(len=500), dimension(6), public sfc_files_input_grid
File names containing input surface data.
integer, public i_input
i-dimension of input grid (or of each global tile)
subroutine define_input_grid_grib2(npets)
Define input grid object for grib2 input data.
integer, public jp1_target
jp1_target plus 1