主题:数组尺寸变大后的问题
zhubq
[专家分:0] 发布于 2010-01-13 13:57:00
两个整型数组指针A1,A2,是公共变量,allocate后尺寸都为(6,300,300,300).程序如此后:
integer pointer::A1(:,:,:,:),A2(:,:,:,:)
allocate (A1(6,300,300,300),A2(6,300,300,300)
.....
中间程序
.....
write(*,*)A2(1,100,100,200)
A1=A2
write(*,*))A1(1,100,100,200),A2(1,100,100,200)
结果居然是
7
0,0 【应该是7,7】
当数组尺寸小时,没问题。尺寸大到一定尺寸时,赋值就出现问题。似乎是内存的问题吧。
P.S.:程序里还有几个其他的类似的大数组,笔记本8G内存,占35%左右。程序里有两个实数数组B1,B2
B2=B1赋值成功,但是就A1,A2失败了。
最后更新于:2010-01-13 13:58:00
回复列表 (共8个回复)
沙发
zhubq [专家分:0] 发布于 2010-01-13 14:11:00
搞定了,我换成do-loop 逐个赋值就没问题了,奇怪了,望有经验者释疑
板凳
asymptotic [专家分:16630] 发布于 2010-01-13 14:47:00
能否提供精简后但又能反映问题的代码?
3 楼
zhubq [专家分:0] 发布于 2010-04-20 02:51:00
real t,time,dt
real pointer::A1(:,:,:,:),A2(:,:,:,:)
allocate (A1(6,300,300,300),A2(6,300,300,300)
call random_number(A1)
do t=1,time
do k=1,300
do j=1,300
do i=1,300
do h=1,6
A2(h,i,j,k)=function(A1(h,i,j,k))*dt
enddo
enddo
enddo
enddo
A1=A2 !problem is here,A2 cannot be copied to A1 probably due to memory.I need to use !do-loop to copy element by element.
enddo
4 楼
yeg001 [专家分:14390] 发布于 2010-04-20 09:52:00
call random_number(A1)
所以你下面直接赋值是否应该是A2=A1, 而不是A1=A2呢?
5 楼
asymptotic [专家分:16630] 发布于 2010-04-20 10:03:00
您的代码无法运行。
6 楼
sxs08 [专家分:130] 发布于 2010-04-20 12:53:00
为什么要用pointer呢,改成动态数组试一试
7 楼
zhubq [专家分:0] 发布于 2010-04-21 01:49:00
没有,前面循环,计算了A2=function(A1),然后把A2赋给A1,进行下一个时间步长的计算。
8 楼
zhubq [专家分:0] 发布于 2010-04-21 01:50:00
对,我循环里只写了一个function,具体function的代码没给,太多了。
我来回复