--- trunk/libf/dyn3d/Dissipation/gradiv2.f90 2012/01/30 12:54:02 57 +++ trunk/dyn3d/Dissipation/gradiv2.f 2014/09/11 15:09:15 107 @@ -8,13 +8,15 @@ ! From LMDZ4/libf/dyn3d/gradiv2.F, version 1.1.1.1 2004/05/19 12:53:07 ! P. Le Van - ! Calcul de grad div du vecteur v. + ! Calcul du gradient de la divergence du vecteur v. - USE dimens_m, ONLY : iim, jjm, llm - use divergf_m, only: divergf - USE comgeom, ONLY : cuvscvgam1, cvuscugam1, unsair_gam1, unsapolnga1, & + USE comgeom, ONLY: cuvscvgam1, cvuscugam1, unsair_gam1, unsapolnga1, & unsapolsga1 - USE filtreg_m, ONLY : filtreg + USE dimens_m, ONLY: iim, jjm + use divergf_m, only: divergf + USE filtreg_m, ONLY: filtreg + use grad_m, only: grad + use laplacien_m, only: laplacien use nr_util, only: assert_eq, assert ! Composantes covariantes de v : @@ -27,7 +29,7 @@ real, intent(in):: cdivu ! Variables locales : - REAL nugrads, div(iim + 1, jjm + 1, llm) + REAL nugrads, div(iim + 1, jjm + 1, size(xcov, 3)) INTEGER iter, klevel !-------------------------------------------------------------- @@ -39,22 +41,19 @@ klevel = assert_eq(size(xcov, 3), size(ycov, 3), size(gdx, 3), & size(gdy, 3), "gradiv2 klevel") - gdx = xcov - gdy = ycov - - CALL divergf(klevel, gdx, gdy, div) + CALL divergf(klevel, xcov, ycov, div) IF (ld > 1) THEN - CALL laplacien(klevel, div, div) + CALL laplacien(klevel, div) ! Itération de l'opérateur laplacien_gam - DO iter = 1, ld -2 + DO iter = 1, ld - 2 CALL laplacien_gam(klevel, cuvscvgam1, cvuscugam1, unsair_gam1, & unsapolnga1, unsapolsga1, div, div) END DO ENDIF - CALL filtreg(div, jjm + 1, klevel, 2, 1, .TRUE., 1) + CALL filtreg(div, direct = .true., intensive = .true.) CALL grad(klevel, div, gdx, gdy) nugrads = (-1.)**ld * cdivu