-
2 votesanswersviews
Cpython和fortran链表之间的互操作性
我有一个类似的fortran链表 type :: node type(node), pointer :: next => null() integer :: value end type node 理想情况下,我希望使用Cpython与此进行交互 . 我使用f2py程序创建了共享对象,使用了很多python的子程序 . 但是,f2py不能与派生类型一起使用 . 我的问题是,... -
13 votesanswersviews
Fortran派生类型赋值
假设我有一个Fortran派生类型 type :: atype integer :: n integer :: a(10) integer, allocatable :: b(:) end type 我有两个这种类型的实例 type(atype) :: t1, t2 当我做以下任务时到底发生了什么? t2 = t1 我对此感兴趣因为我想正确地创建派生类型变量的副本意... -
6 votesanswersviews
在Fortran派生类型中保存指向C函数的指针
我有一个从C程序调用的Fortran DLL,我的一个程序需要定期调用由C程序提供的回调函数 . 我目前在它的'简单'形式下运行良好,但我希望能够将我的回调指针存储在派生类型中,以便它可以更容易地在我的Fortran代码中传递 . 到目前为止,我尝试过的任何东西似乎都没有用 . 首先,这是我目前所拥有的,这确实有效: 从C(OK,实际上是C)程序开始,回调的头部原型是: typedef void ... -
1 votesanswersviews
Fortran派生类型 - 私有数组的公共指针
我正在尝试定义一个具有私有可分配数组的Fortran派生类型 . 但是,我希望能够通过公共指针访问该阵列,以便在其他模块中使用 . 例如 . type,public :: test private real,allocatable :: a(:,:,:) contains real,pointer,dimension(:,:,:),public :: point => a end typ... -
1 votesanswersviews
如何在C中传递派生类型,它与C结构不相互影响?
我想让Fortan API使用C代码 . Fortran代码主要包含派生类型,这些类型不能通过使用 iso_c_binding 模块与C互操作 . 我发现此帖子包含类似的问题https://software.intel.com/en-us/forums/topic/394312 . 这篇文章c-fortran interoperability - derived types with point... -
5 votesanswersviews
接口C函数与Fortran中的结构[重复]
这个问题在这里已有答案: Access a parameter from an interface (Fortran) 1回答 Why is the type not accessible? 2个答案 我想将C函数与Fortran中的相应结构相链接 struct ovf_file { bool found; bool is_ovf; int n_segments... -
4 votesanswersviews
Fortran数组和子程序(子数组)
我正在阅读Fortran代码,有一点让我感到有些困惑 . 比方说,有一个子程序 SUBROUTINE SSUB(X,...) REAL*8 X(0:N1,1:N2,0:N3-1),... ... RETURN END 在另一个子程序中通过以下方式调用: CALL SSUB(W(0,1,0,1),...) 其中W是'工作阵列' . 看来W中的特定值传递给X,但X的大小为数组 . 这是怎么回事?... -
5 votesanswersviews
如何将C中的2D数组传递给Fortran子例程?
我正在编写一个小型的C程序,它将一个二维数组(复数)传递给一个Fortran子程序,然后将它接收回来填充值 . 我写了一个通过并接收一维数组的版本,这很有效 . 2-D版本不起作用(我的真正目标是编写具有大尺寸的4-D版本 - 因此必须动态分配这些数组) . 我将发布我的工作代码和非工作代码,但首先请注意我被迫使用结构(简单的,只包含两个双精度),因为Fortran似乎以与其自身的原始复数完全相... -
0 votesanswersviews
我是否需要一个显式接口来在子例程中分配派生类型的组件?
我有一个派生类型: module foo type bar integer, allocatable, dimension(:) :: data end type bar end module foo 现在我想在没有显式接口的子程序中分配 bar 的数据: program main use foo type(bar) :: mybar call alloc_my_... -
5 votesanswersviews
编译具有多个部分的Fortran程序
我对Fortran和整个英特尔编译器都非常陌生(我使用基于Windows的英特尔编译器和没有Visual Studio集成的IMSL库,因此只能使用命令行) . 问题应该非常简单:我需要编译一个Fortran程序,它存储为四个不同的源代码部分 . 主程序(和一些子程序)存储在名为central.for的代码文件中,还有三个文件,我们称之为s1.for,s2.for和s3.for,每个文件只包含一个... -
4 votesanswersviews
Fortran 2D阵列初始化
以下程序使用ifort(版本12)进行编译,但不使用GFortran编译(最高版本为4.8): PROGRAM TEST IMPLICIT NONE REAL,DIMENSION(2,2)::X=(/1,2,3,4/) WRITE(*,*) X END PROGRAM TEST GFortran给出了错误 REAL,DIMENSION(2,2)::X=(/1,2,3,4/) ... -
1 votesanswersviews
在C和Fortran代码之间传递复数数组
我正在使用C和Fortran代码 . C代码需要调用Fortran子例程 . Fortran子例程的一个参数具有Fortran类型 complex . C代码在一个文件中,Fortran代码子例程在另一个文件中 . 我在64位 GNU/Linux 系统上使用 gcc 和 gfortran . 这是一个显示Fortran子例程声明的片段(以及一些额外的行): SUBROUTINE minp... -
3 votesanswersviews
JNA与Fortran假设大小数组
我有一个Fortran子程序采用假定的大小数组: subroutine sub(arr) implicit none double precision arr(*) end subroutine 我使用JNA从Java进行本机调用,Fortran子例程被编译为共享库 mylib.so : import com.sun.jna.Library; import com.sun.jna.Nat... -
0 votesanswersviews
是否可以在运行时编译并将子例程作为输入传递给另一个子例程?
是否可以在运行时编译用户定义的子例程并将其作为输入传递给另一个已在Fortran中编译的子例程? -
1 votesanswersviews
如何将C_FLOAT数组传递给Fortran子例程
在Fortran中,我有一个 C_FLOAT 数组,它被声明为输入参数: SUBROUTINE Main(n,myCArray) BIND(C, NAME = 'Main') INTEGER(C_INT), INTENT(IN ) :: n REAL(C_FLOAT), INTENT(INOUT), dimension(n) :: myCArray ... -
4 votesanswersviews
从Fortran中的子例程返回一个已分配的字符串数组?
我需要从fortran中的子例程返回一个字符串数组,其长度应该在运行时确定 . 我找到的解决方案,与英特尔Fortran一起工作,然而与gfortran崩溃 . 示例代码 以下代码似乎适用于英特尔Fortran(15.0.3),但因gfortran 5.3.0的分段错误而失败: program stringtest ! filename:str2.f08 implicit none i... -
1 votesanswersviews
有没有办法使用名单列表I / O功能来读取具有可分配组件的派生类型?
有没有办法使用名单列表I / O功能来读取具有可分配组件的派生类型? 我唯一能找到的就是https://software.intel.com/en-us/forums/intel-fortran-compiler-for-linux-and-mac-os-x/topic/269585,它以一个相当无益的音符结束 . 编辑: 我有用户定义的派生类型,需要从输入文件中填充信息 . 所以,我正试图找到一... -
1 votesanswersviews
Fortran函数用于在具有可分配组件的派生类型之间重载乘法
Foreword 为了存储带状矩阵,其完整对应物可以从 1 以外的索引索引行和列,我将派生数据类型定义为 TYPE CDS REAL, DIMENSION(:,:), ALLOCATABLE :: matrix INTEGER, DIMENSION(2) :: lb, ub INTEGER :: ld, ud END TYPE CDS 其中CDS代表压缩对角线存储 . 鉴于 TYPE... -
2 votesanswersviews
派生类型声明中的错误:此上下文中(1)处的变量必须是常量
我有一个在这样的模块中声明的派生类型: MODULE dmotifs TYPE :: PRM INTEGER, PRIVATE :: nsp=4,nrx=8,maxprx=4 REAL, PRIVATE :: cref=1e-6,tref=1 REAL, DIMENSION(nrx,maxprx) :: k REAL :: input END TYPE PRM C... -
1 votesanswersviews
使用可分配组件转换派生类型数据
我试图找到一种方法将带有可分配组件的派生类型对象传递给Fortran过程,而不需要知道类型定义的过程 . 要理解我为什么要这样做,有关背景的一些信息可能会有用 . 考虑一个包含稀疏矩阵 - 向量乘法的通用过程,如Lanczos对角化例程 . 该过程本身不使用矩阵,只使用向量 . 该过程唯一需要对矩阵进行的操作是将它与向量一起传递给矩阵向量乘法例程 . 稀疏矩阵必须是具有可分配组件的派生类型变量 .... -
2 votesanswersviews
当我使用自动重新分配时,派生类型的可分配组件会发生什么?
在我的程序中,我想创建一个容器类型,包含某个派生类型的数组 . 我想为容器添加类型绑定过程,它调用数组的所有组件上的过程 . 由于数组的大小不同,我尝试使用自动重新分配功能 . 我遇到了可分配字符的问题 . 这是一个小片段,显示设置: module realloc_test ... -
3 votesanswersviews
派生类型访问时间与阵列访问时间
我有一个与多维数组或派生类型的访问时间有关的问题 . 我写了一个很好的算法 . 但是,该算法的主要部分使用 % 来通过不同类型引用某些数据 . 例如,这是我的代码中最昂贵的循环: do c_elem = 1 , no_elems call tmp_element%init_element(no_fl) tmp_element%Gij(no_fl,1) = e_Gxa... -
3 votesanswersviews
在MPI进程之间发送带有可分配数组的derived-type
对于上下文,在我的CFD模拟中,我的计算域被分成块 . 每个块都有自己的单元格数,每个单元格包含各种信息 . 块通过域分解算法在进程间分布,以实现 balancer 负载 . 网格计算域仅由进程0执行(我不想在每个进程中存储整个网格,因为它在使用的内存方面将是灾难性的) . 实际上,网格被编码为一维块数组,每个块都是一个复杂的派生类型,具有其他派生类型的可分配语句: TYPE something ... -
0 votesanswersviews
Fortran-OpenACC例程如何调用另一个Fortran-OpenACC例程?
我目前正在尝试通过使用带有PGI(15.10)编译器的OpenACC将大多数例程移植到GPGPU来加速光谱元素流体求解器 . 源代码是用OO-Fortran编写的 . 该软件具有调用其他函数和子程序的子程序“层” . 为了使用openacc将代码转移到GPU,我首先尝试在每个需要移植的例程中放置“$ acc routine”指令 . 在编译期间,使用“pgf90 -acc -Minfo = acc... -
0 votesanswersviews
fortran openacc派生类型与可分配
我读过Fortran派生类型的手动深度复制是可能的,但是下面的简单测试程序在运行时失败了;程序与PGI v16.10完全编译 . 出了什么问题? program Test implicit none type dt integer :: n real, dimension(:), allocatable :: xm end type dt... -
2 votesanswersviews
为什么我的数组不再分配在子程序中?
我有一个Fortran类型,它有一个类型的条目 . 此类型具有可分配的整数数组: type inner integer, allocatable :: dyn_arr(:) integer another_var end type type outer type(inner) entry type(inner) another_entry end type 我分配... -
0 votesanswersviews
fortran传递已分配的数组到主程序
我有一个带有函数的模块,它带有一个起点和终点,并读入 .txt 某个浮点值 . 我希望该函数返回一个表,我不知道它在启动之前会有多大 . 我希望在主程序中使用此函数两次来制作第三个真实数组 . 但Fortran并不喜欢它 . 这是我的函数代码: module ReadData !in this part, you need to know : ! -the starting (... -
1 votesanswersviews
Fortran中的多态数组分配例程
目标是创建一个单一的分配例程,它可以处理任何类型的一级分配 . 然后,我们的代码库可以使用标准化的错误捕获进行单个调用 . 编译器错误如下: generic_allocation.f08:32:27: call myAllocator ( array_int, source_int, lambda ) 1 Error: Ac... -
1 votesanswersviews
fortran中与类型无关的内存重新分配
我尝试构建一个子例程来为类型无关的可分配数组重新分配内存,如下所示: subroutine reallocate(vector, num) implicit none class(*), dimension(:), allocatable, intent(inout) :: vector integer :: num class(*), dimension(:), allocatable :: ... -
2 votesanswersviews
缓存使用和派生类型
我不熟悉用valgrind和cachegrind分析代码,最近我开始使用这些工具来查看我的代码在缓存利用率方面的表现 . 我发现一个简单的if语句似乎几乎每次执行都会导致缓存丢失 . 作为一个例子,我在我的Fortran程序中使用了以下派生类型: type :: particle real(pr), dimension(3) :: r = 0.0_pr ! position rea...