Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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
Pointers 指向实+;imag部分,反之亦然_Pointers_Fortran - Fatal编程技术网

Pointers 指向实+;imag部分,反之亦然

Pointers 指向实+;imag部分,反之亦然,pointers,fortran,Pointers,Fortran,复杂到真实+图像部分 给定一个复数数组,我们可以在中的答案后面为它的实部和虚部分配指针 主程序 使用iso_c_绑定 隐式无 复合物,目标::z(2)=[(1,2)、(3,4)] 实数,指针::re(:),im(:),buf(:) 调用c_f_指针(c_loc(z),buf,shape=[大小(z)*2]) re(1:2)=>buf(1:2) im(1:2)=>buf(2:2) 打印*,'z',z 打印*,'re',re 打印*,“即时消息”,即时消息 结束程序 real+imag部分到复合体

复杂到真实+图像部分

给定一个复数数组,我们可以在中的答案后面为它的实部和虚部分配指针

主程序
使用iso_c_绑定
隐式无
复合物,目标::z(2)=[(1,2)、(3,4)]
实数,指针::re(:),im(:),buf(:)
调用c_f_指针(c_loc(z),buf,shape=[大小(z)*2])
re(1:2)=>buf(1:2)
im(1:2)=>buf(2:2)
打印*,'z',z
打印*,'re',re
打印*,“即时消息”,即时消息
结束程序
real+imag部分到复合体

我的问题是如何反过来做? 给定两个实数组
re,im
。如何分配复数指针
z
,其中实部由
re
给出,虚部由
im
给出?类似于

主程序
隐式无
real,target::re(2)=[1,3],im(2)=[2,4]
复数,指针::z(:)
z=>cmplx(re,im)!不工作,因为cmplx不返回指针结果
结束程序

甚至可能是因为
re,im
在内存中并不总是连续的吗?

这是不可能的,但通常的问题是为什么要使用指针来实现这一点。你能解释一下你想做什么吗?(例如,请注意,在大多数情况下,我很乐意使用
z%re=[1,2,3.]!设置实组件
,而不是使用指针。)Intel的mkl提供了一个迭代解算器dfgmres,它只适用于双精度。我需要一个复杂的系统,也就是zfgmres。因此,我想在复数数组和实数数组之间切换(我将复数余数映射到长度为实数数组两倍的数组)。长话短说:我希望它是高效的,并且不复制不必要的数据。实际上,实部和虚部在一个(!)长的连续内存s.t数组中。我可以使用与第一个示例中类似的东西。如果没有复制,是不是不可能将实部和imag部的两个单独数组重铸(或组合)为一个复杂数组?(因为每个复变量的Re和Im部分需要在内存中相邻。)这是不可能的,但通常的问题是为什么要使用指针来完成这项工作。你能解释一下你想做什么吗?(例如,请注意,在大多数情况下,我很乐意使用
z%re=[1,2,3.]!设置实组件
,而不是使用指针。)Intel的mkl提供了一个迭代解算器dfgmres,它只适用于双精度。我需要一个复杂的系统,也就是zfgmres。因此,我想在复数数组和实数数组之间切换(我将复数余数映射到长度为实数数组两倍的数组)。长话短说:我希望它是高效的,并且不复制不必要的数据。实际上,实部和虚部在一个(!)长的连续内存s.t数组中。我可以使用与第一个示例中类似的东西。如果没有复制,是不是不可能将实部和imag部的两个单独数组重铸(或组合)为一个复杂数组?(因为每个复变量的Re和Im部分需要在内存中相邻..)