- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个 Fortran 结构。
type custom
real :: a,b
real,dimension(20) ::c,d
real,dimension(20,50) :: e
end type custom
然后我有另一个像这样的结构
type custom2
type(custom):: data
end type custom2
现在我创建一个对象类型(custom2)::pntr
是否可以将自定义结构中的所有数据直接写入netcdf格式,并且所有组件的名称(即a、b、c、d、e)都相同。当然这是使用pntr(object)。 HDF5 中的任何解决方案也受到欢迎。提前致谢
最佳答案
原则上,是的,这对于 NetCDF4 是可能的;您正在寻找 User Defined Data Types手册部分。
但是,对它的支持很差,可能会导致问题(即使在 F90 中,您最终也可能不得不使用 f77 接口(interface))。这是我真正的第一次尝试,我无法编译它,因为 F90 绑定(bind)不允许 nf90_put_var 调用。还要注意,神奇之处在于计算偏移量,这在 Fortran 中并不简单(但如果您也使用 MPI,则可以使用 MPI_Get_Address 进行操作...)。 loc() 是一个常见但非标准的函数,它允许您执行此操作,如果您信任指针数学,您也可以使用 iso_c_bindings 和 c_loc()。
PROGRAM netcdf_userdeftypes
USE netcdf
implicit none
type custom
real :: a,b
real,dimension(20) ::c,d
real,dimension(20,50) :: e
end type custom
integer :: stat
integer :: i
integer, parameter :: ncvars=5
type(custom) :: cvars(ncvars)
integer :: ctype_id, cvar_id, file_id, dim_id
integer :: aoff, boff, coff, doff, eoff
stat = nf90_create(path="test.nc4", cmode=ior(NF90_CLOBBER,NF90_NETCDF4), ncid=file_id)
stat = nf90_def_dim(file_id, 'Num Custom Vars', ncvars, dim_id)
stat = nf90_def_compound(ctype_id, (2+2*20+1*(20*50))*4, 'custom type', ctype_id)
call calcoffsets(aoff, boff, coff, doff, eoff)
stat = nf90_insert_compound(file_id, ctype_id, 'a', aoff, NF90_REAL)
stat = nf90_insert_compound(file_id, ctype_id, 'b', boff, NF90_REAL)
stat = nf90_insert_array_compound(file_id, ctype_id, 'c', coff, NF90_REAL, 1, 20)
stat = nf90_insert_array_compound(file_id, ctype_id, 'd', doff, NF90_REAL, 1, 20)
stat = nf90_insert_array_compound(file_id, ctype_id, 'e', eoff, NF90_REAL, 2, 20*50)
stat = nf90_def_var(file_id, 'custom variable', ctype_id, [dim_id], cvar_id)
stat = nf90_enddef(file_id)
do i=1,ncvars
cvars(i)%a = ncvars*10+1
cvars(i)%b = ncvars*10+2
cvars(i)%c = ncvars*10+3
cvars(i)%d = ncvars*10+4
cvars(i)%e = ncvars*10+5
enddo
stat = nf90_put_var(file_id, cvar_id, cvars)
stat = nf90_close(file_id)
CONTAINS
! there has to be a better way to do this
! loc() is common, and c_loc() could in principle
! be used...
SUBROUTINE calcoffsets(aoff, boff, coff, doff, eoff)
implicit none
integer, intent(out) :: aoff, boff, coff, doff, eoff
type(custom) :: test
integer :: i,testlen
type(custom), pointer :: tp
real, allocatable, dimension(:) :: copy
test % a = 1.
test % b = 2.
test % c = 0.
test % c(1) = 3.
test % d = 0.
test % d(1) = 4.
test % e = 0.
test % e(1,1) = 5.
testlen = inquire( iolength=test )
allocate( copy( testlen ) )
copy = transfer( test, copy )
do i=1,testlen
if (copy(i) == 1.) aoff = i-1
if (copy(i) == 2.) boff = i-1
if (copy(i) == 3.) coff = i-1
if (copy(i) == 4.) doff = i-1
if (copy(i) == 5.) eoff = i-1
enddo
END SUBROUTINE calcoffsets
END PROGRAM netcdf_userdeftypes
关于fortran - Netcdf 和 Fortran 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6924073/
我有一个 1850-2005 年月地表气温的 netCDF 文件。如何在 unix 中截断文件,以便新文件的时间维度从 1855 年到 2005 年?反之亦然,截断文件,使其改为 1850-2000?
我有一个 NetCDF 文件,其中包含许多变量(1d、2d、3d 和 4d)。我想为 3d 变量之一添加一个新维度。 为了更清楚,假设: 我有一个 3d 变量:A(d1, d2, d3) 我想要 4d
我有 20 个包含海洋 CTD 数据的 netCDF 文件。每个文件包含相同的维度和变量名称,但它们的垂直坐标大小不同(即,CTD 近海剖面的深度范围比海上剖面小)。我需要将这些单独的文件连接成一个带
CDO 可以根据纬度和经度裁剪 netcdf 文件,只要它们以标准方式定义,而且我知道如果您知道索引范围,NCO 可以沿任何维度裁剪 netcdf 文件的子集你想要的,如这个相关问题的答案中所述: I
我有 40 个 NetCDF 文件,它们都构成了海洋模型的一个模拟。每个变量的时间序列数据被拆分为多个文件,因此目录列表如下所示: $ ls ./output/*.nc 1_hvel.nc
我正在尝试编辑 netcdf 文件中的全局属性之一: START_DATE = "2016-05-12_00:00:00" 我想将日期字符串更改为另一个日期。你如何用 nco 包做到这一点? 我已经看
我正在使用 netcdf 运算符将两个 NCEP netCDF 文件附加在一起。这些文件大小不同,但它们代表相同的大气变量,即位势高度。一个是 1000 hPa,另一个是 925 hPa。它们具有相同
我正在使用 CRU ts_4.04 数据学习 netCDF 和 CDO。我想计算伦敦降水量的月平均值和年总和。我写道: #!/usr/bin/bash lon=-0.11 lat=51.49 PREF
我正在连接 1000 个 nc 文件(模拟的输出),以便我可以在 Matlab 中更轻松地处理它们。为此,我使用 ncrcat。文件具有不同的大小,并且文件之间的时间变量不是唯一的。连接效果很好,使我
我想使用 nco 连接两组 netcdf 文件,每组大约有 30 个文件。 集合 1 包含:经度、纬度、时间和 v。 集合 2 包含:经度、纬度、时间和 u。 我已经尝试过: ncks *.nc ou
我正在使用 CRU ts_4.04 数据学习 netCDF 和 CDO。我想计算伦敦降水量的月平均值和年总和。我写道: #!/usr/bin/bash lon=-0.11 lat=51.49 PREF
我正在尝试使用 NCML 将 CF-1.4 文件“转换”为 CF-1.6。特别感兴趣的是如何 1) 删除维度,然后 2) 更改变量的维度。例如,下面是两个 ncdump 的顶部( netCDF )文件
有没有办法在 Windows 上将 grib 文件转换为 NetCDF 格式? 我使用一个名为 tkdegrib 的软件但它通过一个参数捕获一个参数,而我希望在同一个文件中包含所有 grib 的参数。
我已经下载了 netcdf 文件形式的气候模型输出,其中包含一个变量 (pr),适用于全世界,每天的时间步长。我的最终目标是获得欧洲的月度数据。 我以前从未使用过 netcdf 文件,而且我能找到的所
我正在尝试从现有 NetCDF 文件创建新的 NetCDF 文件。我只对使用 177 个变量列表中的 12 个变量感兴趣。您可以从此 ftp 站点 here 找到示例 NetCDF 文件。 . 我使用
我从 https://disc.gsfc.nasa.gov/datasets 下载了几天的每日 TRMM 3B42 数据.文件名的格式为 3B42_Daily.yyyymmdd.7.nc4.nc4 但
我有包含 6 小时间隔(每天 4 个文件)的 .grd 格式的大气数据的文件。我也有相关的描述 rune 件 (yyyymmddhh.ctl)。我可以使用 GrADS 绘制数据。但我需要将这些文件转换
我试图通过输入以下命令从多变量 netcdf 文件中提取变量: ncks -v ta temp1.nc out.nc 但是,然后我查看了 out.nc header ,所有变量仍然存在。 temp1.
我试图通过从另一个 NetCDf 文件(“源”文件)获取值来填充 NetCDF 文件(我们称之为“目标”文件)中的 nan 值。 【两个示例文件可以下载from here]我正在考虑使用以下框架在 p
我有 1 个 2007 年 9 月的 NetCDF 文件。它包含某些纬度/经度的 6 小时数据,其中包含风和湿度变量。每个变量的形状为 (120, 45, 93):120 次(一天 4 次),45 个
我是一名优秀的程序员,十分优秀!