我可以将一个任意排列的数组传递给Fortran中的子程序吗?

时间:2017-08-15 13:03:15

标签: arrays fortran gfortran fortran90 netcdf

我正在为我编写的数字模型编写一般输出。我生成了未知长度的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数组然后根据定义维数和传递长度来重新形成,但理想情况下我不会有这些额外的步骤。有没有办法为这些目的定义一个足够通用的可分配数组?

0 个答案:

没有答案