爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3437|回复: 1

[求助] 用FORTRAN创建NETCDF文件时出错forrtl: severe (174): SIGSEGV, segmentation faul...

[复制链接]

新浪微博达人勋

发表于 2015-12-28 23:25:03 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
我读取了一个HDF文件,想把数据以NETCDF格式输出,按照说明上那几步来却始终出现这一错误forrtl: severe (174): SIGSEGV, segmentation fault occurred。尝试过很多方法,比如ulimit -s unlimit,在Makefile里加test-heap-arrays  64 -heap-arrays -check all -fp-stack-check ,而且把程序简化了一下,输出的错误都是一样。数据读取时应该没什么问题,可以以txt格式输出,但是以netcdf格式输出就不行了。小弟初学者,望大牛们解答。注:两个维度都是2400,dataset也是2400*2400. 4B09.tmp.png
4A28.tmp.png
     program

      use netcdf

      implicit none

!parameter declaration

      include  'PARMS3.EXT'
      include  'IODECL3.EXT'
      include  'FDESC3.EXT'
      include  'STATE3.EXT'

      character(len=100) , parameter :: file_name=
     &           'MCD15A2H.A2002185.h13v03.006.2015149103711.hdf'
      integer,parameter             :: x_length=2400, y_length=2400
      integer,parameter             :: dfacc_read=1, dfnt_int32=24

!function declaration

      integer   :: sfstart, sfselect, sfrdata, sfendacc, sfend

!variable declaration

      integer   :: sd_id, sds_id, sds_index, status
      integer   :: start(2), edges(2), stride(2)
      integer   :: dataset(x_length, y_length)
      integer   :: i, j
      integer   :: ncid, ydimid, xdimid, varid

!end of variable declaration
!start
!open the file and initialize the SD interface

      sd_id = sfstart(file_name, dfacc_read)

!select data set.(zero-based)

      sds_index = 1
      sds_id = sfselect(sd_id, sds_index)

!start edges stride

      start(1) = 0
      start(2) = 0
      edges(1) = y_length
      edges(2) = x_length
      stride(1) = 1
      stride(2) = 1

!read entire data into 'data' array

      status = sfrdata(sds_id, start, stride, edges, dataset)

!write into a netcdf.

        status=nf90_create('1.nc',nf90_clobber,ncid)
          if (status /=nf90_noerr) call handle_err(status)
        status=nf90_def_dim(ncid,'YDim',y_length,
     &                      ydimid) !!!!!!!
          if (status /=nf90_noerr) call handle_err(status)
        status=nf90_def_dim(ncid,'XDim',x_length,
     &                      xdimid)
          if (status /=nf90_noerr) call handle_err(status)

        status=nf90_def_var(ncid,'abc', NF90_BYTE,
     &                     (/ydimid,xdimid/),varid)!!!!NF90_UINT
          if (status /=nf90_noerr) call handle_err(status)

        status=nf90_put_att(ncid,varid,'UINT8',NF90_BYTE) !!
          if (status /=nf90_noerr) call handle_err(status)

        status=nf90_enddef(ncid)
          if (status /=nf90_noerr) call handle_err(status)

        status=nf90_put_var(ncid,varid,dataset)

          if (status /=nf90_noerr) call handle_err(status)
        status=nf90_close(ncid)
          if (status /=nf90_noerr) call handle_err(status)


!terminate access to the data set

      status = sfendacc(sds_id)
      if(status /= 0) print*, 'errow in sfendacc'
!terminate access to the SD interface and close the file.

      status = sfend(sd_id)
      if(status /= 0) print*, 'errow in sfend'

      end program test


!*************************************************************************

        subroutine handle_err(status)
        use netcdf
        implicit none
        integer, intent(in) :: status
        if (status /=nf90_noerr) then
        print *, trim(nf90_strerror(status))
        stop "Fortran Stopped"
        end if
        end subroutine handle_err




密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-12-7 14:28:04 | 显示全部楼层
请问,这个问题后来解决了吗
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表