我想在不同的Fortran可执行文件中使用静态库(用Fortran编写)中编写的子例程。这是我的工作例子:
subroutine my(a,b,c)
implicit none
real*8, intent(in) :: a,b
real*8, intent(out) :: c
!
c = a + b
!
end subroutine
生成一个XXX.lib文件,我用这个主文件指向该文件:
program main
implicit none
!
real*8 :: var1, var2
real*8 :: ou
我是Fortran的新手。请看下面的代码:
c main program
call foo(2)
print*, 2
stop
end
subroutine foo(x)
x = x + 1
return
end
在Fortran的某些实现中,上面的代码会打印一个3,为什么呢?你能给我解释一下吗?
您认为最近的Fortran实现是如何解决这个问题的?
我们非常感谢你的帮助。谢谢。
很长一段时间以来,我一直在使用Fortran,最近我决定学习C。虽然我了解C中的函数是如何工作的,但我在查找有关如何在C中实现类似于Fortran子程序的信息时遇到了困难。这个概念在C语言中存在吗?
考虑一下这个Fortran代码:
module myMod
implicit none
contains
function func(a, b)
integer :: func
integer, intent(IN) :: a, b
func = a + b
end function func
subroutine sub(a
我正在尝试适当地构建我的Fortran程序。我有一个程序GridGeneration.f90生成我的网格网格。我想在我的主程序中控制网格的大小,也就是网格大小参数N_x和N_y。
module MySubsAndParameters
implicit none
integer :: N_x, N_y
include 'GridGeneration.f90'
code
end module MySubsAndParameters
program main
use MySubsAndParameters
N_x = 100
N_y = 50
code
end pro
我有一个被关闭的特定主题问题,试图从Fortran:的libcurl简单API调用C。
根据注释中的建议,我仍然收到关于如何从Fortran正确调用C指针和C函数的错误。
这里的代码不多,但主要问题是警告:
dl2.f08:11.23:
type, bind(C) :: CURL
1
Warning: Derived type 'curl' with BIND(C) attribute at (1) is empty, and may be inaccessible by the C companion processor
d
我正在尝试自学Fortran,并且一直在忙于将多个文件链接在一起。在下面的示例中,我一直在一个文件中编写程序,在另一个文件中编写函数,并在我的主程序中使用接口块来引用外部函数。
我正在测试接口块中需要多少信息,并意识到我可以完全删除它。
我的程序:
program test
implicit none
real :: x, y, func
x = 3
y = func(x)
print *, y
end program test
和函数文件:
function func(x)
我对Fortran很陌生,我想要的是,我的矩阵的大小取决于N是偶数还是奇数,我会天真地尝试下面这样的方法,但是这不能编译,如果我删除if语句,它可以很好地工作,
subroutine f(fMatrix,oMatrix,N)
implicit none;
integer,intent(in)::N
integer::d2
if(mod(N,2)==0) then ! if N is even then 1 type of size
parameter(d2=1)
else
parameter(d2=
我最近正在用cBLAS阅读一些源代码,有些东西让我不太清楚。在许多函数中,.c文件调用Fortran包装器,而不是直接在C文件中编写代码,如下所示:
/*
* cblas_sdsdot.c
*
* The program is a C interface to sdsdot.
* It calls the fortran wrapper before calling sdsdot.
*
* Written by Keita Teranishi. 2/11/1998
*
*/
#include "cblas.h"
#include "cblas_f77.
我有个问题,我不知道是什么。我有一个包含MPI_INIT和MPI_FINALIZE的测试程序。我有一个包含5个子例程的模块:3个子例程是依赖的,独立于其他2个子例程。我想把测试程序中的MPI代码放到这个模块中。我将MPI_INIT放在声明变量的模块中,放在子例程之前。我获得了一系列错误,并具有相同的错误消息:
This statement must not appear in the specification part of a module
"MPI_INIT和MPI_FINALIZE应该只调用一次“对Fortran程序、模块和子例程有何影响?如果有多个独立的程序,每个程序多次调用
我已经经历了公开可用的晶体可塑性FORTRAN ,然而,我无法理解输入材料是如何通过子程序和函数传递的。
因此,在主UMAT中,变量支持指向输入文件中*USER main选项中输入的物质常量。对于子例程,此值为125。
现在,UMAT调用的子例程定义了另一个变量支柱,它采用不同的值,如
行1430;
C PROP(1) - PROP(3) -- direction of the first vector in
C local cubic crystal system
在第2167行中,(i= 1)
C
好的做法是Fortran中的子例程参数应该各有一个特定的目的(即中描述的intent(in)、intent(out)或intent(inout) ):
subroutine bar (a, b)
real, intent(in) :: a
real, intent(inout) :: b
b = b + a
...
但是,不指定意图是有效的Fortran:
subroutine bar (a, b)
real, intent(in) :: a
real :: b
b = b + a
...
除了编译时检查指定为intent(ino
我在Fortran中有这个模块:
MODULE utils
IMPLICIT NONE
PUBLIC
INTEGER :: num_atom ! number of atoms in one configuration
CONTAINS
SUBROUTINE readin
IMPLICIT NONE
INTEGER :: iargc, ndim, i
END SUBROUTINE readin
SUBROUTINE convert
IMPLICIT NONE
REAL :: x,y,z
这个问题以前已经被问过了,我从回顾中学到了很多。尽管如此,我仍然遗漏了这个过程中的一些关键步骤。我已经开发了一个Windows Forms应用程序,它由几个Fortran可执行文件组成,在用C#编写的图形用户界面的控制下运行。使用.NET 4.5的Visual Studio 2015使用英特尔Visual Fortran和C#代码编译Fortran程序。我现在正在尝试将Fortran程序之一转换为DLL。这是我第一次尝试开发和实现DLL,我遇到了让一切都正确的问题。希望这个社区中的某个人能引导我朝着正确的方向前进。
DLL中唯一公开的元素是具有以下接口的子例程:
subroutine Plan
我正在学习Fortran的基础知识。我创建了一个初始化矩阵的简单的子例程:
program test
integer, parameter :: n = 1024
real :: a(n, n)
call init(a)
write (*, *) a(1, 1)
end program
subroutine init(a)
real :: a(n, n)
a(:, :) = 3.0
end subroutine
然后,输出是0.0而不是预期的3.0。除此之外,valgrind说:
==7006== Conditional jump or move depe
我是第一次接触Fortran,我正在尝试使用f2py在python中运行fortran。当fortran函数将输出作为单个值提供时,我很幸运。但是,当我修改fortran函数以给出一个数组时,我得到了分段错误。
有谁能帮帮我吗?代码如下:
Fortran函数:在名为‘fortfunc.f95’的文件中:
function fut(x,n)
implicit none
real, intent(in) :: x
integer, intent(in) :: n
real, dimension(2) :: fut
! My aim is to return an array fut which
我遇到了一个关于OpenMP和共享变量的问题,我无法理解。我所做的一切都是用Fortran 90/95编写的。
这就是我的问题:我在main程序中定义了一个并行区,并带有子句DEFAULT(SHARED),在这个子句中,我调用了一个子例程来执行一些计算。我有一个分配的局部变量(数组),并在其上进行计算。我原以为这个数组是共享的(因为DEFAULT(SHARED)子句的原因),但事实似乎并非如此。
下面是我正在尝试做的一个例子,它重现了我得到的错误:
program main
!$ use OMP_LIB
implicit none
integer, parameter :: nx