nrutil.pl
author Andreas Thurnherr <ant@ldeo.columbia.edu>
Mon, 13 Apr 2020 11:06:22 -0400
changeset 40 c1803ae2540f
parent 0 a5233793bf69
permissions -rw-r--r--
.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     1
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     2
#                    N R U T I L . P L 
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     3
#                    doc: Wed Feb 24 17:44:49 1999
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     4
#                    dlm: Sun Jul  2 00:47:04 2006
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     5
#                    (c) 1999 A.M. Thurnherr
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     6
#                    uE-Info: 45 31 NIL 0 0 72 2 2 4 NIL ofnI
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     7
#======================================================================
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     8
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
     9
# extract from nrutil.c/nrutil.h (Numerical Recipes) adapted for ANTS
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    10
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    11
# HISTORY:
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    12
#	Feb 24, 1999: -	created from c-source
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    13
#	Aug 01, 1999: - added macros from nrutil.h
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    14
#	Sep 26, 1999: - added &dumpMatrix()
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    15
#   Jul  1, 2006: - Version 3.3 [HISTORY]
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    16
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    17
# NOTES:
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    18
#	- allocation routines &vector, &matrix needed to make sure
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    19
#	  right number of elts is allocated (for $# op)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    20
#	- array elts are initialized with nan
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    21
#	- array indices MUST start with 1 (in the spirit of FORTRAN IV, bless)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    22
#	- instead of pointer return, we use refs
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    23
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    24
sub vector($$$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    25
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    26
	my($vR,$nl,$nh) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    27
	my($i);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    28
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    29
	croak("vector must be 1-relative")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    30
		unless ($nl == 1);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    31
	for ($i=1; $i<=$nh; $i++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    32
		$vR->[$i] = nan;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    33
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    34
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    35
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    36
sub matrix($$$$$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    37
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    38
	my($mR,$nrl,$nrh,$ncl,$nch) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    39
	my($i,$j);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    40
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    41
	croak("matrix must be 1-relative")
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    42
		unless ($nrl == 1 && $ncl == 1);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    43
	for ($i=1; $i<=$nrh; $i++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    44
		for ($j=1; $j<=$nch; $j++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    45
			$mR->[$i][$j] = nan;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    46
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    47
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    48
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    49
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    50
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    51
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    52
sub dumpMatrix($$)
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    53
{
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    54
	my($msg,$mR) = @_;
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    55
	my($rows) = $#{$mR};
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    56
	my($cols) = $#{$mR->[1]};
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    57
	my($r,$c);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    58
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    59
	print(STDERR "$msg: $rows x $cols (rows x cols)\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    60
	for ($r=1; $r<=$rows; $r++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    61
		for ($c=1; $c<=$cols; $c++) {
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    62
			printf(STDERR "%.3e\t",$mR->[$r][$c]);
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    63
		}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    64
		print(STDERR "\n");
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    65
	}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    66
}
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    67
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    68
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    69
# Macros
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    70
#----------------------------------------------------------------------
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    71
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    72
sub SQR($) { return $_[0] * $_[0]; }						# D?SQR
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    73
sub MAX($$) { return ($_[0] > $_[1]) ? $_[0] : $_[1]; }		# [DF]MAX
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    74
sub MIN($$) { return ($_[0] < $_[1]) ? $_[0] : $_[1]; }		# [DF]MIN
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    75
sub SIGN($$) { return ($_[1] >= 0) ? $_[0] : -$_[0]; }		# SIGN
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    76
A.M. Thurnherr <athurnherr@yahoo.com>
parents:
diff changeset
    77
1;