Fortran Coder

查看: 2449|回复: 3
打印 上一主题 下一主题

[指针] f77程序改造f90过程中关于动态数组与指针

[复制链接]

12

帖子

6

主题

0

精华

入门

F 币
63 元
贡献
30 点
跳转到指定楼层
楼主
发表于 2022-6-21 21:56:31 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
新手求助,目前在处理一套较多子程序的f77商用软件,打算转译成f90,并把一些老语法改成90语法(77没有动态数组分配,采用超大数组进行传参),主要是为了解决程序的可维护性和二次开发功能。
目前遇到了一些问题向大佬们请教。原程序中采用了较多common 以及 equivalence 的h头文件,打算处理成module形式来代替,不知道方案是否可行。fa与ia为超大数组用于传参等功能。
[Fortran] 纯文本查看 复制代码
 integer lfsiz
       parameter (lfsiz=2200000)                                                                
       common /fast/ fa(lfsiz) 
       real*8 fa 
       integer ia(2,lfsiz) 
	   equivalence (fa(1),ia(1,1))

[Fortran] 纯文本查看 复制代码
 equivalence                                                       &
     &  (iselevchk0(1,1)           ,ia(1,125)),                         &
     &  (isccflflg1(1,1)           ,ia(1,126)),                         &
     &  (isnpccflflg2(1,1)         ,ia(1,127)),                         &
     &  (isjunfloregnum38(1,1)     ,ia(1,128)),                         &
     &  (toface911(1,1)            ,ia(1,129)),                         &
     &  (fromface1214(1,1)         ,ia(1,130)),                         &
     &  (isdonprespvwrk15(1,1)     ,ia(1,131)),                         &
     &  (iswatpackjunflg16(1,1)    ,ia(1,132)),                         &
     &  (isstrtchjunflg17(1,1)     ,ia(1,133)),                         &
     &  (iseccmixflg18(1,1)        ,ia(1,134)),                         &
     &  (iseccmixflg19(1,1)        ,ia(1,135)),                         &
     &  (isdbgprntflg20(1,1)       ,ia(1,136)),                         &
     &  (iswatpackflg21(1,1)       ,ia(1,137)),                         &
     &  (isgodunovflg22(1,1)       ,ia(1,138)),                         &
     &  (isgodunovflg23(1,1)       ,ia(1,139)),                         &
     &  (isinithsemod24(1,1)       ,ia(1,140)),                         &
     &  (isinithsemod25(1,1)       ,ia(1,141)),                         &
     &  (islevelmod27(1,1)         ,ia(1,142)),                         &
     &  (isvapcontphasejun28(1,1)  ,ia(1,143)),                         &
     &  (isnolosscoefabrjun29(1,1) ,ia(1,144)),                         &
     &  (isliqentrain30(1,1)       ,ia(1,145))                          

程序涉及到很多头文件,将变量等价到超大数组,如果用模块来处理,外部子程序如果调用多个等价语句会报错,如果采用f90的指针会提示指针变量不能定义数组维度
并且fa 与 ia 同时都是target, 那么equivalence (fa,ia)会不会有问题。
大佬们有没有比较好的处理思路,希望提一点建议。   
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

12

帖子

6

主题

0

精华

入门

F 币
63 元
贡献
30 点
沙发
 楼主| 发表于 2022-6-23 10:35:11 | 显示全部楼层
fcode 发表于 2022-6-22 08:50
你这个工作难度比较大,且工作量也巨大。如非特别必要,尽量不要改。

如果确实需要改动,common 改 module ...

十分感谢,程序中确实涉及到非常多的数组大小不一致的 内存共用, 请问这种情况在处理成module时会存在哪些隐患或者问题呢?
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-4 09:12

Powered by Tencent X3.4

© 2013-2024 Tencent

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