|
新手求助,目前在处理一套较多子程序的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)会不会有问题。
大佬们有没有比较好的处理思路,希望提一点建议。
|
|