program readavg !-------------------------------------- ! Program usage eg. ! f90 readavg.f90 -o readavg ! readavg surfrad_DRA_199901_avg.v3.0 !-------------------------------------- Implicit none TYPE Hdr_Type_SAM Sequence Character (Len=64) :: Site_ID ! 64 bytes 64 Character (Len=4) :: year ! 4 bytes 68 Character (Len=4) :: mon ! 4 bytes 72 Real :: lat ! 4 bytes 76 Real :: lon ! 4 bytes 80 Real :: elev ! 4 bytes 84 Real :: extras ! 4 bytes 88 Character (Len=32), Dimension(50) :: label ! 1600 bytes 1688 Character (Len=10216) :: padding !10216 bytes 11904 END TYPE Hdr_Type_SAM TYPE (Hdr_Type_SAM) hdr real, dimension(2976,50) :: dat character (len=80) :: filename integer :: iv,ie,next,i,ibg,ien Call getarg(1,filename) Call ReadFile(filename,hdr,dat) Call PrintHdr(hdr) !--- ! Set "iv" to the desired field (1 to 22) ! Set "ie" to the desired extra field if available (1 to next) !--- next = hdr%extras print*,'Input desired variable' read(5,"(i3)")iv write(6,"('Average for - ',a32)")hdr%label(iv) Do i=1,31 ibg = (i-1)*96+1 ien = ibg+95 write(6,"(10f8.2)")dat(ibg:ien,iv) ! dat(1:148,iv) Enddo close(1) End Program readavg Subroutine ReadFile(filename,hdr,dat) TYPE Hdr_Type_SAM Sequence Character (Len=64) :: Site_ID ! 64 bytes 64 Character (Len=4) :: year ! 4 bytes 68 Character (Len=4) :: mon ! 4 bytes 72 Real :: lat ! 4 bytes 76 Real :: lon ! 4 bytes 80 Real :: elev ! 4 bytes 84 Real :: extras ! 4 bytes 88 Character (Len=32), Dimension(50) :: label ! 1600 bytes 1688 Character (Len=10216) :: padding !10216 bytes 11904 END TYPE Hdr_Type_SAM TYPE (Hdr_Type_SAM) hdr real, dimension(2976,50) :: dat integer :: i,irec,next,ntot character (len=80) :: filename irec=1 open(1,file=filename,form='unformatted',access='direct',recl=11904,status='old') read(1,rec=irec)hdr next = int(hdr%extras) ntot = 22+next Do i=1,ntot irec=irec+1 read(1,rec=irec)dat(:,i) Enddo Close(1) End Subroutine ReadFile Subroutine PrintHdr(hdr) TYPE Hdr_Type_SAM Sequence Character (Len=64) :: Site_ID ! 64 bytes 64 Character (Len=4) :: year ! 4 bytes 68 Character (Len=4) :: mon ! 4 bytes 72 Real :: lat ! 4 bytes 76 Real :: lon ! 4 bytes 80 Real :: elev ! 4 bytes 84 Real :: extras ! 4 bytes 88 Character (Len=32), Dimension(50) :: label ! 1600 bytes 1688 Character (Len=10216) :: padding !10216 bytes 11904 END TYPE Hdr_Type_SAM TYPE (Hdr_Type_SAM) hdr integer :: i write(6,*) write(6,*)'---------------------------------------------------' write(6,"(/'Station Name - ',a64)")hdr%Site_ID write(6,"('Date - ',2a4)")hdr%mon,hdr%year write(6,"('Lat - ',f8.2/,'Lon - ',f8.2)")hdr%lat,hdr%lon write(6,"('Elevation - ',f8.2,' m'/,'Extra Variables - ',f3.0/)")hdr%elev,hdr%extras write(6,"(4x,'Index',8x,'Field',12x,'Units',1x,'Availability')") write(6,"(4x,'-----',8x,'-----',12x,'-----',1x,'------------')") do i=1,22 write(6,"('Variable ',i2,' - ',a32)")i,hdr%label(i) enddo next = int(hdr%extras) ntot = 22+next if(next > 0)then write(6,"(a41)")'Plus these extra variables for this site:' do i=23,ntot write(6,"('Variable ',i2,' - ',a32)")i,hdr%label(i) enddo endif write(6,*) End Subroutine PrintHdr !--------Base Variable Locations in Array----------! !(for extra variables, read the header information)! !--------------------------------------------------! ! ( 1) = 'Cos(Sol Zen Ang)' ! ( 2) = 'LW Flux DN ' ! ( 3) = 'LW Flux UP ' ! ( 4) = 'SW Global DN ' ! ( 5) = 'SW Global UP ' ! ( 6) = 'SW Direct Normal' ! ( 7) = 'SW Dif DN ' ! ( 8) = 'Total SW, 15MinAvg' ! ( 9) = 'Temp Surface Air' ! (10) = 'Sfc Pressure ' ! (11) = 'Sfc Wind Speed ' ! (12) = 'Sfc Wind Dir ' ! (13) = 'Sfc Rel Humidity' ! (14) = 'Cld Frct Pyrn based' ! (15) = 'Aer OD-1 nnnn nm' ! (16) = 'Aer OD-2 nnnn nm' ! (17) = 'Aer OD-3 nnnn nm' ! (18) = 'Aer OD-4 nnnn nm' ! (19) = 'Aer OD-5 nnnn nm' ! (20) = 'Aer OD-6 nnnn nm' ! (21) = 'Aer OD-7 nnnn nm' ! (22) = 'Aer PW ' !--------------------------------------------------!