回 帖 发 新 帖 刷新版面

主题:数组尺寸变大后的问题

两个整型数组指针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失败了。

回复列表 (共8个回复)

沙发

搞定了,我换成do-loop 逐个赋值就没问题了,奇怪了,望有经验者释疑

板凳

能否提供精简后但又能反映问题的代码?

3 楼

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 楼

call random_number(A1)
所以你下面直接赋值是否应该是A2=A1, 而不是A1=A2呢?

5 楼

您的代码无法运行。

6 楼


为什么要用pointer呢,改成动态数组试一试

7 楼


没有,前面循环,计算了A2=function(A1),然后把A2赋给A1,进行下一个时间步长的计算。

8 楼


对,我循环里只写了一个function,具体function的代码没给,太多了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册