#
# Translated and modified for my own purposes by Dirk Koopman G1TLH
#
+# as fixed by Steve Franke K9AN
+#
# Copyright (c) 1999 Dirk Koopman G1TLH
#
# The original copyright:-
package Minimuf;
-use strict;
use POSIX;
-use vars qw($pi $d2r $r2d $halfpi $pi2 $VOFL $R $hE $hF $GAMMA $LN10
+
+require Exporter;
+@ISA = qw(Exporter);
+@EXPORT = qw($pi $d2r $r2d $halfpi $pi2 $VOFL $R $hE $hF $GAMMA $LN10
$MINBETA $BOLTZ $NTEMP $DELTAF $MPATH $GLOSS $SLOSS
$noise);
+use strict;
+
+use vars qw($VERSION $BRANCH);
+$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
+$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ || (0,0));
+$main::build += $VERSION;
+$main::branch += $BRANCH;
+
+use vars qw($pi $d2r $r2d $halfpi $pi2 $VOFL $R $hE $hF $GAMMA $LN10
+ $MINBETA $BOLTZ $NTEMP $DELTAF $MPATH $GLOSS $SLOSS
+ $noise);
+
$pi = 3.141592653589;
$d2r = ($pi/180);
$r2d = (180/$pi);
my $d = shift; # path angle (rad)
my $fcF = shift; # F-layer critical frequency
my $ssn = shift; # current sunspot number
- my $daynight = shift; # ref to daynight array one per hop
+ my $lat1 = shift;
+ my $lon1 = shift;
+ my $b1 = shift;
+ my $b2 = shift;
+ my $lats = shift;
+ my $lons = shift;
# various refs to arrays
+ my $daynight = shift; # ref to daynight array one per hop
my $mufE = shift;
my $mufF = shift;
my $absorp = shift;
$phiE = atan($ftemp / sqrt(1 - $ftemp * $ftemp));
$ftemp = $R * cos($beta) / ($R + $hF);
$phiF = atan($ftemp / sqrt(1 - $ftemp * $ftemp));
- $$mufF->[$h] = $fcF / cos($phiF);;
+ $absorp->[$h] = $mufE->[$h] = $daynight->[$h] = 0;
+ $mufF->[$h] = $fcF / cos($phiF);;
for ($dist = $dhop; $dist < $d; $dist += $dhop * 2) {
# Calculate the E-layer critical frequency and MUF.
$fcE = 0;
- $psi = zenith($dist);
+ $psi = zenith($dist, $lat1, $lon1, $b1, $b2, $lats, $lons);
$ftemp = cos($psi);
$fcE = .9 * pow((180. + 1.44 * $ssn) * $ftemp, .25) if ($ftemp > 0);
$fcE = .005 * $ssn if ($fcE < .005 * $ssn);
$level = $noise;
$j = 0;
for ($h = $hop; $h < $hop + 3; $h++) {
-# $daynight->[$h] &= ~(P_E | P_S | P_M);
+ $daynight->[$h] &= ~(4 | 8 | 16);
if ($freq < 0.85 * $mufF->[$h]) {
# Transmit power (dBm)
$psi += $pi if ($psi < 0);
return($psi);
}
-
-
+
+# official minimuf version of display
+sub dsx
+{
+ my $h = shift;
+ my $rsens = shift;
+ my $dB2 = shift;
+ my $daynight = shift;
+
+ my $c1;
+ my $c2;
+
+ return " " unless $h;
+
+ if (($daynight->[$h] & 3) == 3) {
+ $c1 = 'x';
+ } elsif ($daynight->[$h] & 1) {
+ $c1 = 'j';
+ } elsif ($daynight->[$h] & 2) {
+ $c1 = 'n';
+ }
+ if ($daynight->[$h] & 4) {
+ $c2 = 's';
+ } elsif ($daynight->[$h] & 16) {
+ $c2 = 'm';
+ } else {
+ $c2 = ' ';
+ }
+ return sprintf("%4.0f%s%1d%s", $dB2->[$h] - $rsens, $c1, $h, $c2)
+}
+
+# my version
+sub ds
+{
+ my $h = shift;
+ my $rsens = shift;
+ my $dB2 = shift;
+ my $daynight = shift;
+
+ my $c2;
+
+ return " " unless $h;
+
+ if ($daynight->[$h] & 4) {
+ $c2 = 's';
+ } elsif ($daynight->[$h] & 16) {
+ $c2 = 'm';
+ } else {
+ $c2 = ' ';
+ }
+ my $l = $dB2->[$h] - $rsens;
+ my $s = int $l / 6;
+ $s = 9 if $s > 9;
+ $s = 0 if $s < 0;
+ my $plus = (($l / 6) >= $s + 0.5) ? '+' : ' ';
+
+ return "$c2". "S$s$plus";
+}
1;