c c Subroutine to compute pertual days from a date c YYYY = year > 1960 c Revised to convert either way - May 30, 2006 c Subroutine perpd2(idat,kperp) integer iyr,imon,iday,kperp,mcum(12),mind(12),days Data mcum/0,31,59,90,120,151,181,212,243,273,304,334/ Data mind/31,29,31,30,31,30,31,31,30,31,30,31/ if(kperp.lt.1)then iyr = idat/10000 jdat = idat - iyr*10000 imon = jdat/100 iday = jdat - imon*100 if(iyr.lt.1960)go to 99 kperp = 0 iyrm=iyr-1 if(iyrm.lt.1960)go to 10 do 5 i=1960,iyrm k = mod(i,4) if(k.ne.0)then kperp = kperp + 365 else kperp = kperp + 366 endif 5 continue 10 if(imon.lt.1)go to 99 if(imon.gt.12)go to 99 if(iday.lt.1)go to 99 if(iday.gt.mind(imon))go to 99 k = mod(iyr,4) ky = 0 if(k.eq.0)ky = 1 days = mcum(imon) if(imon.gt.2)days = days + ky kperp = kperp + days + iday 99 continue else c c convert perpetual days back to yyyymmdd c ky = 1959 jp = kperp 50 ky = ky + 1 jsub = 365 if(mod(ky,4).eq.0)jsub = 366 jp = jp - jsub if(jp.gt.0)go to 50 iyr = ky jp = jp + jsub lp =0 if(mod(iyr,4).eq.0)lp=1 km = 0 30 km = km + 1 jsub = mind(km) if(km.eq.2.and.lp.eq.0)jsub= mind(km) - 1 jp = jp - jsub if(jp.gt.0)go to 30 imon = km jp = jp + jsub iday = jp idat = iyr*10000 + imon*100 + iday endif return end