1
votes

I am working on some legacy code that relies heavily on common blocks which are initialized with BLOCK DATA similar to the code below.

       BLOCK DATA filename
       PARAMETER (size=100)
       CHARACTER*8 somearray(size)
       COMMON /block1/ somearray

       DATA(somearray(i), i=100)/ 
      *'string1', 'string2', ... , 'string100'/

       END

At some point in the program a subroutine uses this common block as shown in the code below.

       SUBROUTINE SUB(array)

       IMPLICIT DOUBLE PRECISION (A-H,O-Z)
       CHARACTER*8 array(*), somearray(100)

       COMMON /block1/ somearray

       DO 100 I=1, iterations
       array(I)=somearray(I)
       ...
  100  CONTINUE
       END

Here somearray has a couple of spaces in each string instead of the actual values specified in the BLOCK DATA. What could be the cause of this?

Note: the code is compiled with Intel Fortran

1
Can you create a full example (as a minimal reproducible example) for us to look at? - francescalus

1 Answers

1
votes

I found a solution to this issue by adding a SAVE statement before the END statement of any BLOCK DATA as seen below.

   BLOCK DATA filename
   PARAMETER (size=100)
   CHARACTER*8 somearray(size)
   COMMON /block1/ somearray

   DATA(somearray(i), i=100)/ 
  *'string1', 'string2', ... , 'string100'/
   SAVE
   END