Unit TripackProcedures

DescriptionUsesClasses, Interfaces, Objects and RecordsFunctions and ProceduresTypesConstantsVariables

Description

Original source code http://www.netlib.org/toms/751

Conditions of use http://www.netlib.org/toms/

Translation from Fortran by .

Notes: Tripack is a set of procedures for creating a constrained Delaunay triangulation. It was originally written in Fortran by Robert J. Renka.

All Write statements were replaced by calls to procedures in TripackMessages in both the Fortran and Object Pascal implementations. The generated output is compared to test that both implementations are doing the same thing. The GetStrings function and the Uses statement in the beginning of the implementation section of TripackMessages should be modified in each program to return valid results.

In translating the original source code, all "GO TO" statements were eliminated. Although Object Pascal does have a Goto statement, its use is discouraged. In many cases a new boolean variable named GoToN was introduced to replace the "GO TO" statement where "N" is a line number in the original code. These variables were used in "If" statements to either execute or skip over a block of code.

In Object Pascal, array numbering typically begins at 0 whereas in Fortran array numbering typically begins at 1. Consequently, all the array index variables have been adjusted to reflect this difference.

In Fortran, all members in a multidimensional array are in a contiguous block of memory. In Object Pascal, multidimensional dynamic arrays might not be in a contiguous block of memory. One of the consequences of this is that an array declared as a single-dimensional array in one subroutine can be passed to another subroutine where it is treated as a multidimensional array. It is also possible to pass an array element past the beginning of the array and have it (and succeeding elements) treated as a separate array in the called subroutine.

To translate such code into Object Pascal, the original two dimensional arrays were converted to one-dimensional arrays and a function was developed to convert the original 2D array indices to the new 1D array index. The function is inlined to improve speed.

The order in which data is stored in 2D arrays differs between Fortran and Object Pascal. In Fortran, the order of the elements in an array with two rows and three columns is

 1  3  5
 2  4  6

In Object Pascal, the order is

 1  2  3
 4  5  6

To adjust for this difference, the order of the indices of 2D array was reversed in translation so IWK(I,J) in Fortran becomes IWK[J-1,I-1] in Object Pascal.

In Fortran, subroutine arguments are passed as "Var" arguments by default. That convention has been followed in the translation. Many could be converted to "Const" arguments. In some cases, new variables had to be introduced to allow the arguments to be passed as var arguments. These could probably all be eliminated.

Uses

Overview

Functions and Procedures

procedure ADDCST (const NCC: longint; const LCC: TNcmaxIntArray; const N: longint; const X,Y: TNmaxSingleArray; var LWK: longint; var IWK: TLwkIntArray; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var IER: longint; IncudedLocationsOK: boolean = false);
procedure ADDNOD (const K: longint; const XK,YK: TFloat; const IST, NCC: longint; var LCC: TNcmaxIntArray; var N: longint; var X,Y: TNmaxSingleArray; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var LNEW, IER: longint);
FUNCTION AREAP (const X,Y: TNmaxSingleArray; const NB: longint; const NODES: TLwkIntArray): TFloat;
procedure BDYADD (const KK,I1,I2: longint; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var LNEW: longint);
procedure BNODES (const N: longint; const LIST,LPTR: TN6IntArray; const LEND: TNmaxIntArray; var NODES: TLwkIntArray; var NB,NA,NT: longint);
procedure CIRCUM (const X1,Y1,X2,Y2,X3,Y3: TFloat; const RATIO: longbool; var XC,YC,CR, SA,AR: TFloat);
FUNCTION CRTRI (const NCC: longint; const LCC: TNcmaxIntArray; const I1,I2,I3: longint): longbool;
procedure DELARC (const N,IO1,IO2: longint; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var LNEW, IER: longint);
procedure DELNB (const N0,NB,N: longint; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var LNEW, LPH: longint);
procedure DELNOD (const K,NCC: longint; var LCC: TNcmaxIntArray; var N: longint; var X,Y: TNmaxSingleArray; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var LNEW,LWK: longint; var IWK: TLwkIntArray; var IER: longint);
procedure EDGE (const IN1,IN2: longint; const X,Y: TNmaxSingleArray; var LWK: longint; var IWK: TLwkIntArray; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var IER: longint);
procedure GETNP (const NCC: longint; const LCC: TNcmaxIntArray; const N: longint; const X,Y: TNmaxSingleArray; const LIST,LPTR: TN6IntArray; const LEND: TNmaxIntArray; const L: longint; var NPTS: TLwkIntArray; var DS: TNmaxSingleArray; var IER: longint);
FUNCTION INDXCC (const NCC: longint; const LCC: TNcmaxIntArray; const N: longint; const LIST: TN6IntArray; const LEND: TNmaxIntArray): longint;
procedure INSERT (const K,LP: longint; var LIST,LPTR: TN6IntArray; var LNEW: longint);
procedure INTADD (const KK,I1,I2,I3: longint; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var LNEW: longint);
FUNCTION INTSEC (const X1,Y1,X2,Y2,X3,Y3,X4,Y4: TFloat): longbool;
FUNCTION LEFT (const X1,Y1,X2,Y2,X0,Y0:TFloat): longbool;
FUNCTION LSTPTR (const LPL,NB: longint; const LIST: TN6IntArray; const LPTR: TN6IntArray): longint;
FUNCTION NBCNT (const LPL: longint; const LPTR: TN6IntArray): longint;
FUNCTION NEARND (const XP,YP: TFloat; const IST,N: longint; const X,Y: TNmaxSingleArray; const LIST,LPTR: TN6IntArray; const LEND: TNmaxIntArray; var DSQ: TFloat): longint;
procedure OPTIM (const X,Y: TNmaxSingleArray; const IWK_Offset: longint; const NA: longint; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var NIT: longint; var IWK: TLwkIntArray; var IER: longint);
FUNCTION STORE (const X: TFloat): TFloat;
procedure SWAP (const IN1,IN2,IO1,IO2: longint; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var LP21: longint);
FUNCTION SWPTST (const IN1,IN2,IO1,IO2: longint; const X,Y: TNmaxSingleArray): longbool;
procedure TRFIND (const NST: longint; const PX,PY: TFloat; const N: longint; const X,Y: TNmaxSingleArray; const LIST,LPTR: TN6IntArray; const LEND: TNmaxIntArray; var I1, I2,I3: longint);
procedure TRLIST (const NCC: longint; const LCC: TNcmaxIntArray; const N: longint; const LIST,LPTR: TN6IntArray; const LEND: TNmaxIntArray; const NROW: longint; var NT: longint; var LTRI: TNtmx_LwkIntArray; var LCT: TNcmaxIntArray; var IER: longint);
procedure TRLIST2 (const NCC: longint; const LCC: TNcmaxIntArray; const N: longint; const LIST,LPTR: TN6IntArray; const LEND: TNmaxIntArray; const NROW: longint; var NT: longint; var LTRI: TNtmx_LwkIntArray; var LCT: TNcmaxIntArray; var IER: longint);
procedure TRLPRT (const NCC: longint; const LCT: TNcmaxIntArray; const N: longint; const X,Y: TNmaxSingleArray; const NROW,NT: longint; const LTRI: TNtmx_LwkIntArray; const LOUT: longint; const PRNTX: longbool);
procedure TRMESH (const N: longint; var X,Y: TNmaxSingleArray; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var LNEW: longint; var NEAR: TLwkIntArray; var NEXT: array of longint; var DIST: array of TFloat; var IER: longint);
procedure TRPLOT (const LUN: longint; const PLTSIZ, WX1,WX2,WY1,WY2: TFloat; const NCC: longint; const LCC: TNcmaxIntArray; const N: longint; const X,Y: TNmaxSingleArray; const LIST,LPTR : TN6IntArray; const LEND: TNmaxIntArray; const NUMBR: longbool; var IER: longint);
procedure TRPRNT (const NCC: longint; const LCC: TNcmaxIntArray; const N: longint; const X,Y: TNmaxSingleArray; const LIST,LPTR: TN6IntArray; const LEND: TNmaxIntArray; const LOUT: longint; const PRNTX: longbool);

Description

Functions and Procedures

procedure ADDCST (const NCC: longint; const LCC: TNcmaxIntArray; const N: longint; const X,Y: TNmaxSingleArray; var LWK: longint; var IWK: TLwkIntArray; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var IER: longint; IncudedLocationsOK: boolean = false);
 
procedure ADDNOD (const K: longint; const XK,YK: TFloat; const IST, NCC: longint; var LCC: TNcmaxIntArray; var N: longint; var X,Y: TNmaxSingleArray; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var LNEW, IER: longint);
 
FUNCTION AREAP (const X,Y: TNmaxSingleArray; const NB: longint; const NODES: TLwkIntArray): TFloat;
 
procedure BDYADD (const KK,I1,I2: longint; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var LNEW: longint);
 
procedure BNODES (const N: longint; const LIST,LPTR: TN6IntArray; const LEND: TNmaxIntArray; var NODES: TLwkIntArray; var NB,NA,NT: longint);
 
procedure CIRCUM (const X1,Y1,X2,Y2,X3,Y3: TFloat; const RATIO: longbool; var XC,YC,CR, SA,AR: TFloat);
 
FUNCTION CRTRI (const NCC: longint; const LCC: TNcmaxIntArray; const I1,I2,I3: longint): longbool;
 
procedure DELARC (const N,IO1,IO2: longint; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var LNEW, IER: longint);
 
procedure DELNB (const N0,NB,N: longint; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var LNEW, LPH: longint);
 
procedure DELNOD (const K,NCC: longint; var LCC: TNcmaxIntArray; var N: longint; var X,Y: TNmaxSingleArray; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var LNEW,LWK: longint; var IWK: TLwkIntArray; var IER: longint);
 
procedure EDGE (const IN1,IN2: longint; const X,Y: TNmaxSingleArray; var LWK: longint; var IWK: TLwkIntArray; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var IER: longint);
 
procedure GETNP (const NCC: longint; const LCC: TNcmaxIntArray; const N: longint; const X,Y: TNmaxSingleArray; const LIST,LPTR: TN6IntArray; const LEND: TNmaxIntArray; const L: longint; var NPTS: TLwkIntArray; var DS: TNmaxSingleArray; var IER: longint);
 
FUNCTION INDXCC (const NCC: longint; const LCC: TNcmaxIntArray; const N: longint; const LIST: TN6IntArray; const LEND: TNmaxIntArray): longint;
 
procedure INSERT (const K,LP: longint; var LIST,LPTR: TN6IntArray; var LNEW: longint);
 
procedure INTADD (const KK,I1,I2,I3: longint; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var LNEW: longint);
 
FUNCTION INTSEC (const X1,Y1,X2,Y2,X3,Y3,X4,Y4: TFloat): longbool;
 
FUNCTION LEFT (const X1,Y1,X2,Y2,X0,Y0:TFloat): longbool;
 
FUNCTION LSTPTR (const LPL,NB: longint; const LIST: TN6IntArray; const LPTR: TN6IntArray): longint;
 
FUNCTION NBCNT (const LPL: longint; const LPTR: TN6IntArray): longint;
 
FUNCTION NEARND (const XP,YP: TFloat; const IST,N: longint; const X,Y: TNmaxSingleArray; const LIST,LPTR: TN6IntArray; const LEND: TNmaxIntArray; var DSQ: TFloat): longint;
 
procedure OPTIM (const X,Y: TNmaxSingleArray; const IWK_Offset: longint; const NA: longint; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var NIT: longint; var IWK: TLwkIntArray; var IER: longint);
 
FUNCTION STORE (const X: TFloat): TFloat;
 
procedure SWAP (const IN1,IN2,IO1,IO2: longint; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var LP21: longint);
 
FUNCTION SWPTST (const IN1,IN2,IO1,IO2: longint; const X,Y: TNmaxSingleArray): longbool;
 
procedure TRFIND (const NST: longint; const PX,PY: TFloat; const N: longint; const X,Y: TNmaxSingleArray; const LIST,LPTR: TN6IntArray; const LEND: TNmaxIntArray; var I1, I2,I3: longint);
 
procedure TRLIST (const NCC: longint; const LCC: TNcmaxIntArray; const N: longint; const LIST,LPTR: TN6IntArray; const LEND: TNmaxIntArray; const NROW: longint; var NT: longint; var LTRI: TNtmx_LwkIntArray; var LCT: TNcmaxIntArray; var IER: longint);
 
procedure TRLIST2 (const NCC: longint; const LCC: TNcmaxIntArray; const N: longint; const LIST,LPTR: TN6IntArray; const LEND: TNmaxIntArray; const NROW: longint; var NT: longint; var LTRI: TNtmx_LwkIntArray; var LCT: TNcmaxIntArray; var IER: longint);

TRLIST2 is a faster version of TRLIST

procedure TRLPRT (const NCC: longint; const LCT: TNcmaxIntArray; const N: longint; const X,Y: TNmaxSingleArray; const NROW,NT: longint; const LTRI: TNtmx_LwkIntArray; const LOUT: longint; const PRNTX: longbool);
 
procedure TRMESH (const N: longint; var X,Y: TNmaxSingleArray; var LIST,LPTR: TN6IntArray; var LEND: TNmaxIntArray; var LNEW: longint; var NEAR: TLwkIntArray; var NEXT: array of longint; var DIST: array of TFloat; var IER: longint);
 
procedure TRPLOT (const LUN: longint; const PLTSIZ, WX1,WX2,WY1,WY2: TFloat; const NCC: longint; const LCC: TNcmaxIntArray; const N: longint; const X,Y: TNmaxSingleArray; const LIST,LPTR : TN6IntArray; const LEND: TNmaxIntArray; const NUMBR: longbool; var IER: longint);
 
procedure TRPRNT (const NCC: longint; const LCC: TNcmaxIntArray; const N: longint; const X,Y: TNmaxSingleArray; const LIST,LPTR: TN6IntArray; const LEND: TNmaxIntArray; const LOUT: longint; const PRNTX: longbool);
 

Author


Generated by PasDoc 0.12.1 on 2013-05-13 15:42:06