Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
英特尔MPI_SIZEOF不适用于Fortran复杂类型_Fortran_Mpi_Intel Fortran - Fatal编程技术网

英特尔MPI_SIZEOF不适用于Fortran复杂类型

英特尔MPI_SIZEOF不适用于Fortran复杂类型,fortran,mpi,intel-fortran,Fortran,Mpi,Intel Fortran,给定以下fortran代码: integer, parameter :: double = kind(1.0d0) integer :: integerTest real(double) :: doubleTest complex(double) :: complexTest integer :: testSize integer :: ierr integerTest = 0 doubleTest = real(0.d0, kind=double) complexTest = cmplx(

给定以下fortran代码:

integer, parameter :: double = kind(1.0d0)

integer :: integerTest
real(double) :: doubleTest
complex(double) :: complexTest
integer :: testSize
integer :: ierr

integerTest = 0
doubleTest = real(0.d0, kind=double)
complexTest = cmplx(0.d0, 0.d0, kind=double)

call MPI_SIZEOF(integerTest, testSize, ierr)
! ...
call MPI_SIZEOF(doubleTest, testSize, ierr)
! ...
call MPI_SIZEOF(complexTest, testSize, ierr)
使用“英特尔MPI”编译时,出现以下错误:

error #6285: There is no matching specific subroutine for this generic subroutine call. [MPI_SIZEOF]
在线

 call MPI_SIZEOF(complexTest, testSize, ierr)

此代码使用OpenMPI编译和执行时没有问题。这个错误的原因是什么?它似乎在寻找与
complexTest
类型的特定匹配,但
MPI_SIZEOF
的全部目的不是为了一般地处理几乎任何类型吗?

可能是MPI库中的一个bug,他们可能忘记了将此特定函数添加到模块中。顺便说一句,“几乎任何类型”都是错误的,
MPI_SIZEOF
只适用于内部类型

作为一种解决方法,您可以使用

testSize = storage_size(complexTest) / character_storage_size

(或者只是
/8

可能是MPI库中的一个错误,他们可能忘记了将此特定函数添加到模块中。顺便说一句,“几乎任何类型”都是错误的,
MPI_SIZEOF
只适用于内部类型

作为一种解决方法,您可以使用

testSize = storage_size(complexTest) / character_storage_size

(或者只是
/8

complexTest
声明为类型
complex
,没有
种类
,但这不是一个解决方案。如果将
complexTest
声明为
双复数
,也会失败。这可能是英特尔MPI中的一个错误。您应该能够使用
存储\u size(),英特尔MPI中的
MPI\u SIZEOF
支持非常有限的一组内部类型-请参阅我对Vladimir答案的最后一点评论。将
complexTest
声明为type
complex
而不使用
种类
是有效的,但这不是一个解决方案。如果我将
complexTest
声明为
double complex
,它也会失败。这可能是英特尔MPI中的一个错误。您应该能够使用
存储大小()
标准Fortran内部版本(仅转换为字节)。您是使用
使用mpi
还是
包含“mpif.h”
?显然,“英特尔mpi”中的
mpi大小f
支持非常有限的内部类型集-请参阅我对Vladimir答案的最后一点评论。根据该标准,它应该适用于任何内部Fortran类型,而不仅仅是数字类型。@HristoIliev我在MPI 3.1 p.628中有“在x中有一个内部数字类型的Fortran变量(选择)”。尽管我看不出不包含逻辑和字符的原因。派生的内部类型可能不是非常有用。是的,但上面的句子读作“任何Fortran内部类型”。我冒昧地从英特尔mpi 5.1(希望英特尔不会起诉我)中撤销了mpi_sizeofs.mod,从特定子例程的名称中,我猜泛型接受标量和1d数组,包括
整数
实数
逻辑
字符
复数
DOUBLE
INTEGER*1
INTEGER*2
INTEGER*8
用于
X
。根据标准,它应该适用于任何固有的Fortran类型,而不仅仅是数值类型。@hristoilev我在X中有一个“数值固有类型的Fortran变量(选项)”在MPI3.1p.628.1中,虽然我看不出不包含逻辑和字符的原因。派生的内部类型可能不是非常有用。是的,但上面的句子读作“任何Fortran内部类型”。我冒昧地从英特尔mpi 5.1(希望英特尔不会起诉我)中撤销了mpi_sizeofs.mod,从特定子例程的名称中,我猜泛型接受标量和1d数组,包括
整数
实数
逻辑
字符
复数
DOUBLE
INTEGER*1
INTEGER*2
,以及
INTEGER*8
用于
X