--- trunk/Sources/filtrez/filtreg_hemisph.f 2015/04/30 18:35:49 136 +++ trunk/Sources/filtrez/filtreg_hemisph.f 2015/09/14 17:13:16 169 @@ -4,27 +4,27 @@ contains - subroutine filtreg_hemisph(champ, sdd1, sdd2, matri) + subroutine filtreg_hemisph(champ, sdd, matri) USE dimens_m, ONLY: iim REAL, intent(inout):: champ(:, :, :) ! (iim + 1, :, :) - REAL, intent(in):: sdd1(:), sdd2(:) ! (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) * sdd1 - champ(:iim, j, l) = (champ(:iim, j, l) & - + matmul(matri(:, :, j), champ(:iim, j, l))) * sdd2 - 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