24小时热门版块排行榜    

查看: 1664  |  回复: 12

568286346

木虫 (小有名气)

[求助] 数组超出问题

各位虫右,本人在用fortran编程序处理问题时遇到了数组超出的问题(超出了fortran默认允许的最大值),请问有什么方法可以解决这个问题吗? 因为我在处理数据时需要开很大的数组,所以还望大家提供点意见啊。
回复此楼
坚持才能实现自己的理想!
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询

查了一下lz的求助记录,http://muchong.com/bbs/space.php?uid=1785423&view=thread,发了9个求助帖,只有一个兑现了。我看了看,大部分解答都应该是有帮助的。lz平常作为可见一斑。

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : 快照1.jpg
  • 2013-07-01 16:31:25, 110.01 K
12楼2013-07-01 16:36:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询

【答案】应助回帖

感谢参与,应助指数 +1
你要多大的数组啊?说个数量级。
2楼2013-06-30 18:06:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

568286346

木虫 (小有名气)

引用回帖:
2楼: Originally posted by pippi6 at 2013-06-30 18:06:31
你要多大的数组啊?说个数量级。

比如说n_conf=200000,n_mol=196,数组设是x(n_conf,n_mol)
坚持才能实现自己的理想!
3楼2013-06-30 18:25:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询

【答案】应助回帖

引用回帖:
3楼: Originally posted by 568286346 at 2013-06-30 18:25:11
比如说n_conf=200000,n_mol=196,数组设是x(n_conf,n_mol)...

我试了,没问题啊。
  integer, parameter :: n_conf=200000,n_mol=196
  real*4 :: ddx(n_conf,n_mol)
4楼2013-06-30 18:39:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

568286346

木虫 (小有名气)

引用回帖:
4楼: Originally posted by pippi6 at 2013-06-30 18:39:21
我试了,没问题啊。
  integer, parameter :: n_conf=200000,n_mol=196
  real*4 :: ddx(n_conf,n_mol)...

program main
        implicit none
        integer   nn_conf, nn_mol, n_conf, n_mol1,n_mol2
        parameter (nn_conf=200000, nn_mol=196)
        real*8  len,b
        integer a, i, j, m, n, t,num2(nn_conf,nn_mol)
        parameter(m=4,n=2)
        character*4 name1
        character*20 filename
        real*8 xc_1(nn_conf,nn_mol), yc_1(nn_conf,nn_mol), zc_1(nn_conf,nn_mol)
        real*8 xcc(nn_mol),ycc(nn_mol),zcc(nn_mol)
        real*8 xcc_1, ycc_1, zcc_1, xcc_2, ycc_2, zcc_2
        real*8 xc_c, yc_c, zc_c
        real*8 dx_c, dy_c, dz_c
        real*8 num_ch4(nn_conf),num_co2(nn_conf), d_ch4(nn_conf),d_co2(nn_conf), r_c

    write(*,18)
18        format(/'     ###################################################################')
    write(*,19)
19        format('     #####################################################################')
        write(*,20)
20  format('    ###                                                                 ###')
        write(*,21)
21  format('   ###    MEAN SQUARED DISPLACEMENT --- Software Tools for Deffusion     ###')
    write(*,22)
22  format('   ##                                                                     ##')
        write(*,30)
30  format('   ##                       Version 1.1 December 2012                     ##')
    write(*,23)
23  format('   ##                                                                     ##')
        write(*,24)
24  format('   ##             Copyright <c> Zhen Yang & Guobing 2012-2022             ##')
    write(*,25)
25  format('   ##                                                                     ##')
        write(*,26)
26  format('   ###                         All Rights Reserved                       ###')
        write(*,27)
27  format('    ###                                                                 ###')
    write(*,28)
28        format('     #####################################################################')
    write(*,29)
29        format('      ###################################################################')





        write(*,11)
11        format(/'Enter the filename of archive (.arc):',$)
    read(*,*) filename
    open(1, file=filename)

        write(*,12)
12        format(/'Enter the filename of output (.txt):'$)
    read(*,*) filename
    open(2, file=filename)

        write(*,13)
13        format(/,'Enter the number of configurations:', $)
    read(*,*) n_conf
     
        write(*,14)
14        format(/,'Enter the number of methane molecules:', $)
    read(*,*) n_mol1

    write(*,15)
15        format(/,'Enter the number of carbon dioxide molecules:', $)
    read(*,*) n_mol2

        write(*,16)
16        format(/,'Enter the length of simulation box:', $)
    read(*,*) len

        write(*,38)
38        format(/,'Enter the time of dump(ps):', $)
    read(*,*) b

        write(*,*) ' Calculating ...... '

  do i =1 , n_conf
   
        do j = 1, n_mol1 + n_mol2

             read(1, *) a, name1, xc_1(i,j), yc_1(i,j), zc_1(i,j),num2(i,j)

    end do

  end do

  do j = 1, n_mol1 + n_mol2

    xcc(j) = xc_1(1,j)
   
    ycc(j) = yc_1(1,j)

        zcc(j) = zc_1(1,j)
  
  end do

  do i = 1 , n_conf-1
   
        do j = 1 , n_mol1 + n_mol2

      dx_c = xc_1(i+1,j) - xcc(j)
       
          dy_c = yc_1(i+1,j) - ycc(j)
       
          dz_c = zc_1(i+1,j) - zcc(j)

          dx_c = dx_c - anint(dx_c/len)*len

          dy_c = dy_c - anint(dy_c/len)*len

          dz_c = dz_c - anint(dz_c/len)*len

          xcc(j) = xc_1(i+1,j)
          
          ycc(j) = yc_1(i+1,j)

      zcc(j) = zc_1(i+1,j)
          
          xc_1(i+1,j) = xc_1(i,j) + dx_c

          yc_1(i+1,j) = yc_1(i,j) + dy_c

          zc_1(i+1,j) = zc_1(i,j) + dz_c
   
        end do
  
  end do
         
  do t = 1, n_conf/2

      num_ch4(t) = 0.0

      num_co2(t) = 0.0

  end do
  
  do i=1, n_conf

    do j=1, n_mol1 + n_mol2

      xcc_1 = xc_1(i,j)

          ycc_1 = yc_1(i,j)

          zcc_1 = zc_1(i,j)

          do t=1,n_conf/2

            if ( i + t <= n_conf ) then
             
                  xcc_2 = xc_1(i+t,j)

                  ycc_2 = yc_1(i+t,j)

                  zcc_2 = zc_1(i+t,j)

                  xc_c = xcc_1 - xcc_2
                  
                  yc_c = ycc_1 - ycc_2
                  
                  zc_c = zcc_1 - zcc_2
                  
                  r_c = xc_c**2 + yc_c**2 + zc_c**2
       
          if(num2(i,j)==1)then

                    num_ch4(t) = num_ch4(t) + r_c
         
                  elseif(num2(i,j)==3)then

                    num_co2(t) = num_co2(t) + r_c
        
                  end if

                else
                 
                  goto 10
            
                end if
       
      end do

10   continue
  
    end do
  
  end do

  do t=1, n_conf/2
   
        d_ch4(t) = real(num_ch4(t))/(real(n_conf-t)*real(n_mol1))

    d_co2(t) = real(num_co2(t))/(real(n_conf-t)*real(n_mol2))

        write(2,"(f12.6,2f14.6)" b*t, d_ch4(t)*0.01,d_co2(t)*0.01
  
  end do

end

对于上面的程序,如果就按照设置的最大值输入的话,编译的时候会出现warning,这个时候该采取什么办法呢?
坚持才能实现自己的理想!
5楼2013-06-30 19:00:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询

【答案】应助回帖

引用回帖:
5楼: Originally posted by 568286346 at 2013-06-30 19:00:56
program main
        implicit none
        integer   nn_conf, nn_mol, n_conf, n_mol1,n_mol2
        parameter (nn_conf=200000, nn_mol=196)
        real*8  len,b
        integer a, i, j, m, n, t,num2(nn_conf,nn_mol)
        parameter(m ...

你是说类似下面的warning?
..\files\code_release\slab.exe : warning LNK4084: total image size 1106726912 exceeds max (268435456); image may not run

忽略就是。你不需要所任何事情。其实,前两天刚讨论过的。
http://muchong.com/bbs/viewthread.php?tid=6059476&fpage=1
6楼2013-06-30 19:16:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

568286346

木虫 (小有名气)

引用回帖:
6楼: Originally posted by pippi6 at 2013-06-30 19:16:51
你是说类似下面的warning?
..\files\code_release\slab.exe : warning LNK4084: total image size 1106726912 exceeds max (268435456); image may not run

忽略就是。你不需要所任何事情。其实,前两天刚讨论 ...

我上次运行过,提示arrays exceeded。
坚持才能实现自己的理想!
7楼2013-06-30 19:33:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询

【答案】应助回帖

★ ★ ★
568286346: 金币+3, 有帮助 2013-07-01 17:33:47
引用回帖:
7楼: Originally posted by 568286346 at 2013-06-30 19:33:22
我上次运行过,提示arrays exceeded。...

我在CVF6.6 Xp 下运行过,没问题。 我只有3G。 你是什么系统啊? 而且,准确的错误信息是什么啊
8楼2013-06-30 19:51:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

568286346

木虫 (小有名气)

内容已删除
坚持才能实现自己的理想!
9楼2013-06-30 19:57:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

学虫dj

金虫 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
如果需要很大的数组,你试一试定义一个可变大小的数组
穷则独善其事,达则兼济天下
10楼2013-07-01 08:43:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 568286346 的主题更新
信息提示
请填处理意见