--- trunk/Sources/filtrez/filtreg_hemisph.f 2015/06/05 19:21:08 141 +++ trunk/Sources/filtrez/filtreg_hemisph.f 2015/09/14 17:13:16 169 @@ -9,22 +9,22 @@ USE dimens_m, ONLY: iim REAL, intent(inout):: champ(:, :, :) ! (iim + 1, :, :) - REAL, intent(in):: sdd(:) ! (iim) - real, intent(in), dimension(:, :, :):: matri ! (iim, iim, :) + REAL, intent(in):: sdd(:) ! (iim) xprim[uv]^{\pm 1/2} + + real, intent(in), dimension(:, :, :):: matri ! (iim, iim, :) + ! filtering matrix, last dimension is latitude ! Local: integer l, j !----------------------------------------------------------------- - DO l = 1, size(champ, 3) - DO j = 1, size(champ, 2) - champ(:iim, j, l) = champ(:iim, j, l) * sdd - champ(:iim, j, l) = (champ(:iim, j, l) & - + matmul(matri(:, :, j), champ(:iim, j, l))) / sdd - champ(iim + 1, j, l) = champ(1, j, l) - END DO - END DO + forall (j = 1:size(champ, 2), l = 1:size(champ, 3)) + champ(:iim, j, l) = champ(:iim, j, l) & + + matmul(matri(:, :, j), champ(:iim, j, l) * sdd) / sdd + END forall + + champ(iim + 1, :, :) = champ(1, :, :) end subroutine filtreg_hemisph