gpt4 book ai didi

C 相当于 Fortran 名单

转载 作者:太空狗 更新时间:2023-10-29 17:00:21 29 4
gpt4 key购买 nike

我习惯了 Fortran,其中我使用名称列表顺序读入从文件中获取变量。这让我有一个看起来像这样的文件

&inputDataList
n = 1000.0 ! This is the first variable
m = 1e3 ! Second
l = -2 ! Last variable
/

在这里我可以用它的名字命名变量并分配一个值以及之后的注释来说明变量的实际含义。加载非常容易完成

namelist /inputDataList/ n, m, l
open( 100, file = 'input.txt' )
read( unit = 100, nml = inputDataList )
close( 100 )

现在我的问题是,C 中有类似的东西吗?还是我必须通过在“=”等处截断字符串来手动执行此操作?

最佳答案

这是一个简单的示例,可以让您从 C 中读取 Fortran 名单。我使用了您在问题中提供的名单文件 input.txt

Fortran 子程序nmlread_f.f90(注意ISO_C_BINDING 的使用):

subroutine namelistRead(n,m,l) bind(c,name='namelistRead')

use,intrinsic :: iso_c_binding,only:c_float,c_int
implicit none

real(kind=c_float), intent(inout) :: n
real(kind=c_float), intent(inout) :: m
integer(kind=c_int),intent(inout) :: l

namelist /inputDataList/ n,m,l

open(unit=100,file='input.txt',status='old')
read(unit=100,nml=inputDataList)
close(unit=100)

write(*,*)'Fortran procedure has n,m,l:',n,m,l

endsubroutine namelistRead

C 程序,nmlread_c.c:

#include <stdio.h>

void namelistRead(float *n, float *m, int *l);

int main()
{
float n;
float m;
int l;

n = 0;
m = 0;
l = 0;

printf("%5.1f %5.1f %3d\n",n,m,l);

namelistRead(&n,&m,&l);

printf("%5.1f %5.1f %3d\n",n,m,l);
}

另请注意,nml 需要声明为指针,以便通过引用将它们传递给 Fortran 例程。

在我的系统上,我使用 Intel 编译器套件编译它(我的 gcc 和 gfortran 已经有好几年了,别问了):

ifort -c nmlread_f.f90
icc -c nmlread_c.c
icc nmlread_c.o nmlread_f.o /usr/local/intel/composerxe-2011.2.137/compiler/lib/intel64/libifcore.a

执行 a.out 产生预期的输出:

  0.0   0.0   0
Fortran procedure has n,m,l: 1000.000 1000.000 -2
1000.0 1000.0 -2

您可以编辑上述 Fortran 过程,使其更通用,例如从 C 程序指定名单文件名和列表名。

关于C 相当于 Fortran 名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17581416/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com