我正在为我编写的数字模型编写一般输出。我生成了未知长度的1,2,3或4维数组。我遇到了如何在子程序中定义数组的问题(在不同的模块中找到)。
gfortran -g -O0 -I/usr/include -c analysis.f90
analysis.f90:136:32:
call write_netcdf('domain', domain, 'binary_cloud_domain', 0)
1
Error: Rank mismatch in argument ‘data_out’ at (1) (scalar and rank-4)
错误来自此子例程:
subroutine binary_cloud_analysis
use cloud, only: cloud_domain, cloud_smooth_domain
use write, only: write_netcdf
real, allocatable, dimension(:,:,:,:) :: domain, smth_domain
allocate(domain(x_dim,y_dim,z_dim,t_dim), smth_domain(x_dim,y_dim,z_dim,t_dim))
call cloud_domain(domain)
if (cloud_smooth) then
call cloud_smooth_domain(domain,smth_domain)
domain = smth_domain
endif
call write_netcdf('domain', domain, 'binary_cloud_domain', 0)
end subroutine binary_cloud_analysis
目前在子程序write_netcdf中,我已将data_out指定为
subroutine write_netcdf(var_name, data_out, output_name, output_type)
!--------------------------------------------------------------------------!
! input variables !
!--------------------------------------------------------------------------!
real(kreal), allocatable, intent (in) :: data_out
可以理解的是,编译器将此作为标量,因为我还没有包含维度(:)类型说明符,因为我不知道我在通用性中传递了什么类型的数组而且#&# 39; d希望由于变量可分配,它可以按摩尺寸。 output_type变量指定我们拥有的数组类型,即3d,4d等,以帮助定义NetCDF文件。
我想我可以通过将数组重新整形为1d数组然后根据定义维数和传递长度来重新形成,但理想情况下我不会有这些额外的步骤。有没有办法为这些目的定义一个足够通用的可分配数组?