fortran90相关内容
用 Fortran 90 编写的程序手册说:“所有实变量和参数都以 64 位精度指定(即 real*8)." 根据Wikipedia,单精度对应32位精度,而双精度对应64 位精度,所以显然程序使用双精度. 但是 real*8 是什么意思呢? 我认为 8 的意思是小数点后有 8 位数字.但是,Wikipedia 似乎说单精度通常提供 6-9 位,而 双精度 通常提供 15-17
..
我不想在我的程序中使用公共块.我的主程序调用一个调用函数的子程序.该函数需要来自子程序的变量. 将一组信息从子程序传递给函数的方法有哪些? 程序...调用 CONDAT(i,j)结束程序子程序CONDAT(i,j)常见/contact/iab11,iab22,xx2,yy2,zz2common/ellip/b1,c1,f1,g1,h1,d1,b2,c2,f2,g2,h2,p2,q2,r2,
..
这两种声明假定大小数组的方法有什么区别吗? 例如 real, dimension(:)::arr 和 real :: arr(*) 解决方案 表格 real, dimension(:)::arr 声明一个assumed-shape数组,而表单 real :: arr(*) 声明一个 假定大小 数组. 而且,是的,它们的用途之间存在差异.之所以出现差异,是因为编译器大致
..
我需要把 implicit none 放在每个函数和子程序中吗? 或者把它放在包含这些函数和子程序的模块的开头就足够了吗? 或者将它放在使用这些模块的程序的开头就足够了吗? 通过观察其他人的工作代码,所有这些地方都包含implicit none.我不确定这是否是多余的,因为从子例程中删除 implicit none 仍然编译并产生相同的输出. 顺便说一句,我正在使用 gfo
..
我最近在向我的 Fortran 程序中添加函数时了解了接口块.一切运行良好且整洁,但现在我想在界面块中添加第二个功能. 这是我的界面块: 接口函数 correctNeighLabel (A,i,j,k)整数::正确的NeighLabel整数,intent(in) :: i,j,k整数,维度(:,:,:),意图(输入)::A结束函数函数 correctNeighArray (B,d,e,f)
..
我对 Fortran 90 完全陌生,我正在尝试了解如何将数组传递给函数.我在网上看了看,找不到任何清晰和简单的例子,所以我决定在这里发布. 我希望函数能够处理任意长度的数组(数组的长度不应该是函数的参数之一). 我尝试编写一个简单的函数示例,该函数返回数组元素的总和: 函数 mysum(arr)隐式无真实的,维度(:),意图(在)::arr真实的 :: mysum整数 :: i,a
..
我已经用 gfortran 编译了一个 fortran 90 程序,它以我想要的方式构建了一个可扩展的 3D 数组.运行时出现以下错误: 程序收到信号 SIGSEGV:分段错误 - 无效的内存引用.此错误的回溯:#0 0x10542ee42#1 0x10542f60e#2 0x7fff8d7895a9#3 0x10542575e#4 0x105425975#5 0x105425d0e分段错误:1
..
在 Fortran 90 程序中调用 MPI_FINALIZE() 时出现分段错误.虽然代码相当广泛,但我将发布伪代码并查看它是否引发任何标志.我有一种预感(但还没有尝试过)它可能可能是由于没有释放数组引起的?但是我不确定 - 在调用 MPI_FINALIZE 期间未能在 Fortran 90 中解除分配数组会导致分段错误吗? if() then做 iat = 1,natoms做 il = 0,
..
我希望将 Fortran 写入语句格式化为依赖于某个变量.例如,我可以这样写: write(*,'(3f15.3,3f9.2)') x,y,z,(var(i),i=1,nvari) 其中 nvari = 3.但是,如果在某些情况下,我实际上有 4 个变量(即 nvari = 4).我想写这样的东西: write(*,'(3f15.3,nvari(f9.2))') x,y,z,(var(i),
..
我有一个二进制文件,我想用 Fortran 读取.问题是它不是由 Fortran 编写的,所以它没有记录长度指示符.所以通常的未格式化的 Fortran 读取将不起作用. 我有一个想法,我可以偷偷地将文件作为格式化文件,逐字节(或 4 字节 x 4 字节,真的)读取为字符数组,然后将字符的内容转换为整数并通过传递函数或可怕的等价语句浮动.但这不起作用:我尝试一次读取 4 个字节,根据 inq
..
我遇到了以下问题.我想在 Fortran90 中编写一个程序,我希望能够像这样调用: ./program.x 除了“main.out"(我可以在调用程序时设置其名称)之外,必须编写辅助输出,我希望它们具有与“main.in"或“main.out"相似的名称(它们实际上并不被称为“主要");但是,当我使用: INQUIRE(UNIT=5,NAME=sInputName) sInputNam
..
我想知道将大型 Fortran 数组(5000 x 5000 实单精度数)写入文件的最佳方法是什么.我正在尝试保存数值计算的结果以供以后使用,因此它们不需要重复.根据计算,每个号码 5000 x 5000 x 4bytes 是 100 Mb,是否可以将其保存为只有 100Mb 的形式?有没有办法将 fortran 数组保存为二进制文件并将其读回以备后用? 我注意到将数字保存到文本文件会生成一
..
我需要在 fortran 2003/2008 中为我的分子动力学代码实现链接列表数据结构,我使用的是最新的 fortran 编译器(英特尔). 我如何以最好的方式实现链表,如果可能,我更喜欢在 Fortran 中实现无锁无等待. 谢谢. 解决方案 如果您使用您的数据项和指向下一项的指针创建用户定义的类型是最简单的.这是假设一个单链表.例如, type MyList_type
..
我正在尝试使用 iso_c_bindings 模块将 Fortran 2003 绑定编写到 CUFFT 库,但我在使用 cufftPlanMany 子例程时遇到问题(类似于 FFTW 库中的 sfftw_plan_many_dft). 绑定本身看起来像这样: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
..
当我尝试通过 OpenMP 在 Fortran90 中并行化我的程序时,出现分段错误错误. !$OMP PARALLEL DO NUM_THREADS(4) &!$OMP PRIVATE(numstrain, i)做 irep = 1, nrep做我= 1, 10打印 *, numstrain(i)结束做结束做!$OMP 结束并行执行 我发现如果我注释掉“PRINT *, numstrain
..
我在我的 C++ 项目中包含了一个不是我的 fortran90 程序. 在第一步中,我尝试通过他们的 name_() 调用该函数,并且通过显示 obj 文件的符号(使用 nm)我发现该函数是由他们的模块作为 module_function_ 所以我添加了模块名称,但在 fortran obj 之间遇到了同样的问题,例如“Constants.f90:(.text+0x36): undefine
..
我的预期用途是 程序主使用模组外部子呼叫子结束程序主子程序子!这里的代码调用 mod 中的子程序结束子程序子 具体来说,module mod 会在subroutine sub 的范围内吗?另外,我有兴趣更广泛地了解模块何时处于/超出范围.如果重要的话,我正在使用 gfortran 4.6.1. 解决方案 它不在子程序 sub 的范围内,因为 sub 不能调用程序或使用来自 mod 的变
..
我在尝试编译一个使用同一目录中的模块的简单 Fortran 程序时遇到问题.我有 2 个文件:包含程序的 test1.f90 和包含模块的 modtest.f90. 这是 test1.f90: 程序测试使用 modtest隐式无打印*,a结束程序测试 这是 modtest.f90: 模块 modtest隐式无保存整数 :: a = 1结束模块 modtest 两个文件都在同一个目录下
..
以下代码,结合了模块程序和外部程序: module module_dummy隐式无包含子程序 foo(a)真实的,意图(输入):: a(:)调用条(a)结束子程序 foo结束模块module_dummy程序主使用 module_dummy隐式无整数,参数 :: nelems = 100000000真实的,可分配的 :: a(:)分配(一个(奈勒姆))a = 0.0调用 foo(a)打印 *, a
..
假设您有一个 Fortran 90 模块,其中包含 很多 的变量、函数和子例程.在您的 USE 语句中,您遵循哪种约定: 使用 , only : 语法明确声明您使用的变量/函数/子例程,例如 USE [module_name], only : variable1, variable2, ...? 插入毯子 USE [module_name]? 一方面,only 子句使代码更加冗长.然
..