-
0 votesanswersviews
如何在C#中使用派生返回类型覆盖方法?
我想用派生类类型覆盖虚方法 . 目前最好的方法是什么?到目前为止,我发现了两种方法: 对每个派生类型使用 abstract base class ;用 protected 方法桥接 . 将 protected 实现与 public 访问器一起使用 . 基本情况(未实施解决方案, Clone 始终返回基本类型 A1 ): public class A1 { p... -
1 votesanswersviews
与派生类型相关的Fortran分段错误
我在调试网格生成算法中出现的分段错误时遇到了一些问题 . 不幸的是,我无法提供最小的工作示例 . 我想如果可以的话,我会在中途解决这个问题 . 所以基本上我希望有人可以就我面临的问题分享一些想法 . 分段错误的错误消息 forrtl: severe (174): SIGSEGV, segmentation fault occurred Image PC ... -
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... -
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... -
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_... -
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对角化例程 . 该过程本身不使用矩阵,只使用向量 . 该过程唯一需要对矩阵进行的操作是将它与向量一起传递给矩阵向量乘法例程 . 稀疏矩阵必须是具有可分配组件的派生类型变量 .... -
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 ... -
2 votesanswersviews
缓存使用和派生类型
我不熟悉用valgrind和cachegrind分析代码,最近我开始使用这些工具来查看我的代码在缓存利用率方面的表现 . 我发现一个简单的if语句似乎几乎每次执行都会导致缓存丢失 . 作为一个例子,我在我的Fortran程序中使用了以下派生类型: type :: particle real(pr), dimension(3) :: r = 0.0_pr ! position rea... -
2 votesanswersviews
指向包含可分配数组的派生类型的指针
一般来说,我想重命名派生类型中的可分配变量,这些变量通过子例程参数传递 . 使用'derived%type_xx'编写所有内容并不是那么令人愉快 . 此外,我不想花费额外的内存来将派生类型的值复制到一个新的变量,这需要花费新的分配内存 . 此外,我知道可分配数组比指针更受欢迎,原因有很多 . 我尝试定义指向可分配变量的指针,但失败了 . 我试过这个,因为我想简化我的代码,既可读也不太长 . 我想知... -
0 votesanswersviews
如何将可分配的用户定义(派生类型,数据结构)变量的大小传递给fortran中的子例程?
我想创建一个derived-type variable(a.k.a . 结构或用户定义的变量),在一个子程序中计算它并在另一个子程序中使用它 . 结构的两个组件都是可分配的数组 . 我想知道如何告诉子程序这些数组的大小 . 我知道如何使用派生类型执行此操作的唯一方法是分配时,但我只能分配一次 . 非派生类型可分配数组在子例程的开头和接口中声明为特定大小: double precision, int...