Fortran Coder

存储矩阵的非零元素的问题

查看数: 10127 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-8-16 00:22

正文摘要:

要存储矩阵的非零元素

回复

li913 发表于 2017-8-18 08:41:33
chiangtp 发表于 2017-8-17 13:42
蒐了一下:

to disables this automatic (re-)allocation

1、其他编译器我没试过;
2、零大小的数组,用到过,没遇到过问题。
chiangtp 发表于 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, 我疑神疑鬼了好多年 好像沒受害過, 可有經驗?
li913 发表于 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默认是启用的,需要注意。
pasuka 发表于 2017-8-16 22:55:07
1、倘若是有限元编程,总刚对应的非零块还担心推导不出来?
不愿翻阅辛克维奇与Bathe的大部头,王勖成老师的有限元书总该瞅瞅吧?
不嫌弃Fortran77古董,同济大学刘永仁老师的《结构程序设计》是不错的入门书籍;
有恒心与毅力的话,完全啃透NASTRAN95版的fortran源代码,这些问题都会迎刃而解,恍然大悟的
chiangtp 发表于 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的意思

這樣的誤會, 是不容易檢查出來的, 你會這麼擔心嗎?
chiangtp 发表于 2017-8-16 12:59:37
"困难户"row-major, ""vvt"column-major
li913 发表于 2017-8-16 11:29:58
1、实数不用 相等 或 不等 来判断;
2、代码完全混乱。

2.png (108.62 KB, 下载次数: 330)

2.png

QQ截图20170816112346.png (134.94 KB, 下载次数: 325)

QQ截图20170816112346.png
vvt 发表于 2017-8-16 08:30:53
a = pack( B , B == 0 )

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

GMT+8, 2024-11-23 19:09

Powered by Tencent X3.4

© 2013-2024 Tencent

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