Мені часто доводиться писати дуже схожий код для однієї, двох і тривимірних версій заданої операції / алгоритму. Підтримання всіх цих версій може стати втомливим. Просте генерування коду працює досить добре, але, здається, існує кращий шлях.
Чи є відносно простий спосіб написати операцію один раз і чи узагальнити її до вищих чи нижчих розмірів?
Один конкретний приклад такий: припустимо, мені потрібно обчислити градієнт поля швидкості в спектральному просторі. У трьох вимірах петлі Фортран виглядали б приблизно так:
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
де ddx
масив відповідним чином визначений. (Можна також зробити це з матричним множенням.) Код двовимірного потоку майже точно такий же, за винятком того, що третій вимір випадає з циклів, індексів та кількості компонентів. Чи є кращий спосіб висловити це?
Інший приклад: припустимо, у мене тривимірна швидкість визначена швидкістю рідини. Для інтерполяції швидкості до довільного розташування (тобто не відповідного точкам сітки) можна використовувати одновимірний алгоритм Невілля послідовно над усіма трьома вимірами (тобто зменшення розмірів). Чи є простий спосіб зробити зменшення розмірів за умови одновимірної реалізації простого алгоритму?