! $Header$ SUBROUTINE nxgraro2(klevel, xcov, ycov, lr, grx, gry) ! P.Le Van . ! *********************************************************** ! lr ! calcul de ( nxgrad (rot) ) du vect. v .... ! xcov et ycov etant les compos. covariantes de v ! *********************************************************** ! xcov , ycov et lr sont des arguments d'entree pour le s-prog ! grx et gry sont des arguments de sortie pour le s-prog USE lmdz_filtreg, ONLY: filtreg USE lmdz_ssum_scopy, ONLY: scopy USE lmdz_comdissipn, ONLY: tetaudiv, tetaurot, tetah, cdivu, crot, cdivh USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm USE lmdz_paramet IMPLICIT NONE ! ! ...... variables en arguments ....... INTEGER :: klevel REAL :: xcov(ip1jmp1, klevel), ycov(ip1jm, klevel) REAL :: grx(ip1jmp1, klevel), gry(ip1jm, klevel) ! ...... variables locales ........ REAL :: rot(ip1jm, llm), signe, nugradrs INTEGER :: l, ij, iter, lr ! ........................................................ signe = (-1.)**lr nugradrs = signe * crot CALL SCOPY (ip1jmp1 * klevel, xcov, 1, grx, 1) CALL SCOPY (ip1jm * klevel, ycov, 1, gry, 1) CALL rotatf (klevel, grx, gry, rot) CALL laplacien_rot (klevel, rot, rot, grx, gry) ! ..... Iteration de l'operateur laplacien_rotgam ..... DO iter = 1, lr - 2 CALL laplacien_rotgam (klevel, rot, rot) ENDDO CALL filtreg(rot, jjm, klevel, 2, 1, .FALSE., 1) CALL nxgrad (klevel, rot, grx, gry) DO l = 1, klevel DO ij = 1, ip1jm gry(ij, l) = gry(ij, l) * nugradrs ENDDO DO ij = 1, ip1jmp1 grx(ij, l) = grx(ij, l) * nugradrs ENDDO ENDDO RETURN END SUBROUTINE nxgraro2