主题:可变数组输出时的疑问
需要定义一个可变数组,希望实现如下功能:
该可变数组为三维数组,其中前两维的大小是已知的,但是第3维的大小在循环过程中是变化的。也就是说,数组a(i,j,k)中的k是变化的,当指定了一个k值后,可以得到一个确定的数组a,但是在下一个循环,这个数组a的第3维的大小又变化了,需要重新指定一个新的k值。
是否可以实现?
我在程序中用allocate和deallocate这两个命令顺利定义了不同大小的数组,不过最后输出结果的时候遇到了一点问题。程序源代码如下:
program main
implicit none
integer i,j,dms,nx,LL
parameter(DMS=13,nx=368)
integer num_cs(dms,nx)
real,allocatable:: DS(:,:,:)
real,allocatable:: CSJP(:,:,:)
open(unit=11,file='CSJP.txt')
open(unit=41,file='numcs.txt')
open(unit=42,file='Shuchucs.txt')
do i=1,dms
j=1
read(41,*) num_cs(i,j)
end do
do i=1,dms
j=1
allocate(DS(dms,nx,num_cs(i,j)))
allocate(CSJP(dms,nx,num_cs(i,j)))
do LL=1,num_cs(i,j)
read(11,*) DS(i,j,LL),CSJP(i,j,LL)
write(42,*) ds(i,j,LL),csjp(i,j,LL)
end do
deallocate(DS)
deallocate(CSJP)
end do
end
我想将程序的输出结果write(42,*) ds(i,j,LL),csjp(i,j,LL)放到循环外,但是无法正常输出,请问该怎么办?出错的程序如下:
program main
implicit none
integer i,j,dms,nx,LL
parameter(DMS=13,nx=368)
integer num_cs(dms,nx)
real,allocatable:: DS(:,:,:)
real,allocatable:: CSJP(:,:,:)
open(unit=11,file='CSJP.txt')
open(unit=41,file='numcs.txt')
open(unit=42,file='Shuchucs.txt')
do i=1,dms
j=1
read(41,*) num_cs(i,j)
end do
do i=1,dms
j=1
allocate(DS(dms,nx,num_cs(i,j)))
allocate(CSJP(dms,nx,num_cs(i,j)))
do LL=1,num_cs(i,j)
read(11,*) DS(i,j,LL),CSJP(i,j,LL)
end do
deallocate(DS)
deallocate(CSJP)
end do
[color=FF0000]do i=1,dms
j=1
allocate(DS(dms,nx,num_cs(i,j)))
allocate(CSJP(dms,nx,num_cs(i,j)))
do LL=1,num_cs(i,j)
write(42,*) ds(i,j,LL),csjp(i,j,LL)
end do
deallocate(DS)
deallocate(CSJP)
end do[/color]
end
红色字体是将输出语句放到输入语句循环外的程序。最后输出结果为特别大的数。。。不知道后面输出时是否还需要重新定义可变数组,尝试了不定义,但程序显示 program exception-access violation的错误。。。
该可变数组为三维数组,其中前两维的大小是已知的,但是第3维的大小在循环过程中是变化的。也就是说,数组a(i,j,k)中的k是变化的,当指定了一个k值后,可以得到一个确定的数组a,但是在下一个循环,这个数组a的第3维的大小又变化了,需要重新指定一个新的k值。
是否可以实现?
我在程序中用allocate和deallocate这两个命令顺利定义了不同大小的数组,不过最后输出结果的时候遇到了一点问题。程序源代码如下:
program main
implicit none
integer i,j,dms,nx,LL
parameter(DMS=13,nx=368)
integer num_cs(dms,nx)
real,allocatable:: DS(:,:,:)
real,allocatable:: CSJP(:,:,:)
open(unit=11,file='CSJP.txt')
open(unit=41,file='numcs.txt')
open(unit=42,file='Shuchucs.txt')
do i=1,dms
j=1
read(41,*) num_cs(i,j)
end do
do i=1,dms
j=1
allocate(DS(dms,nx,num_cs(i,j)))
allocate(CSJP(dms,nx,num_cs(i,j)))
do LL=1,num_cs(i,j)
read(11,*) DS(i,j,LL),CSJP(i,j,LL)
write(42,*) ds(i,j,LL),csjp(i,j,LL)
end do
deallocate(DS)
deallocate(CSJP)
end do
end
我想将程序的输出结果write(42,*) ds(i,j,LL),csjp(i,j,LL)放到循环外,但是无法正常输出,请问该怎么办?出错的程序如下:
program main
implicit none
integer i,j,dms,nx,LL
parameter(DMS=13,nx=368)
integer num_cs(dms,nx)
real,allocatable:: DS(:,:,:)
real,allocatable:: CSJP(:,:,:)
open(unit=11,file='CSJP.txt')
open(unit=41,file='numcs.txt')
open(unit=42,file='Shuchucs.txt')
do i=1,dms
j=1
read(41,*) num_cs(i,j)
end do
do i=1,dms
j=1
allocate(DS(dms,nx,num_cs(i,j)))
allocate(CSJP(dms,nx,num_cs(i,j)))
do LL=1,num_cs(i,j)
read(11,*) DS(i,j,LL),CSJP(i,j,LL)
end do
deallocate(DS)
deallocate(CSJP)
end do
[color=FF0000]do i=1,dms
j=1
allocate(DS(dms,nx,num_cs(i,j)))
allocate(CSJP(dms,nx,num_cs(i,j)))
do LL=1,num_cs(i,j)
write(42,*) ds(i,j,LL),csjp(i,j,LL)
end do
deallocate(DS)
deallocate(CSJP)
end do[/color]
end
红色字体是将输出语句放到输入语句循环外的程序。最后输出结果为特别大的数。。。不知道后面输出时是否还需要重新定义可变数组,尝试了不定义,但程序显示 program exception-access violation的错误。。。