Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Next: 3.2 Declaration of the super-array Up: 3 Dynamic arrays Prev: 3 Dynamic arrays Index Contents


3.1 Example

 

A program consisting essentially of three parts is presented in this example.

  1. The main program, MODUXX, calls two modules, MODUL1 and MODUL2, and then prints the list of dynamic arrays allocated.

  2. Module MODUL1 allocates three arrays, T1, T2 and T3, and then calls algorithm ALGO which uses these arrays.

  3. Module MODUL2 allocates three arrays, T4, T5 and T6, and uses them directly (this type of programming is nevertheless not advised, see section 3.4).

The main program: MODUXX

      PROGRAM MODUXX
      PARAMETER (LM = 2 000 000)
      COMMON M(LM)
      CALL INITIS(M, LM, 0, 0)
      CALL MODUL1(M)
      CALL MODUL2(M, M, M)
      CALL IMATAB(M)
      END

Module MODUL1 and algorithm ALGO

      SUBROUTINE MODUL1(M)
      INTEGER M(*)
      CALL READRE(1, 'T1', IAT1, 100, M, ICODE)
      CALL READRE(2, 'T2', IAT2, 100, M, ICODE)
      NTYTAB = IINFO('REEL2')
      CALL TYPMOT(NTYTAB, NBREMO)
      CALL READRE(NTYTAB, 'T3', IAT3, 100*NBREMO, M, ICODE)
      CALL ALGO(M(IAT1), M(IAT2), M(IAT3))
      END

      SUBROUTINE ALGO(T1, T2, T3)
      INTEGER          T1(100)
      REAL             T2(100)
      DOUBLE PRECISION T3(100)
      DO 100 I = 1, 100
         T1(I) = 1
         T2(I) = 2.
         T3(I) = 3.D0
  100 CONTINUE
      END

Module MODUL2

(The programming shown below is not advisable)

      SUBROUTINE MODUL2(M, XM, DM)
      INTEGER           M(*)
      REAL             XM(*)
      DOUBLE PRECISION DM(*)
      CALL READRE(1, 'T4', IAT4, 100, M, ICODE)
      CALL READRE(2, 'T5', IAT5, 100, M, ICODE)
      NTYTAB = IINFO('REEL2')
      CALL TYPMOT(NTYTAB, NBREMO)
      CALL READRE(NTYTAB, 'T6', IAT6, 100*NBREMO, M, ICODE)
      DO 100 I = 1, 100
          M( IAT4-1         + I) = 4
         XM( IAT5-1         + I) = 5.
         DM((IAT6-1)/NBREMO + I) = 6.D0
  100 CONTINUE
      END

Execution

 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ++++++++++           OUTPUT DYNAMIC ALLOCATION           ++++++++++
 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 LONGUEUR IS THE NUMBER OF WORDS REQUESTED
 ADRESSE IS THE RETURN ADDRESS
 IAMARQUE IS THE ADDRESS OF THE ARRAY DESCRIBER    
 NB  MOTS IS THE NUMBER OF WORDS ACTUALLY USED
 THE LAST WORDS USED IN THE SUPER ARRAY IS :         829

 --------------------------------------------------------------------
 | SPACE    | TYPE | LONGUEUR | ADRESSE  | IAMARQUE | NB  MOTS | NOM  
 --------------------------------------------------------------------
 | OCCUPIED |    1 |      100 |        9 |        5 |      103 | T1
 | OCCUPIED |    2 |      100 |      113 |      109 |      103 | T2
 | OCCUPIED |    5 |      200 |      217 |      213 |      203 | T3
 | OCCUPIED |    1 |      100 |      421 |      417 |      103 | T4
 | OCCUPIED |    2 |      100 |      525 |      521 |      103 | T5
 | OCCUPIED |    5 |      200 |      629 |      625 |      203 | T6
 | FREE     | .... | ........ | ........ |      829 |  1999171 |  ....
 --------------------------------------------------------------------
 | SPACE    | TYPE | LONGUEUR | ADRESSE  | IAMARQUE | NB  MOTS | NOM  
 --------------------------------------------------------------------

The above example illustrates a number of points: the declaration of the super-array, the dynamic arrays management utilities, the programming employing these arrays, and problems due to double precision real.


Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Next: 3.2 Declaration of the super-array Up: 3 Dynamic arrays Prev: 3 Dynamic arrays Index Contents