问题标签 [derived-types]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
fortran - 带有 mpi 的 Fortran90 派生类型,对齐问题?
我遇到了以下基本代码的问题:
我在调试器 (DDT) 中的派生类型 Bcast(使用 intelMPI 和 openMPI)处遇到段错误,据说这可能是对齐问题......
我已经看到了这个帖子,问题似乎是一样的,但我仍然没有解决方案......
感谢您的帮助!
mysql - 新表(带有derived_data)或SQL 查询?
从最佳实践的角度来看,是在我的数据库中使用来自其他表的 derived_data 字段创建一个新表,还是每次都使用 SQL 查询计算它更好?
详细信息:更准确地说,我有一个表格ORDERS(id_order,date,time,sum)
,我想跟踪每日利润并在管理员每次从下拉菜单中选择它时预览它们。我应该在他每次请求时进行 SQL 查询,还是创建一个PROFITS(date,day_profit)
带有从其他表中获取其值的 derived_data 字段的新表?
debugging - Gfortran 表现出一种奇怪的行为,这是一个错误吗?
我注意到 gfortran 有一个奇怪的行为,我使用的版本是
GNU Fortran (MacPorts gcc5 5.2.0_0) 5.2.0
我的操作系统是 OS X YOSEMITE 10.10.3 (14D136)
我运行以下代码
输出符合预期
但是,改变我在子例程中定义虚拟参数的方式
到
为虚拟参数引入一个类而不是类型,我有以下输出
这是一个错误吗?或者我错过了什么?
请注意,它适用于 ifort 版本 Intel(R) 64,版本 15.0.3.187 Build 20150408
fortran - 为什么这个示例代码(f90、MPI、派生类型)会导致无效的读/写(valgrind 或 dmalloc)?
这是有罪的代码(它与我问的另一个问题有关,这里):
使用 intelMPI 版本 4.0 或 5.0 编译时,我在发送时使用 valgrind 或 dmalloc 收到无效的读/写错误。使用openMPI,这个最小示例还不是很清楚,但是我在从中提取它的大代码中遇到了类似的通信问题。
感谢您的帮助!
fortran - 如何使用 MPI 发送正确数量的派生类型对象?
对 MPI 有一些经验,但对派生类型等一些更高级的方面没有经验,这与我的问题有关。
我正在处理的代码有几个尺寸为 的数组(-1:nx+2,-1:ny+2,-1:nz+2)
。为了清楚起见,每个进程都有自己的nx
、ny
和值nz
。数组之间有重叠。例如,在一个 proc 上将表示与在它“下方”的 proc 上x(:,:,-1:2)
相同的信息。x(:,:,nz-1:nz+2)
cell_zface
已定义派生类型:
现在,这个派生类型在多个MPI_SENDRECV
调用中成功使用。例如
据我了解,这个调用是在 procs 之间发送和接收数组的两个“水平”切片(即 xy 切片)。
我想做一些不同的事情,即发送四个“水平”切片。所以我尝试
附带接收。
最后,我的问题:代码运行,但错误。AFAICT,这仅发送两个水平切片,即使我使用“2”而不是“1”作为计数参数。我可以通过两次调用来解决这个问题mpi_send
:
附带接收,但这肯定不漂亮。
mpi_send
那么,即使我将 count 参数设置为“2” ,为什么只发送两个水平切片?有没有一种干净的方式来做我想做的事情?
oop - Fortran 动态字段引用?
是否可以动态引用 Fortran 中的派生类型字段?我想实现一些可以在 Matlab 中完成的效果:
请参阅这些链接(对于 Matlab 示例):http: //blogs.mathworks.com/loren/2005/12/13/use-dynamic-field-references/ http://www.mathworks.com/help/matlab/matlab_prog /generate-field-names-from-variables.html
谢谢!
stored-procedures - Fortran 将过程保存为派生类型中的属性
是否可以将过程存储为派生类型的属性?我在想一些事情:
但这没有成功编译。显示几个错误,包括:
1) 过程指针组件中的语法错误
和
2) (1) 处的“操作员”不是“type_a”结构的成员
以及一些不成功的使用语句。有没有办法正确地做到这一点?任何帮助是极大的赞赏。
更新:
我已经修改procedure,pointer
为procedure(),pointer
,现在错误是
1) FUNCTION 属性与 'operator' 中的 SUBROUTINE 属性冲突
和
2) 无法将 UNKNOWN 转换为 INTEGER(4)
两者都指行x = A%operator(y,z)
arrays - 定义派生类型数组
我正在尝试使用参数声明初始化派生类型。当我编译时,我收到以下错误
(1) 处的 INTEGER(4) 数组构造函数中的元素是 CHARACTER(1)。
用户定义的种类值ip
,dp
位于fasst_global
. 他们是:
我尝试过使用1_ip
而不是1
作为第一个元素,它没有任何区别。我究竟做错了什么?
arrays - 试图在处理器之间传递 MPI 派生类型(并且失败)
我正在尝试将客户的 Fortran 代码与 MPI 并行化。 f
是尺寸为 的 4 字节实数数组f(dimx,dimy,dimz,dimf)
。我需要各种进程来处理数组第一维的不同部分。(我宁愿从最后一个开始,但这不取决于我。)所以我定义了一个mpi_x_inteface
像这样的派生类型
我的意图是单个 mpi_x_interface 将在某个给定的第一个索引“i”处包含“f”中的所有数据。也就是说,对于给定的 i,它应该包含f(i,:,:,:)
. (注意在游戏的这个阶段,所有的 proc 都有一个完整的副本f
。我打算最终f
在 proc 之间拆分,除了我希望 proc 0 有一个完整的副本以用于收集。)
ptsinproc
是一个数组,包含每个 proc 处理的“i”索引的数量。 x_slab_displs
是每个 proc 从数组开头的位移。对于我正在测试的两个 proc,它们是 ptsinproc=(/61,60/)
, x_slab_displs=(/0,61/)
. myminpt
是一个简单的整数,给出每个过程中处理的最小索引。
所以现在我想将所有内容收集f
到 proc 0 中并运行
我最多可以发送一个这样的“板”。如果我尝试将整个 60 个“slabs”从 proc 1 发送到 proc 0,由于“无效的内存引用”而出现 seg 错误。顺便说一句,即使我发送了单个平板,数据也会出现在错误的位置。
我已经检查了所有明显的东西,比如确定 myrank 和 ptsinproc 和 x_slab_dislps 是它们在所有 proc 上应该是什么。我研究了“大小”和“程度”等之间的区别,但无济于事。我无计可施。我只是不明白我做错了什么。有人可能还记得几个月前我问了一个类似(但不同!)的问题。我承认我只是不明白。感谢您的耐心。
initialization - Fortran 指向派生类型和默认初始化的指针
Fortran 2003 派生类型有一个很好的默认初始化特性。
那么默认情况下,任何声明的类型 (TTest) 的变量都将具有初始化的组件 b 和 p2 。
考虑以下代码:
是否可以保证 varptr 和 varalloc 的所有元素在分配后都会初始化 b 和 p2 成员?