From 932a2d8b3e926bb193b2af07c1ba6410aa0e7e01 Mon Sep 17 00:00:00 2001 From: Jonathan Beezley Date: Mon, 15 Dec 2008 02:07:44 -0700 Subject: [PATCH] fixed landfire conversion program --- WPS/landfire/convert_landfire.F90 | 32 +++++++++++++++++-------------- WPS/landfire/landfire.sh | 6 +++--- WPS/landfire/make | 1 + 3 files changed, 22 insertions(+), 17 deletions(-) create mode 100644 WPS/landfire/make diff --git a/WPS/landfire/convert_landfire.F90 b/WPS/landfire/convert_landfire.F90 index b5962e88..0124e39c 100644 --- a/WPS/landfire/convert_landfire.F90 +++ b/WPS/landfire/convert_landfire.F90 @@ -2,38 +2,41 @@ program convert_landfire implicit none character(len=256)::buffer,fname,oname -integer::ncol,nrow,ierr,i,j,iread,iwrite,k,ictile,irtile,ctile,rtile,l,sxtile,extile,sytile,eytile -integer,parameter::maxtile=1000, maxcat=14 +integer::ncol,nrow,ierr,i,j,iread,iwrite,k,ictile,irtile,ctile,rtile,l,sxtile,extile,sytile,eytile,grow,gcol +integer,parameter::maxtile=1000, maxcat=14,halo=3 real(kind=4)::rbuf call getarg(1,fname) call getarg(2,buffer) -read(buffer,*) nrow +read(buffer,*) grow call getarg(3,buffer) -read(buffer,*) ncol +read(buffer,*) gcol + iread=60 iwrite=61 +nrow=grow-2*halo +ncol=gcol-2*halo open(iread,file=fname,status='old',form='unformatted',access='direct',recl=4) -call get_ntile(ctile,maxtile,ncol) -call get_ntile(rtile,maxtile,nrow) +call get_ntile(ctile,maxtile,ncol) ! x +call get_ntile(rtile,maxtile,nrow) ! y print*,'splitting data into ',rtile,'x',ctile,' tiles' k=0 -do ictile=1,ctile - do irtile=1,rtile +do irtile=1,rtile ! y + do ictile=1,ctile ! x call get_tile_idx(sxtile,extile,ictile,maxtile,ncol) call get_tile_idx(sytile,eytile,irtile,maxtile,nrow) - call get_tile_name(oname,sytile,eytile,sxtile,extile) + call get_tile_name(oname,sxtile,extile,sytile,eytile) print*,'writing out file: ', trim(oname) open(iwrite,file=oname,status='unknown',form='unformatted',access='direct',recl=2) l=0 - do i=sytile,eytile - do j=sxtile,extile - k=(j-1)*nrow+i + do i=sytile,eytile+2*halo ! y + do j=sxtile,extile+2*halo ! x + k=(i-1)*gcol+j l=l+1 read(iread,rec=k,err=999) rbuf - if(rbuf.gt.maxcat.or.rbuf.lt.1)rbuf=0. + if(rbuf.gt.maxcat.or.rbuf.lt.1)rbuf=14. write(iwrite,rec=l) int(rbuf,kind=2) enddo enddo @@ -41,6 +44,7 @@ program convert_landfire enddo enddo +print*,'completed successfully' 999 continue print*,i,j,k,l,irtile,ictile close(iread) @@ -66,5 +70,5 @@ subroutine get_tile_name(tname,sxtile,extile,sytile,eytile) character(len=*),intent(out)::tname integer,intent(in)::sxtile,extile,sytile,eytile -write(tname,'(i5.5,"-",i5.5,".",i5.5,"-",i5.5)') sytile,eytile,sxtile,extile +write(tname,'(i5.5,"-",i5.5,".",i5.5,"-",i5.5)') sxtile,extile,sytile,eytile end subroutine get_tile_name diff --git a/WPS/landfire/landfire.sh b/WPS/landfire/landfire.sh index 6696101f..beb21ed0 100755 --- a/WPS/landfire/landfire.sh +++ b/WPS/landfire/landfire.sh @@ -105,7 +105,7 @@ if [ "$proj" == "ALBERS" ] && [ "$datum" == "NAD83" ] ; then nproj=1 echo "projection=albers_nad83" >> $idx # echo "projection=regular_ll" >> $idx -else +elif [ "$proj" == "UTM" ] && [ "$datum" == "NAD83" ] ; then echo "Projection $proj $datum not supported" exit 1 fi @@ -136,7 +136,7 @@ echo 'stdlon=-96.0' >> $idx echo 'wordsize=2' >> $idx echo 'category_min=1' >> $idx echo 'category_max=14' >> $idx -echo 'tile_bdr=0' >> $idx +echo 'tile_bdr=3' >> $idx echo 'missing_value=0' >> $idx echo 'scale_factor=1' >> $idx echo 'row_order=bottom_top' >> $idx @@ -151,7 +151,7 @@ echo "tile_x=1000" >> $idx echo "tile_y=1000" >> $idx echo "tile_z=1" >> $idx -./convert_landfire.x ${1}/${1}.flt $ncols $nrows +./convert_landfire.x ${1}/${1}.flt $nrows $ncols mv *'-'*'.'*'-'* "$output_dir" #nfname="$output_dir/$(printf "%05d-%05d.%05d-%05d" 1 $ncols 1 $nrows)" #mv "${1}/${1}.flt_tmp" "$nfname" diff --git a/WPS/landfire/make b/WPS/landfire/make new file mode 100644 index 00000000..79c335c9 --- /dev/null +++ b/WPS/landfire/make @@ -0,0 +1 @@ +ifort -O3 -assume buffered_io -assume byterecl -o convert_landfire.x convert_landfire.F90