Saya sering menemukan diri saya menulis kode yang sangat mirip untuk versi satu, dua, dan tiga dimensi dari operasi / algoritma yang diberikan. Mempertahankan semua versi ini bisa menjadi membosankan. Pembuatan kode sederhana berfungsi cukup baik, tetapi tampaknya harus ada cara yang lebih baik.
Apakah ada cara yang relatif sederhana untuk menulis operasi sekali dan memilikinya generalisasi ke dimensi yang lebih tinggi atau lebih rendah?
Salah satu contoh konkret adalah: misalkan saya perlu menghitung gradien bidang kecepatan dalam ruang spektral. Dalam tiga dimensi, loop Fortran akan terlihat seperti:
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
di mana ddx
array didefinisikan dengan tepat. (Kita juga bisa melakukan ini dengan mengalikan matriks.) Kode untuk aliran dua dimensi hampir persis sama, kecuali: dimensi ketiga dijatuhkan dari loop, indeks, dan jumlah komponen. Apakah ada cara yang lebih baik untuk mengekspresikan ini?
Contoh lain adalah: misalkan saya memiliki kecepatan fluida yang ditentukan titik-bijaksana pada jaringan tiga dimensi. Untuk menginterpolasi kecepatan ke lokasi yang sewenang-wenang (yaitu, tidak sesuai dengan titik-titik grid), seseorang dapat menggunakan algoritma Neville satu dimensi secara berturut-turut di ketiga dimensi (yaitu, pengurangan dimensi). Apakah ada cara mudah untuk melakukan reduksi dimensi mengingat implementasi satu dimensi dari algoritma sederhana?