Fortran 2003에 스파 스 매트릭스가있는 많은 선형 대수를 수행하는 코드를 작성했습니다. 나는 새로운 표준의 좀 더 추상적 인 기능을 이용하려고 노력하고 있으므로 너무 복잡한 코드가 필요없는 간단한 프로그램을 가지고있다.Fortran 2003의 런타임 다형성
나는 매트릭스, 일부 벡터, 반복 방법에 대한 허용 오차 등을 취하는 절차 solver
을 가지고 있습니다. matvec
이라는 프로 시저에 대한 포인터를 전달하고 있습니다. matvec
은 행렬 - 벡터 곱셈에 사용하는 서브 루틴입니다.
가끔 matvec
은이 절차로 보낸 일반적인 것보다 위에 추가 인수 colorlist, color1, color2
을 취하는 절차입니다. 나는 이것을 다루는 여러 가지 방법을 생각할 수있다.
첫 번째 아이디어 : 두 개의 다른 추상 인터페이스 matvec1
, matvec2
및 서로 다른 두 개의 솔버를 정의하십시오. 이 작동하지만 일부 코드를 복제하는 것을 의미합니다, 그냥 피하려고합니다.
또 다른 아이디어 : 같은 추상적 인 인터페이스 matvec
를 유지하고, 여분의 인수는 , color1
, color2
선택합니다. 즉, 모든 matvec 루틴에서 옵션을 선택하는 것입니다. 심지어 실제로 선택 사항이 아닌 경우에도 루틴은 전혀 사용되지 않습니다. 내가 이렇게하면 확실히 지옥에 갈거야.
다른 최적의 솔루션보다 많이 생각할 수 있습니다. 나는 이것에 대한 약간의 의견을 원한다. 나는 그것을 할 수있는 우아한 방법이있을 것이라 확신한다. 나는 그것이 무엇인지 모른다.