Fortran Coder

查看: 9687|回复: 8

[数值问题] 存储矩阵的非零元素的问题

[复制链接]

2

帖子

1

主题

0

精华

新人

F 币
17 元
贡献
7 点
发表于 2017-8-16 00:22:03 | 显示全部楼层 |阅读模式
要存储矩阵的非零元素
W2}_5QART912(`R7K9FNBCQ.png

953

帖子

0

主题

0

精华

大师

F 币
180 元
贡献
73 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
发表于 2017-8-16 08:30:53 | 显示全部楼层
a = pack( B , B == 0 )

790

帖子

2

主题

0

精华

大宗师

F 币
3765 元
贡献
2255 点
发表于 2017-8-16 11:29:58 | 显示全部楼层
1、实数不用 相等 或 不等 来判断;
2、代码完全混乱。
2.png
QQ截图20170816112346.png

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

发表于 2017-8-16 12:59:37 | 显示全部楼层
"困难户"row-major, ""vvt"column-major

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

发表于 2017-8-16 21:12:09 | 显示全部楼层
li913 发表于 2017-8-16 11:29
1、实数不用 相等 或 不等 来判断;
2、代码完全混乱。

Hi, li913

看到你 Allocation: Fortran 2003 Enhancements 的"SOURCE"語法
ALLOCATE( na, SOURCE=PACK(ma,ma/=0) )

巧妙的避開assignment之前, 要先allocate的困擾
ALLOCATE( na(?) ) ! unknown size
na = PACK(ma,ma/=0)

F2003也支援"Automatic Reallocation"的語法
(F95, for omponents only, deep copy的extension)
i.e., 之前的 "ALLOCATE( na(?) )"都可免了

INTEGER, ALLOCATABLE :: a(:)
a = [(i,i=1,10)] ! ALLOCATE(a(10)) automatically
a = [(i,i=1,100)] ! deallocate-and-then-reallocate automatically

------------------------------------

跟你請教一下:
我是挺杞人憂天的, 這樣flixible的背後會隱藏多少"人"的logical errors

same shape (rank及extent都要相同), 方可進行array assignment, 安全性很高
如今, 對於allocatable array做assignment, extent不同就自動deallocate/reallocate

這有極大的機會非程式員的本意
程式員很可能只是不小心把"extent"coding錯了, 沒有要reallocate的意思

這樣的誤會, 是不容易檢查出來的, 你會這麼擔心嗎?

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

发表于 2017-8-16 22:55:07 | 显示全部楼层
1、倘若是有限元编程,总刚对应的非零块还担心推导不出来?
不愿翻阅辛克维奇与Bathe的大部头,王勖成老师的有限元书总该瞅瞅吧?
不嫌弃Fortran77古董,同济大学刘永仁老师的《结构程序设计》是不错的入门书籍;
有恒心与毅力的话,完全啃透NASTRAN95版的fortran源代码,这些问题都会迎刃而解,恍然大悟的

790

帖子

2

主题

0

精华

大宗师

F 币
3765 元
贡献
2255 点
发表于 2017-8-17 12:57:40 | 显示全部楼层
chiangtp 发表于 2017-8-16 21:12
Hi, li913

看到你 Allocation: Fortran 2003 Enhancements 的"SOURCE"語法

从技术层面说"Automatic Reallocation"是很大的进步,但确实容易引起难以发现的错误,需要谨慎使用,我不用该功能。ivf2016以及更低版本中,该功能默认是关闭的,需要手动开启 “enable f2003 semantics”,但ivf2017默认是启用的,需要注意。

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

发表于 2017-8-17 13:42:32 | 显示全部楼层
蒐了一下:

to disables this automatic (re-)allocation
/nostandard-realloc-lhs, by Intel
-fno-realloc-lhs, by GNU
PGI/NAG有嗎?

One can always suppress the (re-)allocation checks/actions of an array in modern code by using an array section
array(:) = ...
array(:,:) = ...
In this case, array (if allocatable) must be allocated
這主意 似乎不錯!

F90允許zero-sized array, 我疑神疑鬼了好多年 好像沒受害過, 可有經驗?

790

帖子

2

主题

0

精华

大宗师

F 币
3765 元
贡献
2255 点
发表于 2017-8-18 08:41:33 | 显示全部楼层
chiangtp 发表于 2017-8-17 13:42
蒐了一下:

to disables this automatic (re-)allocation

1、其他编译器我没试过;
2、零大小的数组,用到过,没遇到过问题。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-3-29 01:27

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表