주어진 연산 / 알고리즘의 1, 2, 3 차원 버전에 대해 매우 유사한 코드를 작성하는 경우가 종종 있습니다. 이 모든 버전을 유지 관리하는 것은 지루할 수 있습니다. 간단한 코드 생성은 잘 작동하지만 더 나은 방법이 있어야한다고 생각되는 것 같습니다.
작업을 한 번 작성하고 더 높거나 더 작은 차원으로 일반화하는 비교적 간단한 방법이 있습니까?
구체적인 예는 다음과 같습니다. 스펙트럼 공간에서 속도 필드의 기울기를 계산해야한다고 가정합니다. 3 차원에서 Fortran 루프는 다음과 같습니다.
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
배열을 적절하게 정의된다. 행렬 곱셈으로이 작업을 수행 할 수도 있습니다. 2 차원 흐름의 코드는 거의 동일합니다. 단, 3 차원은 루프, 인덱스 및 구성 요소 수에서 삭제됩니다. 이것을 표현하는 더 좋은 방법이 있습니까?
다른 예는 다음과 같습니다. 유체 속도가 3 차원 격자에 점 단위로 정의되어 있다고 가정합니다. 속도를 임의의 위치로 보간하기 위해 (즉, 그리드 포인트에 해당하지 않음) 3 차원 모두에 대해 1 차원 Neville 알고리즘을 연속적으로 사용할 수 있습니다 (즉, 차원 축소). 간단한 알고리즘의 1 차원 구현에서 차원 축소를 수행하는 쉬운 방법이 있습니까?