Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;分段故障“;用fortran语言_Fortran_Fortran90 - Fatal编程技术网

&引用;分段故障“;用fortran语言

&引用;分段故障“;用fortran语言,fortran,fortran90,Fortran,Fortran90,我有问题: 当我不知道目录的确切大小或者我不知道nm和nz的大小时,是否可以将do loop(ngal)的最终值定义为一个没有精确值的自由参数?(整个代码如您所愿) 总结一下High Performance Mark、steabert、Vladimir F和我的评论: ! First pass: Determine sizes nm = 0 ; nz = 0 ; ngal = 0 do read(1,*,iostat=ierr) dummy_ra, dummy_dec, dummy_mag

我有问题: 当我不知道目录的确切大小或者我不知道nm和nz的大小时,是否可以将do loop(ngal)的最终值定义为一个没有精确值的自由参数?(整个代码如您所愿)


总结一下High Performance Mark、steabert、Vladimir F和我的评论:

! First pass: Determine sizes
nm = 0 ; nz = 0 ; ngal = 0
do
  read(1,*,iostat=ierr)  dummy_ra, dummy_dec, dummy_mag_g, dummy_mag_r, &
                         dummy_mag_i, dummy_redshift
  if ( ierr < 0 ) exit ! End of file
  if ( ierr > 0 ) stop 'An error occured reading from unit 1'
  nz = max(nz,int((dummy_redshift-zmin)/step)+1)
  nm = max(nm,int((dummy_mag_i-mag_min)/bin)+1)
  ngal = ngal + 1
enddo

! Allocate arrays
allocate (ra(ngal), dec(ngal), mag_g(ngal), mag_r(ngal), mag_i(ngal), &
          redshift(ngal), ngalb(nm,nz), stat=ierr) 
if ( ierr /= 0 ) stop 'Cannot allocate memory'
ngalb=0

! Second pass: Read in
rewind(1)
do i=1,ngal
  read(1,*) ra(i), dec(i), mag_g(i), mag_r(i), mag_i(i), redshift(i)
  iz = int((redshift(i)-zmin)/step)+1
  im = int((mag_i(i)-mag_min)/bin)+1
  ngalb(im,iz) = ngalb(im,iz)+1
enddo
!第一步:确定尺寸
nm=0;nz=0;ngal=0
做
读取(1,*,iostat=ierr)伪随机数,伪随机数,伪随机数,伪随机数&
伪磁i,伪红移
如果(ierr<0)退出!文件结束
如果(ierr>0)停止“读取单元1时发生错误”
nz=最大值(nz,int((伪红移-zmin)/步长)+1)
nm=最大值(nm,int((虚拟磁位/磁位最小值)/bin)+1)
ngal=ngal+1
结束循环
! 分配数组
分配(澳大利亚共和国、澳大利亚共和国、澳大利亚共和国、澳大利亚共和国、澳大利亚共和国、澳大利亚共和国)&
红移(ngal),ngalb(纳米,新西兰),统计=ierr)
如果(ierr/=0)停止“无法分配内存”
ngalb=0
! 第二遍:读入
倒带(1)
i=1,ngal吗
读(1,*)ra(i)、dec(i)、mag_g(i)、mag_r(i)、mag_i(i)、redshift(i)
iz=int((红移(i)-zmin)/步长)+1
im=int((mag_i(i)-mag_min)/bin)+1
ngalb(im,iz)=ngalb(im,iz)+1
结束循环

总结一下High Performance Mark、steabert、Vladimir F和我的评论:

! First pass: Determine sizes
nm = 0 ; nz = 0 ; ngal = 0
do
  read(1,*,iostat=ierr)  dummy_ra, dummy_dec, dummy_mag_g, dummy_mag_r, &
                         dummy_mag_i, dummy_redshift
  if ( ierr < 0 ) exit ! End of file
  if ( ierr > 0 ) stop 'An error occured reading from unit 1'
  nz = max(nz,int((dummy_redshift-zmin)/step)+1)
  nm = max(nm,int((dummy_mag_i-mag_min)/bin)+1)
  ngal = ngal + 1
enddo

! Allocate arrays
allocate (ra(ngal), dec(ngal), mag_g(ngal), mag_r(ngal), mag_i(ngal), &
          redshift(ngal), ngalb(nm,nz), stat=ierr) 
if ( ierr /= 0 ) stop 'Cannot allocate memory'
ngalb=0

! Second pass: Read in
rewind(1)
do i=1,ngal
  read(1,*) ra(i), dec(i), mag_g(i), mag_r(i), mag_i(i), redshift(i)
  iz = int((redshift(i)-zmin)/step)+1
  im = int((mag_i(i)-mag_min)/bin)+1
  ngalb(im,iz) = ngalb(im,iz)+1
enddo
!第一步:确定尺寸
nm=0;nz=0;ngal=0
做
读取(1,*,iostat=ierr)伪随机数,伪随机数,伪随机数,伪随机数&
伪磁i,伪红移
如果(ierr<0)退出!文件结束
如果(ierr>0)停止“读取单元1时发生错误”
nz=最大值(nz,int((伪红移-zmin)/步长)+1)
nm=最大值(nm,int((虚拟磁位/磁位最小值)/bin)+1)
ngal=ngal+1
结束循环
! 分配数组
分配(澳大利亚共和国、澳大利亚共和国、澳大利亚共和国、澳大利亚共和国、澳大利亚共和国、澳大利亚共和国)&
红移(ngal),ngalb(纳米,新西兰),统计=ierr)
如果(ierr/=0)停止“无法分配内存”
ngalb=0
! 第二遍:读入
倒带(1)
i=1,ngal吗
读(1,*)ra(i)、dec(i)、mag_g(i)、mag_r(i)、mag_i(i)、redshift(i)
iz=int((红移(i)-zmin)/步长)+1
im=int((mag_i(i)-mag_min)/bin)+1
ngalb(im,iz)=ngalb(im,iz)+1
结束循环

你能发布一个包含声明的完整代码吗?这个问题本身是不可理解的,但从代码来看,我认为OP的问题是大多数数组的大小应该等于读取的行数(分配时未知),而
ngalb
的大小取决于数据的移位(分配时也未知)。所以,解决办法是想一想。@steabert:我同意。我认为有两种方法可以做到这一点:使用固定大小的数组并填充它们,直到文件中不再有数据集为止(使用
iostat
end
),或者首先使用伪参数读取文件以确定行数(记录?),然后进行分配,最后真正读入文件。或者甚至在数组已满时重新分配数组并继续读取。但是对于初学者,我会选择1遍作为行数,
倒带
并读取行数。你能发布包含声明的完整代码吗?这个问题本身是不可理解的,但从代码中我会假设OP的问题是大多数数组的大小应该等于读取的行数(分配时未知),ngalb的大小取决于数据中的移位(分配时也是未知的)。所以,解决办法是想一想。@steabert:我同意。我认为有两种方法可以做到这一点:使用固定大小的数组并填充它们,直到文件中不再有数据集为止(使用
iostat
end
),或者首先使用伪参数读取文件以确定行数(记录?),然后进行分配,最后真正读入文件。或者甚至在数组已满时重新分配数组并继续读取。但对于初学者,我会选择1次通过作为行数,
倒带
并阅读行数。