主题:把一维数组变为二维 fortran
aisy
[专家分:0] 发布于 2011-04-25 11:05:00
比如 A(8) 如何变为(4,2)呢
回复列表 (共3个回复)
沙发
dongyuanxun [专家分:7180] 发布于 2011-04-25 11:41:00
那取决于到底怎么变
反正不管怎么变,循环都可实现
板凳
yeg001 [专家分:14390] 发布于 2011-04-25 11:52:00
如果用内部函数的话可以使用reshape来实现. 方法可以直接翻翻书后面的内部函数或者看看fortran编译器的帮助.
3 楼
Megaton1985 [专家分:0] 发布于 2011-05-06 09:59:00
给你个参考吧:
将A1(3,2):
0.100000000000000 0.400000000000000
0.200000000000000 0.500000000000000
0.300000000000000 0.600000000000000
变成A2(6):
0.100000000000000
0.200000000000000
0.300000000000000
0.400000000000000
0.500000000000000
0.600000000000000
可以使用这个子程序:
SUBROUTINE A_MNT1J(LN1,COL1,LN2,ARRAY1,ARRAY2)
IMPLICIT NONE
INTEGER,INTENT(IN) :: LN1,COL1,LN2
REAL(KIND=8),INTENT(IN) :: ARRAY1(LN1,COL1)
REAL(KIND=8),INTENT(OUT) :: ARRAY2(LN2)
INTEGER :: I,J,K,D,DD
D = 0
DD = LN1
DO J = 1,COL1
DO I = 1,LN1
ARRAY2(I + D)=ARRAY1(I,J)
ENDDO
D = D + DD
ENDDO
RETURN
END SUBROUTINE A_MNT1J
反过来 将A2变成A1 可以使用:
SUBROUTINE A_1TMNJ(LN1,LN2,COL2,ARRAY1,ARRAY2)
IMPLICIT NONE
INTEGER,INTENT(IN) :: LN1,LN2,COL2
REAL(KIND=8),INTENT(IN) :: ARRAY1(LN1)
REAL(KIND=8),INTENT(OUT) :: ARRAY2(LN2,COL2)
INTEGER :: I,J,K,D,DD
D = 0
DD = LN2
DO J = 1,COL2
DO I = 1,LN2
ARRAY2(I,J) = ARRAY1(I + D)
ENDDO
D = D + DD
ENDDO
RETURN
END SUBROUTINE A_1TMNJ
我来回复