kor*_*rok 5 oop polymorphism fortran
我在Fortran 2003中编写了一些代码,它使用稀疏矩阵执行大量线性代数.我正在尝试利用新标准的一些更抽象的功能,所以我有更简单的程序,没有太多的重复代码.
我有一个过程solver,它接受一个矩阵,一些向量,使用的迭代方法的容差等.我传递一个指向一个调用matvec它的过程的指针; matvec是我们用于矩阵向量乘法的子程序.
问题是,有时候matvec这个过程会在colorlist, color1, color2发送到此过程的常规参数之上引入额外的参数.我可以想到几种处理这个问题的方法.
第一个想法:定义两个不同的抽象接口matvec1,matvec2和两个不同的解算器.这有效,但它意味着复制一些代码,这正是我想要避免的.
另一个想法:保持同样的抽象接口matvec,并进行额外的参数colorlist,color1,color2可选的.这意味着在每个matvec例程中都可以选择它们 - 甚至是那些它们不是真正可选的例程,以及它们甚至根本不用的例程.如果我这样做,我肯定会下地狱.
我可以想到许多其他不太理想的解决方案.我想对此有所了解 - 我确信有一些优雅的方法可以做到,我只是不确定它是什么.