NUMAL Section 1.1.6

BEGIN SECTION : 1.1.6 (April, 1974)

AUTHOR:         T.J.DEKKER.

CONTRIBUTOR:    P.A.BEENTJES.

INSTITUTE:      MATHEMATICAL CENTRE.

RECEIVED:       730715.

BRIEF DESCRIPTION:

    THIS SECTION CONTAINS SIX PROCEDURES.
    ICHVEC  INTERCHANGES  THE ELEMENTS  OF  THE VECTOR  GIVEN IN  ARRAY
    A[L:U] AND ARRAY A[SHIFT + L : SHIFT + U].
    ICHCOL  INTERCHANGES  THE ELEMENTS  OF THE COLUMN VECTORS  GIVEN IN
    ARRAY A[L:U, I:I] AND ARRAY A[L:U, J:J].
    ICHROW INTERCHANGES THE ELEMENTS OF THE ROW VECTORS GIVEN IN  ARRAY
    A[I:I, L:U] AND ARRAY A[J:J, L:U].
    ICHROWCOL  INTERCHANGES  THE ELEMENTS  OF  THE  ROW VECTOR GIVEN IN
    ARRAY A[I:I, L:U] AND THE COLUMN VECTOR GIVEN IN ARRAY A[L:U, J:J].
    ICHSEQVEC INTERCHANGES THE ELEMENTS OF THE VECTORS  GIVEN IN  ARRAY
    A[IL : IL + (U + L - 1)*(U - L)//2] AND ARRAY A[SHIFT+L : SHIFT+U],
    WHERE THE ELEMENTS OF THE FIRST VECTOR  ARE  A[IL+(J+L-1)*(J-L)//2]
    FOR J = L,..., U.
    ICHSEQ   INTERCHANGES   THE   ELEMENTS   OF   THE   VECTORS   GIVEN
    IN   ARRAY    A[IL : IL + (U + L - 1) * (U - L) // 2]   AND   ARRAY
    A[SHIFT + IL : SHIFT + IL + (U + L - 1) * (U - L) // 2]  WHERE  THE
    ELEMENTS OF THE VECTORS ARE A[IL + (J + L - 1) * (J - L) // 2]  AND
    A[SHIFT + IL + (J + L - 1) * (J - L) // 2]   FOR   J = L ,..., U  .

KEYWORDS:

    ELEMENTARY PROCEDURE,
    VECTOR OPERATIONS,
    INTERCHANGING.


SUBSECTION: ICHVEC.

CALLING SEQUENCE:

    HEADING:
    "PROCEDURE" ICHVEC(L, U, SHIFT, A); "VALUE" L,U,SHIFT;
    "INTEGER" L,U,SHIFT; "ARRAY" A;
    "CODE" 34030;

    FORMAL PARAMETERS:
    L,U:    <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT;
    SHIFT:  <ARITHMETIC EXPRESSION>;
            INDEX-SHIFTING PARAMETER;
    A:      <ARRAY IDENTIFIER>;
            "ARRAY" A[P : Q]; P AND Q SHOULD SATISFY:  P <= L,  Q >= U,
            P <= L + SHIFT AND Q >= U + SHIFT.

LANGUAGE: COMPASS.


SUBSECTION: ICHCOL.

CALLING SEQUENCE:

    HEADING:
    "PROCEDURE" ICHCOL(L, U, I, J, A); "VALUE" L,U,I,J;
    "INTEGER" L,U,I,J; "ARRAY" A;
    "CODE" 34031;

    FORMAL PARAMETERS:
    L,U:    <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT;
    I,J:    <ARITHMETIC EXPRESSION>;
            COLUMN-INDICES   OF   THE  COLUMN  VECTORS   OF   ARRAY  A;
    A:      <ARRAY IDENTIFIER>;
            "ARRAY" A[L : U, P : Q]; P AND Q SHOULD SATISFY:  P  <=  I,
            P <= J, Q >= I AND Q >= J.

LANGUAGE: COMPASS.


SUBSECTION: ICHROW.

CALLING SEQUENCE:

    HEADING:
    "PROCEDURE" ICHROW(L, U, I, J, A); "VALUE" L,U,I,J;
    "INTEGER" L,U,I,J; "ARRAY" A;
    "CODE" 34032;

    FORMAL PARAMETERS:
    L,U:    <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT;
    I,J:    <ARITHMETIC EXPRESSION>;
            ROW-INDICES OF THE ROW VECTORS OF ARRAY A;
    A:      <ARRAY IDENTIFIER>;
            "ARRAY" A[P : Q, L : U]; P AND Q SHOULD SATISFY:  P  <=  I,
            P <= J, Q >= I AND Q >= J.

LANGUAGE: COMPASS.


SUBSECTION: ICHROWCOL.

CALLING SEQUENCE:

    HEADING:
    "PROCEDURE" ICHROWCOL(L, U, I, J, A); "VALUE" L,U,I,J;
    "INTEGER" L,U,I,J; "ARRAY" A;
    "CODE" 34033;

    FORMAL PARAMETERS:
    L,U:    <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT;
    I:      <ARITHMETIC EXPRESSION>;
            ROW-INDEX OF THE ROW VECTOR OF ARRAY A;
    J:      <ARITHMETIC EXPRESSION>;
            COLUMN-INDEX OF THE COLUMN VECTOR OF ARRAY A;
    A:      <ARRAY IDENTIFIER>;
            "ARRAY" A[P : Q, R : S]; P,  Q,  R  AND  S  SHOULD SATISFY:
            P <= I, P <= L, Q >= I, Q >= U, R <= J, R <= L, S >= J  AND
            S >= U,  FURTHERMORE THE ROW AND COLUMN  TO BE INTERCHANGED
            SHOULD BE DISJUNCT.

LANGUAGE: COMPASS.


SUBSECTION: ICHSEQVEC.

CALLING SEQUENCE:

    HEADING:
    "PROCEDURE" ICHSEQVEC(L, U, IL, SHIFT, A); "VALUE" L,U,IL,SHIFT;
    "INTEGER" L,U,IL,SHIFT; "ARRAY" A;
    "CODE" 34034;

    FORMAL PARAMETERS:
    L,U:    <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT;
    IL:     <ARITHMETIC EXPRESSION>;
            LOWER BOUND OF THE VECTOR A;
    SHIFT:  <ARITHMETIC EXPRESSION>;
            INDEX-SHIFTING PARAMETER;
    A:      <ARRAY IDENTIFIER>;
            "ARRAY" A[P : Q];
            THE SUBSCRIPTS ABOVE AND THE VALUES OF L(+SHIFT), U(+SHIFT)
            AND IL+(U+L-1)*(U-L)//2 SHOULD NOT CONTRADICT EACH OTHER.

LANGUAGE: COMPASS.


SUBSECTION: ICHSEQ.

CALLING SEQUENCE:

    HEADING:
    "PROCEDURE" ICHSEQ(L, U, IL, SHIFT, A); "VALUE" L,U,IL,SHIFT;
    "INTEGER" L,U,IL,SHIFT; "ARRAY" A;
    "CODE" 34035;

    FORMAL PARAMETERS:
    L,U:    <ARITHMETIC EXPRESSION>;
            LOWER AND UPPER BOUND OF THE RUNNING SUBSCRIPT;
    IL:     <ARITHMETIC EXPRESSION>;
            LOWER BOUND OF THE VECTOR A;
    SHIFT:  <ARITHMETIC EXPRESSION>;
            INDEX-SHIFTING PARAMETER;
    A:      <ARRAY IDENTIFIER>;
            "ARRAY" A[P : Q];
            THE SUBSCRIPTS ABOVE AND THE VALUES OF  IL+(J+L-1)*(J-L)//2
            ( +SHIFT ),J = L(1)U, SHOULD  NOT  CONTRADICT  EACH  OTHER.

LANGUAGE: COMPASS.

REFERENCES:

    [1].T.J.DEKKER.
        ALGOL 60 PROCEDURES IN NUMERICAL ALGEBRA, PART 1,
        MATHEMATICAL CENTRE TRACT 22, AMSTERDAM (1970).

SOURCE TEXT(S):

THE FOLLOWING PROCEDURES ARE WRITTEN IN COMPASS, AN EQUIVALENT ALGOL 60
TEXT OF THESE COMPASS ROUTINES IS GIVEN.

"CODE" 34030;

"CODE" 34031;

"CODE" 34032;
"CODE" 34033;

"CODE" 34034;

"CODE" 34035;