-
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_... -
3 votesanswersviews
派生类型访问时间与阵列访问时间
我有一个与多维数组或派生类型的访问时间有关的问题 . 我写了一个很好的算法 . 但是,该算法的主要部分使用 % 来通过不同类型引用某些数据 . 例如,这是我的代码中最昂贵的循环: do c_elem = 1 , no_elems call tmp_element%init_element(no_fl) tmp_element%Gij(no_fl,1) = e_Gxa... -
2 votesanswersviews
指向包含可分配数组的派生类型的指针
一般来说,我想重命名派生类型中的可分配变量,这些变量通过子例程参数传递 . 使用'derived%type_xx'编写所有内容并不是那么令人愉快 . 此外,我不想花费额外的内存来将派生类型的值复制到一个新的变量,这需要花费新的分配内存 . 此外,我知道可分配数组比指针更受欢迎,原因有很多 . 我尝试定义指向可分配变量的指针,但失败了 . 我试过这个,因为我想简化我的代码,既可读也不太长 . 我想知... -
1 votesanswersviews
Fortran:选择可分配数组的等级
我正在尝试编写一个程序,我希望可分配数组 A 的等级为1,2或3,具体取决于我在运行时的输入 . 我想这样做,因为 A 上的后续操作是类似的,并且我在模块中定义了一个接口 work ,其模块过程在 A 上作用时,给出了所需的结果 . 我目前正在做的是: program main implicit none integer :: rank,n=10 real*8, allocatable :: A1... -
3 votesanswersviews
Fortran的内部内存表示可分配
我想知道fortran可分配数组的内部内存表示是什么 . 我理解这比原始指针更复杂,因为形状和等级也必须存储 . 我也猜测's implementation dependent, since I don't在Fortran 2003 standard找到信息 . 但是,我想知道用什么类型的结构来表示可分配的数组(即使只有一个编译器) . 我知道这个问题有点广泛,但任何帮助都会非常感激 . -
0 votesanswersviews
写入Fortran可分配数组时的访问冲突
Program Main Implicit None Integer, Parameter :: iwp = SELECTED_Real_KIND(15) Integer, allocatable :: Num(:) Num(1)=1 ...... End Program Main 当我使用allocatable定义一个void数组'num'然后运行程序时,它会显示如下错误 (1)“I... -
1 votesanswersviews
用于可分配数组的Openmp并行工作共享
我想在Fortran 90中对数组进行元素计算,同时将我的代码与openmp并行化 . 我现在有以下代码: program test implicit none integer,parameter :: n=50 integer :: i integer(8) :: t1,t2,freq real(8) :: seq(n),r(n,n,n,n) real(8),dimension(n,n,n,n... -
0 votesanswersviews
如何将可分配的用户定义(派生类型,数据结构)变量的大小传递给fortran中的子例程?
我想创建一个derived-type variable(a.k.a . 结构或用户定义的变量),在一个子程序中计算它并在另一个子程序中使用它 . 结构的两个组件都是可分配的数组 . 我想知道如何告诉子程序这些数组的大小 . 我知道如何使用派生类型执行此操作的唯一方法是分配时,但我只能分配一次 . 非派生类型可分配数组在子例程的开头和接口中声明为特定大小: double precision, int... -
0 votesanswersviews
将可分配数组的子数组传递给具有右边界的子例程
在我写的并行程序中,我定义了很多多维 allocatable 数组(实际上只有1D,2D或3D),它们在执行期间分配了 negative lower bounds . 我这样做的原因是每个进程在一个2D示例中处理一个14×14 A 矩阵并与四个相邻进程共享2层的重叠,因此矩阵分配有边界 (-1:12,-1:12) ,其中"internal"部分矩阵对应于1到10的索引 . ... -
1 votesanswersviews
使用f2py中模块的可分配数组
我在 f2py 中遇到了可分配数组的问题 . 在下面的代码中(存储在 mymod.f90 中),我创建了两个模块, vars 和 worker : vars 存储并分配数组 b worker 包含从 vars 处理此数组的子例程 . 第一个 worker -subroutine为 b 添加了一个标量 . 这按预期工作 . 问题在于下一个例程应该向数组 b 添加匹配第一维的向量 . 已... -
1 votesanswersviews
Fortran:包含派生类型数组的派生类型的Allocatable数组
我目前正在开发一个大型的Fortran程序,我有一个离散的数字网格,其中包含一系列我在网格范围内跟踪的粒子 . 为此,我定义了以下三种派生类型: type :: particle real(pr), dimension(3) :: r = 0.0_pr ! position real(pr), dimension(3) :: p = 0.0_pr ! momentum end ty... -
3 votesanswersviews
用户定义类型的Fortran可分配阵列成员
在以下简单程序中,我在派生类型的可分配数组成员处遇到分段错误 . 此分段故障仅在一台计算机上发生(在openSUSE上使用英特尔Fortran 14.0.3),但在我尝试的其他计算机上(在Ubuntu上使用英特尔Fortran 14.0.2)则不会发生 . 此外,如果我更改程序中的一个整数参数,程序将正常结束 . 有人可以重现这个问题吗?谁能告诉我代码有什么问题? 以下是三个源代码文件 . mai... -
2 votesanswersviews
传递用户定义的数据类型可分配数组
我可以使用可分配数组作为其数据类型来定义用户定义的数据类型 . 当我们仍处于相同的子例程时,分配工作完美 . 但我不知道如何将这种类型的用户定义数据类型作为子例程参数传递 . 英特尔编译器显示错误 # 6530 : "Error 1 error #6530: The array spec for this component must be of explicit shape a...