Tôi thường thấy mình viết mã rất giống nhau cho các phiên bản một, hai và ba chiều của một hoạt động / thuật toán nhất định. Duy trì tất cả các phiên bản này có thể trở nên tẻ nhạt. Tạo mã đơn giản hoạt động khá tốt, nhưng có vẻ như phải có một cách tốt hơn.
Có một cách tương đối đơn giản để viết một hoạt động một lần và nó có khái quát đến kích thước cao hơn hoặc thấp hơn không?
Một ví dụ cụ thể là: giả sử tôi cần tính toán độ dốc của trường vận tốc trong không gian quang phổ. Trong ba chiều, các vòng lặp Fortran sẽ trông giống như:
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
trong đó ddx
mảng được xác định một cách thích hợp. (Người ta cũng có thể làm điều này với bội số ma trận.) Mã cho luồng hai chiều gần như giống hệt nhau, ngoại trừ: chiều thứ ba được loại bỏ từ các vòng lặp, chỉ mục và số lượng thành phần. Có cách nào tốt hơn để thể hiện điều này?
Một ví dụ khác là: giả sử tôi có vận tốc chất lỏng xác định điểm khôn ngoan trên lưới ba chiều. Để nội suy vận tốc đến một vị trí tùy ý (nghĩa là không tương ứng với các điểm lưới), người ta có thể sử dụng thuật toán Neville một chiều liên tiếp trên cả ba chiều (tức là giảm kích thước). Có cách nào dễ dàng để thực hiện giảm kích thước khi thực hiện một thuật toán đơn giản không?