fortran90相关内容

在Fortran中直接为函数返回值建立索引

是否可以直接在函数的返回值上使用索引?像这样: readStr()(2:5) 其中,readStr()是一个返回字符串的函数.在许多其他语言中,这是完全可能的,但是Fortran呢?我的示例中的语法当然不会编译.还有其他语法可以使用吗? 解决方案 否,在Fortran中是不可能的.但是,您可以更改函数以采用其他索引数组,该数组确定返回哪些元素.此示例说明了使用接口允许对索引进行可 ..
发布时间:2020-11-10 06:00:19 其他开发

如何在Fortran 90中向动态数组添加新元素

当我最初无法预测数组的确切大小时,我需要在Fortran 90中使用动态数组。所以我写了一段代码,每次将新元素添加到数组末尾时,它都应该扩展可分配数组: 子例程DArray( ) 双精度,维数(:),可分配::列表 分配(列表(1)) 列表(1)= 1.1 呼叫AddToList(列表,2.2) 呼叫AddToList(列表,3.2) 呼叫AddToList(列表,4.2) ..
发布时间:2020-10-27 02:04:05 其他开发

从大小未知的文件中读取数组

我对Fortran 90并不陌生,但是我很好奇是否存在直接解决我的问题的方法。我有一个看起来像这样的文件: 1 2 3 .. 。 n 其中 n 可以是任何整数,我想将文件中的每个数字读入整数数组 A 。换句话说, A =(1,2,3,...,n)。在运行代码之前,我不知道n有多大。我的解决方案是打开文件,从文件中读取所有内容,找到n,然后分配A(n),然后重新 ..
发布时间:2020-09-24 20:18:35 其他开发

Fortran中的稀疏存储:仅读取和写入

我有一个具有多个维度的数组(目标是允许约100个),每个维度的大小约为2 ^ 10,我只需要在其中存储约1000个双精度系数.除了读取和写入该数组外,我不需要对该数组做任何操作.该代码是用Fortran 90编写的. 我认为,如果我的图书馆像此答案中提到的图书馆之一那样,我将能够存储这样做,但是会针对简单的读写操作进行优化吗?是否有一个最有效的图书馆? 编辑:通过"简单的读写操作",我 ..
发布时间:2020-08-06 02:45:00 其他开发

在fortran90中智能打印整数

几年前简要介绍了Fortran77之后,我正在学习Fortran90.在Fortran中打印整数时,必须指定要保留多少空间来打印整数.考虑这个程序... implicit none integer :: i i = 123 write(*, '(A, I3, A)') "'", i, "'" !3 spaces for output = no padding write(*, '(A ..
发布时间:2020-07-23 00:41:18 其他开发

C可变参数函数与Fortran的互操作性

是否有一种方法可以声明C可变参数函数并从Fortran中调用它? 我需要调用此函数来计算用字符串标记的向量之间的一些点积. 我的想法是声明如下内容,其中变量的变量列表包含字符串文字.如果参数的变量列表为空,那么我将在标准标签中进行查找并执行计算.如果用户指定了两个标签,我将检索这两个向量并获得其点积: extern "C" void compute_dot_product(double * ..
发布时间:2020-06-15 19:12:03 其他开发

在Fortran 90中使用2D数组与派生类型的数组

假设您需要一个数组列表,每个数组具有相同的大小。使用2D数组在性能上是否更好: 整数,可分配的:: data(:, :) 或一系列派生类型: 类型测试 整数,可分配::内容(:) 最终类型 类型(test),可分配::数据(:) 当然,对于不同大小的数组,我们别无选择。但是在两种情况下如何管理内存?另外,其中之一是良好的代码习惯吗? 解决方 ..

Fortran指针函数:为什么此代码的行为取决于函数调用的顺序?

上下文 下面发布的玩具Fortran代码调用了两个指针函数.也就是说,两个函数都返回一个指针.实际上,它们都是数组指针.它们都试图做相同的事情,即返回一个整数数组指针,该指针引用具有三个元素1、2和3的整数数组.第一个函数使用指针赋值运算符(=>)将函数指针指向保存数据的可分配数组.第二个功能是通过指针直接分配一个动态内存块来存储数据.调用程序仅打印返回数组的元素. 这就是我觉得很奇怪 ..
发布时间:2020-05-28 23:16:26 其他开发

指针作为虚拟参数

我对以下程序感到有些困惑 module test implicit none type TestType integer :: i end type contains subroutine foo(test) type (TestType), intent(out) :: test test%i = 5 end subr ..
发布时间:2020-05-28 21:46:22 其他开发

解释Fortran写入格式

我是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 ..
发布时间:2020-05-22 20:20:10 其他开发

OpenMP线程执行和threadprivate变量问题

我已经将8个线程用于8个循环.我已经使用“打印"来查看并行代码的工作方式. 0线程会产生问题!我在附图中(请检查下面的链接)显示了并行工作的方式.我使用过threadprivate,但事实证明,线程0无法获得任何私有线程安全变量. 我也尝试过使用模块,并且得到了相同的结果! 知道为什么代码以这种方式工作吗?我将不胜感激任何帮助或建议.谢谢! !$OMP PARALLEL DO ..
发布时间:2020-05-21 01:33:06 其他开发

使用Fortran减少Openmp数组

我正在尝试并行化我编写的代码.我在数组上执行归约运算时遇到问题.对于较小的数组,这一切似乎都可以正常工作,但是当数组大小超过某个点时,我会得到堆栈溢出错误或崩溃. 我尝试在编译时使用/F增加堆栈大小,在Windows上使用ifort,还尝试将set KMP_STACKSIZE = xxx传递给Intel特定的堆栈大小清除.有时这会有所帮助,并允许代码在我的循环中继续前进,但即使堆栈大小为1G ..
发布时间:2020-05-21 01:32:33 其他开发

多行fortran openmp指令的Vim语法突出显示

我正在使用现代的fortran进行并行编程.我正在使用vim,这确实让我很烦,因为fortran.vim语法文件似乎不处理!$ omp或!dir $之类的编译器指令.这些只是在vim中作为注释呈现,因此它们不突出.在c/c ++中,这些编译器指令是使用#pragma's完成的,因此所有内容都脱颖而出,就像预处理程序代码而不是注释代码一样.所以我想在我的fortran语法中进行类似的处理. 这是我要 ..
发布时间:2020-05-21 01:28:19 其他开发

大型阵列导致OpenMP崩溃

我正在使用Fortran和OpenMP,但是当有大型数组时,当我尝试使用OpenMP并行化循环时,仍然遇到问题.例如,以下代码: PROGRAM main IMPLICIT NONE INTEGER, PARAMETER :: NUMLOOPS = 300000 REAL(8) :: TESTMAT(NUMLOOPS) INTEGER :: i,j !$OMP PARALLEL SH ..
发布时间:2020-05-21 01:26:31 其他开发