fortran相关内容
如何提取 Fortran 字符串数组的子字符串?例如 程序 testcharindex隐式无字符(len=10),维度(5)::s字符(len=10),可分配的 :: comp(:)整数,可分配 :: i(:), n(:)s = (/'1_E', '2_S', '3_E', '14_E', '25_S'/)i = 索引(s,'_')打印*,'我=',我n = s(1:i-1) !或 n = s(
..
我花了几个小时在互联网上搜寻解决此问题的方法,但找不到任何东西.我一直在尝试将未格式化的输出写入 CSV 输出文件,其中包含多行不同长度和多种数据类型的非常长的行.我正在尝试首先编写一个长标题,指示将在下面写入的变量,用逗号分隔.然后在下面的行中,我正在编写标题中指定的值.然而,通过顺序访问,长输出行被分成多个较短的行,这不是我所希望的.我尝试在 open 语句中使用 recl 控制行长,但是在输
..
我想写一个过程,它接受两个传递对象的虚拟参数,例如 模块 m类型,抽象 :: 父包含程序(f_Parent),延迟 :: f端型抽象接口子程序 f_Parent(foo,bar)导入父级隐式无类(父),意图(in):: foo类(父),意图(in):: bar结束子程序端接口类型,扩展(父)::子包含程序,公共 :: f =>f_Child端型包含子程序 f_Child(foo,bar)隐式无类
..
考虑 L x M(列主要设置)形式的 2D 变换,从复数数组 src 到实数数组 tgt.或者,在 Fortranese 中, complex(C_DOUBLE_COMPLEX), 指针 :: src(:,:)实数(8),指针 :: tgt(:,:) . 对应的指针是 type(C_PTR) :: csrc,ctgt . 我会按以下方式分配它们: !先复数列alloc_local = f
..
我对 Fortran 和 OpenMP 很陌生,但我正在努力了解自己的方向.我有一段代码用于计算我试图并行化的变异函数.但是,我似乎遇到了比赛条件,因为有些结果相差了千分之一左右. 问题似乎是减少.使用 OpenMP 缩减工作并给出正确的结果,但它们是不可取的,因为缩减实际上发生在另一个子例程中(我将相关行复制到 OpenMP 循环中进行测试).因此,我将减量放在 CRITICAL 部分中,
..
这是我的最小示例: 程序测试隐式无真正的 :: testfuncwrite(*,*) "从主写入"写(*,*) 测试函数()结束程序测试函数 testfunc() 结果(y)真实的 :: ywrite(*,*) "从函数 g 写入"y=1.0返回结束函数 testfunc 使用简单编译时 gfortran test.f90 或者当包括像 Slatec 这样的库时 gfortran tes
..
我在我正在使用的旧代码中遇到了嵌套的 do 构造,并希望能够理解和现代化.它使用相同的标记操作语句来终止 do 循环,以及 go to 语句.这是一个简化的版本,它通过一些其他琐碎的操作来说明原始代码的逻辑: 子程序 original(lim)k=0做 10 i=1,4做 10 j=1,3k=k-2如果 (i>lim) 达到 10k=k+i*j10k=k+1写(*,*) k返回结尾 查看其他
..
我想针对不同的参数多次求解微分方程.它比这更复杂,但为了清楚起见,假设 ODE 是 y'(x) = (y+a)*x 和 y(0) = 0,我想要 y(1).我从 netlib 中选择了 dverk 算法来求解 ODE,它期望右侧的函数具有某种形式.现在我用 Intel Fortran 编译器做了以下(简化): 子程序 f(x,a,ans)隐含无双精度 f,a,ans,y,tol,c(24),w(
..
我想知道在 Fortran 中是否有更好(简洁)的方式来编码?我试图将 a(3, 3) 的每一列乘以 b(3) 中的每个值.我知道 Python 中有 np.multiply,但不确定 Fortran. !!!测试.f90程序测试隐式无整数,参数 :: dp=kind(0.d0)real(dp) :: a(3, 3)=reshape([1, 2, 3, 4, 5, 6, 7, 8, 9], [3
..
我最近学习了如何在 Fortran 中处理基本文件我认为它很简单: open(unit=10,file="data.dat")读取(10,*) some_variable, somevar2关闭(10) 所以我不明白为什么我写的这个函数不起作用.它编译得很好,但是当我运行它时它会打印出来: fortran 运行时错误:文件结束 代码: 函数 Load_Names()字符(len=30)
..
我在运行我的代码(使用 gfortran 编译)时收到 fortran 运行时警告“已创建临时数组",我想知道是否有更好的方法来解决此警告. 我的原始代码是这样的: 分配(flx_est(lsign,3))分配(flx_err(lsign,3))做 i=1,lsign调用 combflx_calc(flx_est(i,:),flx_err(i,:))结束 在子例程中,我这样定义变量:
..
我想检查派生类型中的指针是否已经定义.我写了以下简单的代码来告诉你我的问题: 程序测试隐式无输入 y实数(8),指针 :: x(:)结束类型 y类型(y),指针::w(:)分配(w(2))分配(w(1)%x(2))写(*,*) 关联(w(1)%x), 关联(w(2)%x)结束程序测试 使用 gFortran 4.4.1 编译此代码并在 Ubuntu 上运行它会得到结果: T F 而在 Wi
..
我正在尝试在 gfortran 中使用四精度,但似乎 real*16 不起作用.经过一番摸索,我发现它可能实现为real*10.real*10 实际上是四精度吗? 如何测试我的代码的精度?是否有用于测试精度的标准简单算法?例如,当我想弄清楚计算机 0 是什么时,我会继续除以 2.0,直到达到 0.0.跟踪这些值让我知道计算机何时“认为"我的非零数为零 - 给我计算机零. 有没有一种像我
..
我正在编写代码,该代码将使用 Fortran 的 C 互操作性机制(在 Fortran 2003 中引入并在较新版本的 gfortran 和 ifort 中实现)从 Fortran 调用 C 函数. 这个答案 几乎是我需要的,但我不太清楚我应该使用什么接口声明在 Fortran 中使用如下所示的 C 函数: int use_array(int n, char * array[]){诠释我;
..
这个问题在之前的 SO 问题中有所涉及.然而,之前的讨论似乎有些不完整. Fortran 有多个 I/O 语句.有 READ(*,*) 和 WRITE(*,*) 等.第一个星号 (*) 是标准星号,表示键盘的输入或输出到/从屏幕.我的问题是关于第二个星号: 第二个星号表示 I/O 元素的格式,即正在使用的数据类型.如果这个星号保持不变,fortran 编译器将使用默认格式(无论是什么格
..
我有一个包含一个子程序的模块,该子程序又包含另一个子程序.外部子例程有一个并行的 OpenMP 区域,我在其中调用内部子例程.代码编译运行没有任何错误但结果不正确. 模块 my_module包含子程序 a(...)*...一些变量*!$OMP 并行执行默认(私有)共享(...)*...做一些工作*呼叫 b(...)!$OMP 结束并行执行包含子程序 b(...)*...一些变量**...做一些工
..
我正在学习 Fortran,但我一直在尝试编译一个模块以供以后使用. 在主程序中我有这个,它要求输入两个数字,然后调用模块中的函数: 使用指数整数::a,b写一个'读 *, 'a写 *, 'B'读 *, 'b写 *,expo(a,b) (我没有尝试过,因为我需要先编译模块,但这不是问题) 然后,在另一个文件中,我有这段代码,它(如果我理解正确的话)只是一个标准模块,带有一个对两个数
..
是否可以从 Fortran 脚本调用 shell 命令? 我的问题是我分析非常大的文件.这些文件有很多行,例如84084002 或类似.在开始分析之前,我需要知道文件有多少行,因此我通常使用 shell 命令:wc -l "filename",然后将此数字用作一个变量的参数在我的脚本中. 但我想从我的程序中调用这个命令并使用行数并将其存储到变量值中. 解决方案 自 1984 年
..
我将 gfortran 用于应用程序并通过 Matlab mex 文件运行 Fortran.我注意到,当我在我的 Mac 上运行 Fortran 文件时,它会在当前目录中创建一个 fort.9 或 fort.16 文件,其中 9 或 16是一些任意数字.最近,我注意到这些 fort. 文件可能有 GB 大!通常它们很小,例如几 kB.我只是想知道这些文件有什么用途?其次,我的代码中是否有一些错误导
..
我正在尝试在子例程中使用可分配数组,但编译器抱怨 错误:在 (1) 处的变量定义上下文(ALLOCATE 对象)中带有 INTENT(IN) 的虚拟参数“locs" 我唯一能找到的是我应该使用显式接口,我正在这样做.这里是子程序的相关代码: 递归子程序(locs, LL, RL)整数,维度(:,:),可分配,意图(IN)::locs整数,意图(IN)::LL,RL分配(位置(LL,RL))
..