#!/usr/bin/perl # Query the NHC ATCF (via ftp.nhc.noaa.gov) and JTWC (via wget from their machine pzal. Password required) database for currently active storms and invest areas. #-- assign directory for data $work_dir = "/home/padt/ADTV8.2.1/forecasts/tmp"; $atcf_dir = "/data/TCFP/ATCF"; print "#####################-----get_active_storms.cgi-----#####################\n"; $stdate=`date`; print "$stdate"; #-- Get day/time system information... ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$indst)=gmtime(time); $year = $year-100; $mon = $mon + 1; if($year < 10) {$year = "0".$year}; $year= "20$year"; $echo_date = "date > $work_dir/date.txt"; system($echo_date); $make_log = "cat $work_dir/date.txt $work_dir/new_sector_file >> $work_dir/new_sector_file.old"; system($make_log); #-- remove old files $clean_sector_file = "rm -f $work_dir/new_sector_file"; system($clean_sector_file); $clean_sector_file_temp = "rm -f $work_dir/new_sector_file.temp"; system($clean_sector_file_temp); $clean_sector_file_jtwc = "rm -f $work_dir/jtwc_sector_file"; system($clean_sector_file_jtwc); #-- move the old files to an archive directory #$mv_old = "mv -f $work_dir/*.dat $work_dir/archive"; #system($mv_old); #-- Get the ordinal date which we will use to check if storm is current if ($year == 2012 || $year == 2016 || $year == 2020 || $year == 2024 || $year == 2028 || $year == 2032){ @mbl = ("0","31","60","91","121","152","182","213","244","274","305","335"); } else{ @mbl = ("0","31","59","90","120","151","181","212","243","273","304","334"); } $add_days = $mbl[$mon -1]; $iday = $mday + $add_days; $jday = $iday; if(($dec_flag == 1) && ($mon eq "01")) { $jday = 365 + $jday; } # keep sat_jday sequential when going from Dec to Jan $cdate1 = $hour/24 + ($min/60)/60; $cdate2 = sprintf("%0.3f", $cdate1); $cdate = $cdate2 + $jday; ########################################################################## #-- get all ATCF files from NHC area of responsibility #################################################################### if ($year == 2000 || $year == 2004 || $year == 2008 || $year == 2012 ){ @mbl = ("0","31","60","91","121","152","182","213","244","274","305","335"); } else{ @mbl = ("0","31","59","90","120","151","181","212","243","273","304","334"); } $add_days = $mbl[$mon -1]; $iday = $mday + $add_days; $jday = $iday; if(($dec_flag == 1) && ($mon eq "01")) { $jday = 365 + $jday; } # keep sat_jday sequential when going from Dec to Jan $cdate1 = $hour/24 + ($min/60)/60; $cdate2 = sprintf("%0.3f", $cdate1); $cdate = $cdate2 + $jday; #$getatcf_nhc="ftp ftp.nhc.noaa.gov < $work_dir/getatcf_atl.scr"; #system($getatcf_nhc); $nhc_list_file = "$work_dir/ftp_nhc_list.txt"; #$ls = "ls $atcf_dir/NHC/b*.dat > $nhc_list_file"; $ls = "find $atcf_dir/NHC/b*.dat -type f -mtime -7 > $nhc_list_file"; system($ls); print "---NHC LIST FILE: $nhc_list_file\n"; $catListFile = "cat $nhc_list_file\n"; system($catListFile); open(nhc_file_list,"<$nhc_list_file") || print "Can't open $nhc_list_file!\n"; while(){ chop $_; ($bfile)=split(/\s+/); print "---NHC bfile is: $bfile\n"; $catBfile = "cat $bfile\n"; system($catBfile); open(bfile,"<$bfile") || die "Can't open $bfile!\n"; while(){ chop $_; ($b,$btnum,$btdate,$gb,$gb2,$gb3,$btlat,$btlon,$btwind,$btp,$type,$radid,$quad,$q1,$q2,$q3,$q4,$bpenv,$bpdist,$brmw,$gb14,$beye_sz,$sub_basin,$gb17,$gb18,$gb19,$gb20,$bname,$gb22)=split(/,/,$_); $sub_basin =~ s/ //g; #remove leading space (added on 11/30/2017) print "sub_basin is: $sub_basin\n"; #if (($type eq " DB") || ($type eq " WV") || ($type eq " LO")) { $bname = "INVEST"; } if (($type eq " DB") || ($type eq " WV") ) { $bname = "INVEST"; } if ($bname =~ "TEST") { next; } $byear = substr($btdate,1,4); $bmon = substr($btdate,5,2); $bday = substr($btdate,7,2); $bhour = substr($btdate,9,2); $btime= "$bhour"."00"; $blon = substr($btlon,-5,4); $blon_flag = substr($btlon,-1,1); $blon = $blon/10; $blon = "$blon$blon_flag"; $blat = substr($btlat,-4,3); $blat_flag = substr($btlat,4,1); $blat = $blat/10; $blat = "$blat$blat_flag"; if ($ryear == 2000 || $byear == 2004 || $byear == 2008 || $byear == 2012){ @bmbl = ("0","31","60","91","121","152","182","213","244","274","305","335"); } else{ @bmbl = ("0","31","59","90","120","151","181","212","243","273","304","334"); } $badd_days = $bmbl[$bmon -1]; $bday = $bday + $badd_days; $bjday = $bday; if (($dec_flag == 1) && ($bmon == "01") ) { $bjday = $bjday + 365; } $count_bday[$bcount] = $bjday; $b_date1 = $bhour/24; $b_date2 = sprintf("%0.3f", $b_date1); $b_date = $b_date2 + $bjday; } # end while bfile close(bfile); $sect_date = substr($btdate,3,6); $date_diff = $cdate - $b_date; # $date_diff = abs($date_diff); if($b eq"AL"){ $b="L";} if($b eq"EP"){ $b="E";} if($b eq"CP"){ $b="C";} if($b eq"WP"){ $b="W";} if($b eq "IO"){ # $b= "B"; # if($blon_save < 77){ $b= "A";} $b = $sub_basin; #changed and added on 11/30/2017 } if($b eq "SH"){ # $b= "S"; # if($blon_flag eq "W"){ $b= "P"} # if($blon_save > 140){ $b= "P";} $b = $sub_basin; #changed and added on 11/30/2017 } #-- add below block on 02/18/2015 $b23 = chop $sub_basin; print "b23 is: $b23\n"; #-- changed on 07/13/2015 # if($b23 eq "") { # print "b23 is unavailable\n"; # } # else{ # $b = $b23; # } if (($b eq "W") && ($b23 eq "P")) { $b = "P"} if (($b eq "P") && ($b23 eq "W")) { $b = "W"} #------------------------ if($b eq"L"){ $bsn="ATL";} if($b eq"E"){ $bsn="EPAC";} if($b eq"C"){ $bsn="CPAC";} if($b eq"W"){ $bsn="WPAC";} if($b eq"S"){ $bsn="SHEM";} if($b eq"I"){ $bsn="NIO";} if($bname eq "") { $bname = "$btnum$b"; } #if (($type eq " DB") || ($type eq " WV") || ($type eq " LO")) { $bname = "INVEST"; } if (($type eq " DB") || ($type eq " WV") ) { $bname = "INVEST"; } if (($bname eq " INVEST") && ($type eq " TD")) { $bname = "$btnum$b"; } if (($bname eq " INVEST") && ($type eq " TS")) { $bname = "$btnum$b"; } # if (($bname eq "INVEST") && ($b eq "L") && ($btwind < 25)) { $btwind = 25 ;} # override btwind so that it shows on TC page during HS3 print "Date: $cdate: $b_date: $date_diff\n"; #-- modified condition on 10/30/2015 # if ($date_diff < 0.5 && $date_diff > 0.00) { if ($date_diff < 0.5) { if ( $btnum < 90) { # active storm. Write to temp file then we will check the temp file for dupes print "btnum:$btnum\n"; $ffile=substr($bfile,-12,8); print "ffile: $ffile\n"; $ffile="$atcf_dir/NHC/$ffile.fst"; $forecast="/home/padt/ADTV8.2.1/forecasts/$btnum$b.FORECAST"; $copy_fst="cp $ffile $forecast"; print "ffile: $ffile\n"; print "forecast: $forecast\n"; $make_sector="echo $btnum$b $bname $sect_date $btime $blat $blon $bsn $btwind $btp $ffile>> $work_dir/new_sector_file.temp"; system($make_sector); } } # end if date_diff < 1 } # end while nhc file close(nhc_file_list); # open the just created sector file and check to see if invests are now numbered storms open(sect_file,"<$work_dir/new_sector_file.temp") || print "3 Can't open $work_dir/new_sector_file.temp!\n"; while(){ chop $_; ($snum,$sname,$ssect_date,$stime,$slat,$slon,$sbsn,$sbtwind,$sbtp,$ffile)=split(/\s+/); $slon1 = sprintf("%4.1f",$slon); # to prevent truncation of ingeters $slat1 = sprintf("%3.1f",$slat); $dupe = 0; # assume it is not a duplicate $slon1 =~ s/W//; $slat1 =~ s/N//; $slat1 =~ s/S//; # open temp file again and read through looking for invests that are now numbered systems open(sect_file2,"<$work_dir/new_sector_file.temp") || print "4 Can't open $work_dir/new_sector_file.temp!\n"; while(){ chop $_; #($snum,$sname,$ssect_date,$stime,$slat,$slon,$sbsn,$sbtwind,$sbtp,$ffile)=split(/\s+/); ($snum2,$sname2,$ssect_date2,$stime2,$slat2,$slon2,$sbsn2,$sbtwind2,$sbtp2,$ffile2)=split(/\s+/); $snumc = substr($snum,0,2); $snum2c = substr($snum2,0,2); $snumc = sprintf("%2.0f",$snumc); $snum2c = sprintf("%2.0f",$snum2c); $slon2 =~ s/W//; $slat2 =~ s/N//; $slat2 =~ s/S//; $lat_diff = abs($slat2 - $slat1); $lon_diff = abs($slon2 - $slon1); if(($dupe != 1) && ( $snumc > 89 ) && ($snumc != $snum2c)){ if (($lat_diff < 4) && ($lon_diff < 4)) { $dupe = 1; # true print "THIS INVEST $snum IS NOW A NUMBERED STORM $snum2\n"; } } # end if INVEST } # end while sect file second open if (($dupe == 0)&&($sbtwind > 15)) { #$echo_sect = "echo $snum $sname $ssect_date $stime $slat1$blat_flag $slon1$blon_flag $sbsn $sbtwind $sbtp >> $work_dir/jtwc_sector_file"; $echo_sect = "echo $snum $sname $ssect_date $stime $slat1$blat_flag $slon1$blon_flag $sbsn $sbtwind $sbtp $ffile>> $work_dir/jtwc_sector_file"; system($echo_sect); } # end if dupe =0 } # end while sect_file first open ##################################################################### #-- get all ATCF files from JTWC machine for storms in their AOR. ################################################################# $clean_sector_file_temp = "rm -f $work_dir/new_sector_file.temp"; system($clean_sector_file_temp); $clean_sector_file_temp = "touch $work_dir/new_sector_file.temp"; system($clean_sector_file_temp); #$getatcf_jtwc = "/usr/bin/wget -r -l0 -nd --no-parent -A \"bwp*.dat\" --directory-prefix=$atcf_dir/* -i $work_dir/get_jtwc_list.txt"; #system($getatcf_jtwc); #$getatcf_jtwc = "/usr/bin/wget -r -l0 -nd --no-parent -A \"bsh*.dat\" --directory-prefix=$atcf_dir/* -i $work_dir/get_jtwc_list.txt"; #system($getatcf_jtwc); #$getatcf_jtwc = "/usr/bin/wget -r -l0 -nd --no-parent -A \"bio*.dat\" --directory-prefix=$atcf_dir/* -i $work_dir/get_jtwc_list.txt"; #system($getatcf_jtwc); $jtwc_list_file = "$work_dir/ftp_jtwc_list.txt"; #$ls = "ls $atcf_dir/DOD/bwp*.dat $atcf_dir/DOD/bsh*.dat $atcf_dir/DOD/bio*.dat > $jtwc_list_file"; $ls = "find $atcf_dir/DOD/bwp*.dat -type f -mtime -7 > $jtwc_list_file"; system($ls); $ls = "find $atcf_dir/DOD/bsh*.dat -type f -mtime -7 >> $jtwc_list_file"; system($ls); $ls = "find $atcf_dir/DOD/bio*.dat -type f -mtime -7 >> $jtwc_list_file"; system($ls); $ls = "find $atcf_dir/DOD/bcp*.dat -type f -mtime -7 >> $jtwc_list_file"; system($ls); #--added following on 08/07/2014 as Liqun Ma requested $ls = "find $atcf_dir/DOD/bep*.dat -type f -mtime -7 >> $jtwc_list_file"; system($ls); print "---JTWC LIST FILE: $jtwc_list_file\n"; $catListFile = "cat $jtwc_list_file\n"; system($catListFile); open(jtwc_file_list,"<$jtwc_list_file") || print "Can't open $jtwc_list_file!\n"; while(){ chop $_; ($bfile)=split(/\s+/); print "---JTWC bfile is: $bfile\n"; $catBfile = "cat $bfile\n"; system($catBfile); open(bfile,"<$bfile") || die "Can't open $bfile!\n"; while(){ chop $_; ($b,$btnum,$btdate,$gb,$gb2,$gb3,$btlat,$btlon,$btwind,$btp,$type,$radid,$quad,$q1,$q2,$q3,$q4,$bpenv,$bpdist,$brmw,$gb14,$beye_sz,$sub_basin,$gb17,$gb18,$gb19,$gb20,$bname,$gb22)=split(/,/,$_); $sub_basin =~ s/ //g; #remove leading space (added on 11/30/2017) print "sub_basin is: $sub_basin\n"; # if (($type eq " DB") || ($type eq " SD")||($type eq " SS")||($type eq " WV") || ($type eq " LO")) { $bname = "INVEST"; } if (($type eq " DB") || ($type eq " WV") ) { $bname = "INVEST"; } if ($bname =~ "TEST") { next; } $byear = substr($btdate,1,4); $bmon = substr($btdate,5,2); $bday = substr($btdate,7,2); $bhour = substr($btdate,9,2); $btime= "$bhour"."00"; $blon = substr($btlon,-5,4); $blon_flag = substr($btlon,-1,1); $blon = $blon/10; $blon_save = $blon; $blon = "$blon$blon_flag"; $blat = substr($btlat,-4,3); $blat_flag = substr($btlat,4,1); $blat = $blat/10; $blat = "$blat$blat_flag"; if ($byear == 2000 || $byear == 2004 || $byear == 2008 || $byear == 2012){ @bmbl = ("0","31","60","91","121","152","182","213","244","274","305","335"); } else{ @bmbl = ("0","31","59","90","120","151","181","212","243","273","304","334"); } $badd_days = $bmbl[$bmon -1]; $bday = $bday + $badd_days; $bjday = $bday; if (($dec_flag == 1) && ($bmon == "01") ) { $bjday = $bjday + 365; } $count_bday[$bcount] = $bjday; $b_date1 = $bhour/24; $b_date2 = sprintf("%0.3f", $b_date1); $b_date = $b_date2 + $bjday; } # end while bfile close(bfile); $sect_date = substr($btdate,3,6); $date_diff = $cdate - $b_date; # $date_diff = abs($date_diff); if($b eq"AL"){ $b="L";} if($b eq"EP"){ $b="E";} if($b eq"CP"){ $b="C";} if($b eq"WP"){ $b="W";} if($b eq "IO"){ # $b= "B"; # if($blon_save < 77){ $b= "A";} $b = $sub_basin; #changed and added on 11/30/2017 } if($b eq "SH"){ # $b= "S"; # if($blon_flag eq "W"){ $b= "P"} # if($blon_save > 140){ $b= "P";} $b = $sub_basin; #changed and added on 11/30/2017 } #-- add below block on 02/18/2015 $b23 = chop $sub_basin; print "b23 is: $b23\n"; #-- changed on 07/13/2015 # if($b23 eq "") { # print "b23 is unavailable\n"; # } # else{ # $b = $b23; # } if (($b eq "W") && ($b23 eq "P")) { $b = "P"} if (($b eq "P") && ($b23 eq "W")) { $b = "W"} #-------------- if($b eq "L"){ $bsn="ATL";} if($b eq "E"){ $bsn="EPAC";} if($b eq "C"){ $bsn="CPAC";} if($b eq "W"){ $bsn="WPAC";} if($b eq "S"){ $bsn="SHEM";} if($b eq "A" || $b eq "B"){ $bsn="IO";} if($bname eq "") { $bname = "$btnum$b"; } #if (($type eq " DB") || ($type eq " WV") || ($type eq " LO")) { $bname = "INVEST"; } if (($type eq " DB") || ($type eq " WV") ) { $bname = "INVEST"; } if (($bname eq " INVEST") && ($type eq " TD")) { $bname = "$btnum$b"; } if (($bname eq " INVEST") && ($type eq " TS")) { $bname = "$btnum$b"; } print "Date: $cdate: $b_date: $date_diff: $btdate\n"; #-- modified condition on 10/30/2015 # if ($date_diff < 0.9 && $date_diff > 0.00) { if ($date_diff < 0.9) { if ( ($btnum < 90) && ($type !~ "TEST") ) { # active storm. Write to temp file then we will check the temp file for dupes print "btnum:$btnum\n"; $ffile=substr($bfile,-12,8); print "ffile: $ffile\n"; $ffile="$atcf_dir/DOD/$ffile.fst"; $forecast="/home/padt/ADTV8.2.1/forecasts/$btnum$b.FORECAST"; $copy_fst="cp $ffile $forecast"; print "ffile: $ffile\n"; print "forecast: $forecast\n"; #system($copy_fst); #$make_sector="echo $btnum$b $bname $sect_date $btime $blat $blon $bsn $btwind $btp >> $work_dir/new_sector_file.temp"; $make_sector="echo $btnum$b $bname $sect_date $btime $blat $blon $bsn $btwind $btp $ffile>> $work_dir/new_sector_file.temp"; # $make_sector="echo $btnum$b $bname $sect_date $btime $blat $blon $bsn $btwind $btp $ffile> $work_dir/new_sector_file.temp"; system($make_sector); } # end if btnum < 90 } # end if date_diff < 1 } # end while jtwc file close(jtwc_file_list); #-- open the just created sector file and check to see if invests are now numbered storms open(sect_file,"<$work_dir/new_sector_file.temp") || print "1 Can't open $work_dir/new_sector_file.temp!\n"; while(){ chop $_; ($snum,$sname,$ssect_date,$stime,$slat,$slon,$sbsn,$sbtwind,$sbtp,$ffile)=split(/\s+/); $slon1 = sprintf("%4.1f",$slon); # to prevent truncation of ingeters $slat1 = sprintf("%3.1f",$slat); $blon_flag = substr($slon,-1,1); $blat_flag = substr($slat,-1,1); $dupe = 0; # assume it is not a duplicate $slon1 =~ s/E//; $slat1 =~ s/N//; $slat1 =~ s/S//; #-- open temp file again and read through looking for invests that are now numbered systems open(sect_file2,"<$work_dir/new_sector_file.temp") || print "2 Can't open $work_dir/new_sector_file.temp!\n"; while(){ chop $_; ($snum2,$sname2,$ssect_date2,$stime2,$slat2,$slon2,$sbsn2,$sbtwind2,$sbtp2,$ffile2)=split(/\s+/); $snumc = substr($snum,0,2); $snum2c = substr($snum2,0,2); $snumc = sprintf("%2.0f",$snumc); $snum2c = sprintf("%2.0f",$snum2c); $slon2 =~ s/E//; $slat2 =~ s/N//; $slat2 =~ s/S//; $lat_diff = abs($slat2 -$slat1); $lon_diff = abs($slon2 -$slon1); if(($dupe != 1) && ( $snumc > 89 ) && ($snumc != $snum2c)){ if (($lat_diff < 4) && ($lon_diff < 4)) { $dupe = 1; # true print "THIS INVEST $snum IS NOW A NUMBERED STORM $snum2\n"; } } # end if INVEST } # end while sect file second open if (($dupe == 0)&&($sbtwind > 15)) { $echo_sect = "echo $snum $sname $ssect_date $stime $slat1$blat_flag $slon1$blon_flag $sbsn $sbtwind $sbtp $ffile>> $work_dir/jtwc_sector_file"; system($echo_sect); } # end if dupe =0 } # end while sect_file first open $cp_temp = "cp $work_dir/jtwc_sector_file $work_dir/new_sector_file"; system($cp_temp); # send the file to SSEC ftp server for pickup by other scripts #$ftp = "ftp ftp.ssec.wisc.edu < $work_dir/put_sector.sh"; #system($ftp);