fortran里的数组赋值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fortran里的数组赋值相关的知识,希望对你有一定的参考价值。

为什么real::A(3,2)=(/1,2,3,4,5,6/)总是出现问题?辅导书上不都是这么赋值的吗。版本是fortran95
主要是2维或者2维以上的数组

错误信息的含义是数组赋值的语句里所有元素必须是同一数据类型
变量a是real(8),虽然程序中赋值用的是整形的(/1,2,3/),fortran会自动将其转换成real(8)。
c=(/1,a(2:3)/)这句里1是整形,后面的a(2:3)是real(8),数据类型不同,所以报错了。
可以改成
c=(/1.0_8,a(2:3)/)
参考技术A 你的写法是不标准的。我不知道你使用的什么教科书?

可能个别编译器会允许这样写,但不标准。

标准的写法是 :
real :: A(3,2)= reshape( (/1,2,3,4,5,6/) , (/3,2/) )

它表示把 123456 数组重新划分外形(reshape)为 3*2 的数组,并赋值给 a 数组。追问

用的是彭国伦(fortran95程序设计),我也试过这样写,但是有时候会提示reshape有错误,不过有时候可以。下次遇到再请教,多谢了

本回答被提问者采纳
参考技术B 解决方法很多!第一,V(5000)=0的意思是,第5000个元素为0,而前4999个没有进行赋值。如果写为:V(1:5000)=0,这就表示5000个全部为0了。第二,V(0:5000)=1,2,3这样写是非法的。第三,V(5000)也可以写为V(1:5000)表示V数组里有5000个数。如果省略了冒号,则默认从1开始如果写成V(0:5000)则表示V数组有5001个数。
请采纳答案,支持我一下。

在 C++ 和 Fortran 代码之间传递复数数组

【中文标题】在 C++ 和 Fortran 代码之间传递复数数组【英文标题】:Passing complex number array between C++ and Fortran code 【发布时间】:2012-11-22 21:06:28 【问题描述】:

我正在使用 C++ 和 Fortran 代码。 C++ 代码需要调用 Fortran 子例程。 Fortran 子例程的一个参数具有 Fortran 类型 complex

C++ 代码在一个文件中,而 Fortran 代码子例程在另一个文件中。我在 64 位 GNU/Linux 系统上使用 gccgfortran

这是一个显示 Fortran 子例程声明的 sn-p(以及一些附加行):

SUBROUTINE  minp (AMP,L,L2,FMINP,PHI)
   REAL*4 AMP( L ),FMINP( L )
   COMPLEX PHI( L )

在 C++ 文件中,我知道传递给 Fortran 代码的参数需要通过引用传递,而不是通过值传递。 Fortran 子例程在 C++ 代码中(在源代码文件的顶部)使用 extern 关键字声明为函数。

extern "C"

minp_ (float *amp, int &L, int &L2, float *fminp, complex *phi);


但是,函数的最后一个参数是一个复杂的 C 数组。怎么可能:

    为 C/C++ 中的复杂数组分配内存以作为 phi 参数传入? 将数组作为参数传递给 Fortran 子例程,以便 Fortran 代码可以使用内存?

【问题讨论】:

【参考方案1】:

为了连接 C(和通过外部 C 的 C++)和 Fortran,我建议使用 Fortran 的 ISO C 绑定。它提供了复杂类型,C_FLOAT_COMPLEX、C_DOUBLE_COMPLEX 和 C_LONG_DOUBLE_COMPLEX,以匹配 C 的类型。通过使用 ISO C 绑定并编写 Fortran 接口声明以匹配 C 代码,您将指示 Fortran 编译器匹配 C 编译器的调用约定。如果您将复杂类型与 ISO C 绑定一起使用,则处理数组与 float/double/long double 数组没有任何不同。 gfortran 手册在“混合语言编程”一章中有示例,并在“内部模块”一章中描述了 ISO C 绑定的类型和内部过程。

【讨论】:

谢谢,M.S.B.这确实是一种可行的方法。

以上是关于fortran里的数组赋值的主要内容,如果未能解决你的问题,请参考以下文章

fortran子程序中可以用动态数组吗??

fortran关于数组内部函数的问题

我是FORTRAN初学者,想得出一个二维数组中的最大值,说是可以用MAXVAL函数,具体在怎么用了,求解

fortran中怎么定义动态数组?

如何给结构体里的数组复制啊???

C语言怎么给结构体里的结构体赋值?