On Jul 30, 3:27 pm, [EMAIL PROTECTED] (Rob Dixon) wrote:
> Chas Owens wrote:
> > On 7/30/07, John W. Krahn <[EMAIL PROTECTED]> wrote:
> >> Chas Owens wrote:
> >>> On 7/30/07, Isha M. Renta <[EMAIL PROTECTED]> wrote:
> >>>> The 13 is the counter for the $inittime array (which actually have 13
> >>>> numbers and not 15 as it seems) and the 3600 is the number of lines in
> >>>> all
> >>>> the files. All the files have 3600 lines.
>
> >>>> Isha
> >>> snip
>
> >>> Then you have an off-by-one error. You are saying
>
> >>> for($j=0;$j<=13,$j++) {
>
> >>> This will loop 14 times, not 13 times. This is why C-style for loops
> >>> are bad. Don't use them. If you want to loop over an array use the
> >>> iterating version of for:
>
> >>> for my $element (@array) {}
>
> >>> If you want to loop over a range you still should use the iterating
> >>> version of for:
>
> >>> for my $j (1 .. 13) {}
> >> It would probably be better to use:
>
> >> for my $j ( 0 .. $#array ) {}
> > snip
>
> > No, that is almost always better written as
>
> > for my $element (@array) {}
>
> That is a completely different loop. And I think John's point was that
> it would be better to use $#array than to hard-code 13.
>
> Rob
ok it started working and now that I run it in another computer is
doing the same thing. I added -w at the top and it is giving me the
following errors:
Use of uninitialized value in division (/) at ./filegroupfix1_1000.txt
line 133, <V10> line 61410.
Use of uninitialized value in printf at ./filegroupfix1_1000.txt line
136, <V10> line 61410.
Error opening file. at ./filegroupfix1_1000.txt line 15, <V10> line
136506.
Useless use of a constant in void context at ./filegroupfix1_1000.txt
line 149.
The script is below.***
Can anyone tell me what am I missing?
I'll appreciate your help.
Thanks,
Isha
***
----------------
#!/usr/bin/perl -w
#open the data files
@fcsttime=( '00', '06', 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72);
@inittime=('10. 00', '10. 06', '10. 12', '10. 18', '11. 00', '11. 06',
'11. 12', '11. 18', '12. 00', '12. 06', '12. 12', '12. 18', '13. 00');
[EMAIL PROTECTED]( '0000', '0600', '1200', '1800');
for($j=0;$j<=13;$j++)
{
open (GFDLU,'<',"26Uivan09l.2004091000.gribn3.f
$fcsttime[$j].UGRD.txt") || die "Error opening file.";
open (GFDLV,'<',"26Uivan09l.2004091000.gribn3.f
$fcsttime[$j].VGRD.txt") || die "Error opening file.";
open (GFDLP,'<',"26Uivan09l.2004091000.gribn3.f
$fcsttime[$j].PRMSL.txt") || die "Error opening file.";
open (GFDLT,'<',"26Uivan09l.2004091000.gribn3.f
$fcsttime[$j].TMPsfc.txt") || die "Error opening file.";
open (GFDLR,'<',"26Uivan09l.2004091000.gribn3.f$fcsttime[$j].RH.txt")
|| die "Error opening file.";
open (GFDLH,'<',"26Uivan09l.2004091000.gribn3.f$fcsttime[$j].HGT.txt")
|| die "Error opening file.";
#assign the data files to a list
@lgfdlp=<GFDLP>;
@lgfdlu=<GFDLU>;
@lgfdlv=<GFDLV>;
#20
@lgfdlt=<GFDLT>;
@lgfdlr=<GFDLR>;
@lgfdlh=<GFDLH>;
#removes the first line from the list
splice(@lgfdlp,0,1,());
splice(@lgfdlu,0,1,());
splice(@lgfdlv,0,1,());
splice(@lgfdlt,0,1,());
splice(@lgfdlr,0,1,());
splice(@lgfdlh,0,1,());
open (U10M,'>>',"26Uivan09l.2004091000.gribn3.f
$fcsttime[$j].U10M.txt") || die "Error opening file.";
open (V10M,'>>',"26Uivan09l.2004091000.gribn3.f
$fcsttime[$j].V10M.txt") || die "Error opening file.";
#creates lists
@z0=();
#40
@W35m=();
@Ust=();
$kconst=0.4;
@W10=();
@theta10=();
@U10=();
@V10=();
for($d=0;$d<3600;$d++)
{
$W35m[$d]=sqrt($lgfdlu[$d]**2+$lgfdlv[$d]**2); #magnitude of 35m
winds
if($W35m[$d]<=12.5)
{
#35 to 10m wind reduction equation for W35 less than 12.5 m/s
$z0[$d]=1000*0.0185/9.8*(0.00053*$W35m[$d]**2+0.0286*
$W35m[$d]-0.0137)**2;
}
else
{
#35 to 10m wind reduction equation for W5 greater than 12.5 m/s
$z0[$d]=0.0739*$W35m[$d]-0.58;
#60
}
$z0[$d]=$z0[$d]*0.001; #changes z0 from mm to m
$Ust[$d]=($W35m[$d]*$kconst)/(log(35/$z0[$d])); #Calculates U* -
Powell et al. 2003 eq. (1)
$W10[$d]=($Ust[$d]/$kconst)*log(10/$z0[$d]); #Calculates 10 m wind
magnitude
$theta10[$d]=atan2($lgfdlu[$d],$lgfdlv[$d]); #calculates 35m wind
direction. Assumed wdir35=wdir10
$U10[$d]=$W10[$d]*sin($theta10[$d]); #Calculates the U10 component
$V10[$d]=$W10[$d]*cos($theta10[$d]); #Calculates the V10 component
printf U10M "$U10[$d]\n";
printf V10M "$V10[$d]\n";
}
#creates lat/lon files
#open (LAT,'>>',"26Uivan09l.2004091000.gribn3.f$fcsttime[$j].lat.txt")
|| die "Error opening file.";
#open (LON,'>>',"26Uivan09l.2004091000.gribn3.f$fcsttime[$j].lon.txt")
|| die "Error opening file.";
[EMAIL
PROTECTED](75.291,76.291,77.458,78.291,78.958,79.625,80.125,80.625,81.458,81.958,82.458,83.125,83.625,83.958,84.291,84.291,84.291,84.291,84.125,83.958,83.625);
[EMAIL
PROTECTED](12.708,13.374,13.874,14.208,14.541,14.874,15.208,15.708,16.208,16.708,17.374,18.041,18.874,19.541,20.374,21.208,22.208,23.041,23.875,24.875,25.541);
#calculates the lat/long and puts is in a file
#$xbeg=$initposx[$j];
#$ybeg=$initposy[$j];
#for($m=0;$m<60;$m++)
##80
# {
# for($k=0;$k<60;$k++)
# {
# $lon=($xbeg-($k*(0.08333333)));
# $lat=($ybeg+($m*(0.08333333)));
# printf LAT "$lat\n";
# printf LON "$lon\n";
# }
# }
open (LATI,'<',"26Uivan09l.2004091000.gribn3.f$fcsttime[$j].lat.txt")
|| die "Error opening file.";
open (LONI,'<',"26Uivan09l.2004091000.gribn3.f$fcsttime[$j].lon.txt")
|| die "Error opening file.";
open (U10,'<',"26Uivan09l.2004091000.gribn3.f$fcsttime[$j].U10M.txt")
|| die "Error opening file.";
open (V10,'<',"26Uivan09l.2004091000.gribn3.f$fcsttime[$j].V10M.txt")
|| die "Error opening file.";
open (ALLF,'>>',"26Uivan09l.2004091000.gribn3.f
$fcsttime[$j].ALLF.txt") || die "Error opening file.";
#assigns lat/lon and U10 and V10 files to lists
@lgfdllat=<LATI>;
@lgfdllon=<LONI>;
@U10m2=<U10>;
@V10m2=<V10>;
#organizes the data files in one file
select(ALLF);
for($i=0;$i<3600;$i++)
{
#100
printf "04 0409$inittime[$j]00";
$fcontentlat=$lgfdllat[$i];
printf (" %7.3f",$fcontentlat);
$fcontentlon=$lgfdllon[$i];
printf ("%8.3f",$fcontentlon);
$pressv=$lgfdlp[$i]/100;
printf (" %6.1f",$pressv);
$fcontentt=$lgfdlt[$i];
printf (" %6.1f",$fcontentt);
$fcontentr=$lgfdlr[$i];
printf (" %6.1f",$fcontentr);
$fcontenth=$lgfdlh[$i];
printf (" %6.1f",$fcontenth);
$U10m=$U10m2[$i];
printf ("%6.1f",$U10m);
$V10m=$V10m2[$i];
printf (" %6.1f",$V10m);
print " GFDL\n";
}
#120
close(GFDLU,GFDLV,GFDLH,GFDLR,GFDLT,GFDLP,LATI,LONI,U10M,V10M,ALLF)
}
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/