FORTRAN:2D到1D

时间:2015-08-17 19:45:36

标签: arrays fortran

任何人都可以修改我的代码或告诉我如何制作“可以访问的一维数组”吗?目前,我无法访问一维数组中的每个元素。

代码:


      MODULE PARAMETERS
      INTEGER :: FILE
      INTEGER :: X=3,Y=3,Z=9
      INTEGER :: I, J, K, L = 1
      INTEGER :: B(9)
      INTEGER :: A(3,3)
      DATA       A/ 1,2,3,4,5,6,7,8,9/
      END MODULE PARAMETERS

PROGRAM CLUSTER USE PARAMETERS IMPLICIT NONE OPEN(UNIT=11,FILE="2D.TXT",ACTION="WRITE") DO J = 1,Y DO I = 1,X B(L) = A(I,J) WRITE(11,*) , B(L) END DO L = L + 1 END DO CLOSE(11) END PROGRAM CLUSTER

2 个答案:

答案 0 :(得分:1)

我修好了,这就是主程序应该是......


PROGRAM CLUSTER 
USE PARAMETERS
IMPLICIT NONE
OPEN(UNIT=11,FILE="2D.TXT",ACTION="WRITE")
    L = 1
    IF ( L .LT. 10) THEN
    DO J = 1,Y
        DO I = 1,X
            B(L) = A(I,J)
            WRITE(11,*) , B(L)
            L = L + 1
        END DO 
    END DO
    ELSE
    WRITE(11,*), "NOTHING TO DO HERE"
    END IF
CLOSE(11)
END PROGRAM CLUSTER

答案 1 :(得分:1)

如果您只是想将2d数组放入1d数组,请使用reshape内在函数。与您的自答案相当的代码是:

  PROGRAM CLUSTER 
  USE PARAMETERS
  IMPLICIT NONE
  OPEN(UNIT=11,FILE="2D.TXT",ACTION="WRITE")
  B = reshape(A, [ 9 ])
  write (11,'(i8)'), (b(i),i=1,9)
  CLOSE(11)
  END PROGRAM CLUSTER 

正如对你的答案和你的问题的评论中所指出的,对于你在MPI中的预期用途,你可以直接使用A来重塑这种重塑。