program create_monthly_global_csrbs c Code to read HIRS CSRB binary files and create global, 1-degree gridded c data. implicit none c------------------------------------------------------------------------------- integer nlon_bins parameter (nlon_bins = 360) integer nlat_bins parameter (nlat_bins = 180) integer nbands parameter (nbands = 8) integer nscns parameter (nscns = 3) integer nbins parameter(nbins = nlon_bins * nlat_bins * nbands * nscns) c------------------------------------------------------------------------------- character*120 Input_File, Output_File, parm, FileName integer Number_of_Files, FileCounter, ierr integer i, j, k, jj, m, ii real num, sum0, sum1 c Input data arrays. real*4 mean_diff(nlon_bins, nlat_bins, nbands, nscns) real*4 mean_diff_bt(nlon_bins, nlat_bins, nbands, nscns) real*4 sdev(nlon_bins, nlat_bins, nbands, nscns) real*4 n(nlon_bins, nlat_bins, nbands, nscns) c Arrays for summing input data. real*4 nsums(nlon_bins, nlat_bins, nbands, nscns) real*4 sum_mean_diff(nlon_bins, nlat_bins, nbands, nscns) real*4 sum_mean_diff_bt(nlon_bins, nlat_bins, nbands, nscns) real*4 sum_sdev(nlon_bins, nlat_bins, nbands, nscns) c Output monthly mean data arrays. real*4 monthly_rad_diff(nlon_bins, nlat_bins, nbands, nscns) real*4 monthly_smrad_diff(nlon_bins, nlat_bins, nbands, nscns) real*4 monthly_bt_diff(nlon_bins, nlat_bins, nbands, nscns) real*4 monthly_smbt_diff(nlon_bins, nlat_bins, nbands, nscns) real*4 monthly_sdev(nlon_bins, nlat_bins, nbands, nscns) c------------------------------------------------------------------------------- c Data statements. data nsums /nbins * 0.0 / data sum_mean_diff /nbins * 0.0 / data sum_mean_diff_bt /nbins * 0.0 / data sum_sdev /nbins * 0.0 / c------------------------------------------------------------------------------- c Get input file name. This file contains a list of binary files c to be processed. call getarg(1,parm) read(parm,'(a120)') Input_File write(*,'(2x,'' Input List File is: '',A70)') Input_File c------------------------------------------------------------------------------- c Get output file name. call getarg(2,parm) read(parm,'(a120)') Output_File write(*,'(2x,'' Output File is: '',A70)') Output_File c------------------------------------------------------------------------------- c Open the input list file containing file names. open(20, file=Input_File, form='formatted', + status='old', iostat = ierr) if (ierr .ne. 0) then write(*,'(2x,''Could not open input ascii file '', + A70,i10)') Input_File, ierr endif c------------------------------------------------------------------------------- c Determine the number of files to be read in Number_of_Files = 0 FileName = "1" Do While (FileName .ne. " ") FileName = " " read(20,'(a)',iostat=ierr) FileName Number_of_Files = Number_of_Files + 1 end do Number_of_Files = Number_of_Files - 1 write(*,'(2x,'' Number of Files '',i10)') Number_of_Files c------------------------------------------------------------------------------- c Go back to the beginning to read the files rewind(20) c------------------------------------------------------------------------------- do FileCounter = 1 , Number_of_Files read(20,'(a120)',iostat=ierr) FileName write(*,'(a120)') FileName c------------------------------------------------------------------------------- c Open and read data file. open(30,file=FileName,form='unformatted',access='sequential',iostat=ierr) if(ierr .ne. 0) then write(*,'(2x,''Could not open input data file '', + A70,i10)') FileName, ierr go to 100 end if read(30,iostat=ierr) n, mean_diff, mean_diff_bt, sdev if(ierr .ne. 0) then write(*,'(2x,''Could not read input data file '', + A70,i10)') FileName, ierr go to 100 end if c------------------------------------------------------------------------------- c Loop through the data. do m = 1, nscns do k = 1, nbands do j = 1, nlat_bins do i = 1, nlon_bins c------------------------------------------------------------------------------- if(n(i,j,k,m) .gt. 0.0) then nsums(i,j,k,m) = nsums(i,j,k,m) + 1.0 sum_mean_diff(i,j,k,m) = sum_mean_diff(i,j,k,m) + mean_diff(i,j,k,m) sum_mean_diff_bt(i,j,k,m) = sum_mean_diff_bt(i,j,k,m) + mean_diff_bt(i,j,k,m) sum_sdev(i,j,k,m) = sum_sdev(i,j,k,m) + sdev(i,j,k,m) end if c------------------------------------------------------------------------------- enddo enddo enddo enddo c------------------------------------------------------------------------------- c End of "days" loop. enddo c------------------------------------------------------------------------------- c Compute monthly mean values for HIRS CSRBs. do m = 1, nscns do k = 1, nbands do j = 1, nlat_bins do i = 1, nlon_bins if(nsums(i,j,k,m) .gt. 0.0) then monthly_rad_diff(i,j,k,m) = sum_mean_diff(i,j,k,m) / nsums(i,j,k,m) monthly_bt_diff(i,j,k,m) = sum_mean_diff_bt(i,j,k,m) / nsums(i,j,k,m) monthly_sdev(i,j,k,m) = sum_sdev(i,j,k,m) / nsums(i,j,k,m) else monthly_rad_diff(i,j,k,m) = -999.0 monthly_bt_diff(i,j,k,m) = -999.0 monthly_sdev(i,j,k,m) = -999.0 end if enddo enddo enddo enddo c do j = 91, 91 c do i = 1, 360 c write(*,'(/,/,2i5)') j, i c write(*,'(8f12.3)') (nsums(i,j,jj,1),jj=1,8) c write(*,'(8f12.3)') (sum_mean_diff(i,j,jj,1),jj=1,8) c write(*,'(8f12.3)') (sum_mean_diff_bt(i,j,jj,1),jj=1,8) c write(*,'(8f12.3)') (sum_sdev(i,j,jj,1),jj=1,8) c write(*,'(/,8f12.3)') (monthly_rad_diff(i,j,jj,1),jj=1,8) c write(*,'(8f12.3)') (monthly_bt_diff(i,j,jj,1),jj=1,8) c write(*,'(8f12.3)') (monthly_sdev(i,j,jj,1),jj=1,8) c enddo c enddo c------------------------------------------------------------------------------- c Apply 3x3 gridbox smoothing to monthly average data. do m = 1, nscns do k = 1, nbands do j = 1, nlat_bins do i = 1, nlon_bins sum0 = 0.0 sum1 = 0.0 num = 0 do ii = -1, 1 do jj = -1, 1 if( (i+ii) .gt. 0 .and. (i+ii) .le. nlon_bins) then if( (j+jj) .gt. 0 .and. (j+jj) .le. nlat_bins) then if(monthly_rad_diff(i+ii,j+jj,k,m) .ne. -999.0) then num = num + 1 sum0 = sum0 + monthly_rad_diff(i+ii,j+jj,k,m) sum1 = sum1 + monthly_bt_diff(i+ii,j+jj,k,m) end if end if end if enddo enddo if(num .ge. 6) then monthly_smrad_diff(i,j,k,m) = sum0 / num monthly_smbt_diff(i,j,k,m) = sum1 / num else monthly_smrad_diff(i,j,k,m) = -999.0 monthly_smbt_diff(i,j,k,m) = -999.0 end if enddo enddo enddo enddo c do j = 91, 91 c do i = 1, 360 c write(*,'(/,2i5)') j, i c write(*,'(/,8f12.3)') (monthly_smrad_diff(i,j,jj,1),jj=1,8) c write(*,'(8f12.3)') (monthly_smbt_diff(i,j,jj,1),jj=1,8) c enddo c enddo c------------------------------------------------------------------------------- c Output stats to binary file. open(40, file=Output_File, form='unformatted', access='sequential') write(40) nsums, monthly_smrad_diff, monthly_smbt_diff, monthly_sdev close(40) c------------------------------------------------------------------------------- go to 200 100 continue 200 close (20) end