!------------------------------------------------------------------------- ! NASA Goddard Space Flight Center Land Information System (LIS) V3.0 ! Released May 2004 ! ! See SOFTWARE DISTRIBUTION POLICY for software distribution policies ! ! The LIS source code and documentation are in the public domain, ! available without fee for educational, research, non-commercial and ! commercial purposes. Users may distribute the binary or source ! code to third parties provided this statement appears on all copies and ! that no charge is made for such copies. ! ! NASA GSFC MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THE ! SOFTWARE FOR ANY PURPOSE. IT IS PROVIDED AS IS WITHOUT EXPRESS OR ! IMPLIED WARRANTY. NEITHER NASA GSFC NOR THE US GOVERNMENT SHALL BE ! LIABLE FOR ANY DAMAGES SUFFERED BY THE USER OF THIS SOFTWARE. ! ! See COPYRIGHT.TXT for copyright details. ! !------------------------------------------------------------------------- !BOP ! ! !ROUTINE: read_avhrrlai ! ! !DESCRIPTION: ! This program reads in AVHRR LAI data ! ! !REVISION HISTORY: ! 27 Nov 2001: Jon Gottschalck; Initial code ! 20 Feb 2002: Jon Gottschalck; Modified to use for 1/4 and 2x2.5 using 1/8 degree monthly data ! 10 Sept 2004: Sujay Kumar, Initial Specification ! ! !INTERFACE: subroutine read_avhrrlai(lai1, lai2, wt1, wt2) ! !USES: use time_manager use lisdrv_module, only : grid,lis use filename_mod use precision !EOP implicit none !=== Arguments =========================================================== integer :: domain integer :: cindex, rindex logical :: laifile1,laifile2 real*8 :: time1,time2 ! Temporary Time variables integer :: yr1,mo1,yr2,mo2 ! Temporary Time variables integer :: doy1,doy2 ! Temporary Time variables real :: gmt1,gmt2 ! Interpolation weights integer :: zeroi,numi ! Integer Number Holders character (len=4) :: cyr1,cyr2 ! Filename variables character (len=2) :: cmo1,cmo2 ! Filename variables character (len=80) :: name, avhrrdir character(len=80) :: name9, name10, name11, name12 character(len=80) :: name13, name14, name15, name16 character(len=80) :: ntop1, ntop2, nbot1, nbot2 character(len=100) :: temp real(r8) :: lai1(lis%d%nch), lai2(lis%d%nch) real :: wt1, wt2 !=== End Local variable list !BOC !------------------------------------------------------------------------ ! Determine current time to find correct LAI files !------------------------------------------------------------------------ if (lis%t%tscount .eq. 0) then lis%t%yr = lis%t%syr lis%t%mo = lis%t%smo lis%t%da = lis%t%sda lis%t%mn = lis%t%smn lis%t%ss = lis%t%sss else lis%t%yr = lis%t%yr lis%t%mo = lis%t%mo lis%t%da = lis%t%da lis%t%mn = lis%t%mn lis%t%ss = lis%t%ss endif call date2time(lis%t%time,lis%t%doy,lis%t%gmt,lis%t%yr, & lis%t%mo,lis%t%da,lis%t%hr,lis%t%mn,lis%t%ss) !------------------------------------------------------------------------ ! Initialize LAI flag varaible !------------------------------------------------------------------------ lis%p%laiflag = 0 zeroi=0 numi=16 !------------------------------------------------------------------------ ! Determine Monthly data Times (Assume Monthly ! value valid at DA=16 HR=00Z) !------------------------------------------------------------------------ if (lis%t%da .lt. 16) then mo1 = lis%t%mo-1 yr1 = lis%t%yr if (mo1 .eq. 0) then mo1 = 12 yr1 = lis%t%yr - 1 endif mo2 = lis%t%mo yr2 = lis%t%yr else mo1 = lis%t%mo yr1 = lis%t%yr mo2 = lis%t%mo+1 yr2 = lis%t%yr if (mo2 .eq. 13) then mo2 = 1 yr2 = lis%t%yr + 1 endif endif call date2time(time1,doy1,gmt1,yr1,mo1,numi,zeroi,zeroi,zeroi) call date2time(time2,doy2,gmt2,yr2,mo2,numi,zeroi,zeroi,zeroi) !------------------------------------------------------------------------ ! Check to see if need new LAI data !------------------------------------------------------------------------ if (time2 .gt. lis%p%laitime) then lis%p%laiflag = 1 else lis%p%laiflag = 0 endif avhrrdir = lis%p%avhrrdir !------------------------------------------------------------------------ ! Determine weights between months !------------------------------------------------------------------------ wt1 = (time2-lis%t%time)/(time2-time1) wt2 = (lis%t%time-time1)/(time2-time1) !------------------------------------------------------------------------ ! Get new LAI data if required !------------------------------------------------------------------------ if (lis%p%laiflag .eq. 1) then print*, 'in avhrr lai read.' write(unit=temp,fmt='(i4,i2.2)') yr1, mo1 read (unit=temp,fmt='(a4,a2)') cyr1, cmo1 write(unit=temp,fmt='(i4,i2.2)') yr2, mo2 read (unit=temp,fmt='(a4,a2)') cyr2, cmo2 lis%p%laitime = time2 if(lis%d%gridDesc(9).eq.0.01) then domain = 8 else if(lis%d%gridDesc(9).eq.0.05) then domain = 7 endif if(domain ==8) then call avhrr_laifile_1km(name9,name10,name11,name12,& lis%p%avhrrdir,cyr1,cyr2,cmo1,cmo2) else if(domain ==7) then call avhrr_laifile_5km( & name9,name10,name11,name12,& lis%p%avhrrdir,cyr1,cyr2,cmo1,cmo2) else call avhrr_laifilename(name9,name10,name11,name12, & lis%p%avhrrdir,cyr1,cyr2,cmo1,cmo2) endif !------------------------------------------------------------------------ ! Open AVHRR LAI files (assumes realtime monthly files are present first ! then uses climatology files) ! Assume realtime monthly files are present as default !------------------------------------------------------------------------ print*, 'name9 ',name9 print*, 'name10 ',name10 inquire(file=name9,exist=laifile1) inquire(file=name10,exist=laifile2) call climatologylairead(name11, name12, lai1, lai2) end if end subroutine read_avhrrlai