如何在 Fortran 90 中连接两个数组

问题描述 投票:0回答:2

我有一个名为

pres_lev3d
的原始数组,其大小由
pres_lev3d(im*jm, levsi)
定义,其中
im*jm
为 72960,
levsi
为 64。这对应于全球大气数据,因此对应于大小。该数组是可分配的:
real (kind=kind_io8), allocatable :: pres_lev3d(:, :)
。我有第二个数组
press_1d
,其大小也以类似的方式定义
pres_1d(im*jm, levsi)
,但在此数组中
levsi
是 1。

我需要将两个数组(技术上是二维和一维数组)连接到形状为

(/72960, 65/)
的数组。在 MATLAB 中,这似乎是一个非常简单的过程,但是,我似乎找不到在 Fortran 90 中绕过它的简单方法。

我尝试创建第三个数组

pres_lev=(/pres_lev3d, pres_1d/)

并且还尝试使用

merge
,但这些方法似乎都不起作用。

我对 Fortran 相当陌生。

arrays fortran concatenation fortran90
2个回答
4
投票

如果我正确地遵循了你的解释,这可能会起作用

   real(kind_io8), dimension(72960,65) :: out_array
   ...
   out_array(:,1:64) = pres_lev3d
   out_array(:,65) = pres_1d

如果这不够简单,或者我误解了你的问题,请进一步解释。 要分配

out_array
以符合您的输入数组,请尝试类似

   real(kind_io8), dimension(:,:), allocatable :: out_array
   ...
   allocate(out_array(size(pres_lev3d,1),size(pres_lev3d,2)+1))
   ...
   out_array(:,1:64) = pres_lev3d
   out_array(:,65) = pres_1d

0
投票

现在可以使用:

in_array :: out_array(1)
in_array :: out_array(2)    
out_array, allocatable :: out_array(:)
...
out_array = [in_array1, in_array2]
© www.soinside.com 2019 - 2024. All rights reserved.