fortran相关内容
我有下面的代码,但它不起作用: 字符* 260 xx,yy,zz xx ='A' yy ='B' zz = xx // yy 当我在Visual Studio中调试代码时, 变量 xx 包含'A' 变量 yy 包含'B' 变量 zz 包含'A' 为什么不是 zz 包含'AB'? 解决方案 您定义 xx 长度为260个字符
..
我想从Julia的Fortran库中调用函数。在这种情况下,我有一个函数 eye ,它接受一个Integer,并返回一个二维整数数组。 $ gfortran -shared -fPIC -o matrix_routines.so matrix_routines.f90编译为共享库 之后我试图从交互式的Julia解释器中调用它(名字从 nm ): julia>
..
在一个子程序或函数中,输入变量可以用intent(in)定义,并且编译器确保在子程序中该变量不能被改变。只要变量被传递(通过引用)到另一个子例程,该子例程就能够在没有编译器警告的情况下更改变量。 这是用gfortran测试过的代码: program Test 整数i i = 21!一半是真的 call test(i) write(*,*)“21 expected,but is
..
我试图使用gcc(5.3。)在MSYS2( msys2-x86_64-20160205 )中的64位Windows 7上编译具有混合Fortran / C代码的DLL。 0)。我想编译它32位。 (如果省略 -m32 标志并将其编译为64位,那么它工作得很好。) 因为我对这类事情没有经验,所以我可能会犯一些非常愚蠢的错误......所以我提前道歉! 我看起来像砖墙我已经成功(我认为)安
..
这可能是一个具体问题,但我认为它与这两种编译器(Compaq visual Fortran Optimizing Compiler Version 6.5和minGW)如何处理内存有关。我想了解在Fortran 90中使用指针的最佳做法(我必须使用它)。下面是一个示例代码,它应该可以通过gfortran编译器的一个警告“开箱即用”:“赋值函数出现在赋值的RHS上”,并且没有其他编译器的警告。
..
在一个子程序中,我尝试创建一个语句,但是只有当我直接输入一个数字时它才会起作用,只要我用变量替换数字,它就会给出错误: ||错误:IF子句需要标量LOGICAL表达式| 在这个例子中,var是一个介于0和1之间的实数。 if(var%type3 test = 1 end if 有人可能知道我们做错了什么。因为这个错误并没有给我们提供任何线
..
我试图在Fortran中“复制”更高阶的函数。 模块rk4 包含 纯函数f(t,x)结果(fx) 实数,维(1),意图(in):: x 实数,意图(in):: t 实数,维(1):: fx fx = x 结束函数f 函数step(x,f,dt)result(xn) real,intent(in):: dt real,intent(in),dimen
..
假设我需要在一个过程中实现至少5个队列,每个队列都来自不同的定义类型。如何以简单和短的方式来实现这一点? 另一种看待这个问题的方式是我找到的方式:在Fortran中定义我自己的结构之后,我不得不用C ++编写程序,然后我看到使用模板是多么容易......现在,我想用我的母语也是一样...... 似乎知识不是总是很舒服 非常感谢! 解决方案 模板,有 Pyf95 ++ 。它为Fo
..
现在我面临的问题是,在一个模块中,使用种子生成随机数用于函数循环,但每次调用该函数时,都会使用相同的随机数(因为种子显然是相同的),但是它假设它必须继续这个系列,或者至少它在调用之间必须是不同的。一种解决方案可能是主程序为模块提供了一个新的种子,但我认为这可能是另一个优雅的解决方案。 我使用 Mersenne Twister 生成器,由许多人建议。 新增 我的模块中的函数(它是一个函
..
我试图创建一个接受文件名的函数(即“data.txt”)并产生该文件的行数。 data.txt: 24 42 45 54 67 76 89 98 12 21 99 99 33 33 下面这段代码是我尝试构建一个函数,文件名“data.txt”并产生文件的行数。代码的第一部分(第1-12行)定义了函数,第二部分(第14-19行)是我在程序中调用函数
..
我使用派生类型(bicomplex)和赋值运算符(=)的重载,以便可以将 real * 8 赋值给重复变数。 bicplx模块的MWE如下所示: $ $ $ $ b COMPLEX * 16 :: a COMPLEX * 16 :: b 结束类型 接口分配(=) 模块过程dble_assign_bicplx 结束接口 包含 子程序dble_assign_bic
..
保存样本数据的变量 save 的二进制快照的最佳方法是什么在下面的类型? 程序save_it 核心 整数,维度(8): :indx 结束类型核心 类型示例 integer :: a real * 8,dimension(:),allocatable :: b 类型核心),维(:),allocatable :: c 结束类型示例 !这里是 类型(示例):: save
..
我有一个fortran代码,需要读取一系列ascii数据文件(全部大约25 Gb)。基本上,代码打开给定的ascii文件,读取信息并使用它来执行一些操作,然后关闭它。然后打开另一个文件,读取信息,执行一些操作并再次关闭它。其余的ascii文件等。 总的来说,每次完整的运行大约需要10小时。我通常需要使用不同的参数运行多个独立的计算,我所做的是按顺序运行每个独立的计算,以便最后如果我有10个独
..
我有一些旧的(〜1995)遗留Fortran代码,它是用g77编译器编译的,并且在gfortran上失败。 问题出现在以下几行(不兼容的类型转换,字符转换为整数): pre $ $ $ $ c $ INT $ CKYAN DATA CKYAN /'KYAN'/ 变量CKYAN仅作为触发器使用一次: IF(IWVTX.EQ.CKYAN)THEN CALL FDCVERTE
..
我想用gfortran编译一个程序,并启用 -O3 -ffast-math ,因为它提供了很好的性能提升。我很困惑,gfortran的 isnan()抓住了一些NaN,但不是全部。阅读后 检查双精度(或浮点数)是否是C ++中的NaN 可能导致依赖于 IEEE的确切实现的程序的错误输出或ISO规则/数学函数的规范。 根据gcc 4.7.2的手册页。那么如果数字不是按照IEEE标
..
这个问题是我以前的问题的继承者实现最小化方法。在当前的问题中,我简化了我的问题,这里是示例MATLAB代码。我想在Fortran中实现它。 %Script script1.m clear vars; 关闭所有; clc; $ b $ fun1 = @(x1,x2)3 * x1 ^ 2 + 4 * x2 ^ 2 + 5 * x1 + 6 * x2 + 10; lower
..
OPEN(5,FILE =')在Fortran代码片段中进行读写操作WKDAT.dat',STATUS ='OLD') OPEN(6,FILE ='WKLST.dat',STATUS ='UNKNOWN') 我知道默认情况下,单元号5用于从键盘输入,单元号6用于显示在屏幕上。也可以使用 * 。 但是在上面提到的Fortran代码中,单元号为5,文件名给出“WKDAT.
..
我目前正在优化部分代码,因此需要执行一些基准测试。 我有 NxN - 矩阵 A 和 T ,并且希望将它们相乘并将结果保存在 A “,即 A = A * T 。由于这段代码不是可并行化的,我把这个任务扩展到了 $ $ $ OMP PARALLEL do j = 1,N do i = 1,N A(i,j)= T(i,j)* A(i,j) end do end do !$ OMP
..
我试图推广一个子程序的函数调用。所以我的想法是这样的 if(case1)then call MainSubroutine1(myFun) elseif (case2) 调用MainSubroutine2(myFun) 如果 do i = 1,4 data = myFun(i) end do 我意识到这有点模糊,但我不确定这是否可能。 谢谢,
..
我做了一些搜索,但找不到与我的问题有关的任何内容(对不起,如果我的问题是多余的!)。无论如何,正如标题所述,我无法改进我的代码的串行实现。我需要并行化的代码片段如下所示(这是使用OpenMP的Fortran90): do n = 1,lm do m = 1,jm do l = 1,im sum_u = 0 sum_v = 0 sum_t = 0 do k = 1,l
..