fortran90相关内容
是否可以直接在函数的返回值上使用索引?像这样: readStr()(2:5) 其中,readStr()是一个返回字符串的函数.在许多其他语言中,这是完全可能的,但是Fortran呢?我的示例中的语法当然不会编译.还有其他语法可以使用吗? 解决方案 否,在Fortran中是不可能的.但是,您可以更改函数以采用其他索引数组,该数组确定返回哪些元素.此示例说明了使用接口允许对索引进行可
..
我正在尝试根据文件总大小与到目前为止读取的文件大小创建一个进度指示器.我正在处理二进制文件. open(unit=unitvector, file=vectorname, status='old',form='unformatted') do while (ios.eq.0) read(unitvector,end=888,err=888, iostat=ios) KX, KY, K
..
当我最初无法预测数组的确切大小时,我需要在Fortran 90中使用动态数组。所以我写了一段代码,每次将新元素添加到数组末尾时,它都应该扩展可分配数组: 子例程DArray( ) 双精度,维数(:),可分配::列表 分配(列表(1)) 列表(1)= 1.1 呼叫AddToList(列表,2.2) 呼叫AddToList(列表,3.2) 呼叫AddToList(列表,4.2)
..
我对Fortran 90并不陌生,但是我很好奇是否存在直接解决我的问题的方法。我有一个看起来像这样的文件: 1 2 3 .. 。 n 其中 n 可以是任何整数,我想将文件中的每个数字读入整数数组 A 。换句话说, A =(1,2,3,...,n)。在运行代码之前,我不知道n有多大。我的解决方案是打开文件,从文件中读取所有内容,找到n,然后分配A(n),然后重新
..
我有一个具有多个维度的数组(目标是允许约100个),每个维度的大小约为2 ^ 10,我只需要在其中存储约1000个双精度系数.除了读取和写入该数组外,我不需要对该数组做任何操作.该代码是用Fortran 90编写的. 我认为,如果我的图书馆像此答案中提到的图书馆之一那样,我将能够存储这样做,但是会针对简单的读写操作进行优化吗?是否有一个最有效的图书馆? 编辑:通过"简单的读写操作",我
..
几年前简要介绍了Fortran77之后,我正在学习Fortran90.在Fortran中打印整数时,必须指定要保留多少空间来打印整数.考虑这个程序... implicit none integer :: i i = 123 write(*, '(A, I3, A)') "'", i, "'" !3 spaces for output = no padding write(*, '(A
..
是否有一种方法可以声明C可变参数函数并从Fortran中调用它? 我需要调用此函数来计算用字符串标记的向量之间的一些点积. 我的想法是声明如下内容,其中变量的变量列表包含字符串文字.如果参数的变量列表为空,那么我将在标准标签中进行查找并执行计算.如果用户指定了两个标签,我将检索这两个向量并获得其点积: extern "C" void compute_dot_product(double *
..
这个问题以前没有得到回答.我试图在Fortran中正确表示一个实数或任何数字. gfortran为我做的事情还遥遥无期.例如,当我声明变量REAL pi = 3.14159 fortran时,输出pi = 3.14159012而不是说3.14159000.见下文: PROGRAM Test IMPLICIT NONE REAL:: pi = 3.14159 PRINT *, "PI = ",
..
令我惊讶的是,您不能将数组成员作为do循环的控制变量,如下所示: program test integer, dimension(2) :: i do i(1) = 1, 3 do i(2) = 1, 3 ! anything here write(*, *) i end do end do end program
..
假设您需要一个数组列表,每个数组具有相同的大小。使用2D数组在性能上是否更好: 整数,可分配的:: data(:, :) 或一系列派生类型: 类型测试 整数,可分配::内容(:) 最终类型 类型(test),可分配::数据(:) 当然,对于不同大小的数组,我们别无选择。但是在两种情况下如何管理内存?另外,其中之一是良好的代码习惯吗? 解决方
..
我在这样的模块中声明了一个派生类型: MODULE dmotifs TYPE :: PRM 整数,私有:: nsp = 4,nrx = 8,maxprx = 4 REAL,私有:: cref = 1e-6,tref = 1 REAL,DIMENSION(nrx,maxprx): :k REAL ::输入 结束类型PRM 包含 SUBROUTINE unreg(
..
上下文 下面发布的玩具Fortran代码调用了两个指针函数.也就是说,两个函数都返回一个指针.实际上,它们都是数组指针.它们都试图做相同的事情,即返回一个整数数组指针,该指针引用具有三个元素1、2和3的整数数组.第一个函数使用指针赋值运算符(=>)将函数指针指向保存数据的可分配数组.第二个功能是通过指针直接分配一个动态内存块来存储数据.调用程序仅打印返回数组的元素. 这就是我觉得很奇怪
..
我对以下程序感到有些困惑 module test implicit none type TestType integer :: i end type contains subroutine foo(test) type (TestType), intent(out) :: test test%i = 5 end subr
..
假设我有一个子例程: subroutine foo(x, Nx) implicit none integer, intent(IN) :: x integer, intent(IN) :: Nx select case(x) case (1) write(*,*) "Minimum value" cas
..
我是fortran90的初学者.现在,我正在尝试学习fortran代码,但不清楚写入格式的说明 write(*,'((2x,i4,2x,g14.6,2x,14x,2x,g14.6)')0,unew_norm,错误 有人可以向我解释'(2x,i4,2x,g14.6,2x,14x,2x,g14.6)'的意思是什么. 很高兴教我一些虚拟的东西. 最佳 解决方案 来自此 n
..
我已经将8个线程用于8个循环.我已经使用“打印"来查看并行代码的工作方式. 0线程会产生问题!我在附图中(请检查下面的链接)显示了并行工作的方式.我使用过threadprivate,但事实证明,线程0无法获得任何私有线程安全变量. 我也尝试过使用模块,并且得到了相同的结果! 知道为什么代码以这种方式工作吗?我将不胜感激任何帮助或建议.谢谢! !$OMP PARALLEL DO
..
我正在尝试并行化我编写的代码.我在数组上执行归约运算时遇到问题.对于较小的数组,这一切似乎都可以正常工作,但是当数组大小超过某个点时,我会得到堆栈溢出错误或崩溃. 我尝试在编译时使用/F增加堆栈大小,在Windows上使用ifort,还尝试将set KMP_STACKSIZE = xxx传递给Intel特定的堆栈大小清除.有时这会有所帮助,并允许代码在我的循环中继续前进,但即使堆栈大小为1G
..
我正在尝试计算晶体结构的压力张量. 为此,我必须遍历所有对粒子,如下面的简化代码 do i=1, atom_number ! sum over atoms i type1 = ATOMS(i) do nj=POINT(i), POINT(i+1)-1 ! sum over atoms j of i's atoms list j = LIST(nj)
..
我正在使用现代的fortran进行并行编程.我正在使用vim,这确实让我很烦,因为fortran.vim语法文件似乎不处理!$ omp或!dir $之类的编译器指令.这些只是在vim中作为注释呈现,因此它们不突出.在c/c ++中,这些编译器指令是使用#pragma's完成的,因此所有内容都脱颖而出,就像预处理程序代码而不是注释代码一样.所以我想在我的fortran语法中进行类似的处理. 这是我要
..
我正在使用Fortran和OpenMP,但是当有大型数组时,当我尝试使用OpenMP并行化循环时,仍然遇到问题.例如,以下代码: PROGRAM main IMPLICIT NONE INTEGER, PARAMETER :: NUMLOOPS = 300000 REAL(8) :: TESTMAT(NUMLOOPS) INTEGER :: i,j !$OMP PARALLEL SH
..