Mi ritrovo spesso a scrivere un codice molto simile per le versioni uno, due e tridimensionali di una determinata operazione / algoritmo. Mantenere tutte queste versioni può diventare noioso. La semplice generazione di codice funziona abbastanza bene, ma sembra che ci debba essere un modo migliore.
Esiste un modo relativamente semplice per scrivere un'operazione una volta e farla generalizzare a dimensioni superiori o inferiori?
Un esempio concreto è: supponiamo che abbia bisogno di calcolare il gradiente di un campo di velocità nello spazio spettrale. In tre dimensioni, i loop di Fortran sarebbero simili:
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
dove l' ddx
array è definito in modo appropriato. (Si potrebbe anche fare questo con moltiplicazioni di matrici.) Il codice per un flusso bidimensionale è quasi esattamente lo stesso, tranne: la terza dimensione viene eliminata dai loop, dagli indici e dal numero di componenti. C'è un modo migliore per esprimere questo?
Un altro esempio è: supponiamo che io abbia velocità fluide definite in senso puntuale su una griglia tridimensionale. Per interpolare la velocità in una posizione arbitraria (cioè, non corrispondente ai punti della griglia), è possibile utilizzare l' algoritmo Neville monodimensionale in successione su tutte e tre le dimensioni (cioè riduzione dimensionale). Esiste un modo semplice per eseguire la riduzione dimensionale data l'implementazione monodimensionale di un semplice algoritmo?