Kendimi genellikle belirli bir işlem / algoritmanın bir, iki ve üç boyutlu sürümleri için çok benzer kod yazarken buluyorum. Tüm bu sürümleri korumak sıkıcı olabilir. Basit kod üretimi oldukça iyi çalışır, ancak daha iyi bir yol olması gerektiği düşünülmektedir.
Bir işlemi bir kez yazmanın ve daha yüksek veya daha düşük boyutlara genellemesini sağlamanın nispeten basit bir yolu var mı?
Somut bir örnek: varsayalım ki spektral uzayda bir hız alanının gradyanını hesaplamalıyım. Üç boyutta, Fortran döngüleri şöyle görünecektir:
do k = 1, n
do j = 1, n
do i = 1, n
phi(i,j,k) = ddx(i)*u(i,j,k) + ddx(j)*v(i,j,k) + ddx(k)*w(i,j,k)
end do
end do
end do
burada ddx
dizi uygun tanımlanır. (Bunu matris çarpanları ile de yapabilirsiniz.) İki boyutlu bir akış için kod neredeyse tamamen aynıdır, ancak: üçüncü boyut döngülerden, dizinlerden ve bileşen sayısından çıkarılır. Bunu ifade etmenin daha iyi bir yolu var mı?
Başka bir örnek: varsayalım ki, üç boyutlu bir ızgara üzerinde noktasal olarak tanımlanan sıvı hızlarım var. Hızı keyfi bir konuma enterpole etmek için (örn. Izgara noktalarına karşılık gelmez), tek boyutlu Neville algoritmasını üç boyutun tamamında (yani boyutsal küçültme) art arda kullanabilir . Basit bir algoritmanın tek boyutlu olarak uygulanmasıyla boyutsal küçültme yapmanın kolay bir yolu var mı?